[TASK] Move ExtJS- & JavaScript from t3lib 95/21595/4
authorFelix Kopp <felix-source@phorax.com>
Sat, 22 Jun 2013 17:24:40 +0000 (19:24 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Sat, 22 Jun 2013 21:37:03 +0000 (23:37 +0200)
Moves JavaScript files and their corresponding includes.
As a result the t3lib directory is removed completely.

Change-Id: I77938f43f15e8293c1439a55b2b7716d764d339b
Resolves: #49342
Releases: 6.2
Reviewed-on: https://review.typo3.org/21595
Reviewed-by: Philipp Gampe
Tested-by: Philipp Gampe
Reviewed-by: Anja Leichsenring
Tested-by: Anja Leichsenring
71 files changed:
t3lib/index.html [deleted file]
t3lib/js/extjs/ExtDirect.StateProvider.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/Ext.ux.state.TreePanel.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/actions.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/app.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/contextmenu.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/deletiondropzone.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/filteringtree.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/loadorder.txt [deleted file]
t3lib/js/extjs/components/pagetree/javascript/nodeui.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/toppanel.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/tree.js [deleted file]
t3lib/js/extjs/components/pagetree/javascript/treeeditor.js [deleted file]
t3lib/js/extjs/notifications.js [deleted file]
t3lib/js/extjs/tceforms.js [deleted file]
t3lib/js/extjs/ux/Ext.app.SearchField.js [deleted file]
t3lib/js/extjs/ux/Ext.grid.RowExpander.js [deleted file]
t3lib/js/extjs/ux/Ext.ux.DateTimePicker.js [deleted file]
t3lib/js/extjs/ux/Ext.ux.FitToParent.js [deleted file]
t3lib/js/extjs/ux/ext.resizable.js [deleted file]
t3lib/js/extjs/ux/ext.ux.tabclosemenu.js [deleted file]
t3lib/js/extjs/ux/flashmessages.js [deleted file]
t3lib/js/extjs/ux/resize.css [deleted file]
t3lib/js/extjs/ux/resize.gif [deleted file]
typo3/js/clickmenu.js [deleted file]
typo3/js/extjs/components/pagetree/javascript/Ext.ux.state.TreePanel.js [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/actions.js [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/app.js [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/contextmenu.js [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/deletiondropzone.js [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/filteringtree.js [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/loadorder.txt [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/nodeui.js [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/toppanel.js [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/tree.js [new file with mode: 0644]
typo3/js/extjs/components/pagetree/javascript/treeeditor.js [new file with mode: 0644]
typo3/js/extjs/iframepanel.js [deleted file]
typo3/js/extjs/ux/Ext.app.SearchField.js [new file with mode: 0644]
typo3/js/extjs/ux/Ext.grid.RowExpander.js [new file with mode: 0644]
typo3/js/extjs/ux/Ext.ux.DateTimePicker.js [new file with mode: 0644]
typo3/js/extjs/ux/Ext.ux.FitToParent.js [new file with mode: 0644]
typo3/js/extjs/ux/ext.resizable.js [new file with mode: 0644]
typo3/js/extjs/ux/ext.ux.tabclosemenu.js [new file with mode: 0644]
typo3/js/extjs/ux/resize.css [new file with mode: 0644]
typo3/js/extjs/ux/resize.gif [new file with mode: 0644]
typo3/js/loginrefresh.js [deleted file]
typo3/sysext/backend/Classes/Controller/BackendController.php
typo3/sysext/backend/Classes/Form/FormEngine.php
typo3/sysext/backend/Classes/Template/DocumentTemplate.php
typo3/sysext/backend/Resources/Public/JavaScript/ExtDirect.StateProvider.js [new file with mode: 0644]
typo3/sysext/backend/Resources/Public/JavaScript/clickmenu.js [new file with mode: 0644]
typo3/sysext/backend/Resources/Public/JavaScript/flashmessages.js [new file with mode: 0644]
typo3/sysext/backend/Resources/Public/JavaScript/iframepanel.js [new file with mode: 0644]
typo3/sysext/backend/Resources/Public/JavaScript/loginrefresh.js [new file with mode: 0644]
typo3/sysext/backend/Resources/Public/JavaScript/notifications.js [new file with mode: 0644]
typo3/sysext/backend/Resources/Public/JavaScript/tceforms.js [new file with mode: 0644]
typo3/sysext/belog/Resources/Private/Partials/Content/Filter.html
typo3/sysext/core/Classes/Page/PageRenderer.php
typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php
typo3/sysext/extensionmanager/Classes/Controller/ListController.php
typo3/sysext/extensionmanager/Classes/ViewHelpers/Be/ContainerViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Be/ContainerViewHelper.php
typo3/sysext/install/Classes/ViewHelpers/Be/ContainerViewHelper.php
typo3/sysext/lang/Classes/ViewHelpers/Be/ContainerViewHelper.php
typo3/sysext/linkvalidator/Classes/Report/LinkValidatorReport.php
typo3/sysext/recycler/Classes/Controller/RecyclerModuleController.php
typo3/sysext/rtehtmlarea/Classes/Controller/FrontendRteController.php
typo3/sysext/rtehtmlarea/Classes/RteHtmlAreaBase.php
typo3/sysext/scheduler/Classes/Controller/SchedulerModuleController.php
typo3/sysext/workspaces/Classes/Controller/PreviewController.php
typo3/sysext/workspaces/Classes/Controller/ReviewController.php

diff --git a/t3lib/index.html b/t3lib/index.html
deleted file mode 100644 (file)
index d44be3d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<HTML>
-<HEAD>
-       <TITLE></TITLE>
-<META http-equiv=Refresh Content="0; Url=../">
-</HEAD>
-</HTML>
\ No newline at end of file
diff --git a/t3lib/js/extjs/ExtDirect.StateProvider.js b/t3lib/js/extjs/ExtDirect.StateProvider.js
deleted file mode 100644 (file)
index 4a19c49..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2010-2011 Steffen Kamper <steffen@typo3.org>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project is
- *  free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-
-Ext.ns('TYPO3.state');
-
-/**
- * Creates new ExtDirectProvider
- * @constructor
- * @param {Object} config Configuration object
- * @author Jozef Sakalos
- * @author Steffen Kamper
- */
-
-TYPO3.state.ExtDirectProvider = function(config) {
-
-       this.addEvents(
-               /**
-                * @event readsuccess
-                * Fires after state has been successfully received from server and restored
-                * @param {HttpProvider} this
-                */
-                       'readsuccess',
-               /**
-                * @event readfailure
-                * Fires in the case of an error when attempting to read state from server
-                * @param {HttpProvider} this
-                */
-                       'readfailure',
-               /**
-                * @event savesuccess
-                * Fires after the state has been successfully saved to server
-                * @param {HttpProvider} this
-                */
-                       'savesuccess',
-               /**
-                * @event savefailure
-                * Fires in the case of an error when attempting to save state to the server
-                * @param {HttpProvider} this
-                */
-                       'savefailure'
-                       );
-
-               // call parent
-       TYPO3.state.ExtDirectProvider.superclass.constructor.call(this);
-
-       Ext.apply(this, config, {
-               // defaults
-               delay: 750, // buffer changes for 750 ms
-               dirty: false,
-               started: false,
-               autoStart: true,
-               autoRead: true,
-               key: 'States.General',
-               logFailure: false,
-               logSuccess: false,
-               queue: [],
-               saveBaseParams: {},
-               readBaseParams: {},
-               paramNames:{
-                       key: 'key',
-                       name: 'name',
-                       value: 'value',
-                       data: 'data'
-               }
-       });
-
-       if (this.autoRead) {
-               this.readState();
-       }
-
-       this.dt = new Ext.util.DelayedTask(this.submitState, this);
-       if (this.autoStart) {
-               this.start();
-       }
-};
-
-
-Ext.extend(TYPO3.state.ExtDirectProvider, Ext.state.Provider, {
-
-               // localizable texts
-       saveSuccessText: 'Save Success',
-       saveFailureText: 'Save Failure',
-       readSuccessText: 'Read Success',
-       readFailureText: 'Read Failure',
-       dataErrorText: 'Data Error',
-
-
-
-       /**
-        * Initializes state from the passed state object or array.
-        * Use this with loading page using initial state in TYPO3.settings
-        *
-        * @param {Array/Object} state State to initialize state manager with
-        */
-       initState: function(state) {
-               if (Ext.isArray(state)) {
-                       Ext.each(state, function(item) {
-                               this.state[item.name] = item[this.paramNames.value];
-                       }, this);
-               } else if (Ext.isObject(state)) {
-                       Ext.iterate(state, function(key, value){
-                               this.state[key] = value;
-                       }, this);
-               } else {
-                       this.state = {};
-               }
-       },
-
-       /**
-        * Sets the passed state variable name to the passed value and queues the change
-        * @param {String} name Name of the state variable
-        * @param {Mixed} value Value of the state variable
-        */
-       set: function(name, value) {
-               if (!name) {
-                       return;
-               }
-               this.queueChange(name, value);
-       },
-
-
-       /**
-        * Starts submitting state changes to server
-        */
-       start: function() {
-               this.dt.delay(this.delay);
-               this.started = true;
-       },
-
-
-       /**
-        * Stops submitting state changes
-        */
-       stop: function() {
-               this.dt.cancel();
-               this.started = false;
-       },
-
-
-       /**
-        * private, queues the state change if state has changed
-        */
-       queueChange: function(name, value) {
-               var o = {};
-               var i;
-               var found = false;
-
-               var lastValue = this.state[name];
-               for (i = 0; i < this.queue.length; i++) {
-                       if (this.queue[i].name === name) {
-                               lastValue = this.queue[i].value;
-                       }
-               }
-               var changed = undefined === lastValue || lastValue !== value;
-
-               if (changed) {
-                       o[this.paramNames.name] = name;
-                       o[this.paramNames.value] = value;
-                       for (i = 0; i < this.queue.length; i++) {
-                               if (this.queue[i].name === o.name) {
-                                       this.queue[i] = o;
-                                       found = true;
-                               }
-                       }
-                       if (false === found) {
-                               this.queue.push(o);
-                       }
-                       this.dirty = true;
-               }
-               if (this.started) {
-                       this.start();
-               }
-               return changed;
-       },
-
-
-       /**
-        * private, submits state to server by asynchronous Ajax request
-        */
-       submitState: function() {
-               if (!this.dirty) {
-                       this.dt.delay(this.delay);
-                       return;
-               }
-               this.dt.cancel();
-
-               var o = {
-                       scope: this,
-                       success: this.onSaveSuccess,
-                       failure: this.onSaveFailure,
-                       queue: this.queue, //this.clone(this.queue),
-                       params: {}
-               };
-
-               var params = Ext.apply({}, this.saveBaseParams);
-               params[this.paramNames.key] = this.key;
-               params[this.paramNames.data] = Ext.encode(o.queue);
-
-               Ext.apply(o.params, params);
-
-               // be optimistic
-               this.dirty = false;
-
-          TYPO3.ExtDirectStateProvider.ExtDirect.setState(o, function(response, options) {
-                  if (response.success) {
-                               this.onSaveSuccess(response, options);
-                  } else {
-                               this.onSaveFailure(response, options);
-                  }
-          }, this);
-       },
-
-
-       /**
-        * Clears the state variable
-        * @param {String} name Name of the variable to clear
-        */
-       clear: function(name) {
-               this.set(name, undefined);
-       },
-
-
-       /**
-        * private, save success callback
-        */
-       onSaveSuccess: function(response, options) {
-               var o = response;
-               if (!o.success) {
-                       if (this.logFailure) {
-                               this.log(this.saveFailureText, o, response);
-                       }
-                       this.dirty = true;
-               } else {
-                       Ext.each(response.params.queue, function(item) {
-                               if (!item) {
-                                       return;
-                               }
-                               var name = item[this.paramNames.name];
-                               var value = item[this.paramNames.value];
-
-                               if (value === undefined || value === null) {
-                                       TYPO3.state.ExtDirectProvider.superclass.clear.call(this, name);
-                               } else {
-                                               // parent sets value and fires event
-                                       TYPO3.state.ExtDirectProvider.superclass.set.call(this, name, value);
-                               }
-                       }, this);
-                       if (!this.dirty) {
-                               this.queue = [];
-                       }else {
-                               var i, j, found;
-                               for (i = 0; i < response.params.queue.length; i++) {
-                                       found = false;
-                                       for (j = 0; j < this.queue.length; j++) {
-                                               if (response.params.queue[i].name === this.queue[j].name) {
-                                                       found = true;
-                                                       break;
-                                               }
-                                       }
-                                       if (found && response.params.queue[i].value === this.queue[j].value) {
-                                               this.queue.remove(this.queue[j]);
-                                       }
-                               }
-                       }
-                       if (this.logSuccess) {
-                               this.log(this.saveSuccessText, o, response);
-                       }
-                       this.fireEvent('savesuccess', this);
-               }
-       },
-
-
-       /**
-        * private, save failure callback
-        */
-       onSaveFailure: function(response, options) {
-               if (true === this.logFailure) {
-                       this.log(this.saveFailureText, response);
-               }
-               this.dirty = true;
-               this.fireEvent('savefailure', this);
-       },
-
-
-       /**
-        * private, read state callback
-        */
-       onReadFailure: function(response, options) {
-               if (this.logFailure) {
-                       this.log(this.readFailureText, response);
-               }
-               this.fireEvent('readfailure', this);
-
-       },
-
-
-       /**
-        * private, read success callback
-        */
-       onReadSuccess: function(response, options) {
-               var o = response, data;
-               if (!o.success) {
-                       if (this.logFailure) {
-                               this.log(this.readFailureText, o, response);
-                       }
-               } else {
-                       data = o[this.paramNames.data];
-                       Ext.iterate(data, function(key, value) {
-                               this.state[key] = value;
-                       }, this);
-                       this.queue = [];
-                       this.dirty = false;
-                       if (this.logSuccess) {
-                               this.log(this.readSuccessText, data, response);
-                       }
-                       this.fireEvent('readsuccess', this);
-               }
-       },
-
-
-       /**
-        * Reads saved state from server by sending asynchronous Ajax request and processing the response
-        */
-       readState: function() {
-               var o = {
-                       scope: this,
-                       params:{}
-               };
-
-               var params = Ext.apply({}, this.readBaseParams);
-               params[this.paramNames.key] = this.key;
-
-               Ext.apply(o.params, params);
-               TYPO3.ExtDirectStateProvider.ExtDirect.getState(o, function(response, options) {
-                  if (response.success) {
-                               this.onReadSuccess(response, options);
-                  } else {
-                               this.onReadFailure(response, options);
-                  }
-          }, this);
-       },
-
-
-       /**
-        * private, logs errors or successes
-        */
-       log: function() {
-               if (console) {
-                       console.log.apply(console, arguments);
-               }
-       },
-
-       logState: function() {
-          if (console) {
-                       console.log(this.state);
-               }
-       }
-
-});
diff --git a/t3lib/js/extjs/components/pagetree/javascript/Ext.ux.state.TreePanel.js b/t3lib/js/extjs/components/pagetree/javascript/Ext.ux.state.TreePanel.js
deleted file mode 100644 (file)
index 44f25db..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-Ext.ns('Ext.ux.state');
-
-// dummy constructor
-Ext.ux.state.TreePanel = function() {};
-
-/**
- * State Provider for a tree panel
- */
-Ext.override(Ext.ux.state.TreePanel, {
-       /**
-        * Initializes the plugin
-        * @param {Ext.tree.TreePanel} tree
-        * @private
-        */
-       init:function(tree) {
-               tree.lastSelectedNode = null;
-               tree.isRestoringState = false;
-               tree.stateHash = {};
-
-               // install event handlers on TreePanel
-               tree.on({
-                       // add path of expanded node to stateHash
-                       beforeexpandnode:function(node) {
-                               if (this.isRestoringState) {
-                                       return;
-                               }
-
-                               var saveID = (node.id === 'root' ? node.id : node.id.substr(1));
-                               this.stateHash[saveID] = 1;
-                       },
-
-                       // delete path and all subpaths of collapsed node from stateHash
-                       beforecollapsenode:function(node) {
-                               if (this.isRestoringState) {
-                                       return;
-                               }
-
-                               var deleteID = (node.id === 'root' ? node.id : node.id.substr(1));
-                               delete this.stateHash[deleteID];
-                       },
-
-                       beforeclick: function(node) {
-                               if (this.isRestoringState) {
-                                       return;
-                               }
-                               this.stateHash['lastSelectedNode'] = node.id;
-                       }
-               });
-
-                       // update state on node expand or collapse
-               tree.stateEvents = tree.stateEvents || [];
-               tree.stateEvents.push('expandnode', 'collapsenode', 'click');
-
-               // add state related props to the tree
-               Ext.apply(tree, {
-                       // keeps expanded nodes paths keyed by node.ids
-                       stateHash:{},
-
-                       restoreState: function() {
-                               this.isRestoringState = true;
-                                       // get last selected node
-                               for (var pageID in this.stateHash) {
-                                       var pageNode = this.getNodeById((pageID !== 'root' ? 'p' : '') + pageID);
-                                       if (pageNode) {
-                                               pageNode.on({
-                                                       expand: {
-                                                               single:true,
-                                                               scope:this,
-                                                               fn: this.restoreState
-                                                       }
-                                               });
-                                               if (pageNode.expanded === false && pageNode.rendered == true) {
-                                                       pageNode.expand();
-                                               }
-                                       }
-                               }
-
-                               if (this.stateHash['lastSelectedNode']) {
-                                       var node = this.getNodeById(this.stateHash['lastSelectedNode']);
-                                       if (node) {
-                                               var contentId = TYPO3.Backend.ContentContainer.getIdFromUrl() ||
-                                                       String(fsMod.recentIds['web']) || '-1';
-
-                                               var hasContentFrameValidPageId = (contentId !== '-1' && contentId !== '0');
-                                               var isCurrentSelectedNode = (
-                                                       String(node.attributes.nodeData.id) === contentId ||
-                                                       contentId.indexOf('pages' + String(node.attributes.nodeData.id)) !== -1
-                                               );
-
-                                               if (isCurrentSelectedNode) {
-                                                       this.selectPath(node.getPath());
-                                               }
-
-                                               var isSingleClickPossible = (this.app.isVisible() && this.commandProvider && this.commandProvider.singleClick);
-                                               if (!hasContentFrameValidPageId && !isCurrentSelectedNode && isSingleClickPossible) {
-                                                       this.selectPath(node.getPath());
-                                                       this.commandProvider.singleClick(node, this);
-                                               }
-                                       }
-                               }
-
-                               this.isRestoringState = false;
-                       },
-
-                       // apply state on tree initialization
-                       applyState:function(state) {
-                               if(state) {
-                                       Ext.apply(this, state);
-
-                                       // it is too early to expand paths here
-                                       // so do it once on root load
-                                       this.root.on({
-                                               load: {
-                                                       single:true,
-                                                       scope:this,
-                                                       fn: this.restoreState
-                                               }
-                                       });
-                               }
-                       },
-
-                       // returns stateHash for save by state manager
-                       getState:function() {
-                               return {stateHash:this.stateHash};
-                       }
-               });
-       }
-});
diff --git a/t3lib/js/extjs/components/pagetree/javascript/actions.js b/t3lib/js/extjs/components/pagetree/javascript/actions.js
deleted file mode 100644 (file)
index 33f18ae..0000000
+++ /dev/null
@@ -1,788 +0,0 @@
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-Ext.namespace('TYPO3.Components.PageTree');
-
-/**
- * @class TYPO3.Components.PageTree.Actions
- *
- * Actions dedicated for the page tree
- *
- * @namespace TYPO3.Components.PageTree
- * @author Stefan Galinski <stefan.galinski@gmail.com>
- */
-TYPO3.Components.PageTree.Actions = {
-       /**
-        * Evaluates a response from an ext direct call and shows a flash message
-        * if it was an exceptional result
-        *
-        * @param {Object} response
-        * @return {Boolean}
-        */
-       evaluateResponse: function(response) {
-               if (response.success === false) {
-                       TYPO3.Flashmessage.display(4, 'Exception', response.message);
-                       return false;
-               }
-
-               return true;
-       },
-
-       /**
-        * Releases the cut and copy mode from the context menu
-        *
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       releaseCutAndCopyModes: function(tree) {
-               tree.t3ContextInfo.inCutMode = false;
-               tree.t3ContextInfo.inCopyMode = false;
-
-               if (tree.t3ContextNode) {
-                       tree.t3ContextNode.attributes.nodeData.t3InCutMode = false;
-                       tree.t3ContextNode.attributes.nodeData.t3InCopyMode = false;
-                       tree.t3ContextNode = null;
-               }
-       },
-
-       /**
-        * Updates an existing node with the given alternative. The new tree node
-        * is returned afterwards.
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {Boolean} isExpanded
-        * @param {Object} updatedNode
-        * @param {Function} callback
-        * @return {Ext.tree.TreeNode}
-        */
-       updateNode: function(node, isExpanded, updatedNode, callback) {
-               if (!updatedNode) {
-                       return null;
-               }
-
-               updatedNode.uiProvider = node.ownerTree.uiProvider;
-               var newTreeNode = new Ext.tree.TreeNode(updatedNode);
-
-               var refreshCallback = this.restoreNodeStateAfterRefresh;
-               if (callback) {
-                       refreshCallback = refreshCallback.createSequence(callback);
-               }
-
-               node.parentNode.replaceChild(newTreeNode, node);
-               newTreeNode.ownerTree.refreshNode(newTreeNode, refreshCallback);
-
-               return newTreeNode;
-       },
-
-       /**
-        * Restores the node state
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {Boolean} isExpanded
-        * @return {void}
-        */
-       restoreNodeStateAfterRefresh: function(node, isExpanded) {
-               node.parentNode.expand(false, false);
-               if (isExpanded) {
-                       node.expand(false, false);
-               } else {
-                       node.collapse(false, false);
-               }
-       },
-
-       /**
-        * Shows deletion confirmation window
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @param {Function} callback
-        * @param {Boolean} recursiveDelete
-        * @return {void}
-        */
-       confirmDelete: function(node, tree, callback, recursiveDelete) {
-               callback = callback || null;
-
-               var title = TYPO3.Components.PageTree.LLL.deleteDialogTitle,
-                       message = TYPO3.Components.PageTree.LLL.deleteDialogMessage;
-               if (recursiveDelete) {
-                       message = TYPO3.Components.PageTree.LLL.recursiveDeleteDialogMessage;
-               }
-
-               Ext.Msg.show({
-                       title: title,
-                       msg: message,
-                       buttons: Ext.Msg.YESNO,
-                       fn: function (answer) {
-                               if (answer === 'yes') {
-                                       TYPO3.Components.PageTree.Actions.deleteNode(node, tree, callback);
-                                       return true;
-                               }
-                               return false;
-                       },
-                       animEl: 'elId'
-               });
-       },
-
-       /**
-        * Deletes a node directly
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @param {Function} callback
-        * @return {void}
-        */
-       deleteNode: function(node, tree, callback) {
-               TYPO3.Components.PageTree.Commands.deleteNode(
-                       node.attributes.nodeData,
-                       function(response) {
-                               var succeeded = this.evaluateResponse(response);
-                               if (Ext.isFunction(callback)) {
-                                       callback(node, tree, succeeded);
-                               }
-
-                               if (succeeded) {
-                                               // the node may not be removed in workspace mode
-                                       if (top.TYPO3.configuration.inWorkspace && response.id) {
-                                               this.updateNode(node, node.isExpanded(), response);
-                                       } else {
-                                               node.remove();
-                                       }
-                               }
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Removes a node either directly or first shows deletion popup
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       removeNode: function(node, tree) {
-               if (TYPO3.Components.PageTree.Configuration.displayDeleteConfirmation) {
-                       this.confirmDelete(node);
-               } else {
-                       this.deleteNode(node, tree);
-               }
-       },
-
-       /**
-        * Restores a given node and moves it to the given destination inside the tree. Use this
-        * method if you want to add it as the first child of the destination.
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @param {Ext.tree.TreeNode} destination
-        * @return {void}
-        */
-       restoreNodeToFirstChildOfDestination: function(node, tree, destination) {
-               TYPO3.Components.PageTree.Commands.restoreNode(
-                       node.attributes.nodeData,
-                       destination.attributes.nodeData.id,
-                       function(updatedNode) {
-                               if (this.evaluateResponse(updatedNode)) {
-                                       var newTreeNode = new Ext.tree.TreeNode(
-                                               Ext.apply(node.attributes, updatedNode)
-                                       );
-                                       destination.insertBefore(newTreeNode, destination.firstChild);
-                               }
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Restores a given node and moves it to the given destination inside the tree. Use this
-        * method if you want to add the node after the destination node.
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @param {Ext.tree.TreeNode} destination
-        * @return {void}
-        */
-       restoreNodeAfterDestination: function(node, tree, destination) {
-               TYPO3.Components.PageTree.Commands.restoreNode(
-                       node.attributes.nodeData,
-                       -destination.attributes.nodeData.id,
-                       function(updatedNode) {
-                               if (this.evaluateResponse(updatedNode)) {
-                                       var newTreeNode = new Ext.tree.TreeNode(
-                                               Ext.apply(node.attributes, updatedNode)
-                                       );
-                                       destination.parentNode.insertBefore(newTreeNode, destination.nextSibling);
-                               }
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Collapses a whole tree branch
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       collapseBranch: function(node) {
-               node.collapse(true);
-       },
-
-       /**
-        * Expands a whole tree branch
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       expandBranch: function(node) {
-               node.expand(true);
-       },
-
-       /**
-        * Opens a popup windows for previewing the given node/page
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       viewPage: function(node) {
-               var frontendWindow = window.open('', 'newTYPO3frontendWindow');
-               TYPO3.Components.PageTree.Commands.getViewLink(
-                       node.attributes.nodeData,
-                       function(result) {
-                               frontendWindow.location = result;
-                               frontendWindow.focus();
-                       }
-               );
-       },
-
-       /**
-        * Creates a temporary tree mount point
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       mountAsTreeRoot: function(node, tree) {
-               TYPO3.Components.PageTree.Commands.setTemporaryMountPoint(
-                       node.attributes.nodeData,
-                       function(response) {
-                               if (TYPO3.Components.PageTree.Configuration.temporaryMountPoint) {
-                                       TYPO3.Backend.NavigationContainer.PageTree.removeIndicator(
-                                               TYPO3.Backend.NavigationContainer.PageTree.temporaryMountPointInfoIndicator
-                                       );
-                               }
-
-                               TYPO3.Components.PageTree.Configuration.temporaryMountPoint = response;
-                               TYPO3.Backend.NavigationContainer.PageTree.addTemporaryMountPointIndicator();
-
-                               var selectedNode = TYPO3.Backend.NavigationContainer.PageTree.getSelected();
-                               tree.stateId = 'Pagetree' + TYPO3.Components.PageTree.Configuration.temporaryMountPoint;
-                               tree.refreshTree(function() {
-                                       var nodeIsSelected = false;
-                                       if (selectedNode) {
-                                               nodeIsSelected = TYPO3.Backend.NavigationContainer.PageTree.select(
-                                                       selectedNode.attributes.nodeData.id
-                                               );
-                                       }
-
-                                       var node = (nodeIsSelected ? TYPO3.Backend.NavigationContainer.PageTree.getSelected() : null);
-                                       if (node) {
-                                               this.singleClick(node, tree);
-                                       } else {
-                                               this.singleClick(tree.getRootNode().firstChild, tree);
-                                       }
-                               }, this);
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Opens the edit page properties dialog
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       editPageProperties: function(node) {
-               node.select();
-               var returnUrl = TYPO3.Backend.ContentContainer.src;
-               if (returnUrl.indexOf('returnUrl') !== -1) {
-                       returnUrl = TYPO3.Utility.getParameterFromUrl(returnUrl, 'returnUrl');
-               } else {
-                       returnUrl = encodeURIComponent(returnUrl);
-               }
-
-               TYPO3.Backend.ContentContainer.setUrl(
-                       'alt_doc.php?edit[pages][' + node.attributes.nodeData.id + ']=edit&returnUrl=' + returnUrl
-               );
-       },
-
-       /**
-        * Opens the new page wizard
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       newPageWizard: function(node) {
-               node.select();
-               TYPO3.Backend.ContentContainer.setUrl(
-                       'db_new.php?id=' + node.attributes.nodeData.id + '&pagesOnly=1'
-               );
-       },
-
-       /**
-        * Opens the info popup
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       openInfoPopUp: function(node) {
-               launchView('pages', node.attributes.nodeData.id);
-       },
-
-       /**
-        * Opens the history popup
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       openHistoryPopUp: function(node) {
-               node.select();
-               TYPO3.Backend.ContentContainer.setUrl(
-                       'show_rechis.php?element=pages:' + node.attributes.nodeData.id
-               );
-       },
-
-       /**
-        * Opens the export .t3d file dialog
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       exportT3d: function(node) {
-               node.select();
-               TYPO3.Backend.ContentContainer.setUrl(
-                       'sysext/impexp/app/index.php?tx_impexp[action]=export&' +
-                               'id=0&tx_impexp[pagetree][id]=' + node.attributes.nodeData.id +
-                               '&tx_impexp[pagetree][levels]=0' +
-                               '&tx_impexp[pagetree][tables][]=_ALL'
-               );
-       },
-
-       /**
-        * Opens the import .t3d file dialog
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       importT3d: function(node) {
-               node.select();
-               TYPO3.Backend.ContentContainer.setUrl(
-                       'sysext/impexp/app/index.php?id=' + node.attributes.nodeData.id +
-                               '&table=pages&tx_impexp[action]=import'
-               );
-       },
-
-       /**
-        * Enables the cut mode of a node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       enableCutMode: function(node, tree) {
-               this.disableCopyMode(node, tree);
-               node.attributes.nodeData.t3InCutMode = true;
-               tree.t3ContextInfo.inCutMode = true;
-               tree.t3ContextNode = node;
-       },
-
-       /**
-        * Disables the cut mode of a node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       disableCutMode: function(node, tree) {
-               this.releaseCutAndCopyModes(tree);
-               node.attributes.nodeData.t3InCutMode = false;
-       },
-
-       /**
-        * Enables the copy mode of a node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       enableCopyMode: function(node, tree) {
-               this.disableCutMode(node, tree);
-               node.attributes.nodeData.t3InCopyMode = true;
-               tree.t3ContextInfo.inCopyMode = true;
-               tree.t3ContextNode = node;
-       },
-
-       /**
-        * Disables the copy mode of a node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       disableCopyMode: function(node, tree) {
-               this.releaseCutAndCopyModes(tree);
-               node.attributes.nodeData.t3InCopyMode = false;
-       },
-
-       /**
-        * Pastes the cut/copy context node into the given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       pasteIntoNode: function(node, tree) {
-               if (!tree.t3ContextNode) {
-                       return;
-               }
-
-               if (tree.t3ContextInfo.inCopyMode) {
-                                // This is hard stuff to do. So increase the timeout for the AJAX request
-                       Ext.Ajax.timeout = 3600000;
-
-                       var newNode = tree.t3ContextNode = new Ext.tree.TreeNode(tree.t3ContextNode.attributes);
-                       newNode.id = 'fakeNode';
-                       node.insertBefore(newNode, node.childNodes[0]);
-                       node.attributes.nodeData.t3InCopyMode = false;
-                       this.copyNodeToFirstChildOfDestination(newNode, tree);
-
-               } else if (tree.t3ContextInfo.inCutMode) {
-                       if (node.getPath().indexOf(tree.t3ContextNode.id) !== -1) {
-                               return;
-                       }
-
-                       node.appendChild(tree.t3ContextNode);
-                       node.attributes.nodeData.t3InCutMode = false;
-                       this.moveNodeToFirstChildOfDestination(node, tree);
-               }
-       },
-
-       /**
-        * Pastes a cut/copy context node after the given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       pasteAfterNode: function(node, tree) {
-               if (!tree.t3ContextNode) {
-                       return;
-               }
-
-               if (tree.t3ContextInfo.inCopyMode) {
-                               // This is hard stuff to do. So increase the timeout for the AJAX request
-                       Ext.Ajax.timeout = 3600000;
-
-                       var newNode = tree.t3ContextNode = new Ext.tree.TreeNode(tree.t3ContextNode.attributes);
-                       newNode.id = 'fakeNode';
-                       node.parentNode.insertBefore(newNode, node.nextSibling);
-                       node.attributes.nodeData.t3InCopyMode = false;
-                       this.copyNodeAfterDestination(newNode, tree);
-
-               } else if (tree.t3ContextInfo.inCutMode) {
-                       if (node.getPath().indexOf(tree.t3ContextNode.id) !== -1) {
-                               return;
-                       }
-
-                       node.parentNode.insertBefore(tree.t3ContextNode, node.nextSibling);
-                       node.attributes.nodeData.t3InCutMode = false;
-                       this.moveNodeAfterDestination(node, tree);
-               }
-       },
-
-       /**
-        * Moves the current tree context node after the given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       moveNodeAfterDestination: function(node, tree) {
-               TYPO3.Components.PageTree.Commands.moveNodeAfterDestination(
-                       tree.t3ContextNode.attributes.nodeData,
-                       node.attributes.nodeData.id,
-                       function(response) {
-                               if (this.evaluateResponse(response) && tree.t3ContextNode) {
-                                       this.updateNode(tree.t3ContextNode, tree.t3ContextNode.isExpanded(), response);
-                               }
-                               this.releaseCutAndCopyModes(tree);
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Moves the current tree context node as the first child of the given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       moveNodeToFirstChildOfDestination: function(node, tree) {
-               TYPO3.Components.PageTree.Commands.moveNodeToFirstChildOfDestination(
-                       tree.t3ContextNode.attributes.nodeData,
-                       node.attributes.nodeData.id,
-                       function(response) {
-                               if (this.evaluateResponse(response) && tree.t3ContextNode) {
-                                       this.updateNode(tree.t3ContextNode, tree.t3ContextNode.isExpanded(), response);
-                               }
-                               this.releaseCutAndCopyModes(tree);
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Inserts a new node after the given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       insertNodeAfterDestination: function(node, tree) {
-               TYPO3.Components.PageTree.Commands.insertNodeAfterDestination(
-                       tree.t3ContextNode.attributes.nodeData,
-                       node.previousSibling.attributes.nodeData.id,
-                       tree.t3ContextInfo.serverNodeType,
-                       function(response) {
-                               if (this.evaluateResponse(response)) {
-                                       this.updateNode(node, node.isExpanded(), response, function(node) {
-                                               tree.triggerEdit(node);
-                                       });
-                               }
-                               this.releaseCutAndCopyModes(tree);
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Inserts a new node as the first child of the given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       insertNodeToFirstChildOfDestination: function(node, tree) {
-               TYPO3.Components.PageTree.Commands.insertNodeToFirstChildOfDestination(
-                       tree.t3ContextNode.attributes.nodeData,
-                       tree.t3ContextInfo.serverNodeType,
-                       function(response) {
-                               if (this.evaluateResponse(response)) {
-                                       this.updateNode(node, true, response, function(node) {
-                                               tree.triggerEdit(node);
-                                       });
-                               }
-                               this.releaseCutAndCopyModes(tree);
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Copies the current tree context node after the given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       copyNodeAfterDestination: function(node, tree) {
-               TYPO3.Components.PageTree.Commands.copyNodeAfterDestination(
-                       tree.t3ContextNode.attributes.nodeData,
-                       node.previousSibling.attributes.nodeData.id,
-                       function(response) {
-                               if (this.evaluateResponse(response)) {
-                                       this.updateNode(node, true, response, function(node) {
-                                               tree.triggerEdit(node);
-                                       });
-                               }
-                               this.releaseCutAndCopyModes(tree);
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Copies the current tree context node as the first child of the given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       copyNodeToFirstChildOfDestination: function(node, tree) {
-               TYPO3.Components.PageTree.Commands.copyNodeToFirstChildOfDestination(
-                       tree.t3ContextNode.attributes.nodeData,
-                       node.parentNode.attributes.nodeData.id,
-                       function(response) {
-                               if (this.evaluateResponse(response)) {
-                                       this.updateNode(node, true, response, function(node) {
-                                               tree.triggerEdit(node);
-                                       });
-                               }
-                               this.releaseCutAndCopyModes(tree);
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Visibilizes a page
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       enablePage: function(node) {
-               TYPO3.Components.PageTree.Commands.visiblyNode(
-                       node.attributes.nodeData,
-                       function(response) {
-                               if (this.evaluateResponse(response)) {
-                                       this.updateNode(node, node.isExpanded(), response);
-                               }
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Disables a page
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       disablePage: function(node) {
-               TYPO3.Components.PageTree.Commands.disableNode(
-                       node.attributes.nodeData,
-                       function(response) {
-                               if (this.evaluateResponse(response)) {
-                                       this.updateNode(node, node.isExpanded(), response);
-                               }
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Reloads the content frame with the current module and node id
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       singleClick: function(node, tree) {
-               tree.currentSelectedNode = node;
-
-               var separator = '?';
-               if (currentSubScript.indexOf('?') !== -1) {
-                       separator = '&';
-               }
-
-               node.select();
-               if (tree.stateHash) {
-                       tree.stateHash.lastSelectedNode = node.id;
-               } else {
-                       TYPO3.Components.PageTree.Commands.addRootlineOfNodeToStateHash(
-                               TYPO3.Backend.NavigationContainer.PageTree.mainTree.stateId,
-                               node.attributes.nodeData.id, function(stateHash) {
-                                       TYPO3.Backend.NavigationContainer.PageTree.mainTree.stateHash = stateHash;
-                                       TYPO3.Backend.NavigationContainer.PageTree.mainTree.refreshTree();
-                               }
-                       );
-               }
-
-               fsMod.recentIds['web'] = node.attributes.nodeData.id;
-
-               TYPO3.Backend.ContentContainer.setUrl(
-                       TS.PATH_typo3 + currentSubScript + separator + 'id=' + node.attributes.nodeData.id
-               );
-       },
-
-       /**
-        * Opens a configured url inside the content frame
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @param {Object} contextItem
-        * @return {void}
-        */
-       openCustomUrlInContentFrame: function(node, tree, contextItem) {
-               if (!contextItem.customAttributes || !contextItem.customAttributes.contentUrl) {
-                       return;
-               }
-
-               node.select();
-               TYPO3.Backend.ContentContainer.setUrl(
-                       contextItem.customAttributes.contentUrl.replace('###ID###', node.attributes.nodeData.id)
-               );
-       },
-
-       /**
-        * Updates the title of a node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {String} newText
-        * @param {String} oldText
-        * @param {TYPO3.Components.PageTree.TreeEditor} treeEditor
-        * @return {void}
-        */
-       saveTitle: function(node, newText, oldText, treeEditor) {
-               this.singleClick(node.editNode, node.editNode.ownerTree);
-               if (newText === oldText || newText == '') {
-                       treeEditor.updateNodeText(
-                               node,
-                               node.editNode.attributes.nodeData.editableText,
-                               Ext.util.Format.htmlEncode(oldText)
-                       );
-                       return;
-               }
-
-               TYPO3.Components.PageTree.Commands.updateLabel(
-                       node.editNode.attributes.nodeData,
-                       newText,
-                       function(response) {
-                               if (this.evaluateResponse(response)) {
-                                       treeEditor.updateNodeText(node, response.editableText, response.updatedText);
-                               } else {
-                                       treeEditor.updateNodeText(
-                                               node,
-                                               node.editNode.attributes.nodeData.editableText,
-                                               Ext.util.Format.htmlEncode(oldText)
-                                       );
-                               }
-                       },
-                       this
-               );
-       }
-};
diff --git a/t3lib/js/extjs/components/pagetree/javascript/app.js b/t3lib/js/extjs/components/pagetree/javascript/app.js
deleted file mode 100644 (file)
index 64d275c..0000000
+++ /dev/null
@@ -1,402 +0,0 @@
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-Ext.namespace('TYPO3.Components.PageTree');
-
-/**
- * @class TYPO3.Components.PageTree.App
- *
- * Page tree main application that controls setups the components
- *
- * @namespace TYPO3.Components.PageTree
- * @extends Ext.Panel
- * @author Stefan Galinski <stefan.galinski@gmail.com>
- */
-TYPO3.Components.PageTree.App = Ext.extend(Ext.Panel, {
-       /**
-        * Panel id
-        *
-        * @type {String}
-        */
-       id: 'typo3-pagetree',
-
-       /**
-        * Border
-        *
-        * @type {Boolean}
-        */
-       border: false,
-
-       /**
-        * Layout Type
-        *
-        * @type {String}
-        */
-       layout:'fit',
-
-       /**
-        * Active tree
-        *
-        * @type {TYPO3.Components.PageTree.Tree}
-        */
-       activeTree: null,
-
-       /**
-        * Main pagetree
-        *
-        * @type {TYPO3.Components.PageTree.Tree}
-        */
-       mainTree: null,
-
-       /**
-        * Initializes the application
-        *
-        * Set's the necessary language labels, configuration options and sprite icons by an
-        * external call and initializes the needed components.
-        *
-        * @return {void}
-        */
-       initComponent: function() {
-               TYPO3.Components.PageTree.DataProvider.loadResources(function(response) {
-                       TYPO3.Components.PageTree.LLL = response['LLL'];
-                       TYPO3.Components.PageTree.Configuration = response['Configuration'];
-                       TYPO3.Components.PageTree.Sprites = response['Sprites'];
-
-                       this.mainTree = this.activeTree = new TYPO3.Components.PageTree.Tree({
-                               id: this.id + '-tree',
-                               deletionDropZoneId: this.id + '-deletionDropZone',
-                               ddGroup: this.id,
-                               stateful: true,
-                               stateId: 'Pagetree' + TYPO3.Components.PageTree.Configuration.temporaryMountPoint,
-                               stateEvents: [],
-                               autoScroll: true,
-                               autoHeight: false,
-                               plugins: new Ext.ux.state.TreePanel(),
-                               commandProvider: TYPO3.Components.PageTree.Actions,
-                               contextMenuProvider: TYPO3.Components.PageTree.ContextMenuDataProvider,
-                               treeDataProvider: TYPO3.Components.PageTree.DataProvider,
-                               app: this,
-                               listeners: {
-                                       resize: {
-                                               fn: function() {
-                                                       var treeContainer = Ext.getCmp(this.id + '-treeContainer');
-                                                       Ext.getCmp(this.id + '-filteringTree').setSize(treeContainer.getSize());
-                                                       treeContainer.doLayout();
-                                               },
-                                               scope: this,
-                                               buffer: 250
-                                       }
-                               }
-                       });
-
-                       var filteringTree = new TYPO3.Components.PageTree.FilteringTree({
-                               id: this.id + '-filteringTree',
-                               deletionDropZoneId: this.id + '-deletionDropZone',
-                               ddGroup: this.id,
-                               autoScroll: true,
-                               autoHeight: false,
-                               commandProvider: TYPO3.Components.PageTree.Actions,
-                               contextMenuProvider: TYPO3.Components.PageTree.ContextMenuDataProvider,
-                               treeDataProvider: TYPO3.Components.PageTree.DataProvider,
-                               app: this
-                       }).hide();
-
-                       var topPanel = new TYPO3.Components.PageTree.TopPanel({
-                               dataProvider: TYPO3.Components.PageTree.DataProvider,
-                               filteringTree: filteringTree,
-                               ddGroup: this.id,
-                               tree: this.mainTree,
-                               app: this
-                       });
-
-                       var deletionDropZone = new TYPO3.Components.PageTree.DeletionDropZone({
-                               id: this.id + '-deletionDropZone',
-                               commandProvider: TYPO3.Components.PageTree.Actions,
-                               ddGroup: this.id,
-                               app: this,
-                               region: 'south',
-                               height: 35
-                       });
-
-                       var topPanelItems = new Ext.Panel({
-                               id: this.id + '-topPanelItems',
-                               border: false,
-                               region: 'north',
-                               height: 49,
-                               items: [
-                                       topPanel, {
-                                               border: false,
-                                               id: this.id + '-indicatorBar'
-                                       }
-                               ]
-                       });
-
-                       this.add({
-                               layout: 'border',
-                               items: [
-                                       topPanelItems,
-                                       {
-                                               border: false,
-                                               id: this.id + '-treeContainer',
-                                               region: 'center',
-                                               layout: 'fit',
-                                               items: [this.mainTree, filteringTree]
-                                       },
-                                       deletionDropZone
-                               ]
-                       });
-
-                       if (TYPO3.Components.PageTree.Configuration.temporaryMountPoint) {
-                               topPanelItems.on('afterrender', function() {
-                                       this.addTemporaryMountPointIndicator();
-                               }, this);
-                       }
-
-                       if (TYPO3.Components.PageTree.Configuration.indicator !== '') {
-                               this.addIndicatorItems();
-                       }
-                       this.doLayout();
-
-                       this.ownerCt.on('resize', function() {
-                               this.doLayout();
-                       });
-               }, this);
-
-               TYPO3.Components.PageTree.App.superclass.initComponent.apply(this, arguments);
-       },
-
-       /**
-        * Adds the default indicator items
-        *
-        * @return {void}
-        */
-       addIndicatorItems: function() {
-               this.addIndicator({
-                       border: false,
-                       id: this.id + '-indicatorBar-indicatorTitle',
-                       cls: this.id + '-indicatorBar-item',
-                       html: TYPO3.Components.PageTree.Configuration.indicator
-               });
-       },
-
-       /**
-        * Adds the temporary mount point indicator item
-        *
-        * @return {void}
-        */
-       addTemporaryMountPointIndicator: function() {
-               this.temporaryMountPointInfoIndicator = this.addIndicator({
-                       border: false,
-                       id: this.id + '-indicatorBar-temporaryMountPoint',
-                       cls: this.id + '-indicatorBar-item',
-
-                       listeners: {
-                               afterrender: {
-                                       fn: function() {
-                                               var element = Ext.fly(this.id + '-indicatorBar-temporaryMountPoint-clear');
-                                               element.on('click', function() {
-                                                       TYPO3.BackendUserSettings.ExtDirect.unsetKey(
-                                                               'pageTree_temporaryMountPoint',
-                                                               function() {
-                                                                       TYPO3.Components.PageTree.Configuration.temporaryMountPoint = null;
-                                                                       this.removeIndicator(this.temporaryMountPointInfoIndicator);
-                                                                       this.getTree().refreshTree();
-                                                                       this.getTree().stateId = 'Pagetree';
-                                                               },
-                                                               this
-                                                       );
-                                               }, this);
-                                       },
-                                       scope: this
-                               }
-                       },
-
-                       html: '<p>' +
-                                       '<span id="' + this.id + '-indicatorBar-temporaryMountPoint-info' + '" ' +
-                                               'class="' + this.id + '-indicatorBar-item-leftIcon ' +
-                                                       TYPO3.Components.PageTree.Sprites.Info + '">&nbsp;' +
-                                       '</span>' +
-                                       '<span id="' + this.id + '-indicatorBar-temporaryMountPoint-clear' + '" ' +
-                                               'class="' + this.id + '-indicatorBar-item-rightIcon ' + '">X' +
-                                       '</span>' +
-                                       TYPO3.Components.PageTree.LLL.temporaryMountPointIndicatorInfo + '<br />' +
-                                               TYPO3.Components.PageTree.Configuration.temporaryMountPoint +
-                               '</p>'
-               });
-       },
-
-       /**
-        * Adds an indicator item
-        *
-        * @param {Object} component
-        * @return {void}
-        */
-       addIndicator: function(component) {
-               if (component.listeners && component.listeners.afterrender) {
-                       component.listeners.afterrender.fn = component.listeners.afterrender.fn.createSequence(
-                               this.afterTopPanelItemAdded, this
-                       );
-               } else {
-                       if (component.listeners) {
-                               component.listeners = {}
-                       }
-
-                       component.listeners.afterrender = {
-                               scope: this,
-                               fn: this.afterTopPanelItemAdded
-                       }
-               }
-
-               var indicator = Ext.getCmp(this.id + '-indicatorBar').add(component);
-               this.doLayout();
-
-               return indicator;
-       },
-
-       /**
-        * Recalculates the top panel items height after an indicator was added
-        *
-        * @param {Ext.Component} component
-        * @return {void}
-        */
-       afterTopPanelItemAdded: function(component) {
-               var topPanelItems = Ext.getCmp(this.id + '-topPanelItems');
-               topPanelItems.setHeight(topPanelItems.getHeight() + component.getHeight() + 3);
-               this.doLayout();
-       },
-
-       /**
-        * Removes an indicator item from the indicator bar
-        *
-        * @param {Ext.Component} component
-        * @return {void}
-        */
-       removeIndicator: function(component) {
-               var topPanelItems = Ext.getCmp(this.id + '-topPanelItems');
-               topPanelItems.setHeight(topPanelItems.getHeight() - component.getHeight() - 3);
-               Ext.getCmp(this.id + '-indicatorBar').remove(component);
-               this.doLayout();
-       },
-
-       /**
-        * Compatibility method that calls refreshTree()
-        *
-        * @return {void}
-        */
-       refresh: function() {
-               this.refreshTree();
-       },
-
-       /**
-        * Another compatibility method that calls refreshTree()
-        *
-        * @return {void}
-        */
-       refresh_nav: function() {
-               this.refreshTree();
-       },
-
-       /**
-        * Refreshes the tree and selects the node defined by fsMod.recentIds['web']
-        *
-        * @return {void}
-        */
-       refreshTree: function() {
-               if (!isNaN(fsMod.recentIds['web']) && fsMod.recentIds['web'] !== '') {
-                       this.select(fsMod.recentIds['web'], true);
-               }
-
-               TYPO3.Components.PageTree.DataProvider.getIndicators(function(response) {
-                       var indicators = Ext.getCmp(this.id + '-indicatorBar-indicatorTitle');
-                       if (indicators) {
-                               this.removeIndicator(indicators);
-                       }
-
-                       if (response._COUNT > 0) {
-                               TYPO3.Components.PageTree.Configuration.indicator = response.html;
-                               this.addIndicatorItems();
-                       }
-               }, this);
-
-               this.activeTree.refreshTree();
-       },
-
-       /**
-        * Returns the current active tree
-        *
-        * @return {TYPO3.Components.PageTree.Tree}
-        */
-       getTree: function() {
-               return this.activeTree;
-       },
-
-       /**
-        * Selects a node defined by the page id. If the second parameter is set, we
-        * store the new location into the state hash.
-        *
-        * @param {int} pageId
-        * @return {Boolean}
-        */
-       select: function(pageId) {
-               TYPO3.Components.PageTree.Commands.addRootlineOfNodeToStateHash(
-                       TYPO3.Backend.NavigationContainer.PageTree.mainTree.stateId,
-                       pageId, function(stateHash) {
-                               TYPO3.Backend.NavigationContainer.PageTree.mainTree.stateHash = stateHash;
-                               TYPO3.Backend.NavigationContainer.PageTree.mainTree.refreshTree();
-                       }
-               );
-
-               return true;
-       },
-
-       /**
-        * Returns the currently selected node
-        *
-        * @return {Ext.tree.TreeNode}
-        */
-       getSelected: function() {
-               var node = this.getTree().getSelectionModel().getSelectedNode();
-               return node ? node : null;
-       }
-});
-
-/**
- * Callback method for the module menu
- *
- * @return {TYPO3.Components.PageTree.App}
- */
-TYPO3.ModuleMenu.App.registerNavigationComponent('typo3-pagetree', function() {
-       TYPO3.Backend.NavigationContainer.PageTree = new TYPO3.Components.PageTree.App();
-
-               // compatibility code
-    top.nav = TYPO3.Backend.NavigationContainer.PageTree;
-    top.nav_frame = TYPO3.Backend.NavigationContainer.PageTree;
-    top.content.nav_frame = TYPO3.Backend.NavigationContainer.PageTree;
-
-       return TYPO3.Backend.NavigationContainer.PageTree;
-});
-
-// XTYPE Registration
-Ext.reg('TYPO3.Components.PageTree.App', TYPO3.Components.PageTree.App);
diff --git a/t3lib/js/extjs/components/pagetree/javascript/contextmenu.js b/t3lib/js/extjs/components/pagetree/javascript/contextmenu.js
deleted file mode 100644 (file)
index 32501b6..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-Ext.namespace('TYPO3.Components.PageTree');
-
-/**
- * @class TYPO3.Components.PageTree.ContextMenu
- *
- * Context menu implementation
- *
- * @namespace TYPO3.Components.PageTree
- * @extends Ext.menu.Menu
- * @author Stefan Galinski <stefan.galinski@gmail.com>
- */
-TYPO3.Components.PageTree.ContextMenu = Ext.extend(Ext.menu.Menu, {
-       /**
-        * Context menu node
-        *
-        * @cfg {Ext.tree.TreeNode}
-        */
-       node: null,
-
-       /**
-        * Page Tree
-        *
-        * @cfg {TYPO3.Components.PageTree.Tree}
-        */
-       pageTree: null,
-
-       /**
-        * Component Id
-        *
-        * @type {String}
-        */
-       id: 'typo3-pagetree-contextmenu',
-
-       /**
-        * Parent clicks should be ignored
-        *
-        * @type {Boolean}
-        */
-       ignoreParentClicks: true,
-
-       /**
-        * Listeners
-        *
-        * The itemclick event triggers the configured single click action
-        */
-       listeners: {
-               itemclick: {
-                       fn: function (item) {
-                               if (this.pageTree.commandProvider[item.callbackAction]) {
-                                       if (item.parentMenu.pageTree.stateHash) {
-                                               fsMod.recentIds['web'] = item.parentMenu.node.attributes.nodeData.id;
-                                               item.parentMenu.pageTree.stateHash['lastSelectedNode'] = item.parentMenu.node.id;
-                                       }
-
-                                       this.pageTree.commandProvider[item.callbackAction](
-                                               item.parentMenu.node,
-                                               item.parentMenu.pageTree,
-                                               item
-                                       );
-                               }
-                       }
-               }
-       },
-
-       /**
-        * Fills the menu with the actions
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} pageTree
-        * @param {Object} contextMenuConfiguration
-        * @return {void}
-        */
-       fill: function(node, pageTree, contextMenuConfiguration) {
-               this.node = node;
-               this.pageTree = pageTree;
-
-               var components = this.preProcessContextMenuConfiguration(contextMenuConfiguration);
-               if (components.length) {
-                       for (var component in components) {
-                               if (components[component] === '-') {
-                                       this.addSeparator();
-                               } else if (typeof components[component] === 'object') {
-                                       this.addItem(components[component]);
-                               }
-                       }
-               }
-       },
-
-       /**
-        * Parses the context menu actions array recursively and generates the
-        * components for the context menu including separators/dividers and sub menus
-        *
-        * @param {Object} contextMenuConfiguration
-        * @param {int} level
-        * @return {Object}
-        */
-       preProcessContextMenuConfiguration: function(contextMenuConfiguration, level) {
-               level = level || 0;
-               if (level > 5) {
-                       return [];
-               }
-
-               var components = [];
-               var index = 0;
-
-               var modulesInsideGroup = false;
-               var subMenus = 0;
-               for (var singleAction in contextMenuConfiguration) {
-                       if (contextMenuConfiguration[singleAction]['type'] === 'submenu') {
-                               var subMenuComponents = this.preProcessContextMenuConfiguration(
-                                       contextMenuConfiguration[singleAction]['childActions'],
-                                       level + 1
-                               );
-
-                               if (subMenuComponents.length) {
-                                       var subMenu = new TYPO3.Components.PageTree.ContextMenu({
-                                               id: this.id + '-sub' + ++subMenus,
-                                               items: subMenuComponents,
-                                               node: this.node,
-                                               pageTree: this.pageTree
-                                       });
-
-                                       components[index++] = {
-                                               text: contextMenuConfiguration[singleAction]['label'],
-                                               cls: 'contextMenu-subMenu',
-                                               menu: subMenu,
-                                               icon: contextMenuConfiguration[singleAction]['icon'],
-                                               iconCls: contextMenuConfiguration[singleAction]['class']
-                                       };
-                               }
-                       } else if (contextMenuConfiguration[singleAction]['type'] === 'divider') {
-                               if (modulesInsideGroup) {
-                                       components[index++] = '-';
-                                       modulesInsideGroup = false;
-                               }
-                       } else {
-                               modulesInsideGroup = true;
-
-                               if (typeof contextMenuConfiguration[singleAction] === 'object') {
-                                       var component = {
-                                               'text': contextMenuConfiguration[singleAction]['label'],
-                                               'icon': contextMenuConfiguration[singleAction]['icon'],
-                                               'iconCls': contextMenuConfiguration[singleAction]['class'],
-                                               'callbackAction': contextMenuConfiguration[singleAction]['callbackAction'],
-                                               'customAttributes': contextMenuConfiguration[singleAction]['customAttributes']
-                                       };
-
-                                       component.itemTpl = Ext.menu.Item.prototype.itemTpl = new Ext.XTemplate(
-                                               '<a id="{id}" class="{cls}" hidefocus="true" unselectable="on" href="{href}">',
-                                                       '<span class="{hrefTarget}">',
-                                                               '<img src="{icon}" class="x-menu-item-icon {iconCls}" unselectable="on" />',
-                                                       '</span>',
-                                                       '<span class="x-menu-item-text">{text}</span>',
-                                               '</a>'
-                                       );
-
-                                       components[index++] = component;
-                               }
-                       }
-               }
-
-                       // remove divider if it's the last item of the context menu
-               if (components.last() === '-') {
-                       components[components.length - 1] = '';
-               }
-
-               return components;
-       }
-});
-
-// XTYPE Registration
-Ext.reg('TYPO3.Components.PageTree.ContextMenu', TYPO3.Components.PageTree.ContextMenu);
diff --git a/t3lib/js/extjs/components/pagetree/javascript/deletiondropzone.js b/t3lib/js/extjs/components/pagetree/javascript/deletiondropzone.js
deleted file mode 100644 (file)
index 443f96f..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project is
- *  free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-Ext.namespace('TYPO3.Components.PageTree');
-
-/**
- * @class TYPO3.Components.PageTree.DeletionDropZone
- *
- * Deletion Drop Zone
- *
- * @namespace TYPO3.Components.PageTree
- * @extends Ext.Panel
- * @author Stefan Galinski <stefan.galinski@gmail.com>
- */
-TYPO3.Components.PageTree.DeletionDropZone = Ext.extend(Ext.Panel, {
-       /**
-        * Border
-        *
-        * @type {Boolean}
-        */
-       border: true,
-
-       /**
-        * Hide the drop zone initially
-        *
-        * @type {Boolean}
-        */
-       hidden: true,
-
-       /**
-        * Command Provider
-        *
-        * @cfg {Object}
-        */
-       commandProvider: null,
-
-       /**
-        * Drag and Drop Group
-        *
-        * @cfg {String}
-        */
-       ddGroup: '',
-
-       /**
-        * Main Application
-        *
-        * @cfg {TYPO3.Components.PageTree.App}
-        */
-       app: null,
-
-       /**
-        * Removed node had a previous sibling
-        *
-        * @type {Boolean}
-        */
-       isPreviousSibling: false,
-
-       /**
-        * Removed node
-        *
-        * @type {Ext.tree.TreeNode}
-        */
-       previousNode: null,
-
-       /**
-        * Click Handler for the recovery text
-        *
-        * @type {Function}
-        */
-       textClickHandler: null,
-
-       /**
-        * Amount of drops (used to prevent early hiding of the box)
-        *
-        * @type {int}
-        */
-       amountOfDrops: 0,
-
-       /**
-        * Listeners
-        *
-        * The "afterrender" event creates the drop zone
-        */
-       listeners: {
-               afterrender: {
-                       fn: function() {
-                               this.createDropZone();
-
-                               this.getEl().on('mouseout', function(e) {
-                                       if (!e.within(this.getEl(), true)) {
-                                               this.removeClass(this.id + '-activateProxyOver');
-                                               if (!this.app.activeTree.shouldCopyNode) {
-                                                       this.app.activeTree.copyHint.show();
-                                               }
-                                       }
-                               }, this);
-                       }
-               },
-
-               beforehide: {
-                       fn: function() {
-                               if (this.textClickHandler) {
-                                       return false;
-                               }
-                       }
-               }
-       },
-
-       /**
-        * Initializes the component
-        *
-        * @return {void}
-        */
-       initComponent: function() {
-               this.html = '<p><span id="' + this.id + '-icon" class="' +
-                       TYPO3.Components.PageTree.Sprites.TrashCan +
-                       '">&nbsp;</span><span id="' + this.id + '-text">' +
-                       TYPO3.Components.PageTree.LLL.dropToRemove + '</span></p>';
-
-               TYPO3.Components.PageTree.DeletionDropZone.superclass.initComponent.apply(this, arguments);
-       },
-
-
-       /**
-        * Creates the drop zone and it's functionality
-        *
-        * @return {void}
-        */
-       createDropZone: function() {
-               (new Ext.dd.DropZone(this.getEl(), {
-                       ddGroup: this.ddGroup,
-
-                       notifyOver: function(ddProxy, e) {
-                               ddProxy.setDragElPos(e.xy[0], e.xy[1] - 60);
-                               return this.id + '-proxyOver';
-                       }.createDelegate(this),
-
-                       notifyEnter: function() {
-                               this.addClass(this.id + '-activateProxyOver');
-                               if (!this.app.activeTree.shouldCopyNode) {
-                                       this.app.activeTree.copyHint.hide();
-                               }
-
-                               return this.id + '-proxyOver';
-                       }.createDelegate(this),
-
-                       notifyDrop: function(ddProxy, e, n) {
-                               var node = n.node;
-                               if (!node) {
-                                       return;
-                               }
-
-                               var tree = node.ownerTree;
-                               var nodeHasChildNodes = (node.hasChildNodes() || node.isExpandable());
-
-                               var callback = null;
-                               if (!top.TYPO3.configuration.inWorkspace && !nodeHasChildNodes) {
-                                       callback = this.setRecoverState.createDelegate(this);
-                               }
-
-                               if (nodeHasChildNodes) {
-                                       node.ownerTree.commandProvider.confirmDelete(node, tree, callback, true);
-                               } else {
-                                       node.ownerTree.commandProvider.deleteNode(node, tree, callback);
-                               }
-                       }.createDelegate(this)
-               }));
-       },
-
-       /**
-        * Sets the drop zone into the recovery state
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @param {Boolean} succeeded
-        * @return {void}
-        */
-       setRecoverState: function(node, tree, succeeded) {
-               if (!succeeded) {
-                       this.toOriginState();
-                       return;
-               }
-
-               this.show();
-               this.setHeight(50);
-               this.updateIcon(TYPO3.Components.PageTree.Sprites.TrashCanRestore);
-               this.updateText(
-                       node.text + '<br />' +
-                       '<span class="' + this.id + '-restore">' +
-                               '<span class="' + this.id + '-restoreText">' +
-                               TYPO3.Components.PageTree.LLL.dropZoneElementRemoved +
-                               '</span>' +
-                       '</span>',
-                       false
-               );
-               this.app.doLayout();
-
-               ++this.amountOfDrops;
-               (function() {
-                       if (!--this.amountOfDrops) {
-                               this.toOriginState();
-                       }
-               }).defer(10000, this);
-
-               this.textClickHandler = this.restoreNode.createDelegate(this, [node, tree]);
-               Ext.get(this.id + '-text').on('click', this.textClickHandler);
-
-               this.isPreviousSibling = false;
-               this.previousNode = node.parentNode;
-               if (node.previousSibling) {
-                       this.previousNode = node.previousSibling;
-                       this.isPreviousSibling = true;
-               }
-       },
-
-       /**
-        * Updates the drop zone text label
-        *
-        * @param {String} text
-        * @param {Boolean} animate
-        * @return {void}
-        */
-       updateText: function(text, animate) {
-               animate = animate || false;
-
-               var elementText = Ext.get(this.id + '-text');
-               if (animate) {
-                       elementText.animate({opacity: {to: 0}}, 1, function(elementText) {
-                               elementText.update(text);
-                               elementText.setStyle('opacity', 1);
-                       });
-               } else {
-                       elementText.update(text);
-               }
-       },
-
-       /**
-        * Updates the drop zone icon with another sprite icon
-        *
-        * @param {String} classes
-        * @return {void}
-        */
-       updateIcon: function(classes) {
-               Ext.get(this.id + '-icon').set({
-                       'class': classes
-               });
-       },
-
-       /**
-        * Resets the drop zone to the initial state
-        *
-        * @param {Boolean} hide
-        * @return {void}
-        */
-       toOriginState: function(hide) {
-               if (hide !== false) {
-                       hide = true;
-               }
-
-               Ext.get(this.id + '-text').un('click', this.textClickHandler);
-               this.previousNode = this.textClickHandler = null;
-               this.isPreviousSibling = false;
-
-               if (hide && !this.app.activeTree.dragZone.dragging) {
-                       this.hide();
-               }
-
-               this.setHeight(35);
-               this.updateText(TYPO3.Components.PageTree.LLL.dropToRemove, false);
-               this.updateIcon(TYPO3.Components.PageTree.Sprites.TrashCan);
-               this.app.doLayout();
-       },
-
-       /**
-        * Restores the last removed node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @return {void}
-        */
-       restoreNode: function(node, tree) {
-               if (this.isPreviousSibling) {
-                       this.commandProvider.restoreNodeAfterDestination(node, tree, this.previousNode);
-               } else {
-                       this.commandProvider.restoreNodeToFirstChildOfDestination(node, tree, this.previousNode);
-               }
-               this.setHeight(35);
-               this.updateText(TYPO3.Components.PageTree.LLL.dropZoneElementRestored);
-               this.app.doLayout();
-
-               (function() {
-                       if (this.textClickHandler) {
-                               this.toOriginState();
-                       }
-               }).defer(3000, this);
-       }
-});
-
-// XTYPE Registration
-Ext.reg('TYPO3.Components.PageTree.DeletionDropZone', TYPO3.Components.PageTree.DeletionDropZone);
diff --git a/t3lib/js/extjs/components/pagetree/javascript/filteringtree.js b/t3lib/js/extjs/components/pagetree/javascript/filteringtree.js
deleted file mode 100644 (file)
index 7ee0d88..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-Ext.namespace('TYPO3.Components.PageTree');
-
-/**
- * @class TYPO3.Components.PageTree.FilteringTree
- *
- * Filtering Tree
- *
- * @namespace TYPO3.Components.PageTree
- * @extends TYPO3.Components.PageTree.Tree
- * @author Stefan Galinski <stefan.galinski@gmail.com>
- */
-TYPO3.Components.PageTree.FilteringTree = Ext.extend(TYPO3.Components.PageTree.Tree, {
-       /**
-        * Search word
-        *
-        * @type {String}
-        */
-       searchWord: '',
-
-       /**
-        * Tree loader implementation for the filtering tree
-        *
-        * @return {void}
-        */
-       addTreeLoader: function() {
-               this.loader = new Ext.tree.TreeLoader({
-                       directFn: this.treeDataProvider.getFilteredTree,
-                       paramOrder: 'nodeId,attributes,searchWord',
-                       nodeParameter: 'nodeId',
-                       baseAttrs: {
-                               uiProvider: this.uiProvider
-                       },
-
-                       listeners: {
-                               beforeload: function(treeLoader, node) {
-                                       if (!node.ownerTree.searchWord || node.ownerTree.searchWord === '') {
-                                               return false;
-                                       }
-
-                                       treeLoader.baseParams.nodeId = node.id;
-                                       treeLoader.baseParams.searchWord = node.ownerTree.searchWord;
-                                       treeLoader.baseParams.attributes = node.attributes.nodeData;
-                               }
-                       }
-               });
-       }
-});
-
-// XTYPE Registration
-Ext.reg('TYPO3.Components.PageTree.FilteringTree', TYPO3.Components.PageTree.FilteringTree);
diff --git a/t3lib/js/extjs/components/pagetree/javascript/loadorder.txt b/t3lib/js/extjs/components/pagetree/javascript/loadorder.txt
deleted file mode 100644 (file)
index a649b22..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-treeeditor.js
-tree.js
-filteringtree.js
-nodeui.js
-deletiondropzone.js
-toppanel.js
-contextmenu.js
-actions.js
-Ext.ux.state.TreePanel.js
-app.js
diff --git a/t3lib/js/extjs/components/pagetree/javascript/nodeui.js b/t3lib/js/extjs/components/pagetree/javascript/nodeui.js
deleted file mode 100644 (file)
index ffcef4e..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-Ext.namespace('TYPO3.Components.PageTree');
-
-/**
- * @class TYPO3.Components.PageTree.DeletionDropZone
- *
- * Tree Node User Interface that can handle sprite icons and more
- *
- * @namespace TYPO3.Components.PageTree
- * @extends Ext.tree.TreeNodeUI
- * @author Stefan Galinski <stefan.galinski@gmail.com>
- */
-TYPO3.Components.PageTree.PageTreeNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
-       /**
-        * Adds the sprite icon and adds an event to open the context menu on a single click at the icon node
-        *
-        * @param {Ext.tree.TreeNode} n
-        * @param {Object} a
-        * @param {Ext.tree.TreeNode} targetNode
-        * @param {Boolean} bulkRender
-        * @return {void}
-        */
-       renderElements : function(n, a, targetNode, bulkRender) {
-               // add some indent caching, this helps performance when rendering a large tree
-        this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';
-
-        var cb = Ext.isBoolean(a.checked),
-            nel,
-            href = this.getHref(a.href),
-                       nodeStyles = '',
-                       rootline = '';
-
-                       // TYPO3 modification to show the readable rootline above the user mounts
-               if (a.readableRootline !== '') {
-                       rootline = '<li class="x-tree-node-readableRootline">' + a.readableRootline + '</li>';
-               }
-
-               if (a.nodeData.backgroundColor) {
-                       nodeStyles = 'style="background-color: ' + a.nodeData.backgroundColor + '"';
-               }
-
-               var buf = [rootline,'<li class="x-tree-node" ' + nodeStyles + '><div ext:tree-node-id="',n.id,'" class="x-tree-node-el x-tree-node-leaf x-unselectable ', a.cls,'" unselectable="on">',
-            '<span class="x-tree-node-indent">',this.indentMarkup,"</span>",
-            '<img alt="" src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow" />',
-//            '<img alt="" src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon',(a.icon ? " x-tree-node-inline-icon" : ""),(a.iconCls ? " "+a.iconCls : ""),'" unselectable="on" />',
-                       a.spriteIconCode, // TYPO3: add sprite icon code
-            cb ? ('<input class="x-tree-node-cb" type="checkbox" ' + (a.checked ? 'checked="checked" />' : '/>')) : '',
-            '<a hidefocus="on" class="x-tree-node-anchor" href="',href,'" tabIndex="1" ',
-             a.hrefTarget ? ' target="'+a.hrefTarget+'"' : "", '><span unselectable="on">',n.text,"</span></a></div>",
-            '<ul class="x-tree-node-ct" style="display:none;"></ul>',
-            "</li>"].join('');
-
-        if(bulkRender !== true && n.nextSibling && (nel = n.nextSibling.ui.getEl())){
-            this.wrap = Ext.DomHelper.insertHtml("beforeBegin", nel, buf);
-        }else{
-            this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf);
-        }
-
-        this.elNode = this.wrap.childNodes[0];
-        this.ctNode = this.wrap.childNodes[1];
-        var cs = this.elNode.childNodes;
-        this.indentNode = cs[0];
-        this.ecNode = cs[1];
-//        this.iconNode = cs[2];
-               this.iconNode = (cs[2].firstChild.tagName === 'SPAN' ? cs[2].firstChild : cs[2]); // TYPO3: get possible overlay icon
-        var index = 3; // TYPO3: index 4?
-        if(cb){
-            this.checkbox = cs[3];
-            // fix for IE6
-            this.checkbox.defaultChecked = this.checkbox.checked;
-            index++;
-        }
-        this.anchor = cs[index];
-        this.textNode = cs[index].firstChild;
-
-                       // TYPO3: call the context menu on a single click (Beware of drag&drop!)
-               if (!TYPO3.Components.PageTree.Configuration.disableIconLinkToContextmenu
-                       || TYPO3.Components.PageTree.Configuration.disableIconLinkToContextmenu === '0'
-               ) {
-                       Ext.fly(this.iconNode).on('click', function(event) {
-                               this.getOwnerTree().fireEvent('contextmenu', this, event);
-                               event.stopEvent();
-                       }, n);
-               }
-       },
-
-       /**
-        * Adds a quick tip to the sprite icon
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {Object} tip
-        * @param {String} title
-        * @return {void}
-        */
-       onTipChange : function(node, tip, title) {
-               TYPO3.Components.PageTree.PageTreeNodeUI.superclass.onTipChange.apply(this, arguments);
-
-       if(this.rendered){
-               var hasTitle = Ext.isDefined(title);
-               if(this.iconNode.setAttributeNS){
-                       this.iconNode.setAttributeNS("ext", "qtip", tip);
-               if(hasTitle){
-                       this.iconNode.setAttributeNS("ext", "qtitle", title);
-               }
-               }else{
-                       this.iconNode.setAttribute("ext:qtip", tip);
-               if(hasTitle){
-                       this.iconNode.setAttribute("ext:qtitle", title);
-               }
-       }
-       }
-       },
-
-       /**
-        * Returns the drag and drop handles
-        *
-        * @return {Object}
-        */
-       getDDHandles: function() {
-               var ddHandles = [this.iconNode, this.textNode, this.elNode];
-               var handlesIndex = ddHandles.length;
-
-               var textNode = Ext.get(this.textNode);
-               for (var i = 0; i < textNode.dom.childNodes.length; ++i) {
-                       if (textNode.dom.childNodes[i].nodeName === 'SPAN') {
-                               ddHandles[handlesIndex++] = textNode.dom.childNodes[i];
-                               if (textNode.dom.childNodes[i].childNodes) {
-                                       ddHandles[handlesIndex++] = textNode.dom.childNodes[i].childNodes[0];
-                               }
-                       }
-               }
-
-               return ddHandles;
-       },
-
-       /**
-        * Only set the onOver class if we are not in dragging mode
-        *
-        * @return {void}
-        */
-       onOver: function() {
-               if (!this.node.ownerTree.dontSetOverClass) {
-                       TYPO3.Components.PageTree.PageTreeNodeUI.superclass.onOver.apply(this, arguments);
-               }
-       }
-});
-
-// XTYPE Registration
-Ext.reg('TYPO3.Components.PageTree.PageTreeNodeUI', TYPO3.Components.PageTree.PageTreeNodeUI);
\ No newline at end of file
diff --git a/t3lib/js/extjs/components/pagetree/javascript/toppanel.js b/t3lib/js/extjs/components/pagetree/javascript/toppanel.js
deleted file mode 100644 (file)
index f80299d..0000000
+++ /dev/null
@@ -1,485 +0,0 @@
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-Ext.namespace('TYPO3.Components.PageTree');
-
-/**
- * @class TYPO3.Components.PageTree.TopPanel
- *
- * Top Panel
- *
- * @namespace TYPO3.Components.PageTree
- * @extends Ext.Panel
- * @author Stefan Galinski <stefan.galinski@gmail.com>
- */
-TYPO3.Components.PageTree.TopPanel = Ext.extend(Ext.Panel, {
-       /**
-        * Component Id
-        *
-        * @type {String}
-        */
-       id: 'typo3-pagetree-topPanel',
-
-       /**
-        * Border
-        *
-        * @type {Boolean}
-        */
-       border: false,
-
-       /**
-        * Toolbar Object
-        *
-        * @type {Ext.Toolbar}
-        */
-       tbar: new Ext.Toolbar(),
-
-       /**
-        * Currently Clicked Toolbar Button
-        *
-        * @type {Ext.Button}
-        */
-       currentlyClickedButton: null,
-
-       /**
-        * Currently Shown Panel
-        *
-        * @type {Ext.Component}
-        */
-       currentlyShownPanel: null,
-
-       /**
-        * Filtering Indicator Item
-        *
-        * @type {Ext.Panel}
-        */
-       filteringIndicator: null,
-
-       /**
-        * Drag and Drop Group
-        *
-        * @cfg {String}
-        */
-       ddGroup: '',
-
-       /**
-        * Data Provider
-        *
-        * @cfg {Object}
-        */
-       dataProvider: null,
-
-       /**
-        * Filtering Tree
-        *
-        * @cfg {TYPO3.Components.PageTree.FilteringTree}
-        */
-       filteringTree: null,
-
-       /**
-        * Page Tree
-        *
-        * @cfg {TYPO3.Components.PageTree.Tree}
-        */
-       tree: null,
-
-       /**
-        * Application Panel
-        *
-        * @cfg {TYPO3.Components.PageTree.App}
-        */
-       app: null,
-
-       /**
-        * Initializes the component
-        *
-        * @return {void}
-        */
-       initComponent: function() {
-               this.currentlyShownPanel = new Ext.Panel({
-                       id: this.id + '-defaultPanel',
-                       cls: this.id + '-item'
-               });
-               this.items = [this.currentlyShownPanel];
-
-               TYPO3.Components.PageTree.TopPanel.superclass.initComponent.apply(this, arguments);
-
-               this.addDragDropNodeInsertionFeature();
-
-               if (!TYPO3.Components.PageTree.Configuration.hideFilter
-                       || TYPO3.Components.PageTree.Configuration.hideFilter === '0'
-               ) {
-                       this.addFilterFeature();
-               }
-
-               this.getTopToolbar().addItem({xtype: 'tbfill'});
-               this.addRefreshTreeFeature();
-       },
-
-       /**
-        * Returns a custom button template to fix some nasty webkit issues
-        * by removing some useless wrapping html code
-        *
-        * @return {void}
-        */
-       getButtonTemplate: function() {
-               return new Ext.Template(
-                       '<div id="{4}" class="x-btn {3}"><button type="{0}"">&nbsp;</button></div>'
-               );
-       },
-
-       /**
-        * Adds a button to the components toolbar with a related component
-        *
-        * @param {Object} button
-        * @param {Object} connectedWidget
-        * @return {void}
-        */
-       addButton: function(button, connectedWidget) {
-               button.template = this.getButtonTemplate();
-               if (!button.hasListener('click')) {
-                       button.on('click', this.topbarButtonCallback);
-               }
-
-               if (connectedWidget) {
-                       connectedWidget.hidden = true;
-                       button.connectedWidget = connectedWidget;
-                       this.add(connectedWidget);
-               }
-
-               this.getTopToolbar().addItem(button);
-               this.doLayout();
-       },
-
-       /**
-        * Usual button callback method that triggers the assigned component of the
-        * clicked toolbar button
-        *
-        * @return {void}
-        */
-       topbarButtonCallback: function() {
-               var topPanel = this.ownerCt.ownerCt;
-
-               topPanel.currentlyShownPanel.hide();
-               if (topPanel.currentlyClickedButton) {
-                       topPanel.currentlyClickedButton.toggle(false);
-               }
-
-               if (topPanel.currentlyClickedButton === this) {
-                       topPanel.currentlyClickedButton = null;
-                       topPanel.currentlyShownPanel = topPanel.get(topPanel.id + '-defaultPanel');
-               } else {
-                       this.toggle(true);
-                       topPanel.currentlyClickedButton = this;
-                       topPanel.currentlyShownPanel = this.connectedWidget;
-               }
-
-               topPanel.currentlyShownPanel.show();
-       },
-
-       /**
-        * Loads the filtering tree nodes with the given search word
-        *
-        * @param {Ext.form.TextField} textField
-        * @return {void}
-        */
-       createFilterTree: function(textField) {
-               var searchWord = textField.getValue();
-               var isNumber = TYPO3.Utility.isNumber(searchWord);
-               var hasMinLength = (searchWord.length > 2 || searchWord.length <= 0);
-               if ((!hasMinLength && !isNumber) || searchWord === this.filteringTree.searchWord) {
-                       return;
-               }
-
-               this.filteringTree.searchWord = searchWord;
-               if (this.filteringTree.searchWord === '') {
-                       this.app.activeTree = this.tree;
-
-                       textField.setHideTrigger(true);
-                       this.filteringTree.hide();
-                       this.tree.show().refreshTree(function() {
-                               textField.focus(false, 500);
-                       }, this);
-
-                       if (this.filteringIndicator) {
-                               this.app.removeIndicator(this.filteringIndicator);
-                               this.filteringIndicator = null;
-                       }
-               } else {
-                       var selectedNode = this.app.getSelected();
-                       this.app.activeTree = this.filteringTree;
-
-                       if (!this.filteringIndicator) {
-                               this.filteringIndicator = this.app.addIndicator(
-                                       this.createIndicatorItem(textField)
-                               );
-                       }
-
-                       textField.setHideTrigger(false);
-                       this.tree.hide();
-                       this.app.ownerCt.getEl().mask('', 'x-mask-loading-message');
-                       this.app.ownerCt.getEl().addClass('t3-mask-loading');
-                       this.filteringTree.show().refreshTree(function() {
-                               if (selectedNode) {
-                                       this.app.select(selectedNode.attributes.nodeData.id, false);
-                               }
-                               textField.focus();
-                               this.app.ownerCt.getEl().unmask();
-                       }, this);
-               }
-
-               this.doLayout();
-       },
-
-       /**
-        * Adds an indicator item to the page tree application for the filtering feature
-        *
-        * @param {Ext.form.TextField} textField
-        * @return {void}
-        */
-       createIndicatorItem: function(textField) {
-               return {
-                       border: false,
-                       id: this.app.id + '-indicatorBar-filter',
-                       cls: this.app.id + '-indicatorBar-item',
-                       html: '<p>' +
-                                       '<span id="' + this.app.id + '-indicatorBar-filter-info' + '" ' +
-                                               'class="' + this.app.id + '-indicatorBar-item-leftIcon ' +
-                                                       TYPO3.Components.PageTree.Sprites.Info + '">&nbsp;' +
-                                       '</span>' +
-                                       '<span id="' + this.app.id + '-indicatorBar-filter-clear' + '" ' +
-                                               'class="' + this.app.id + '-indicatorBar-item-rightIcon ' + '">X' +
-                                       '</span>' +
-                                       TYPO3.Components.PageTree.LLL.activeFilterMode +
-                               '</p>',
-                       filteringTree: this.filteringTree,
-
-                       listeners: {
-                               afterrender: {
-                                       scope: this,
-                                       fn: function() {
-                                               var element = Ext.fly(this.app.id + '-indicatorBar-filter-clear');
-                                               element.on('click', function() {
-                                                       textField.setValue('');
-                                                       this.createFilterTree(textField);
-                                               }, this);
-                                       }
-                               }
-                       }
-               };
-       },
-
-       /**
-        * Adds the necessary functionality and components for the filtering feature
-        *
-        * @return {void}
-        */
-       addFilterFeature: function() {
-               var topPanelButton = new Ext.Button({
-                       id: this.id + '-button-filter',
-                       cls: this.id + '-button',
-                       iconCls: TYPO3.Components.PageTree.Sprites.Filter,
-                       tooltip: TYPO3.Components.PageTree.LLL.buttonFilter
-               });
-
-               var textField = new Ext.form.TriggerField({
-                       id: this.id + '-filter',
-                       enableKeyEvents: true,
-                       triggerClass: TYPO3.Components.PageTree.Sprites.InputClear,
-                       value: TYPO3.Components.PageTree.LLL.searchTermInfo,
-
-                       listeners: {
-                               blur: {
-                                       scope: this,
-                                       fn:function(textField) {
-                                               if (textField.getValue() === '') {
-                                                       textField.setValue(TYPO3.Components.PageTree.LLL.searchTermInfo);
-                                                       textField.addClass(this.id + '-filter-defaultText');
-                                               }
-                                       }
-                               },
-
-                               focus: {
-                                       scope: this,
-                                       fn: function(textField) {
-                                               if (textField.getValue() === TYPO3.Components.PageTree.LLL.searchTermInfo) {
-                                                       textField.setValue('');
-                                                       textField.removeClass(this.id + '-filter-defaultText');
-                                               }
-                                       }
-                               },
-
-                               keydown: {
-                                       fn: this.createFilterTree,
-                                       scope: this,
-                                       buffer: 1000
-                               }
-                       }
-               });
-
-               textField.setHideTrigger(true);
-               textField.onTriggerClick = function() {
-                       textField.setValue('');
-                       this.createFilterTree(textField);
-               }.createDelegate(this);
-
-               var topPanelWidget = new Ext.Panel({
-                       border: false,
-                       id: this.id + '-filterWrap',
-                       cls: this.id + '-item',
-                       items: [textField],
-
-                       listeners: {
-                               show: {
-                                       scope: this,
-                                       fn: function(panel) {
-                                               panel.get(this.id + '-filter').focus();
-                                       }
-                               }
-                       }
-               });
-
-               this.addButton(topPanelButton, topPanelWidget);
-       },
-
-       /**
-        * Creates the entries for the new node drag zone toolbar
-        *
-        * @return {void}
-        */
-       createNewNodeToolbar: function() {
-               this.dragZone = new Ext.dd.DragZone(this.getEl(), {
-                       ddGroup: this.ownerCt.ddGroup,
-                       topPanel: this.ownerCt,
-
-                       endDrag: function() {
-                               this.topPanel.app.activeTree.dontSetOverClass = false;
-                       },
-
-                       getDragData: function(event) {
-                               this.proxyElement = document.createElement('div');
-
-                               var node = Ext.getCmp(event.getTarget('.x-btn').id);
-                               node.shouldCreateNewNode = true;
-
-                               return {
-                                       ddel: this.proxyElement,
-                                       item: node
-                               }
-                       },
-
-                       onInitDrag: function() {
-                               this.topPanel.app.activeTree.dontSetOverClass = true;
-                               var clickedButton = this.dragData.item;
-                               var cls = clickedButton.initialConfig.iconCls;
-
-                               this.proxyElement.shadow = false;
-                               this.proxyElement.innerHTML = '<div class="x-dd-drag-ghost-pagetree">' +
-                                       '<span class="x-dd-drag-ghost-pagetree-icon ' + cls + '">&nbsp;</span>' +
-                                       '<span class="x-dd-drag-ghost-pagetree-text">'  + clickedButton.title + '</span>' +
-                               '</div>';
-
-                               this.proxy.update(this.proxyElement);
-                       }
-               });
-
-                       // listens on the escape key to stop the dragging
-               (new Ext.KeyMap(document, {
-                       key: Ext.EventObject.ESC,
-                       scope: this,
-                       buffer: 250,
-                       fn: function(event) {
-                               if (this.dragZone.dragging) {
-                                       Ext.dd.DragDropMgr.stopDrag(event);
-                                       this.dragZone.onInvalidDrop(event);
-                               }
-                       }
-               }, 'keydown'));
-       },
-
-       /**
-        * Creates the necessary components for new node drag and drop feature
-        *
-        * @return {void}
-        */
-       addDragDropNodeInsertionFeature: function() {
-               var newNodeToolbar = new Ext.Toolbar({
-                       border: false,
-                       id: this.id + '-item-newNode',
-                       cls: this.id + '-item',
-
-                       listeners: {
-                               render: {
-                                       fn: this.createNewNodeToolbar
-                               }
-                       }
-               });
-
-               this.dataProvider.getNodeTypes(function(response) {
-                       for (var i = 0; i < response.length; ++i) {
-                               response[i].template = this.getButtonTemplate();
-                               newNodeToolbar.addItem(response[i]);
-                       }
-                       newNodeToolbar.doLayout();
-               }, this);
-
-               var topPanelButton = new Ext.Button({
-                       id: this.id + '-button-newNode',
-                       cls: this.id + '-button',
-                       iconCls: TYPO3.Components.PageTree.Sprites.NewNode,
-                       tooltip: TYPO3.Components.PageTree.LLL.buttonNewNode
-               });
-
-               this.addButton(topPanelButton, newNodeToolbar);
-       },
-
-       /**
-        * Adds a button to the toolbar for the refreshing feature
-        *
-        * @return {void}
-        */
-       addRefreshTreeFeature: function() {
-               var topPanelButton = new Ext.Button({
-                       id: this.id + '-button-refresh',
-                       cls: this.id + '-button',
-                       iconCls: TYPO3.Components.PageTree.Sprites.Refresh,
-                       tooltip: TYPO3.Components.PageTree.LLL.buttonRefresh,
-
-                       listeners: {
-                               click: {
-                                       scope: this,
-                                       fn: function() {
-                                               this.app.activeTree.refreshTree();
-                                       }
-                               }
-                       }
-               });
-
-               this.addButton(topPanelButton);
-       }
-});
-
-// XTYPE Registration
-Ext.reg('TYPO3.Components.PageTree.TopPanel', TYPO3.Components.PageTree.TopPanel);
diff --git a/t3lib/js/extjs/components/pagetree/javascript/tree.js b/t3lib/js/extjs/components/pagetree/javascript/tree.js
deleted file mode 100644 (file)
index a3cb674..0000000
+++ /dev/null
@@ -1,623 +0,0 @@
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-Ext.namespace('TYPO3.Components.PageTree');
-
-/**
- * @class TYPO3.Components.PageTree.Tree
- *
- * Generic Tree Panel
- *
- * @namespace TYPO3.Components.PageTree
- * @extends Ext.tree.TreePanel
- * @author Stefan Galinski <stefan.galinski@gmail.com>
- */
-TYPO3.Components.PageTree.Tree = Ext.extend(Ext.tree.TreePanel, {
-       /**
-        * Border
-        *
-        * @type {Boolean}
-        */
-       border: false,
-
-       /**
-        * Indicates if the root node is visible
-        *
-        * @type {Boolean}
-        */
-       rootVisible: false,
-
-       /**
-        * Tree Editor Instance (Inline Edit)
-        *
-        * @type {TYPO3.Components.PageTree.TreeEditor}
-        */
-       treeEditor: null,
-
-       /**
-        * Currently Selected Node
-        *
-        * @type {Ext.tree.TreeNode}
-        */
-       currentSelectedNode: null,
-
-       /**
-        * Enable the drag and drop feature
-        *
-        * @cfg {Boolean}
-        */
-       enableDD: true,
-
-       /**
-        * Drag and Drop Group
-        *
-        * @cfg {String}
-        */
-       ddGroup: '',
-
-       /**
-        * Indicates if the label should be editable
-        *
-        * @cfg {Boolean}
-        */
-       labelEdit: true,
-
-       /**
-        * User Interface Provider
-        *
-        * @cfg {Ext.tree.TreeNodeUI}
-        */
-       uiProvider: null,
-
-       /**
-        * Data Provider
-        *
-        * @cfg {Object}
-        */
-       treeDataProvider: null,
-
-       /**
-        * Command Provider
-        *
-        * @cfg {Object}
-        */
-       commandProvider : null,
-
-       /**
-        * Context menu provider
-        *
-        * @cfg {Object}
-        */
-       contextMenuProvider: null,
-
-       /**
-        * Id of the deletion drop zone if any
-        *
-        * @cfg {String}
-        */
-       deletionDropZoneId: '',
-
-       /**
-        * Main applicaton
-        *
-        * @cfg {TYPO3.Components.PageTree.App}
-        */
-       app: null,
-
-       /**
-        * Root Node Configuration
-        *
-        * @type {Object}
-        */
-       rootNodeConfig: {
-               id: 'root',
-               expanded: true,
-               nodeData: {
-                       id: 'root'
-               }
-       },
-
-       /**
-        * Indicator if the control key is pressed
-        *
-        * @type {Boolean}
-        */
-       isControlPressed: false,
-
-       /**
-        * Context Node
-        *
-        * @type {Ext.tree.TreeNode}
-        */
-       t3ContextNode: null,
-
-       /**
-        * Context Information
-        *
-        * @type {Object}
-        */
-       t3ContextInfo: {
-               inCopyMode: false,
-               inCutMode: false
-       },
-
-       /**
-        * Registered clicks for the double click feature
-        *
-        * @type {int}
-        */
-       clicksRegistered: 0,
-
-       /**
-        * Indicator if the control key was pressed
-        *
-        * @type {Boolean}
-        */
-       controlKeyPressed: false,
-
-       /**
-        * Listeners
-        *
-        * Event handlers that handle click events and synchronizes the label edit,
-        * double click and single click events in a useful way.
-        */
-       listeners: {
-                       // single click handler that only triggers after a delay to let the double click event
-                       // a possibility to be executed (needed for label edit)
-               click: {
-                       fn: function(node, event) {
-                               if (this.clicksRegistered === 2) {
-                                       this.clicksRegistered = 0;
-                                       event.stopEvent();
-                                       return false;
-                               }
-
-                               this.clicksRegistered = 0;
-                               if (this.commandProvider.singleClick) {
-                                       this.commandProvider.singleClick(node, this);
-                               }
-                       },
-                       delay: 400
-               },
-
-                       // prevent the expanding / collapsing on double click
-               beforedblclick: {
-                       fn: function() {
-                               return false;
-                       }
-               },
-
-                       // prevents label edit on a selected node
-               beforeclick: {
-                       fn: function(node, event) {
-                               if (!this.clicksRegistered && this.getSelectionModel().isSelected(node)) {
-                                       node.fireEvent('click', node, event);
-                                       ++this.clicksRegistered;
-                                       return false;
-                               }
-                               ++this.clicksRegistered;
-                       }
-               }
-       },
-
-       /**
-        * Initializes the component
-        *
-        * @return {void}
-        */
-       initComponent: function() {
-               if (!this.uiProvider) {
-                       this.uiProvider = TYPO3.Components.PageTree.PageTreeNodeUI;
-               }
-               Ext.dd.DragDropMgr.useCache = false;
-               this.root = new Ext.tree.AsyncTreeNode(this.rootNodeConfig);
-               this.addTreeLoader();
-
-               if (this.labelEdit) {
-                       this.enableInlineEditor();
-               }
-
-               if (this.enableDD) {
-                       this.dragConfig = {ddGroup: this.ddGroup};
-                       this.enableDragAndDrop();
-               }
-
-               if (this.contextMenuProvider) {
-                       this.enableContextMenu();
-               }
-
-               TYPO3.Components.PageTree.Tree.superclass.initComponent.apply(this, arguments);
-       },
-
-       /**
-        * Refreshes the tree
-        *
-        * @param {Function} callback
-        * @param {Object} scope
-        * return {void}
-        */
-       refreshTree: function(callback, scope) {
-                       // remove readable rootline elements while refreshing
-               if (!this.inRefreshingMode) {
-                       var rootlineElements = Ext.select('.x-tree-node-readableRootline');
-                       if (rootlineElements) {
-                               rootlineElements.each(function(element) {
-                                       element.remove();
-                               });
-                       }
-               }
-
-               this.refreshNode(this.root, callback, scope);
-       },
-
-       /**
-        * Refreshes a given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {Function} callback
-        * @param {Object} scope
-        * return {void}
-        */
-       refreshNode: function(node, callback, scope) {
-               if (this.inRefreshingMode) {
-                       return;
-               }
-
-               scope = scope || node;
-               this.inRefreshingMode = true;
-               var loadCallback = function(node) {
-                       node.ownerTree.inRefreshingMode = false;
-                       if (node.ownerTree.restoreState) {
-                               node.ownerTree.restoreState(node.getPath());
-                       }
-               };
-
-               if (callback) {
-                       loadCallback = callback.createSequence(loadCallback);
-               }
-
-               this.getLoader().load(node, loadCallback, scope);
-       },
-
-       /**
-        * Adds a tree loader implementation that uses the directFn feature
-        *
-        * return {void}
-        */
-       addTreeLoader: function() {
-               this.loader = new Ext.tree.TreeLoader({
-                       directFn: this.treeDataProvider.getNextTreeLevel,
-                       paramOrder: 'nodeId,attributes',
-                       nodeParameter: 'nodeId',
-                       baseAttrs: {
-                               uiProvider: this.uiProvider
-                       },
-
-                               // an id can never be zero in ExtJS, but this is needed
-                               // for the root line feature or it will never be working!
-                       createNode: function(attr) {
-                               if (attr.id == 0) {
-                                       attr.id = 'siteRootNode';
-                               }
-
-                               return Ext.tree.TreeLoader.prototype.createNode.call(this, attr);
-                       },
-
-                       listeners: {
-                               beforeload: function(treeLoader, node) {
-                                       treeLoader.baseParams.nodeId = node.id;
-                                       treeLoader.baseParams.attributes = node.attributes.nodeData;
-                               }
-                       }
-               });
-       },
-
-       /**
-        * Enables the context menu feature
-        *
-        * return {void}
-        */
-       enableContextMenu: function() {
-               this.contextMenu = new TYPO3.Components.PageTree.ContextMenu();
-
-               this.on('contextmenu', function(node, event) {
-                       this.openContextMenu(node, event);
-               });
-       },
-
-       /**
-        * Open a context menu for the given node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {Ext.EventObject} event
-        * return {void}
-        */
-       openContextMenu: function(node, event) {
-               var attributes = Ext.apply(node.attributes.nodeData, {
-                       t3ContextInfo: node.ownerTree.t3ContextInfo
-               });
-
-               this.contextMenuProvider.getActionsForNodeArray(
-                       attributes,
-                       function(configuration) {
-                               this.contextMenu.removeAll();
-                               this.contextMenu.fill(node, this, configuration);
-                               if (this.contextMenu.items.length) {
-                                       this.contextMenu.showAt(event.getXY());
-
-                               }
-                       },
-                       this
-               );
-       },
-
-       /**
-        * Initialize the inline editor for the given tree.
-        *
-        * @return {void}
-        */
-       enableInlineEditor: function() {
-               this.treeEditor = new TYPO3.Components.PageTree.TreeEditor(this);
-       },
-
-       /**
-        * Triggers the editing of the node if the tree editor is available
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       triggerEdit: function(node) {
-               if (this.treeEditor) {
-                       this.treeEditor.triggerEdit(node);
-               }
-       },
-
-       /**
-        * Enables the drag and drop feature
-        *
-        * return {void}
-        */
-       enableDragAndDrop: function() {
-                       // init proxy element
-               this.on('startdrag', this.initDd, this);
-               this.on('enddrag', this.stopDd, this);
-               this.on('nodedragover', this.nodeDragOver, this);
-
-                       // node is moved
-               this.on('movenode', this.moveNode, this);
-
-                       // new node is created/copied
-               this.on('beforenodedrop', this.beforeDropNode, this);
-               this.on('nodedrop', this.dropNode, this);
-
-                       // listens on the ctrl key to toggle the copy mode
-               (new Ext.KeyMap(document, {
-                       key: Ext.EventObject.CONTROL,
-                       scope: this,
-                       buffer: 250,
-                       fn: function() {
-                               if (!this.controlKeyPressed && this.dragZone.dragging && this.copyHint) {
-                                       if (this.shouldCopyNode) {
-                                               this.copyHint.show();
-                                       } else {
-                                               this.copyHint.hide();
-                                       }
-
-                                       this.shouldCopyNode = !this.shouldCopyNode;
-                                       this.dragZone.proxy.el.toggleClass('typo3-pagetree-copy');
-                               }
-                               this.controlKeyPressed = true;
-                       }
-               }, 'keydown'));
-
-               (new Ext.KeyMap(document, {
-                       key: Ext.EventObject.CONTROL,
-                       scope: this,
-                       fn: function() {
-                               this.controlKeyPressed = false;
-                       }
-               }, 'keyup'));
-
-                       // listens on the escape key to stop the dragging
-               (new Ext.KeyMap(document, {
-                       key: Ext.EventObject.ESC,
-                       scope: this,
-                       buffer: 250,
-                       fn: function(event) {
-                               if (this.dragZone.dragging) {
-                                       Ext.dd.DragDropMgr.stopDrag(event);
-                                       this.dragZone.onInvalidDrop(event);
-                               }
-                       }
-               }, 'keydown'));
-       },
-
-       /**
-        * Disables the deletion drop zone if configured
-        *
-        * @return {void}
-        */
-       stopDd: function() {
-               if (this.deletionDropZoneId) {
-                       Ext.getCmp(this.deletionDropZoneId).hide();
-                       this.app.doLayout();
-               }
-       },
-
-       /**
-        * Enables the deletion drop zone if configured. Also it creates the
-        * shown dd proxy element.
-        *
-        * @param {TYPO3.Components.PageTree.Tree} treePanel
-        * @param {Ext.tree.TreeNode} node
-        * @return {void}
-        */
-       initDd: function(treePanel, node) {
-               var nodeHasChildNodes = (node.hasChildNodes() || node.isExpandable());
-               if (this.deletionDropZoneId &&
-                       (!nodeHasChildNodes ||
-                       (nodeHasChildNodes && TYPO3.Components.PageTree.Configuration.canDeleteRecursivly)
-               )) {
-                       Ext.getCmp(this.deletionDropZoneId).show();
-                       this.app.doLayout();
-               }
-               this.initDDProxyElement();
-       },
-
-       /**
-        * Adds the copy hint to the proxy element
-        *
-        * @return {void}
-        */
-       initDDProxyElement: function() {
-               this.shouldCopyNode = false;
-               this.copyHint = new Ext.Element(document.createElement('div')).addClass(this.id + '-copy');
-               this.copyHint.dom.appendChild(document.createTextNode(TYPO3.Components.PageTree.LLL.copyHint));
-               this.copyHint.setVisibilityMode(Ext.Element.DISPLAY);
-               this.dragZone.proxy.el.shadow = false;
-               this.dragZone.proxy.ghost.dom.appendChild(this.copyHint.dom);
-       },
-
-       /**
-        * Cancels the drop possibility for the position above and below a mount page
-        *
-        * @param {Object} event
-        * @return {void}
-        */
-       nodeDragOver: function(event) {
-               var isMountPage = (event.target.attributes.realId == 0 || event.target.attributes.nodeData.isMountPoint);
-               return !((event.point === 'above' || event.point === 'below') && isMountPage);
-       },
-
-       /**
-        * Creates a Fake Node
-        *
-        * This must be done to prevent the calling of the moveNode event.
-        *
-        * @param {object} dragElement
-        */
-       beforeDropNode: function(dragElement) {
-               if (dragElement.data && dragElement.data.item && dragElement.data.item.shouldCreateNewNode) {
-                       this.t3ContextInfo.serverNodeType = dragElement.data.item.nodeType;
-                       dragElement.dropNode = new Ext.tree.TreeNode({
-                               text: TYPO3.Components.PageTree.LLL.fakeNodeHint,
-                               leaf: true,
-                               isInsertedNode: true
-                       });
-
-                               // fix incorrect cancel value
-                       dragElement.cancel = false;
-
-               } else if (this.shouldCopyNode) {
-                       dragElement.dropNode.ui.onOut();
-                       var attributes = dragElement.dropNode.attributes;
-                       attributes.isCopiedNode = true;
-                       attributes.id = 'fakeNode';
-                       dragElement.dropNode = new Ext.tree.TreeNode(attributes);
-               }
-
-               return true;
-       },
-
-       /**
-        * Differentiate between the copy and insert event
-        *
-        * @param {Ext.tree.TreeDropZone} dragElement
-        * return {void}
-        */
-       dropNode: function(dragElement) {
-               this.controlKeyPressed = false;
-               if (dragElement.dropNode.attributes.isInsertedNode) {
-                       dragElement.dropNode.attributes.isInsertedNode = false;
-                       this.insertNode(dragElement.dropNode);
-               } else if (dragElement.dropNode.attributes.isCopiedNode) {
-                       dragElement.dropNode.attributes.isCopiedNode = false;
-                       this.copyNode(dragElement.dropNode)
-               }
-       },
-
-       /**
-        * Moves a node
-        *
-        * @param {TYPO3.Components.PageTree.Tree} tree
-        * @param {Ext.tree.TreeNode} movedNode
-        * @param {Ext.tree.TreeNode} oldParent
-        * @param {Ext.tree.TreeNode} newParent
-        * @param {int} position
-        * return {void}
-        */
-       moveNode: function(tree, movedNode, oldParent, newParent, position) {
-               this.controlKeyPressed = false;
-               tree.t3ContextNode = movedNode;
-
-               if (position === 0) {
-                       this.commandProvider.moveNodeToFirstChildOfDestination(newParent, tree);
-               } else {
-                       var previousSiblingNode = newParent.childNodes[position - 1];
-                       this.commandProvider.moveNodeAfterDestination(previousSiblingNode, tree);
-               }
-       },
-
-       /**
-        * Inserts a node
-        *
-        * @param {Ext.tree.TreeNode} movedNode
-        * return {void}
-        */
-       insertNode: function(movedNode) {
-               this.t3ContextNode = movedNode.parentNode;
-
-               movedNode.disable();
-               if (movedNode.previousSibling) {
-                       this.commandProvider.insertNodeAfterDestination(movedNode, this);
-               } else {
-                       this.commandProvider.insertNodeToFirstChildOfDestination(movedNode, this);
-               }
-       },
-
-       /**
-        * Copies a node
-        *
-        * @param {Ext.tree.TreeNode} movedNode
-        * return {void}
-        */
-       copyNode: function(movedNode) {
-               this.t3ContextNode = movedNode;
-
-               movedNode.disable();
-
-                       // This is hard stuff to do. So increase the timeout for the AJAX request
-               Ext.Ajax.timeout = 3600000;
-
-               if (movedNode.previousSibling) {
-                       this.commandProvider.copyNodeAfterDestination(movedNode, this);
-               } else {
-                       this.commandProvider.copyNodeToFirstChildOfDestination(movedNode, this);
-               }
-       }
-});
-
-// XTYPE Registration
-Ext.reg('TYPO3.Components.PageTree.Tree', TYPO3.Components.PageTree.Tree);
diff --git a/t3lib/js/extjs/components/pagetree/javascript/treeeditor.js b/t3lib/js/extjs/components/pagetree/javascript/treeeditor.js
deleted file mode 100644 (file)
index 0d12e7d..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/***************************************************************
-*  Copyright notice
-*
-*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
-*  All rights reserved
-*
-*  This script is part of the TYPO3 project. The TYPO3 project is
-*  free software; you can redistribute it and/or modify
-*  it under the terms of the GNU General Public License as published by
-*  the Free Software Foundation; either version 2 of the License, or
-*  (at your option) any later version.
-*
-*  The GNU General Public License can be found at
-*  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license
-*  from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-*  This script is distributed in the hope that it will be useful,
-*  but WITHOUT ANY WARRANTY; without even the implied warranty of
-*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*  GNU General Public License for more details.
-*
-*  This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-Ext.namespace('TYPO3.Components.PageTree');
-
-/**
- * @class TYPO3.Components.PageTree.TreeEditor
- *
- * Custom Tree Editor implementation to enable different source fields for the
- * editable label.
- *
- * @namespace TYPO3.Components.PageTree
- * @extends Ext.tree.TreeEditor
- * @author Stefan Galinski <stefan.galinski@gmail.com>
- */
-TYPO3.Components.PageTree.TreeEditor = Ext.extend(Ext.tree.TreeEditor, {
-       /**
-        * Don't send any save events if the value wasn't changed
-        *
-        * @type {Boolean}
-        */
-       ignoreNoChange: false,
-
-       /**
-        * Edit delay
-        *
-        * @type {int}
-        */
-       editDelay: 250,
-
-       /**
-        * Indicates if an underlying shadow should be shown
-        *
-        * @type {Boolean}
-        */
-       shadow: false,
-
-       /**
-        * Listeners
-        *
-        * Handles the synchronization between the edited label and the shown label.
-        */
-       listeners: {
-               beforecomplete: function(node) {
-                       this.updatedValue = this.getValue();
-                       if (this.updatedValue === '') {
-                               this.cancelEdit();
-                               return false;
-                       }
-                       this.setValue(this.editNode.attributes.prefix + Ext.util.Format.htmlEncode(this.updatedValue) + this.editNode.attributes.suffix);
-               },
-
-               complete: {
-                       fn: function(node, newValue, oldValue) {
-                               if (newValue === oldValue) {
-                                       this.fireEvent('canceledit', this);
-                                       return false;
-                               }
-
-                               this.editNode.getOwnerTree().commandProvider.saveTitle(node, this.updatedValue, oldValue, this);
-                       }
-               },
-
-               startEdit: {
-                       fn: function(element, value) {
-                               this.field.selectText();
-                       }
-               },
-
-               canceledit: function() {
-                       var tree = this.editNode.getOwnerTree();
-                       if (tree.currentSelectedNode) {
-                               tree.currentSelectedNode.select();
-                       }
-               }
-       },
-
-       /**
-        * Updates the edit node
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @param {String} editableText
-        * @param {String} updatedNode
-        * @return {void}
-        */
-       updateNodeText: function(node, editableText, updatedNode) {
-               this.editNode.setText(this.editNode.attributes.prefix + updatedNode + this.editNode.attributes.suffix);
-               this.editNode.attributes.editableText = editableText;
-       },
-
-       /**
-        * Overridden method to set another editable text than the node text attribute
-        *
-        * @param {Ext.tree.TreeNode} node
-        * @return {Boolean}
-        */
-       triggerEdit: function(node) {
-               this.completeEdit();
-               if (node.attributes.editable !== false) {
-                       this.editNode = node;
-                       if (this.tree.autoScroll) {
-                               Ext.fly(node.ui.getEl()).scrollIntoView(this.tree.body);
-                       }
-
-                       var value = node.text || '';
-                       if (!Ext.isGecko && Ext.isEmpty(node.text)) {
-                               node.setText(' ');
-                       }
-
-                               // TYPO3 MODIFICATION to use another attribute
-                       value = node.attributes.editableText;
-
-                       this.autoEditTimer = this.startEdit.defer(this.editDelay, this, [node.ui.textNode, value]);
-                       return false;
-               }
-       }
-});
-
-// XTYPE Registration
-Ext.reg('TYPO3.Components.PageTree.TreeEditor', TYPO3.Components.PageTree.TreeEditor);
diff --git a/t3lib/js/extjs/notifications.js b/t3lib/js/extjs/notifications.js
deleted file mode 100644 (file)
index 06deded..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2010-2011 Oliver Hader <oliver@typo3.org>
- *  (c) 2010-2011 Steffen Kamper <steffen@typo3.org>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project is
- *  free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-
-Ext.ns('TYPO3', 'TYPO3.Components');
-
-/**
- * TYPO3window - General TYPO3 window component
- */
-TYPO3.Components.Window = Ext.extend(Ext.Window, {
-       width: 450,
-       autoHeight: true,
-       closable: true,
-       resizable: false,
-       plain: true,
-       border: false,
-       modal: true,
-       draggable: true,
-       closeAction: 'hide',
-       cls: 't3-window',
-
-       constructor: function(config) {
-               config = config || {};
-               Ext.apply(this, config);
-               TYPO3.Components.Window.superclass.constructor.call(this, config);
-       }
-});
-Ext.reg('TYPO3window', TYPO3.Components.Window);
-
-
-/**
- * Helper class for managing windows.
- * Once a window is created, it is permanent until you close
- * [TYPO3.Windows.close(id)] or remove all [TYPO3.Windows.closeAll()]
- *
- * Example usage:
- *
- * var w = TYPO3.Windows.getWindow({
- *             title: 'Testwindow',
- *             html: 'some content!',
- *             width: 400
- *     }).show();
- */
-TYPO3.Windows = function() {
-       /** @private */
-       var windowCollection = new Ext.util.MixedCollection(true);
-
-       return {
-               /** @public */
-
-               /**
-                * Get a window. If already in collection return it, otherwise create a new one
-                *
-                * @param {Object} configuration
-                * @return {Object} window
-                */
-               getWindow: function(configuration) {
-                       var id = configuration.id || '', window;
-
-                       if (id) {
-                               window = this.getById(id);
-                       }
-                       if (window) {
-                               return window;
-                       } else {
-                               window = new TYPO3.Components.Window(configuration);
-                               windowCollection.add(window);
-                               return window;
-                       }
-               },
-
-               /**
-                * Get a window and show. If already in collection return it, otherwise create a new one
-                *
-                * @param {Object} configuration
-                * @return {Object} window
-                */
-               showWindow: function(configuration) {
-                       var window = this.getWindow(configuration);
-                       window.show();
-                       return window;
-               },
-
-               /**
-                * Shows window with id and return reference. If not exist return false
-                *
-                * @param {String} id
-                * @return {Object} window false if not found
-                */
-               show: function(id) {
-                       var window = this.getById(id);
-                       if (window) {
-                               window.show();
-                               return window;
-                       }
-                       return false;
-               },
-
-               /**
-                * Shows window with id and return reference. If not exist return false
-                *
-                * @param {String} id
-                * @return {Object} window or false if not found
-                */
-               getById: function(id) {
-                       return windowCollection.key(id);
-               },
-
-               /**
-                * Get the window collection
-                *
-                * @return {Ext.util.MixedCollection} windowCollection
-                */
-               getCollection: function () {
-                       return windowCollection;
-               },
-
-               /**
-                * Get count of windows
-                *
-                * @return {Int} count
-                */
-               getCount: function() {
-                       return windowCollection.length;
-               },
-
-               /**
-                * Each for windowCollection
-                *
-                * @param {Function} function
-                * @param {Object} scope
-                * @return void
-                */
-               each : function(fn, scope) {
-                       windowCollection.each(fn, scope);
-               },
-
-               /**
-                * Close window and remove from stack
-                *
-                * @param {Int} id
-                * @return void
-                */
-               close: function(id) {
-                       var window = this.getById(id);
-                       if (window) {
-                               window.close();
-                               windowCollection.remove(window);
-                       }
-               },
-
-               /**
-                * Close all windows and clear stack
-                *
-                * @return void
-                */
-               closeAll: function() {
-                       windowCollection.each(function(window) {
-                               window.close();
-                       });
-                       windowCollection.clear();
-               }
-       }
-}();
-
-/**
- * Helper class for dialog windows
- *
- * Example usage:
- *
- * TYPO3.Dialog.InformationDialog({
- *             title: 'Test',
- *             msg: 'some information'
- *     });
-
- */
-TYPO3.Dialog = function() {
-       /** @private functions */
-       var informationDialogConfiguration = {
-               buttons: Ext.MessageBox.OK,
-               icon: Ext.MessageBox.INFO,
-               fn: Ext.emptyFn
-       };
-
-       var questionDialogConfiguration = {
-               buttons: Ext.MessageBox.YESNO,
-               icon: Ext.MessageBox.QUESTION
-       };
-
-       var warningDialogConfiguration = {
-               buttons: Ext.MessageBox.OK,
-               icon: Ext.MessageBox.WARNING,
-               fn: Ext.emptyFn
-       };
-
-       var errorDialogConfiguration = {
-               buttons: Ext.MessageBox.OK,
-               icon: Ext.MessageBox.ERROR,
-               fn: Ext.emptyFn
-       };
-
-       return {
-               /** @public functions */
-               InformationDialog: function(configuration) {
-                       configuration = configuration || {};
-                       configuration = Ext.apply(
-                                       informationDialogConfiguration,
-                                       configuration
-                                       );
-                       Ext.Msg.show(configuration);
-               },
-
-               QuestionDialog: function(configuration) {
-                       configuration = configuration || {};
-                       configuration = Ext.apply(
-                                       questionDialogConfiguration,
-                                       configuration
-                                       );
-                       Ext.Msg.show(configuration);
-               },
-
-               WarningDialog: function(configuration) {
-                       configuration = configuration || {};
-                       configuration = Ext.apply(
-                                       warningDialogConfiguration,
-                                       configuration
-                                       );
-                       Ext.Msg.show(configuration);
-               },
-
-               ErrorDialog: function(configuration) {
-                       configuration = configuration || {};
-                       configuration = Ext.apply(
-                                       errorDialogConfiguration,
-                                       configuration
-                                       );
-                       Ext.Msg.show(configuration);
-               }
-       }
-}();
-
-/**
- * Helper class for dialog windows
- *
- * Example usage:
- *
- * TYPO3.ContextHelpWindow.open(identifier);
- */
-TYPO3.ContextHelpWindow = function() {
-       /**
-       * Path to typo3 directory
-       *
-       * @type {String}
-       * @private
-       */
-       var typo3Path = '';
-
-       /**
-       * Context for open a window
-       * "window" - open a new window
-       * "inline" - open a TYPO3.Window (not currently implementy)
-       *
-       * @type {String}
-       * @private
-       */
-       var openContext;
-
-       /**
-       * Width for the window
-       *
-       * @type {Number}
-       * @private
-       */
-       var width;
-       /**
-       * Height of the window
-       *
-       * @type {Number}
-       * @private
-       */
-       var height;
-
-       return {
-               /**
-                * init class vars
-                *
-                * @return void
-                */
-               init: function() {
-                       this.typo3Path = top.TYPO3.configuration.PATH_typo3;
-                       this.openContext = 'window';
-                       this.width = top.TYPO3.configuration.ContextHelpWindows.width;
-                       this.height = top.TYPO3.configuration.ContextHelpWindows.height;
-               },
-
-               /**
-                * Open window for TYPO3 inline help
-                *
-                * @param {String} help identifier
-                * @return {Object} window
-                */
-               open: function(helpIdentifier) {
-                       if (this.openContext === 'window') {
-                               var cshWindow = window.open(
-                                       this.typo3Path + 'mod.php?M=help_cshmanual&tfID=' + helpIdentifier,
-                                       'ContextHelpWindow',
-                                       'height=' + this.height + ',width=' + this.width + ',status=0,menubar=0,scrollbars=1'
-                               );
-                               cshWindow.focus();
-                               return cshWindow;
-                       }
-               }
-       }
-}();
diff --git a/t3lib/js/extjs/tceforms.js b/t3lib/js/extjs/tceforms.js
deleted file mode 100644 (file)
index c065fa4..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/***************************************************************
- * extJS for TCEforms
- *
- * Copyright notice
- *
- * (c) 2009-2011 Steffen Kamper <info@sk-typo3.de>
- * All rights reserved
- *
- * This script is part of the TYPO3 project. The TYPO3 project is
- * free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * The GNU General Public License can be found at
- * http://www.gnu.org/copyleft/gpl.html.
- *
- * This script is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-
-Ext.ns('TYPO3');
-
-       // class to manipulate TCEFORMS
-TYPO3.TCEFORMS = {
-
-       init: function() {
-               Ext.QuickTips.init();
-
-               this.update();
-       },
-
-       update: function() {
-               this.convertDateFieldsToDatePicker();
-               this.convertTextareasResizable();
-       },
-
-       convertDateFieldsToDatePicker: function() {
-               var dateFields = Ext.select("input[id^=tceforms-date]"), minDate, maxDate, lowerMatch, upperMatch;
-               dateFields.each(function(element) {
-                       var index = element.dom.id.match(/tceforms-datefield-/) ? 0 : 1;
-                       var format = TYPO3.settings.datePickerUSmode ? TYPO3.settings.dateFormatUS : TYPO3.settings.dateFormat;
-                       var datepicker = element.next('span'), menu;
-
-                       // check for daterange
-                       var lowerMatch = element.dom.className.match(/lower-(\d+)\b/);
-                       minDate = Ext.isArray(lowerMatch) ? new Date(lowerMatch[1] * 1000) : null;
-                       var upperMatch = element.dom.className.match(/upper-(\d+)\b/);
-                       maxDate = Ext.isArray(upperMatch) ? new Date(upperMatch[1] * 1000) : null;
-
-                       if (index === 0) {
-                               menu = new Ext.menu.DateMenu({
-                                       id: 'p' + element.dom.id,
-                                       format: format[index],
-                                       value: Date.parseDate(element.dom.value, format[index]),
-                                       minDate: minDate,
-                                       maxDate: maxDate,
-                                       handler: function(picker, date){
-                                               var relElement = Ext.getDom(picker.ownerCt.id.substring(1));
-                                               relElement.value = date.format(format[index]);
-                                               if (Ext.isFunction(relElement.onchange)) {
-                                                       relElement.onchange.call(relElement);
-                                               }
-                                       },
-                                       listeners: {
-                                               beforeshow: function(obj) {
-                                                       var relElement = Ext.getDom(obj.picker.ownerCt.id.substring(1));
-                                                       if (relElement.value) {
-                                                               obj.picker.setValue(Date.parseDate(relElement.value, format[index]));
-                                                       }
-                                               }
-                                       }
-                               });
-                       } else {
-                               menu = new Ext.ux.menu.DateTimeMenu({
-                                       id: 'p' + element.dom.id,
-                                       format: format[index],
-                                       value: Date.parseDate(element.dom.value, format[index]),
-                                       minDate: minDate,
-                                       maxDate: maxDate,
-                                       listeners: {
-                                               beforeshow: function(obj) {
-                                                       var relElement = Ext.getDom(obj.picker.ownerCt.id.substring(1));
-                                                       if (relElement.value) {
-                                                               obj.picker.setValue(Date.parseDate(relElement.value, format[index]));
-                                                       }
-                                               },
-                                               select: function(picker) {
-                                                       var relElement = Ext.getDom(picker.ownerCt.id.substring(1));
-                                                       relElement.value = picker.getValue().format(format[index]);
-                                                       if (Ext.isFunction(relElement.onchange)) {
-                                                               relElement.onchange.call(relElement);
-                                                       }
-                                               }
-                                       }
-                               });
-                       }
-
-                       datepicker.removeAllListeners();
-                       datepicker.on('click', function(){
-                               menu.show(datepicker);
-                       });
-               });
-       },
-
-       convertTextareasResizable: function() {
-               var textAreas = Ext.select("textarea[id^=tceforms-textarea-]");
-               textAreas.each(function(element) {
-                       if (TYPO3.settings.textareaFlexible) {
-                               var elasticTextarea = new Ext.ux.elasticTextArea().applyTo(element.dom.id, {
-                                       minHeight: 50,
-                                       maxHeight: TYPO3.settings.textareaMaxHeight
-                               });
-                       }
-                       if (TYPO3.settings.textareaResize) {
-                               element.addClass('resizable');
-                               var dwrapped = new Ext.Resizable(element.dom.id, {
-                                       minWidth:  300,
-                                       minHeight: 50,
-                                       dynamic:   true
-                               });
-                       }
-               });
-       }
-
-}
-Ext.onReady(TYPO3.TCEFORMS.init, TYPO3.TCEFORMS);
-
-       // Fix for slider TCA control in IE9
-Ext.override(Ext.dd.DragTracker, {
-       onMouseMove:function (e, target) {
-               var isIE9 = Ext.isIE && (/msie 9/.test(navigator.userAgent.toLowerCase())) && document.documentMode != 6;
-               if (this.active && Ext.isIE && !isIE9 && !e.browserEvent.button) {
-                       e.preventDefault();
-                       this.onMouseUp(e);
-                       return;
-               }
-               e.preventDefault();
-               var xy = e.getXY(), s = this.startXY;
-               this.lastXY = xy;
-               if (!this.active) {
-                       if (Math.abs(s[0] - xy[0]) > this.tolerance || Math.abs(s[1] - xy[1]) > this.tolerance) {
-                               this.triggerStart(e);
-                       } else {
-                               return;
-                       }
-               }
-               this.fireEvent('mousemove', this, e);
-               this.onDrag(e);
-               this.fireEvent('drag', this, e);
-       }
-});
\ No newline at end of file
diff --git a/t3lib/js/extjs/ux/Ext.app.SearchField.js b/t3lib/js/extjs/ux/Ext.app.SearchField.js
deleted file mode 100644 (file)
index 03784b2..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Ext JS Library 2.2.1
- * Copyright(c) 2006-2009, Ext JS, LLC.
- * licensing@extjs.com
- *
- * http://extjs.com/license
- */
-
-Ext.app.SearchField = Ext.extend(Ext.form.TwinTriggerField, {
-       initComponent : function() {
-               Ext.app.SearchField.superclass.initComponent.call(this);
-               this.on('specialkey', function(f, e) {
-                       if (e.getKey() == e.ENTER) {
-                               this.onTrigger2Click();
-                       }
-               }, this);
-       },
-
-       validationEvent: false,
-       validateOnBlur: false,
-       trigger1Class: 'x-form-clear-trigger',
-       trigger2Class: 'x-form-search-trigger',
-       hideTrigger1: true,
-       width: 180,
-       hasSearch : false,
-       paramName : 'filterTxt',
-
-       onTrigger1Click : function() {
-               if (this.hasSearch) {
-                       this.el.dom.value = '';
-                       var o = {start: 0};
-                       this.store.baseParams = this.store.baseParams || {};
-                       this.store.baseParams[this.paramName] = '';
-                       this.store.reload({params:o});
-                       this.triggers[0].hide();
-                       this.hasSearch = false;
-               }
-       },
-
-       onTrigger2Click : function() {
-               var v = this.getRawValue();
-               if (v.length < 1) {
-                       this.onTrigger1Click();
-                       return;
-               }
-               var o = {start: 0};
-               this.store.baseParams = this.store.baseParams || {};
-               this.store.baseParams[this.paramName] = v;
-               this.store.reload({params:o});
-               this.hasSearch = true;
-               this.triggers[0].show();
-       }
-});
\ No newline at end of file
diff --git a/t3lib/js/extjs/ux/Ext.grid.RowExpander.js b/t3lib/js/extjs/ux/Ext.grid.RowExpander.js
deleted file mode 100644 (file)
index ebbf2a6..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- *
- * http://extjs.com/license
- *
- * MODIFIED: SGB [12.12.07]
- * Added support for a new config option, remoteDataMethod,
- * including getter and setter functions, and minor mods
- * to the beforeExpand and expandRow functions
- */
-
-Ext.grid.RowExpander = function(config) {
-       Ext.apply(this, config);
-       Ext.grid.RowExpander.superclass.constructor.call(this);
-
-       if (this.tpl) {
-               if (typeof this.tpl == 'string') {
-                       this.tpl = new Ext.Template(this.tpl);
-               }
-               this.tpl.compile();
-       }
-
-       this.state = {};
-       this.bodyContent = {};
-
-       this.addEvents({
-               beforeexpand : true,
-               expand: true,
-               beforecollapse: true,
-               collapse: true
-       });
-};
-
-Ext.extend(Ext.grid.RowExpander, Ext.util.Observable, {
-       header: "",
-       width: 20,
-       sortable: false,
-       fixed:true,
-       dataIndex: '',
-       id: 'expander',
-       lazyRender : true,
-       enableCaching: true,
-
-       getRowClass : function(record, rowIndex, p, ds) {
-               p.cols = p.cols-1;
-               var content = this.bodyContent[record.id];
-               if (!content && !this.lazyRender) {
-                       content = this.getBodyContent(record, rowIndex);
-               }
-               if (content) {
-                       p.body = content;
-               }
-               return this.state[record.id] ? 'x-grid3-row-expanded' : 'x-grid3-row-collapsed';
-       },
-
-       init : function(grid) {
-               this.grid = grid;
-
-               var view = grid.getView();
-               view.getRowClass = this.getRowClass.createDelegate(this);
-
-               view.enableRowBody = true;
-
-               grid.on('render', function() {
-                       view.mainBody.on('mousedown', this.onMouseDown, this);
-               }, this);
-
-               grid.store.on('load', this.onStoreLoaded, this);
-               grid.on("beforestaterestore", this.applyState, this);
-               grid.on("beforestatesave", this.saveState, this);
-       },
-
-       /** @private */
-       onStoreLoaded: function(store, records, options) {
-               var index = -1;
-               for(var key in this.state){
-                       if (this.state[key] === true) {
-                               index = store.indexOfId(key);
-                               if (index > -1) {
-                                       this.expandRow(index);
-                               }
-                       }
-               }
-       },
-
-       /** @private */
-       applyState: function(grid, state){
-               this.suspendStateStore = true;
-               if(state.expander) {
-                       this.state = state.expander;
-               }
-               this.suspendStateStore = false;
-       },
-
-       /** @private */
-       saveState: function(grid, state){
-               return state.expander = this.state;
-       },
-
-       getBodyContent : function(record, index) {
-               if (!this.enableCaching) {
-                       return this.tpl.apply(record.data);
-               }
-               var content = this.bodyContent[record.id];
-               if (!content) {
-                       content = this.tpl.apply(record.data);
-                       this.bodyContent[record.id] = content;
-               }
-               return content;
-       },
-       // Setter and Getter methods for the remoteDataMethod property
-       setRemoteDataMethod : function (fn) {
-               this.remoteDataMethod = fn;
-       },
-
-       getRemoteDataMethod : function (record, index) {
-               if (!this.remoteDataMethod) {
-                       return;
-               }
-                       return this.remoteDataMethod.call(this,record,index);
-       },
-
-       onMouseDown : function(e, t) {
-               if (t.className == 'x-grid3-row-expander') {
-                       e.stopEvent();
-                       var row = e.getTarget('.x-grid3-row');
-                       this.toggleRow(row);
-               }
-       },
-
-       renderer : function(v, p, record) {
-               p.cellAttr = 'rowspan="2"';
-               return '<div class="x-grid3-row-expander">&#160;</div>';
-       },
-
-       beforeExpand : function(record, body, rowIndex) {
-               if (this.fireEvent('beforexpand', this, record, body, rowIndex) !== false) {
-                       // If remoteDataMethod is defined then we'll need a div, with a unique ID,
-                       //  to place the content
-                       if (this.remoteDataMethod) {
-                               this.tpl = new Ext.Template("<div id=\"remData" + rowIndex + "\" class=\"rem-data-expand\"><\div>");
-                       }
-                       if (this.tpl && this.lazyRender) {
-                               body.innerHTML = this.getBodyContent(record, rowIndex);
-                       }
-
-                       return true;
-               }else{
-                       return false;
-               }
-       },
-
-       toggleRow : function(row) {
-               if (typeof row == 'number') {
-                       row = this.grid.view.getRow(row);
-               }
-               this[Ext.fly(row).hasClass('x-grid3-row-collapsed') ? 'expandRow' : 'collapseRow'](row);
-               this.grid.saveState();
-       },
-
-       expandRow : function(row) {
-               if (typeof row == 'number') {
-                       row = this.grid.view.getRow(row);
-               }
-               var record = this.grid.store.getAt(row.rowIndex);
-               var body = Ext.DomQuery.selectNode('tr:nth(2) div.x-grid3-row-body', row);
-               if (this.beforeExpand(record, body, row.rowIndex)) {
-                       this.state[record.id] = true;
-                       Ext.fly(row).replaceClass('x-grid3-row-collapsed', 'x-grid3-row-expanded');
-                       this.grid.saveState();
-                       if (this.fireEvent('expand', this, record, body, row.rowIndex) !== false) {
-                               //  If the expand event is successful then get the remoteDataMethod
-                               this.getRemoteDataMethod(record,row.rowIndex);
-                       }
-               }
-       },
-
-       collapseRow : function(row) {
-               if (typeof row == 'number') {
-                       row = this.grid.view.getRow(row);
-               }
-               var record = this.grid.store.getAt(row.rowIndex);
-               var body = Ext.fly(row).child('tr:nth(1) div.x-grid3-row-body', true);
-               if (this.fireEvent('beforcollapse', this, record, body, row.rowIndex) !== false) {
-                       this.state[record.id] = false;
-                       Ext.fly(row).replaceClass('x-grid3-row-expanded', 'x-grid3-row-collapsed');
-                       this.grid.saveState();
-                       this.fireEvent('collapse', this, record, body, row.rowIndex);
-               }
-       }
-});
diff --git a/t3lib/js/extjs/ux/Ext.ux.DateTimePicker.js b/t3lib/js/extjs/ux/Ext.ux.DateTimePicker.js
deleted file mode 100644 (file)
index 999ccc0..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-Ext.ns('Ext.ux', 'Ext.ux.menu', 'Ext.ux.form');
-
-Ext.ux.DateTimePicker = Ext.extend(Ext.DatePicker, {
-
-       timeFormat: 'H:i',
-
-       initComponent: function() {
-               var t = this.timeFormat.split(':');
-               this.hourFormat = t[0];
-               this.minuteFormat = t[1];
-
-               Ext.ux.DateTimePicker.superclass.initComponent.call(this);
-       },
-
-       /**
-        * Replaces any existing {@link #minDate} with the new value and refreshes the DatePicker.
-        * @param {Date} value The minimum date that can be selected
-        */
-       setMinTime: function(dt) {
-               this.minTime = dt;
-               this.update(this.value, true);
-       },
-
-       /**
-        * Replaces any existing {@link #maxDate} with the new value and refreshes the DatePicker.
-        * @param {Date} value The maximum date that can be selected
-        */
-       setMaxTime: function(dt) {
-               this.maxTime = dt;
-               this.update(this.value, true);
-       },
-
-       /**
-        * Returns the value of the date/time field
-        */
-       getValue: function() {
-               return this.addTimeToValue(this.value);
-       },
-
-       /**
-        * Sets the value of the date/time field
-        * @param {Date} value The date to set
-        */
-       setValue: function(value) {
-               var old = this.value;
-               this.value = value.clearTime(true);
-               if (this.el) {
-                       this.update(this.value);
-               }
-               this.hourField.setValue(value.format(this.hourFormat));
-               this.minuteField.setValue(value.format(this.minuteFormat));
-       },
-
-       /**
-        * Sets the value of the time field
-        * @param {Date} value The date to set
-        */
-       setTime: function(value) {
-               this.hourField.setValue(value.format(this.hourFormat));
-               this.minuteField.setValue(value.format(this.minuteFormat));
-       },
-
-       /**
-        * Updates the date value with the time entered
-        * @param {Date} value The date to which time should be added
-        */
-       addTimeToValue: function(date) {
-               return date.clearTime().add(Date.HOUR, this.hourField.getValue()).add(Date.MINUTE, this.minuteField.getValue());
-       },
-
-       onRender: function(container, position) {
-               var m = [
-                       '<table cellspacing="0">',
-                       '<tr><td class="x-date-left"><a href="#" title="',
-                       this.prevText ,
-                       '">&#160;</a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="',
-                       this.nextText ,
-                       '">&#160;</a></td></tr>',
-                       '<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'
-               ];
-               var dn = this.dayNames;
-               for (var i = 0; i < 7; i++) {
-                       var d = this.startDay + i;
-                       if (d > 6) {
-                               d = d - 7;
-                       }
-                       m.push('<th><span>', dn[d].substr(0, 1), '</span></th>');
-               }
-               m[m.length] = "</tr></thead><tbody><tr>";
-               for (var i = 0; i < 42; i++) {
-                       if (i % 7 == 0 && i != 0) {
-                               m[m.length] = "</tr><tr>";
-                       }
-                       m[m.length] = '<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>';
-               }
-               m.push('</tr></tbody></table></td></tr>',
-                       this.showToday ? '<tr><td colspan="3" class="x-date-bottom" align="center"></td></tr>' : '',
-                       '</table><div class="x-date-mp"></div>'
-               );
-
-               var el = document.createElement("div");
-               el.className = "x-date-picker";
-               el.innerHTML = m.join("");
-
-               container.dom.insertBefore(el, position);
-
-               this.el = Ext.get(el);
-               this.eventEl = Ext.get(el.firstChild);
-
-               new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"), {
-                       handler: this.showPrevMonth,
-                       scope: this,
-                       preventDefault:true,
-                       stopDefault:true
-               });
-
-               new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"), {
-                       handler: this.showNextMonth,
-                       scope: this,
-                       preventDefault:true,
-                       stopDefault:true
-               });
-
-               this.mon(this.eventEl, "mousewheel", this.handleMouseWheel, this);
-
-               this.monthPicker = this.el.down('div.x-date-mp');
-               this.monthPicker.enableDisplayMode('block');
-
-               var kn = new Ext.KeyNav(this.eventEl, {
-                       "left": function(e) {
-                               e.ctrlKey ?
-                                       this.showPrevMonth() :
-                                       this.update(this.activeDate.add("d", -1));
-                       },
-
-                       "right": function(e) {
-                               e.ctrlKey ?
-                                       this.showNextMonth() :
-                                       this.update(this.activeDate.add("d", 1));
-                       },
-
-                       "up": function(e) {
-                               e.ctrlKey ?
-                                       this.showNextYear() :
-                                       this.update(this.activeDate.add("d", -7));
-                       },
-
-                       "down": function(e) {
-                               e.ctrlKey ?
-                                       this.showPrevYear() :
-                                       this.update(this.activeDate.add("d", 7));
-                       },
-
-                       "pageUp": function(e) {
-                               this.showNextMonth();
-                       },
-
-                       "pageDown": function(e) {
-                               this.showPrevMonth();
-                       },
-
-                       "enter": function(e) {
-                               e.stopPropagation();
-                               this.fireEvent("select", this, this.value);
-                               return true;
-                       },
-
-                       scope : this
-               });
-
-               this.mon(this.eventEl, "click", this.handleDateClick, this, {delegate: "a.x-date-date"});
-
-               this.el.select("table.x-date-inner").unselectable();
-               this.cells = this.el.select("table.x-date-inner tbody td");
-               this.textNodes = this.el.query("table.x-date-inner tbody span");
-
-               this.mbtn = new Ext.Button({
-                       text: "&#160;",
-                       tooltip: this.monthYearText,
-                       renderTo: this.el.child("td.x-date-middle", true)
-               });
-
-               this.mon(this.mbtn, 'click', this.showMonthPicker, this);
-               this.mbtn.el.child('em').addClass("x-btn-arrow");
-
-               if (this.showToday) {
-                       this.todayKeyListener = this.eventEl.addKeyListener(Ext.EventObject.SPACE, this.selectToday, this);
-                       var today = (new Date()).dateFormat(this.format);
-                       this.todayBtn = new Ext.Button({
-                               text: String.format(this.todayText, today),
-                               tooltip: String.format(this.todayTip, today),
-                               handler: this.selectToday,
-                               scope: this
-                       });
-               }
-
-               this.formPanel = new Ext.form.FormPanel({
-                       layout: 'column',
-                       renderTo: this.el.child("td.x-date-bottom", true),
-                       baseCls: 'x-plain',
-                       hideBorders: true,
-                       labelAlign: 'left',
-                       labelWidth: 10,
-                       forceLayout: true,
-                       items: [
-                               {
-                                       columnWidth: .4,
-                                       layout: 'form',
-                                       baseCls: 'x-plain',
-                                       items: [
-                                               {
-                                                       xtype: 'textfield',
-                                                       id: this.getId() + '_hour',
-                                                       maxLength: 2,
-                                                       fieldLabel: '',
-                                                       labelWidth: 30,
-                                                       width: 30,
-                                                       minValue: 0,
-                                                       maxValue: 24,
-                                                       allowBlank: false,
-                                                       labelSeparator: '',
-                                                       tabIndex: 1,
-                                                       maskRe: /[0-9]/
-                                               }
-                                       ]
-                               },
-                               {
-                                       columnWidth: .3,
-                                       layout: 'form',
-                                       baseCls: 'x-plain',
-                                       items: [
-                                               {
-                                                       xtype: 'textfield',
-                                                       id:     this.getId() + '_minute',
-                                                       maxLength: 2,
-                                                       fieldLabel: ':',
-                                                       labelWidth: 10,
-                                                       width: 30,
-                                                       minValue: 0,
-                                                       maxValue: 59,
-                                                       allowBlank: false,
-                                                       labelSeparator: '',
-                                                       tabIndex: 2,
-                                                       maskRe: /[0-9]/
-                                               }
-                                       ]
-                               },
-                               {
-                                       columnWidth: .3,
-                                       layout: 'form',
-                                       baseCls: 'x-plain',
-                                       items: [this.todayBtn]
-                               }
-                       ]
-               });
-
-               this.hourField = Ext.getCmp(this.getId() + '_hour');
-               this.minuteField = Ext.getCmp(this.getId() + '_minute');
-
-               this.hourField.on('blur', function(field) {
-                       var old = field.value;
-                       var h = parseInt(field.getValue());
-                       if (h > 23) {
-                               field.setValue(old);
-                       }
-               });
-
-               this.minuteField.on('blur', function(field) {
-                       var old = field.value;
-                       var h = parseInt(field.getValue());
-                       if (h > 59) {
-                               field.setValue(old);
-                       }
-               });
-
-               if (Ext.isIE) {
-                       this.el.repaint();
-               }
-               this.update(this.value);
-       },
-
-       // private
-       handleDateClick : function(e, t) {
-               e.stopEvent();
-               if (t.dateValue && !Ext.fly(t.parentNode).hasClass("x-date-disabled")) {
-                       this.setValue(this.addTimeToValue(new Date(t.dateValue)));
-                       this.fireEvent("select", this, this.value);
-               }
-       },
-
-       selectToday : function() {
-               if (this.todayBtn && !this.todayBtn.disabled) {
-                       this.setValue(new Date());
-                       this.fireEvent("select", this, this.value);
-               }
-       },
-
-       update : function(date, forceRefresh) {
-               Ext.ux.DateTimePicker.superclass.update.call(this, date, forceRefresh);
-
-               if (this.showToday) {
-                       this.setTime(new Date());
-               }
-       }
-});
-Ext.reg('datetimepicker', Ext.ux.DateTimePicker);
-
-
-Ext.ux.menu.DateTimeMenu = Ext.extend(Ext.menu.Menu, {
-       enableScrolling : false,
-       hideOnClick : true,
-       cls: 'x-date-menu x-datetime-menu',
-       initComponent : function() {
-
-               Ext.apply(this, {
-                       plain: true,
-                       showSeparator: false,
-                       items: this.picker = new Ext.ux.DateTimePicker(Ext.apply({
-                               internalRender: this.strict || !Ext.isIE,
-                               ctCls: 'x-menu-datetime-item x-menu-date-item'
-                       }, this.initialConfig))
-               });
-               this.picker.purgeListeners();
-
-               Ext.ux.menu.DateTimeMenu.superclass.initComponent.call(this);
-               this.relayEvents(this.picker, ['select']);
-               this.on('select', this.menuHide, this);
-               if (this.handler) {
-                       this.on('select', this.handler, this.scope || this)
-               }
-       },
-       menuHide: function() {
-               if (this.hideOnClick) {
-                       this.hide(true);
-               }
-       }
-});
-Ext.reg('datetimemenu', Ext.ux.menu.DateTimeMenu);
\ No newline at end of file
diff --git a/t3lib/js/extjs/ux/Ext.ux.FitToParent.js b/t3lib/js/extjs/ux/Ext.ux.FitToParent.js
deleted file mode 100644 (file)
index 822dfd5..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* plugin for resize of grid in single container */
-Ext.namespace('Ext.ux.plugins');
-
-Ext.ux.plugins.FitToParent = Ext.extend(Object, {
-       constructor : function(parent) {
-               this.parent = parent;
-       },
-       init : function(c) {
-               c.on('render', function(c) {
-                       c.fitToElement = Ext.get(this.parent
-                                       || c.getPositionEl().dom.parentNode);
-                       if (!c.doLayout) {
-                               this.fitSizeToParent();
-                               Ext.EventManager.onWindowResize(this.fitSizeToParent, this);
-                       }
-               }, this, {
-                       single : true
-               });
-               if (c.doLayout) {
-                       c.monitorResize = true;
-                       c.doLayout = c.doLayout.createInterceptor(this.fitSizeToParent);
-               }
-       },
-
-       fitSizeToParent : function() {
-                       // Uses the dimension of the current viewport, but removes the document header
-                       // initial is the height of the TYPO3 Topbar which i 42. If Topbar is not rendered, set the height as default
-               var documentHeaderHeight = 42 || top.TYPO3.Backend.Topbar.getHeight();
-               var documentHeader = Ext.get('typo3-docheader');
-
-               if (Ext.isObject(documentHeader)) {
-                               // use 5px bottom margin
-                       documentHeaderHeight -= documentHeader.getHeight() + 5;
-               }
-
-               if (this.heightOffset && Ext.isNumber(this.heightOffset)) {
-                       documentHeaderHeight -= parseInt(this.heightOffset, 10);
-               }
-
-               this.fitToElement.setHeight(
-                       Ext.lib.Dom.getViewportHeight() - this.fitToElement.getTop() + documentHeaderHeight
-               );
-
-               var pos = this.getPosition(true), size = this.fitToElement.getViewSize();
-               this.setSize(size.width - pos[0], size.height - pos[1]);
-
-       }
-});
diff --git a/t3lib/js/extjs/ux/ext.resizable.js b/t3lib/js/extjs/ux/ext.resizable.js
deleted file mode 100644 (file)
index f09f76c..0000000
+++ /dev/null
@@ -1,1026 +0,0 @@
-/**
- *
- * Ext.ux.EventZone Extension Class for Ext 3.x Library
- *
- * @author  Nigel White
- *
- * @license Ext.ux.EventZone is licensed under the terms of
- * the Open Source LGPL 3.0 license.  Commercial use is permitted to the extent
- * that the code/component(s) do NOT become part of another Open Source or Commercially
- * licensed development library or toolkit without explicit permission.
- *
- * License details: http://www.gnu.org/licenses/lgpl.html
- *
- * @class Ext.ux.EventZone
- * <p>This class implements a "virtual element" at a relative size and position
- * <i>within</i> an existing element. It provides mouse events from a zone of an element of
- * defined dimensions.</p>
- * <p>The zone is defined using <code>top</code>, <code>right</code>, <code>bottom</code>,
- * <code>left</code>, <code>width</code> and <code>height</code> options which specify
- * the bounds of the zone in a similar manner to the CSS style properties of those names.</p>
- * @cfg {String|HtmlElement} el The element in which to create the zone.
- * @cfg {Array} points An Array of points within the element defining the event zone.
- * @cfg {Number} top The top of the zone. If negative means an offset from the bottom.
- * @cfg {Number} right The right of the zone. If negative means an offset from the right.
- * @cfg {Number} left The left of the zone. If negative means an offset from the right.
- * @cfg {Number} bottom The bottom of the zone. If negative means an offset from the bottom.
- * @cfg {Number} width The width of the zone.
- * @cfg {Number} height The height of the zone.
- * @constructor
- * Create a new EventZone
- * @param {Object} config The config object.
- */
-Ext.ux.EventZone = Ext.extend(Ext.util.Observable, {
-
-    constructor: function(config) {
-        this.initialConfig = config;
-        this.addEvents(
-            /**
-             * @event mouseenter
-             * This event fires when the mouse enters the zone.
-             * @param {EventObject} e the underlying mouse event.
-             * @param {EventZone} this
-             */
-            'mouseenter',
-            /**
-             * @event mousedown
-             * This event fires when the mouse button is depressed within the zone.
-             * @param {EventObject} e the underlying mouse event.
-             * @param {EventZone} this
-             */
-            'mousedown',
-            /**
-             * @event mousemove
-             * This event fires when the mouse moves within the zone.
-             * @param {EventObject} e the underlying mouse event.
-             * @param {EventZone} this
-             */
-            'mousemove',
-            /**
-             * @event mouseup
-             * This event fires when the mouse button is released within the zone.
-             * @param {EventObject} e the underlying mouse event.
-             * @param {EventZone} this
-             */
-            'mouseup',
-            /**
-             * @event mouseenter
-             * This event fires when the mouse is clicked within the zone.
-             * @param {EventObject} e the underlying mouse event.
-             * @param {EventZone} this
-             */
-            'click',
-            /**
-             * @event mouseleave
-             * This event fires when the mouse leaves the zone.
-             * @param {EventObject} e the underlying mouse event.
-             * @param {EventZone} this
-             */
-            'mouseleave'
-        );
-        Ext.apply(this, config);
-        this.el = Ext.get(this.el);
-
-//      If a polygon within the element is specified...
-        if (this.points) {
-            this.polygon = new Ext.lib.Polygon(this.points);
-            this.points = this.polygon.points;
-        }
-
-        Ext.ux.EventZone.superclass.constructor.call(this);
-        this.el.on({
-            mouseenter: this.handleMouseEvent,
-            mousedown: this.handleMouseEvent,
-            mousemove: this.handleMouseEvent,
-            mouseup: this.handleMouseEvent,
-            click: this.handleMouseEvent,
-            mouseleave: this.handleMouseEvent,
-            scope: this
-        });
-    },
-
-    handleMouseEvent: function(e) {
-        var r = this.polygon ? this.getPolygon() : this.getRegion();
-        var inBounds = r.contains(e.getPoint());
-
-        switch (e.type) {
-            // mouseenter fires this
-            case 'mouseover':
-               if (inBounds) {
-                   this.mouseIn = true;
-                   this.fireEvent('mouseenter', e, this);
-               }
-               break;
-            // mouseleave fires this
-            case 'mouseout':
-               this.mouseIn = false;
-               this.fireEvent('mouseleave', e, this);
-               break;
-           case 'mousemove':
-               if (inBounds) {
-                   if (this.mouseIn) {
-                       this.fireEvent('mousemove', e, this);
-                   } else {
-                       this.mouseIn = true;
-                       this.fireEvent('mouseenter', e, this);
-                   }
-               } else {
-                   if (this.mouseIn) {
-                       this.mouseIn = false;
-                       this.fireEvent('mouseleave', e, this);
-                   }
-               }
-               break;
-           default:
-               if (inBounds) {
-                   this.fireEvent(e.type, e, this);
-               }
-        }
-    },
-
-    getPolygon: function() {
-        var xy = this.el.getXY();
-        return this.polygon.translate(xy[0], xy[1]);
-    },
-
-    getRegion: function() {
-        var r = this.el.getRegion();
-
-//      Adjust left boundary of region
-        if (Ext.isNumber(this.left)) {
-            if (this.left < 0) {
-                r.left = r.right + this.left;
-            } else {
-                r.left += this.left;
-            }
-        }
-
-//      Adjust right boundary of region
-        if (Ext.isNumber(this.width)) {
-            r.right = r.left + this.width;
-        } else if (Ext.isNumber(this.right)) {
-            r.right = (this.right < 0) ? r.right + this.right : r.left + this.right;
-        }
-
-//      Adjust top boundary of region
-        if (Ext.isNumber(this.top)) {
-            if (this.top < 0) {
-                r.top = r.bottom + this.top;
-            } else {
-                r.top += this.top;
-            }
-        }
-
-//      Adjust bottom boundary of region
-        if (Ext.isNumber(this.height)) {
-            r.bottom = r.top + this.height;
-        } else if (Ext.isNumber(this.bottom)) {
-            r.bottom = (this.bottom < 0) ? r.bottom + this.bottom : r.top + this.bottom;
-        }
-
-        return r;
-    }
-});
-
-/**
- * @class Ext.lib.Polygon
- * <p>This class encapsulates an absolute area of the document bounded by a list of points.</p>
- * @constructor
- * Create a new Polygon
- * @param {Object} points An Array of <code>[n,n]</code> point specification Arrays, or
- * an Array of Ext.lib.Points, or an HtmlElement, or an Ext.lib.Region.
- */
-Ext.lib.Polygon = Ext.extend(Ext.lib.Region, {
-    constructor: function(points) {
-        var i, l, el;
-        if (l = points.length) {
-            if (points[0].x) {
-                for (i = 0; i < l; i++) {
-                    points[i] = [ points[i].x, points[i].y ];
-                }
-            }
-            this.points = points;
-        } else {
-            if (el = Ext.get(points)) {
-                points = Ext.lib.Region.getRegion(el.dom);
-            }
-            if (points instanceof Ext.lib.Region) {
-                this.points = [
-                    [points.left, points.top],
-                    [points.right, points.top],
-                    [points.right, points.bottom],
-                    [points.left, points.bottom]
-                ];
-            }
-        }
-    },
-
-    /**
-     * Returns a new Polygon translated by the specified <code>X</code> and <code>Y</code> increments.
-     * @param xDelta {Number} The <code>X</code> translation increment.
-     * @param xDelta {Number} The <code>Y</code> translation increment.
-     * @return {Polygon} The resulting Polygon.
-     */
-    translate: function(xDelta, yDelta) {
-        var r = [], p = this.points, l = p.length, i;
-        for (i = 0; i < l; i++) {
-            r[i] = [ p[i][0] + xDelta, p[i][1] + yDelta ];
-        }
-        return new Ext.lib.Polygon(r);
-    },
-
-    /**
-     * Returns the area of this Polygon.
-     */
-    getArea: function() {
-        var p = this.points, l = p.length, area = 0, i, j = 0;
-        for (i = 0; i < l; i++) {
-            j++;
-            if (j == l) {
-                j = 0;
-            }
-            area += (p[i][0] + p[j][0]) * (p[i][1] - p[j][1]);
-        }
-        return area * 0.5;
-    },
-
-    /**
-     * Returns <code>true</code> if this Polygon contains the specified point. Thanks
-     * to http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html for the algorithm.
-     * @param pt {Point|Number} Either an Ext.lib.Point object, or the <code>X</code> coordinate to test.
-     * @param py {Number} <b>Optional.</b> If the first parameter was an <code>X</code> coordinate, this is the <code>Y</code> coordinate.
-     */
-    contains: function(pt, py) {
-        var f = (arguments.length == 1),
-            testX = f ? pt.x : pt,
-            testY = f ? pt.y : py,
-            p = this.points,
-            nvert = p.length,
-            j = nvert - 1,
-            i, j, c = false;
-        for (i = 0; i < nvert; j = i++) {
-            if ( ((p[i][1] > testY) != (p[j][1] > testY)) &&
-             (testX < (p[j][0]-p[i][0]) * (testY-p[i][1]) / (p[j][1]-p[i][1]) + p[i][0])) {
-                c = !c;
-            }
-        }
-        return c;
-    }
-});
-
-/**
- * @class Ext.Resizable
- * @extends Ext.util.Observable
- * This is an override of Ext.Resizable to make usage of the Ex.ux.EventZone
- * <p>Applies virtual drag handles to an element to make it resizable.</p>
- * <p>Here is the list of valid resize handles:</p>
- * <pre>
-Value   Description
-------  -------------------
- 'n'     north
- 's'     south
- 'e'     east
- 'w'     west
- 'nw'    northwest
- 'sw'    southwest
- 'se'    southeast
- 'ne'    northeast
- 'all'   all
-</pre>
- * <p>Here's an example showing the creation of a typical Resizable:</p>
- * <pre><code>
-var resizer = new Ext.Resizable('element-id', {
-    handles: 'all',
-    minWidth: 200,
-    minHeight: 100,
-    maxWidth: 500,
-    maxHeight: 400,
-    pinned: true
-});
-resizer.on('resize', myHandler);
-</code></pre>
- * <p>To hide a particular handle, set its display to none in CSS, or through script:<br>
- * resizer.east.setDisplayed(false);</p>
- * @constructor
- * Create a new resizable component
- * @param {Mixed} el The id or element to resize
- * @param {Object} config configuration options
-  */
-Ext.Resizable = function(el, config){
-    this.el = Ext.get(el);
-
-    /**
-     * The proxy Element that is resized in place of the real Element during the resize operation.
-     * This may be queried using {@link Ext.Element#getBox} to provide the new area to resize to.
-     * Read only.
-     * @type Ext.Element.
-     * @property proxy
-     */
-    this.proxy = this.el.createProxy({tag: 'div', cls: 'x-resizable-proxy', id: this.el.id + '-rzproxy'}, Ext.getBody());
-    this.proxy.unselectable();
-    this.proxy.enableDisplayMode('block');
-
-    Ext.apply(this, config);
-
-    if(this.pinned){
-        this.disableTrackOver = true;
-        this.el.addClass('x-resizable-pinned');
-    }
-    // if the element isn't positioned, make it relative
-    var position = this.el.getStyle('position');
-    if(position != 'absolute' && position != 'fixed'){
-        this.el.setStyle('position', 'relative');
-    }
-    if(!this.handles){ // no handles passed, must be legacy style
-        this.handles = 's,e,se';
-        if(this.multiDirectional){
-            this.handles += ',n,w';
-        }
-    }
-    if(this.handles == 'all'){
-        this.handles = 'n s e w ne nw se sw';
-    }
-    var hs = this.handles.split(/\s*?[,;]\s*?| /);
-    var ps = Ext.Resizable.positions;
-    for(var i = 0, len = hs.length; i < len; i++){
-        if(hs[i] && ps[hs[i]]){
-            var pos = ps[hs[i]];
-            this[pos] = new Ext.Resizable.Handle(this, pos);
-        }
-    }
-    // legacy
-    this.corner = this.southeast;
-
-    if(this.handles.indexOf('n') != -1 || this.handles.indexOf('w') != -1){
-        this.updateBox = true;
-    }
-    this.activeHandle = null;
-
-    if(this.adjustments == 'auto'){
-        var hw = this.west, he = this.east, hn = this.north, hs = this.south;
-        this.adjustments = [
-            (he.el ? -he.el.getWidth() : 0) + (hw.el ? -hw.el.getWidth() : 0),
-            (hn.el ? -hn.el.getHeight() : 0) + (hs.el ? -hs.el.getHeight() : 0) -1
-        ];
-    }
-
-    if(this.draggable){
-        this.dd = this.dynamic ?
-            this.el.initDD(null) : this.el.initDDProxy(null, {dragElId: this.proxy.id});
-        this.dd.setHandleElId(this.el.id);
-    }
-
-    this.addEvents(
-        /**
-         * @event beforeresize
-         * Fired before resize is allowed. Set {@link #enabled} to false to cancel resize.
-         * @param {Ext.Resizable} this
-         * @param {Ext.EventObject} e The mousedown event
-         */
-        'beforeresize',
-        /**
-         * @event resize
-         * Fired after a resize.
-         * @param {Ext.Resizable} this
-         * @param {Number} width The new width
-         * @param {Number} height The new height
-         * @param {Ext.EventObject} e The mouseup event
-         */
-        'resize'
-    );
-
-    if(this.width !== null && this.height !== null){
-        this.resizeTo(this.width, this.height);
-    }
-    if(Ext.isIE){
-        this.el.dom.style.zoom = 1;
-    }
-    Ext.Resizable.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.Resizable, Ext.util.Observable, {
-
-    /**
-     * @cfg {Array/String} adjustments String 'auto' or an array [width, height] with values to be <b>added</b> to the
-     * resize operation's new size (defaults to <tt>[0, 0]</tt>)
-     */
-    adjustments : [0, 0],
-    /**
-     * @cfg {Boolean} animate True to animate the resize (not compatible with dynamic sizing, defaults to false)
-     */
-    animate : false,
-    /**
-     * @cfg {Mixed} constrainTo Constrain the resize to a particular element
-     */
-    /**
-     * @cfg {Boolean} draggable Convenience to initialize drag drop (defaults to false)
-     */
-    draggable: false,
-    /**
-     * @cfg {Number} duration Animation duration if animate = true (defaults to 0.35)
-     */
-    duration : 0.35,
-    /**
-     * @cfg {Boolean} dynamic True to resize the element while dragging instead of using a proxy (defaults to false)
-     */
-    dynamic : false,
-    /**
-     * @cfg {String} easing Animation easing if animate = true (defaults to <tt>'easingOutStrong'</tt>)
-     */
-    easing : 'easeOutStrong',
-    /**
-     * @cfg {Boolean} enabled False to disable resizing (defaults to true)
-     */
-    enabled : true,
-    /**
-     * @property enabled Writable. False if resizing is disabled.
-     * @type Boolean
-     */
-    /**
-     * @cfg {String} handles String consisting of the resize handles to display (defaults to undefined).
-     * Specify either <tt>'all'</tt> or any of <tt>'n s e w ne nw se sw'</tt>.
-     */
-    handles : false,
-    /**
-     * @cfg {Boolean} multiDirectional <b>Deprecated</b>.  Deprecated style of adding multi-direction resize handles.
-     */
-    multiDirectional : false,
-    /**
-     * @cfg {Number} height The height of the element in pixels (defaults to null)
-     */
-    height : null,
-    /**
-     * @cfg {Number} width The width of the element in pixels (defaults to null)
-     */
-    width : null,
-    /**
-     * @cfg {Number} heightIncrement The increment to snap the height resize in pixels
-     * (only applies if <code>{@link #dynamic}==true</code>). Defaults to <tt>0</tt>.
-     */
-    heightIncrement : 0,
-    /**
-     * @cfg {Number} widthIncrement The increment to snap the width resize in pixels
-     * (only applies if <code>{@link #dynamic}==true</code>). Defaults to <tt>0</tt>.
-     */
-    widthIncrement : 0,
-    /**
-     * @cfg {Number} minHeight The minimum height for the element (defaults to 5)
-     */
-    minHeight : 5,
-    /**
-     * @cfg {Number} minWidth The minimum width for the element (defaults to 5)
-     */
-    minWidth : 5,
-    /**
-     * @cfg {Number} maxHeight The maximum height for the element (defaults to 10000)
-     */
-    maxHeight : 10000,
-    /**
-     * @cfg {Number} maxWidth The maximum width for the element (defaults to 10000)
-     */
-    maxWidth : 10000,
-    /**
-     * @cfg {Number} minX The minimum x for the element (defaults to 0)
-     */
-    minX: 0,
-    /**
-     * @cfg {Number} minY The minimum x for the element (defaults to 0)
-     */
-    minY: 0,
-    /**
-     * @cfg {Boolean} pinned True to ensure that the resize handles are always visible, false to display them only when the
-     * user mouses over the resizable borders. This is only applied at config time. (defaults to false)
-     */
-    pinned : false,
-    /**
-     * @cfg {Boolean} preserveRatio True to preserve the original ratio between height
-     * and width during resize (defaults to false)
-     */
-    preserveRatio : false,
-    /**
-     * @cfg {Ext.lib.Region} resizeRegion Constrain the resize to a particular region
-     */
-
-
-    /**
-     * Perform a manual resize and fires the 'resize' event.
-     * @param {Number} width
-     * @param {Number} height
-     */
-    resizeTo : function(width, height){
-        this.el.setSize(width, height);
-        this.fireEvent('resize', this, width, height, null);
-    },
-
-    // private
-    startSizing : function(e, handle){
-        this.fireEvent('beforeresize', this, e);
-        if(this.enabled){ // 2nd enabled check in case disabled before beforeresize handler
-            e.stopEvent();
-
-            Ext.getDoc().on({
-                scope: this,
-                mousemove: this.onMouseMove,
-                mouseup: {
-                    fn: this.onMouseUp,
-                    single: true,
-                    scope: this
-                }
-            });
-            Ext.getBody().addClass('ux-resizable-handle-' + handle.position);
-
-            this.resizing = true;
-            this.startBox = this.el.getBox();
-            this.startPoint = e.getXY();
-            this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0],
-                            (this.startBox.y + this.startBox.height) - this.startPoint[1]];
-
-            if(this.constrainTo) {
-                var ct = Ext.get(this.constrainTo);
-                this.resizeRegion = ct.getRegion().adjust(
-                    ct.getFrameWidth('t'),
-                    ct.getFrameWidth('l'),
-                    -ct.getFrameWidth('b'),
-                    -ct.getFrameWidth('r')
-                );
-            }
-
-            this.proxy.setStyle('visibility', 'hidden'); // workaround display none
-            this.proxy.show();
-            this.proxy.setBox(this.startBox);
-            if(!this.dynamic){
-                this.proxy.setStyle('visibility', 'visible');
-            }
-        }
-    },
-
-    // private
-    onMouseDown : function(handle, e){
-        if(this.enabled && !this.activeHandle){
-            e.stopEvent();
-            this.activeHandle = handle;
-            this.startSizing(e, handle);
-        }
-    },
-
-    // private
-    onMouseUp : function(e){
-        Ext.getBody().removeClass('ux-resizable-handle-' + this.activeHandle.position)
-            .un('mousemove', this.onMouseMove, this);
-        var size = this.resizeElement();
-        this.resizing = false;
-        this.handleOut(this.activeHandle);
-        this.proxy.hide();
-        this.fireEvent('resize', this, size.width, size.height, e);
-        this.activeHandle = null;
-    },
-
-    // private
-    snap : function(value, inc, min){
-        if(!inc || !value){
-            return value;
-        }
-        var newValue = value;
-        var m = value % inc;
-        if(m > 0){
-            if(m > (inc/2)){
-                newValue = value + (inc-m);
-            }else{
-                newValue = value - m;
-            }
-        }
-        return Math.max(min, newValue);
-    },
-
-    /**
-     * <p>Performs resizing of the associated Element. This method is called internally by this
-     * class, and should not be called by user code.</p>
-     * <p>If a Resizable is being used to resize an Element which encapsulates a more complex UI
-     * component such as a Panel, this method may be overridden by specifying an implementation
-     * as a config option to provide appropriate behaviour at the end of the resize operation on
-     * mouseup, for example resizing the Panel, and relaying the Panel's content.</p>
-     * <p>The new area to be resized to is available by examining the state of the {@link #proxy}
-     * Element. Example:
-<pre><code>
-new Ext.Panel({
-    title: 'Resize me',
-    x: 100,
-    y: 100,
-    renderTo: Ext.getBody(),
-    floating: true,
-    frame: true,
-    width: 400,
-    height: 200,
-    listeners: {
-        render: function(p) {
-            new Ext.Resizable(p.getEl(), {
-                handles: 'all',
-                pinned: true,
-                transparent: true,
-                resizeElement: function() {
-                    var box = this.proxy.getBox();
-                    p.updateBox(box);
-                    if (p.layout) {
-                        p.doLayout();
-                    }
-                    return box;
-                }
-           });
-       }
-    }
-}).show();
-</code></pre>
-     */
-    resizeElement : function(){
-        var box = this.proxy.getBox();
-        if(this.updateBox){
-            this.el.setBox(box, false, this.animate, this.duration, null, this.easing);
-        }else{
-            this.el.setSize(box.width, box.height, this.animate, this.duration, null, this.easing);
-        }
-        if(!this.dynamic){
-            this.proxy.hide();
-        }
-        return box;
-    },
-
-    // private
-    constrain : function(v, diff, m, mx){
-        if(v - diff < m){
-            diff = v - m;
-        }else if(v - diff > mx){
-            diff = v - mx;
-        }
-        return diff;
-    },
-
-    // private
-    onMouseMove : function(e){
-        if(this.enabled && this.activeHandle){
-            try{// try catch so if something goes wrong the user doesn't get hung
-
-            if(this.resizeRegion && !this.resizeRegion.contains(e.getPoint())) {
-                return;
-            }
-
-            //var curXY = this.startPoint;
-            var curSize = this.curSize || this.startBox,
-                x = this.startBox.x, y = this.startBox.y,
-                ox = x,
-                oy = y,
-                w = curSize.width,
-                h = curSize.height,
-                ow = w,
-                oh = h,
-                mw = this.minWidth,
-                mh = this.minHeight,
-                mxw = this.maxWidth,
-                mxh = this.maxHeight,
-                wi = this.widthIncrement,
-                hi = this.heightIncrement,
-                eventXY = e.getXY(),
-                diffX = -(this.startPoint[0] - Math.max(this.minX, eventXY[0])),
-                diffY = -(this.startPoint[1] - Math.max(this.minY, eventXY[1])),
-                pos = this.activeHandle.position,
-                tw,
-                th;
-
-            switch(pos){
-                case 'east':
-                    w += diffX;
-                    w = Math.min(Math.max(mw, w), mxw);
-                    break;
-                case 'south':
-                    h += diffY;
-                    h = Math.min(Math.max(mh, h), mxh);
-                    break;
-                case 'southeast':
-                    w += diffX;
-                    h += diffY;
-                    w = Math.min(Math.max(mw, w), mxw);
-                    h = Math.min(Math.max(mh, h), mxh);
-                    break;
-                case 'north':
-                    diffY = this.constrain(h, diffY, mh, mxh);
-                    y += diffY;
-                    h -= diffY;
-                    break;
-                case 'west':
-                    diffX = this.constrain(w, diffX, mw, mxw);
-                    x += diffX;
-                    w -= diffX;
-                    break;
-                case 'northeast':
-                    w += diffX;
-                    w = Math.min(Math.max(mw, w), mxw);
-                    diffY = this.constrain(h, diffY, mh, mxh);
-                    y += diffY;
-                    h -= diffY;
-                    break;
-                case 'northwest':
-                    diffX = this.constrain(w, diffX, mw, mxw);
-                    diffY = this.constrain(h, diffY, mh, mxh);
-                    y += diffY;
-                    h -= diffY;
-                    x += diffX;
-                    w -= diffX;
-                    break;
-               case 'southwest':
-                    diffX = this.constrain(w, diffX, mw, mxw);
-                    h += diffY;
-                    h = Math.min(Math.max(mh, h), mxh);
-                    x += diffX;
-                    w -= diffX;
-                    break;
-            }
-
-            var sw = this.snap(w, wi, mw);
-            var sh = this.snap(h, hi, mh);
-            if(sw != w || sh != h){
-                switch(pos){
-                    case 'northeast':
-                        y -= sh - h;
-                    break;
-                    case 'north':
-                        y -= sh - h;
-                        break;
-                    case 'southwest':
-                        x -= sw - w;
-                    break;
-                    case 'west':
-                        x -= sw - w;
-                        break;
-                    case 'northwest':
-                        x -= sw - w;
-                        y -= sh - h;
-                    break;
-                }
-                w = sw;
-                h = sh;
-            }
-
-            if(this.preserveRatio){
-                switch(pos){
-                    case 'southeast':
-                    case 'east':
-                        h = oh * (w/ow);
-                        h = Math.min(Math.max(mh, h), mxh);
-                        w = ow * (h/oh);
-                       break;
-                    case 'south':
-                        w = ow * (h/oh);
-                        w = Math.min(Math.max(mw, w), mxw);
-                        h = oh * (w/ow);
-                        break;
-                    case 'northeast':
-                        w = ow * (h/oh);
-                        w = Math.min(Math.max(mw, w), mxw);
-                        h = oh * (w/ow);
-                    break;
-                    case 'north':
-                        tw = w;
-                        w = ow * (h/oh);
-                        w = Math.min(Math.max(mw, w), mxw);
-                        h = oh * (w/ow);
-                        x += (tw - w) / 2;
-                        break;
-                    case 'southwest':
-                        h = oh * (w/ow);
-                        h = Math.min(Math.max(mh, h), mxh);
-                        tw = w;
-                        w = ow * (h/oh);
-                        x += tw - w;
-                        break;
-                    case 'west':
-                        th = h;
-                        h = oh * (w/ow);
-                        h = Math.min(Math.max(mh, h), mxh);
-                        y += (th - h) / 2;
-                        tw = w;
-                        w = ow * (h/oh);
-                        x += tw - w;
-                       break;
-                    case 'northwest':
-                        tw = w;
-                        th = h;
-                        h = oh * (w/ow);
-                        h = Math.min(Math.max(mh, h), mxh);
-                        w = ow * (h/oh);
-                        y += th - h;
-                        x += tw - w;
-                        break;
-
-                }
-            }
-            this.proxy.setBounds(x, y, w, h);
-            if(this.dynamic){
-                this.resizeElement();
-            }
-            }catch(ex){}
-        }
-    },
-
-    // private
-    handleOver : function(handle){
-        if(this.enabled){
-            Ext.getBody().addClass('ux-resizable-handle-' + handle.position);
-        }
-    },
-
-    // private
-    handleOut : function(handle){
-        if(!this.resizing){
-            Ext.getBody().removeClass('ux-resizable-handle-' + handle.position);
-        }
-    },
-
-    /**
-     * Returns the element this component is bound to.
-     * @return {Ext.Element}
-     */
-    getEl : function(){
-        return this.el;
-    },
-
-    /**
-     * Destroys this resizable. If the element was wrapped and
-     * removeEl is not true then the element remains.
-     * @param {Boolean} removeEl (optional) true to remove the element from the DOM
-     */
-    destroy : function(removeEl){
-        Ext.destroy(this.dd, this.proxy);
-        this.proxy = null;
-
-        var ps = Ext.Resizable.positions;
-        for(var k in ps){
-            if(typeof ps[k] != 'function' && this[ps[k]]){
-                this[ps[k]].destroy();
-            }
-        }
-        if(removeEl){
-            this.el.update('');
-            Ext.destroy(this.el);
-            this.el = null;
-        }
-        this.purgeListeners();
-    },
-
-    syncHandleHeight : function(){
-        var h = this.el.getHeight(true);
-        if(this.west.el){
-            this.west.el.setHeight(h);
-        }
-        if(this.east.el){
-            this.east.el.setHeight(h);
-        }
-    }
-});
-
-// private
-// hash to map config positions to true positions
-Ext.Resizable.positions = {
-    n: 'north', s: 'south', e: 'east', w: 'west', se: 'southeast', sw: 'southwest', nw: 'northwest', ne: 'northeast'
-};
-Ext.Resizable.cfg = {
-    north: {left: 7, right: -7, height: 7},
-    south: {left: 7, right: -7, top: -7},
-    east: {top: 7, bottom: -7, left: -7},
-    west: {top: 7, bottom: -7, width: 7},
-    southeast: {top: -7, left: -7},
-    southwest: {top: -7, width: 7},
-    northwest: {height: 7, width: 7},
-    northeast: {left: -7, height: 7}
-};
-
-// private
-Ext.Resizable.Handle = function(rz, pos){
-    this.position = pos;
-    this.rz = rz;
-    var cfg = Ext.Resizable.cfg[pos] || Ext.Resizable.cfg[Ext.Resizable.positions[pos]];
-    this.ez = new Ext.ux.EventZone(Ext.apply({
-        position: pos,
-        el: rz.el
-    }, cfg));
-    this.ez.on({
-        mousedown: this.onMouseDown,
-        mouseenter: this.onMouseOver,
-        mouseleave: this.onMouseOut,
-        scope: this
-    });
-};
-
-// private
-Ext.Resizable.Handle.prototype = {
-    cursor: 'move',
-
-    // private
-    afterResize : function(rz){
-        // do nothing
-    },
-    // private
-    onMouseDown : function(e){
-        this.rz.onMouseDown(this, e);
-    },
-    // private
-    onMouseOver : function(e){
-        this.rz.handleOver(this, e);
-    },
-    // private
-    onMouseOut : function(e){
-        this.rz.handleOut(this, e);
-    },
-    // private
-    destroy : function(){
-        Ext.destroy(this.el);
-        this.el = null;
-    }
-};
-
-/**
-*
-* Ext.ux.elasticTextArea Extension Class for Ext 3.x Library
-*
-* @author  Steffen Kamper
-*
-* @license Ext.ux.elasticTextArea is licensed under the terms of
-* the Open Source LGPL 3.0 license.  Commercial use is permitted to the extent
-* that the code/component(s) do NOT become part of another Open Source or Commercially
-* licensed development library or toolkit without explicit permission.
-*
-* License details: http://www.gnu.org/licenses/lgpl.html
-*
-*/
-Ext.ux.elasticTextArea = function(){
-
-    var defaultConfig = function(){
-        return {
-            minHeight : 0
-            ,maxHeight : 0
-            ,growBy: 12
-        }
-    }
-
-    var processOptions = function(config){
-        var o = defaultConfig();
-        var options = {};
-        Ext.apply(options, config, o);
-
-        return options;
-    }
-
-    return {
-        div : null
-        ,applyTo: function(elementId, options){
-
-            var el = Ext.get(elementId);
-            var width = el.getWidth();
-            var height = el.getHeight();
-
-            var styles = el.getStyles('padding-top', 'padding-bottom', 'padding-left', 'padding-right', 'line-height', 'font-size', 'font-family', 'font-weight');
-
-            if(! this.div){
-                var options = processOptions(options);
-
-                this.div = Ext.DomHelper.append(Ext.getBody() || document.body, {
-                    'id':elementId + '-preview-div'
-                    ,'tag' : 'div'
-                    ,'background': 'red'
-                    ,'style' : 'position: absolute; top: -100000px; left: -100000px;'
-                }, true)
-                Ext.DomHelper.applyStyles(this.div, styles);
-
-                el.on('keyup', function() {
-                        this.applyTo(elementId, options);
-                }, this);
-            }
-            this.div.setWidth(parseInt(el.getStyle('width')));
-            //replace \n with <br>&nbsp; so that the enter key can trigger and height increase
-            //but first remove all previous entries, so that the height measurement can be as accurate as possible
-            this.div.update(
-                    el.dom.value.replace(/<br \/>&nbsp;/, '<br />')
-                                .replace(/<|>/g, ' ')
-                                .replace(/&/g,"&amp;")
-                                .replace(/\n/g, '<br />&nbsp;')
-                    );
-
-                       var growBy = parseInt(el.getStyle('line-height'));
-                       growBy = growBy ? growBy + 1 : 1;
-                       if (growBy === 1) {
-                               growBy = options.growBy;
-                       }
-                       var textHeight = this.div.getHeight();
-                       textHeight = textHeight ? textHeight + growBy : growBy;
-
-            if ( (textHeight > options.maxHeight ) && (options.maxHeight > 0) ){
-                textHeight = options.maxHeight;
-                el.setStyle('overflow', 'auto');
-            }
-            if ( (textHeight < options.minHeight ) && (options.minHeight > 0) ) {
-                textHeight = options.minHeight;
-                el.setStyle('overflow', 'auto');
-            }
-
-            el.setHeight(textHeight , true);
-        }
-    }
-}
diff --git a/t3lib/js/extjs/ux/ext.ux.tabclosemenu.js b/t3lib/js/extjs/ux/ext.ux.tabclosemenu.js
deleted file mode 100644 (file)
index 3893368..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/*!
- * Ext JS Library 3.2.1
- * Copyright(c) 2006-2010 Ext JS, Inc.
- * licensing@extjs.com
- * http://www.extjs.com/license
- */
-/**
- * @class Ext.ux.TabCloseMenu
- * @extends Object 
- * Plugin (ptype = 'tabclosemenu') for adding a close context menu to tabs. Note that the menu respects
- * the closable configuration on the tab. As such, commands like remove others and remove all will not
- * remove items that are not closable.
- * 
- * @constructor
- * @param {Object} config The configuration options
- * @ptype tabclosemenu
- */
-Ext.ux.TabCloseMenu = Ext.extend(Object, {
-    /**
-     * @cfg {String} closeTabText
-     * The text for closing the current tab. Defaults to <tt>'Close Tab'</tt>.
-     */
-    closeTabText: 'Close Tab',
-
-    /**
-     * @cfg {String} closeOtherTabsText
-     * The text for closing all tabs except the current one. Defaults to <tt>'Close Other Tabs'</tt>.
-     */
-    closeOtherTabsText: 'Close Other Tabs',
-    
-    /**
-     * @cfg {Boolean} showCloseAll
-     * Indicates whether to show the 'Close All' option. Defaults to <tt>true</tt>. 
-     */
-    showCloseAll: true,
-
-    /**
-     * @cfg {String} closeAllTabsText
-     * <p>The text for closing all tabs. Defaults to <tt>'Close All Tabs'</tt>.
-     */
-    closeAllTabsText: 'Close All Tabs',
-    
-    /**
-        * @cfg {Array} custom menu entries
-        */
-       customMenuEntries: [],
-
-    
-    constructor : function(config){
-        Ext.apply(this, config || {});
-    },
-
-    //public
-    init : function(tabs){
-        this.tabs = tabs;
-        tabs.on({
-            scope: this,
-            contextmenu: this.onContextMenu,
-            destroy: this.destroy
-        });
-    },
-    
-    destroy : function(){
-        Ext.destroy(this.menu);
-        delete this.menu;
-        delete this.tabs;
-        delete this.active;    
-    },
-
-    // private
-    onContextMenu : function(tabs, item, e){
-        this.active = item;
-        var m = this.createMenu(),
-            disableAll = true,
-            disableOthers = true,
-            closeAll = m.getComponent('closeall');
-        
-        m.getComponent('close').setDisabled(!item.closable);
-        tabs.items.each(function(){
-            if(this.closable){
-                disableAll = false;
-                if(this != item){
-                    disableOthers = false;
-                    return false;
-                }
-            }
-                       return true;
-        });
-        m.getComponent('closeothers').setDisabled(disableOthers);
-        if(closeAll){
-            closeAll.setDisabled(disableAll);
-        }
-        
-        e.stopEvent();
-        m.showAt(e.getPoint());
-    },
-    
-    createMenu : function(){
-        if(!this.menu){
-            var items = [{
-                itemId: 'close',
-                text: this.closeTabText,
-                scope: this,
-                handler: this.onClose
-            }];
-            if(this.showCloseAll){
-                items.push('-');
-            }
-            items.push({
-                itemId: 'closeothers',
-                text: this.closeOtherTabsText,
-                scope: this,
-                handler: this.onCloseOthers
-            });
-            if(this.showCloseAll){
-                items.push({
-                    itemId: 'closeall',
-                    text: this.closeAllTabsText,
-                    scope: this,
-                    handler: this.onCloseAll
-                });
-            }
-            if (this.customMenuEntries.length) {
-               this.customMenuEntries.each(function(item) {
-                       items.push(item);
-               });
-            }
-            
-            this.menu = new Ext.menu.Menu({
-                items: items
-            });
-        }
-        return this.menu;
-    },
-    
-    onClose : function(){
-        this.tabs.remove(this.active);
-    },
-    
-    onCloseOthers : function(){
-        this.doClose(true);
-    },
-    
-    onCloseAll : function(){
-        this.doClose(false);
-    },
-    
-    doClose : function(excludeActive){
-        var items = [];
-        this.tabs.items.each(function(item){
-            if(item.closable){
-                if(!excludeActive || item != this.active){
-                    items.push(item);
-                }    
-            }
-        }, this);
-        Ext.each(items, function(item){
-            this.tabs.remove(item);
-        }, this);
-    }
-});
-
-Ext.preg('tabclosemenu', Ext.ux.TabCloseMenu);
diff --git a/t3lib/js/extjs/ux/flashmessages.js b/t3lib/js/extjs/ux/flashmessages.js
deleted file mode 100644 (file)
index 62f20f2..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2010-2011 Steffen Kamper <info@sk-typo3.de>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project is
- *  free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *
- *  This script is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-
-/**
- * Flashmessage rendered by ExtJS
- *
- *
- * @author Steffen Kamper <info@sk-typo3.de>
- */
-Ext.ns('TYPO3');
-
-/**
- * Object for named severities
- */
-TYPO3.Severity = {
-       notice: 0,
-       information: 1,
-       ok: 2,
-       warning: 3,
-       error: 4
-};
-
-/**
- * @class TYPO3.Flashmessage
- * Passive popup box singleton
- * @singleton
- *
- * Example (Information message):
- * TYPO3.Flashmessage.display(1, 'TYPO3 Backend - Version 4.4', 'Ready for take off', 3);
- */
-TYPO3.Flashmessage = function() {
-       var messageContainer;
-       var severities = ['notice', 'information', 'ok', 'warning', 'error'];
-
-       function createBox(severity, title, message) {
-               return ['<div class="typo3-message message-', severity, '" style="width: 400px">',
-                               '<div class="t3-icon t3-icon-actions t3-icon-actions-message t3-icon-actions-message-close t3-icon-message-' + severity + '-close"></div>',
-                               '<div class="header-container">',
-                               '<div class="message-header">', title, '</div>',
-                               '</div>',
-                               '<div class="message-body">', message, '</div>',
-                               '</div>'].join('');
-       }
-
-       return {
-               /**
-                * Shows popup
-                * @member TYPO3.Flashmessage
-                * @param int severity (0=notice, 1=information, 2=ok, 3=warning, 4=error)
-                * @param string title
-                * @param string message
-                * @param float duration in sec (default 5)
-                */
-               display : function(severity, title, message, duration) {
-                       duration = duration || 5;
-                       if (!messageContainer) {
-                               messageContainer = Ext.DomHelper.insertFirst(document.body, {
-                                       id   : 'msg-div',
-                                       style: 'position:absolute;z-index:10000'
-                               }, true);
-                       }
-
-                       var box = Ext.DomHelper.append(messageContainer, {
-                               html: createBox(severities[severity], title, message)
-                       }, true);
-                       messageContainer.alignTo(document, 't-t');
-                       box.child('.t3-icon-actions-message-close').on('click', function (e, t, o) {
-                               var node;
-                               node = new Ext.Element(Ext.get(t).findParent('div.typo3-message'));
-                               node.hide();
-                               Ext.removeNode(node.dom);
-                       }, box);
-                       box.slideIn('t').pause(duration).ghost('t', {remove: true});
-               }
-       };
-}();
diff --git a/t3lib/js/extjs/ux/resize.css b/t3lib/js/extjs/ux/resize.css
deleted file mode 100644 (file)
index c4ff47c..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-.ux-resizable-handle-east, .ux-resizable-handle-east textarea {
-    cursor: e-resize;
-}
-
-.ux-resizable-handle-south, .ux-resizable-handle-south textarea {
-    cursor: s-resize;
-}
-
-.ux-resizable-handle-west, .ux-resizable-handle-west textarea {
-    cursor: w-resize;
-}
-
-.ux-resizable-handle-north, .ux-resizable-handle-north textarea {
-    cursor: n-resize;
-}
-
-.ux-resizable-handle-southeast, .ux-resizable-handle-southeast textarea {
-    cursor: se-resize;
-}
-
-.ux-resizable-handle-northwest, .ux-resizable-handle-northwest textarea {
-    cursor: nw-resize;
-}
-
-.ux-resizable-handle-northeast, .ux-resizable-handle-northeast textarea {
-    cursor: ne-resize;
-}
-
-.ux-resizable-handle-southwest, .ux-resizable-handle-southwest textarea {
-    cursor: sw-resize;
-}
-.ux-resizable-handle-east, .ux-resizable-handle-east textarea {
-    cursor: e-resize;
-}
-
-.ux-resizable-handle-south, .ux-resizable-handle-south textarea {
-    cursor: s-resize;
-}
-
-.ux-resizable-handle-west, .ux-resizable-handle-west textarea {
-    cursor: w-resize;
-}
-
-.ux-resizable-handle-north, .ux-resizable-handle-north textarea {
-    cursor: n-resize;
-}
-
-.ux-resizable-handle-southeast, .ux-resizable-handle-southeast textarea {
-    cursor: se-resize;
-}
-
-.ux-resizable-handle-northwest, .ux-resizable-handle-northwest textarea {
-    cursor: nw-resize;
-}
-
-.ux-resizable-handle-northeast, .ux-resizable-handle-northeast textarea {
-    cursor: ne-resize;
-}
-
-.ux-resizable-handle-southwest, .ux-resizable-handle-southwest textarea {
-    cursor: sw-resize;
-}
-
-textarea.resizable {
-       background-image: url(resize.gif);
-       background-position: bottom right;
-       background-repeat: no-repeat;
-}
\ No newline at end of file
diff --git a/t3lib/js/extjs/ux/resize.gif b/t3lib/js/extjs/ux/resize.gif
deleted file mode 100644 (file)
index 89b82d7..0000000
Binary files a/t3lib/js/extjs/ux/resize.gif and /dev/null differ
diff --git a/typo3/js/clickmenu.js b/typo3/js/clickmenu.js
deleted file mode 100644 (file)
index bcf9fd5..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-/**
- * Javascript functions regarding the clickmenu
- * relies on the javascript library "prototype"
- *
- * (c) 2007-2011 Benjamin Mack <www.xnos.org>
- * All rights reserved
- *
- * This script is part of TYPO3 by
- * Kasper Skaarhoj <kasperYYYYY@typo3.com>
- *
- * Released under GNU/GPL (see license file in tslib/)
- *
- * This script is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * This copyright notice MUST APPEAR in all copies of this script
- */
-
-/**
- * new clickmenu code to make an AJAX call and render the 
- * AJAX result in a layer next to the mouse cursor
- */
-var Clickmenu = {
-       clickURL: 'alt_clickmenu.php',
-       ajax: true, // \TYPO3\CMS\Backend\Template\DocumentTemplate::isCMLayers
-       mousePos: { X: null, Y: null },
-       delayClickMenuHide: false,
-
-       /**
-        * main function, called from most clickmenu links
-        * @param       table           table from where info should be fetched
-        * @param       uid             the UID of the item
-        * @param       listFr          list Frame?
-        * @param       enDisItems      Items to disable / enable
-        * @param       backPath        TYPO3 backPath
-        * @param       addParams       additional params
-        * @return      nothing
-        */
-       show: function(table, uid, listFr, enDisItems, backPath, addParams) {
-               var params = 'table=' + encodeURIComponent(table) +
-                       '&uid=' + uid +
-                       '&listFr=' + listFr +
-                       '&enDisItems=' + enDisItems +
-                       '&backPath=' + backPath +
-                       '&addParams=' + addParams;
-               this.callURL(params);
-       },
-
-
-       /**
-        * switch function that either makes an AJAX call
-        * or loads the request in the top frame
-        *
-        * @param       params  parameters added to the URL
-        * @return      nothing
-        */ 
-       callURL: function(params) {     
-               if (this.ajax && Ajax.getTransport()) { // run with AJAX
-                       params += '&ajax=1';
-                       var call = new Ajax.Request(this.clickURL, {
-                               method: 'get',
-                               parameters: params,
-                               onComplete: function(xhr) {
-                                       var response = xhr.responseXML;
-                                       if (!response.getElementsByTagName('data')[0]) {
-                                               return;
-                                       }
-                                       var menu  = response.getElementsByTagName('data')[0].getElementsByTagName('clickmenu')[0];
-                                       var data  = menu.getElementsByTagName('htmltable')[0].firstChild.data;
-                                       var level = menu.getElementsByTagName('cmlevel')[0].firstChild.data;
-                                       this.populateData(data, level);
-                               }.bind(this)
-                       });
-               }
-       },
-
-
-       /**
-        * fills the clickmenu with content and displays it correctly
-        * depending on the mouse position
-        * @param       data    the data that will be put in the menu
-        * @param       level   the depth of the clickmenu
-        */
-       populateData: function(data, level) {
-               if (!$('contentMenu0')) {
-                       this.addClickmenuItem();
-               }
-               level = parseInt(level, 10) || 0;
-               var obj = $('contentMenu' + level);
-
-               if (obj && (level === 0 || Element.visible('contentMenu' + (level-1)))) {
-                       obj.innerHTML = data;
-                       var x = this.mousePos.X;
-                       var y = this.mousePos.Y;
-                       var dimsWindow = document.viewport.getDimensions();
-                       dimsWindow.width = dimsWindow.width-20; // saving margin for scrollbars
-
-                       var dims = Element.getDimensions(obj); // dimensions for the clickmenu
-                       var offset = document.viewport.getScrollOffsets();
-                       var relative = { X: this.mousePos.X - offset.left, Y: this.mousePos.Y - offset.top };
-
-                       // adjusting the Y position of the layer to fit it into the window frame
-                       // if there is enough space above then put it upwards,
-                       // otherwise adjust it to the bottom of the window
-                       if (dimsWindow.height - dims.height < relative.Y) {
-                               if (relative.Y > dims.height) {
-                                       y -= (dims.height - 10);
-                               } else {
-                                       y += (dimsWindow.height - dims.height - relative.Y);
-                               }
-                       }
-                       // adjusting the X position like Y above, but align it to the left side of the viewport if it does not fit completely
-                       if (dimsWindow.width - dims.width < relative.X) {
-                               if (relative.X > dims.width) {
-                                       x -= (dims.width - 10);
-                               } else if ((dimsWindow.width - dims.width - relative.X) < offset.left) {
-                                       x = offset.left;
-                               } else {
-                                       x += (dimsWindow.width - dims.width - relative.X);
-                               }
-                       }
-
-                       obj.style.left = x + 'px';
-                       obj.style.top  = y + 'px';
-                       Element.show(obj);
-               }
-               if (/MSIE5/.test(navigator.userAgent)) {
-                       this._toggleSelectorBoxes('hidden');
-               }
-       },
-
-
-       /**
-        * event handler function that saves the actual position of the mouse
-        * in the Clickmenu object
-        * @param       event   the event object
-        */
-       calcMousePosEvent: function(event) {
-               if (!event) {
-                       event = window.event;
-               }
-               this.mousePos.X = Event.pointerX(event);
-               this.mousePos.Y = Event.pointerY(event);
-               this.mouseOutFromMenu('contentMenu0');
-               this.mouseOutFromMenu('contentMenu1');
-       },
-
-
-       /**
-        * hides a visible menu if the mouse has moved outside
-        * of the object
-        * @param       obj     the object to hide
-        * @result      nothing
-        */
-       mouseOutFromMenu: function(obj) {
-               obj = $(obj);
-               if (obj && Element.visible(obj) && !Position.within(obj, this.mousePos.X, this.mousePos.Y)) {
-                       this.hide(obj);
-                       if (/MSIE5/.test(navigator.userAgent) && obj.id === 'contentMenu0') {
-                               this._toggleSelectorBoxes('visible');
-                       }
-               } else if (obj && Element.visible(obj)) {
-                       this.delayClickMenuHide = true;
-               }
-       },
-
-       /**
-        * hides a clickmenu
-        *
-        * @param       obj     the clickmenu object to hide
-        * @result      nothing
-        */
-       hide: function(obj) {
-               this.delayClickMenuHide = false;
-               window.setTimeout(function() {
-                       if (!Clickmenu.delayClickMenuHide) {
-                               Element.hide(obj);
-                       }
-               }, 500);
-       },
-
-       /**
-        * hides all clickmenus
-        */
-       hideAll: function() {
-               this.hide('contentMenu0');
-               this.hide('contentMenu1');
-       },
-
-
-       /**
-        * hides / displays all selector boxes in a page, fixes an IE 5 selector problem
-        * originally by Michiel van Leening
-        *
-        * @param       action  hide (= "hidden") or show (= "visible")
-        * @result      nothing
-        */
-       _toggleSelectorBoxes: function(action) {
-               for (var i = 0; i < document.forms.length; i++) {
-                       for (var j = 0; j < document.forms[i].elements.length; j++) {
-                               if (document.forms[i].elements[j].type == 'select-one') {
-                                       document.forms[i].elements[j].style.visibility = action;
-                               }
-                       }
-               }
-       },
-
-
-       /**
-        * manipulates the DOM to add the divs needed for clickmenu at the bottom of the <body>-tag
-        *
-        * @return      nothing
-        */
-       addClickmenuItem: function() {
-               var code = '<div id="contentMenu0" style="display: block;"></div><div id="contentMenu1" style="display: block;"></div>';
-               var insert = new Insertion.Bottom(document.getElementsByTagName('body')[0], code);
-       }
-}
-
-// register mouse movement inside the document
-Event.observe(document, 'mousemove', Clickmenu.calcMousePosEvent.bindAsEventListener(Clickmenu), true);
-
-
-// @deprecated: Deprecated functions since 4.2, here for compatibility, remove in 4.4+
-// ## BEGIN ##
-
-// Still used in Core: \TYPO3\CMS\Backend\Template\DocumentTemplate::wrapClickMenuOnIcon()
-function showClickmenu(table, uid, listFr, enDisItems, backPath, addParams) {
-       Clickmenu.show(table, uid, listFr, enDisItems, backPath, addParams);
-}
-
-// Still used in Core: typo3/alt_clickmenu.php::linkItem()
-function showClickmenu_raw(url) {
-       var parts = url.split('?');
-       if (parts.length === 2) {
-               Clickmenu.clickURL = parts[0];
-               Clickmenu.callURL(parts[1]);
-       } else {
-               Clickmenu.callURL(url);
-       }
-}
-function showClickmenu_noajax(url) {
-       Clickmenu.ajax = false; showClickmenu_raw(url);
-}
-function setLayerObj(tableData, cmLevel) {
-       Clickmenu.populateData(tableData, cmLevel);
-}
-function hideEmpty() {
-       Clickmenu.hideAll();
-       return false;
-}
-function hideSpecific(level) {
-       if (level === 0 || level === 1) {
-               Clickmenu.hide('contentMenu'+level);
-       }
-} 
-function showHideSelectorBoxes(action) {
-       toggleSelectorBoxes(action);
-}
-// ## END ##
diff --git a/typo3/js/extjs/components/pagetree/javascript/Ext.ux.state.TreePanel.js b/typo3/js/extjs/components/pagetree/javascript/Ext.ux.state.TreePanel.js
new file mode 100644 (file)
index 0000000..44f25db
--- /dev/null
@@ -0,0 +1,153 @@
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+Ext.ns('Ext.ux.state');
+
+// dummy constructor
+Ext.ux.state.TreePanel = function() {};
+
+/**
+ * State Provider for a tree panel
+ */
+Ext.override(Ext.ux.state.TreePanel, {
+       /**
+        * Initializes the plugin
+        * @param {Ext.tree.TreePanel} tree
+        * @private
+        */
+       init:function(tree) {
+               tree.lastSelectedNode = null;
+               tree.isRestoringState = false;
+               tree.stateHash = {};
+
+               // install event handlers on TreePanel
+               tree.on({
+                       // add path of expanded node to stateHash
+                       beforeexpandnode:function(node) {
+                               if (this.isRestoringState) {
+                                       return;
+                               }
+
+                               var saveID = (node.id === 'root' ? node.id : node.id.substr(1));
+                               this.stateHash[saveID] = 1;
+                       },
+
+                       // delete path and all subpaths of collapsed node from stateHash
+                       beforecollapsenode:function(node) {
+                               if (this.isRestoringState) {
+                                       return;
+                               }
+
+                               var deleteID = (node.id === 'root' ? node.id : node.id.substr(1));
+                               delete this.stateHash[deleteID];
+                       },
+
+                       beforeclick: function(node) {
+                               if (this.isRestoringState) {
+                                       return;
+                               }
+                               this.stateHash['lastSelectedNode'] = node.id;
+                       }
+               });
+
+                       // update state on node expand or collapse
+               tree.stateEvents = tree.stateEvents || [];
+               tree.stateEvents.push('expandnode', 'collapsenode', 'click');
+
+               // add state related props to the tree
+               Ext.apply(tree, {
+                       // keeps expanded nodes paths keyed by node.ids
+                       stateHash:{},
+
+                       restoreState: function() {
+                               this.isRestoringState = true;
+                                       // get last selected node
+                               for (var pageID in this.stateHash) {
+                                       var pageNode = this.getNodeById((pageID !== 'root' ? 'p' : '') + pageID);
+                                       if (pageNode) {
+                                               pageNode.on({
+                                                       expand: {
+                                                               single:true,
+                                                               scope:this,
+                                                               fn: this.restoreState
+                                                       }
+                                               });
+                                               if (pageNode.expanded === false && pageNode.rendered == true) {
+                                                       pageNode.expand();
+                                               }
+                                       }
+                               }
+
+                               if (this.stateHash['lastSelectedNode']) {
+                                       var node = this.getNodeById(this.stateHash['lastSelectedNode']);
+                                       if (node) {
+                                               var contentId = TYPO3.Backend.ContentContainer.getIdFromUrl() ||
+                                                       String(fsMod.recentIds['web']) || '-1';
+
+                                               var hasContentFrameValidPageId = (contentId !== '-1' && contentId !== '0');
+                                               var isCurrentSelectedNode = (
+                                                       String(node.attributes.nodeData.id) === contentId ||
+                                                       contentId.indexOf('pages' + String(node.attributes.nodeData.id)) !== -1
+                                               );
+
+                                               if (isCurrentSelectedNode) {
+                                                       this.selectPath(node.getPath());
+                                               }
+
+                                               var isSingleClickPossible = (this.app.isVisible() && this.commandProvider && this.commandProvider.singleClick);
+                                               if (!hasContentFrameValidPageId && !isCurrentSelectedNode && isSingleClickPossible) {
+                                                       this.selectPath(node.getPath());
+                                                       this.commandProvider.singleClick(node, this);
+                                               }
+                                       }
+                               }
+
+                               this.isRestoringState = false;
+                       },
+
+                       // apply state on tree initialization
+                       applyState:function(state) {
+                               if(state) {
+                                       Ext.apply(this, state);
+
+                                       // it is too early to expand paths here
+                                       // so do it once on root load
+                                       this.root.on({
+                                               load: {
+                                                       single:true,
+                                                       scope:this,
+                                                       fn: this.restoreState
+                                               }
+                                       });
+                               }
+                       },
+
+                       // returns stateHash for save by state manager
+                       getState:function() {
+                               return {stateHash:this.stateHash};
+                       }
+               });
+       }
+});
diff --git a/typo3/js/extjs/components/pagetree/javascript/actions.js b/typo3/js/extjs/components/pagetree/javascript/actions.js
new file mode 100644 (file)
index 0000000..33f18ae
--- /dev/null
@@ -0,0 +1,788 @@
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010-2011 Stefan Galinski <stefan.galinski@gmail.com>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+Ext.namespace('TYPO3.Components.PageTree');
+
+/**
+ * @class TYPO3.Components.PageTree.Actions
+ *
+ * Actions dedicated for the page tree
+ *
+ * @namespace TYPO3.Components.PageTree
+ * @author Stefan Galinski <stefan.galinski@gmail.com>
+ */
+TYPO3.Components.PageTree.Actions = {
+       /**
+        * Evaluates a response from an ext direct call and shows a flash message
+        * if it was an exceptional result
+        *
+        * @param {Object} response
+        * @return {Boolean}
+        */
+       evaluateResponse: function(response) {
+               if (response.success === false) {
+                       TYPO3.Flashmessage.display(4, 'Exception', response.message);
+                       return false;
+               }
+
+               return true;
+       },
+
+       /**
+        * Releases the cut and copy mode from the context menu
+        *
+        * @param {TYPO3.Components.PageTree.Tree} tree
+        * @return {void}
+        */
+       releaseCutAndCopyModes: function(tree) {
+               tree.t3ContextInfo.inCutMode = false;
+               tree.t3ContextInfo.inCopyMode = false;
+
+               if (tree.t3ContextNode) {
+                       tree.t3ContextNode.attributes.nodeData.t3InCutMode = false;
+                       tree.t3ContextNode.attributes.nodeData.t3InCopyMode = false;
+                       tree.t3ContextNode = null;
+               }
+       },
+
+       /**
+        * Updates an existing node with the given alternative. The new tree node
+        * is returned afterwards.
+        *
+        * @param {Ext.tree.TreeNode} node
+        * @param {Boolean} isExpanded
+        * @param {Object} updatedNode
+        * @param {Function} callback
+        * @return {Ext.tree.TreeNode}
+        */
+       updateNode: function(node, isExpanded, updatedNode, callback) {
+               if (!updatedNode) {
+                       return null;
+               }
+
+               updatedNode.uiProvider = node.ownerTree.uiProvider;
+               var newTreeNode = new Ext.tree.TreeNode(updatedNode);
+
+               var refreshCallback = this.restoreNodeStateAfterRefresh;
+               if (callback) {
+                       refreshCallback = refreshCallback.createSequence(callback);
+    &