diff --git a/core/Core.php b/core/Core.php
index 18f0b1891..13f15a0b4 100644
--- a/core/Core.php
+++ b/core/Core.php
@@ -98,6 +98,7 @@ Injector::set_inst($injector);
$flush = (isset($_GET['flush']) || isset($_REQUEST['url']) && (
$_REQUEST['url'] == 'dev/build' || $_REQUEST['url'] == BASE_URL . '/dev/build'
));
+global $manifest;
$manifest = new SS_ClassManifest(BASE_PATH, false, $flush);
// Register SilverStripe's class map autoload
diff --git a/docs/en/reference/restfulservice.md b/docs/en/reference/restfulservice.md
index 7bd175b1f..1898129d8 100644
--- a/docs/en/reference/restfulservice.md
+++ b/docs/en/reference/restfulservice.md
@@ -150,18 +150,19 @@ Put something like this code in mysite/code/Page.php inside class Page_Controlle
:::php
// Accepts an RSS feed URL and outputs a list of links from it
public function RestfulLinks($url){
- $delicious = new RestfulService($url);
-
- $conn = $delicious->connect();
- $result = $delicious->getValues($conn, "item");
+ $service = new RestfulService($url);
+ $request = $service->request();
+ $body = $request->getBody();
+ $items = $service->getValues($body,"channel","item");
+
$output = '';
- foreach ($result as $key => $value) {
+ foreach($items as $item) {
// Fix quote encoding
- $description = str_replace('"', '"', $value->description);
- $output .= '
'.$value->title.' '.$description.' ';
+ $description = str_replace('"', '"', $item->description);
+ $output .= "link}\">{$item->title} {$description} ";
}
return $output;
- }
+ }
Put something like this code in `themes//templates/Layout/HomePage.ss`:
@@ -174,4 +175,4 @@ Put something like this code in `themes//templates/Layout/HomePage.s
## API Documentation
-`[api:RestfulService]`
\ No newline at end of file
+`[api:RestfulService]`
diff --git a/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsFormsContext.php b/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsFormsContext.php
index 5ae293d9a..459c8ebb6 100644
--- a/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsFormsContext.php
+++ b/tests/behat/features/bootstrap/SilverStripe/Framework/Test/Behaviour/CmsFormsContext.php
@@ -184,17 +184,24 @@ var editor = jQuery('#$inputFieldId').entwine('ss').getEditor(),
sel = editor.getInstance().selection,
rng = document.createRange(),
matched = false;
+
jQuery(doc).find('body *').each(function() {
- if(!matched && this.firstChild && this.firstChild.nodeValue && this.firstChild.nodeValue.match('$text')) {
- rng.setStart(this.firstChild, this.firstChild.nodeValue.indexOf('$text'));
- rng.setEnd(this.firstChild, this.firstChild.nodeValue.indexOf('$text') + '$text'.length);
- sel.setRng(rng);
- editor.getInstance().nodeChanged();
- matched = true;
+ if(!matched) {
+ for(var i=0;igetSession()->evaluateScript($js);
+
+ $this->getSession()->executeScript($js);
}
/**
diff --git a/thirdparty/swfupload/.gitignore b/thirdparty/swfupload/.gitignore
deleted file mode 100644
index a40478bb2..000000000
--- a/thirdparty/swfupload/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-documentation/
-preview/
-swfupload/*.as
-swfupload/*.as3proj
-swfupload/*.bat
\ No newline at end of file
diff --git a/thirdparty/swfupload/core changelog.txt b/thirdparty/swfupload/core changelog.txt
deleted file mode 100644
index 297b56142..000000000
--- a/thirdparty/swfupload/core changelog.txt
+++ /dev/null
@@ -1,304 +0,0 @@
- * SWFUpload Core, January 2009, www.swfupload.org, swfupload.googlecode.com
-
- * --------- Version 2.5.0-----------
- * + Added Client Side thumbnail generation and uploading and related settings
- * + Added Client Side thumbnail preview plugin
- * = Fixed double encoding of settings issue
- * = Improved movieElement grabbing
- * - Removed settings clone as it is unreliable
- * = Fixed speed plugin so it checks for a file before extending it
- * + Progress event manually fired for 100% if not fired by Flash
-
-
- * --------- Version 2.2.1-----------
- * + Added requeueUpload and updated documentation
- * + Added button_action type of JAVASCRIPT and a buttonAction event to trigger a JavaScript function when the Flash Button is clicked
- * = Updated destroy method to make sure the testExternalInterface timer is cleared
- * = Also fixed destroy so the element is removed in non-IE browsers
- * = Also fixed destroy method to call cleanUp method rather than duplicating the code
- * = Fixed scope issue in cleanUp method.
- * = Fixed bug in Queue Plugin that prevented the queueComplete event from firing
- * + The place holder element is now replaced with the same type of flow element (div for block, span for inline)
-
-
- * --------- Version 2.2.0.1-----------
- * - Removed requeueUpload due to bugs/poor testing
- * = Fixed namespace conflict that broke stopUpload
-
- * --------- Version 2.2.0-----------
- * + Added button_placeholder setting that accepts a DOM element.
- * + Added ability to requeue any file (including some improvement to internal queue state tracking)
- * + UploadErrors caused by a missing upload_url now causes the file to be requeued automatically
- * + Added preserve_relative_urls setting
- * + SWFUpload now converts relative URLs to absolute URLs to avoid issues with Flash Player interpreting it differently on some clients
- * + Added assume_success_timeout setting which allows uploadSuccess to be called after a timeout if, for some reason Flash ignores the server's response
- * An additional parameter has been added to the uploadSuccess event to indicate whether a response was received or success was assumed.
-
- * --------- Version 2.2.0 Beta 2 ~ 5-----------
- * = Fixed a Queue Limit bug
- * + Improved internal event handling code so uploadSuccess fires even when not content is returned from the server (*woot*, except for Macs)
- * = Fixed issues in Destroy
- * = Fixed issues with Queue Plugin
- * + Added periodic checks of the ExternalInterface
- * + Improved IE memory leak prevention code
- * + Added Speed Plugin
- * = Updated Queue Plugin for better multi-plugin compatibility
-
- * --------- Version 2.2.0 Beta 1-----------
- * + Added Flash Player 10 Support
- * = Added setting for defining a button image
- * = Added setting for defining button text
- * = Added setting for defining button width, height and padding
- * = Added setting for defining what element the Flash Movie should replace
- * = Added setting for defining flash wmode
- * = Added setting for defining the mouse cursor
- * + Added prevent_swf_caching setting as a work-around for issues in Avant Browser (and other IE based browser)
- * + Added setting for accepting HTTP Status codes other than 200 as successful
- * + Added parameter to cancelUpload that allows the uploadError event for cancelled uploads to be supressed
- * + Added pro-active memory leak fix for IE and fixed problems with the destroy function (credits to steffen for patches and testing)
- * + Replaced callFlash with CallFunction (using the internal function that Flash uses). Based on code from MooTools.
- * = Fixed bug in the Queue plugin that breaks startUpload when passing a file id.
- * + Updated Queue plugin to stop the queue if false is returned from the uploadStart handler.
- * = Fixed small issues in SWFObject plugin
- * = Fixed issue with ExternalInterface string escaping
- * - Dropped Graceful Degradation Plugin
- * - Dropped v1.0.2 Plugin
- * - Dropped Flash Player 8 support
-
- * --------- Version 2.1.0 -----------
- * = Fixed GET values so they are escaped properly
- * + Added destroy function
- * = Added exception handling around browse() calls
- * = Minor code cleanup
- * + Split Core and Demos
-
- * --------- Version 2.1.0 Beta 2-----------
- * = Fixed bug in XHTML fix where it wasn't split correctly by Flash
- * = Fixed file params "undefined" in debug output
- * + Added requeue_on_error settings so HTTP/IO/Security errors requeue the file instead of discarding it.
- This will affect the queue plugin (if an error is occurring the file will be reuploaded and reuploaded).
- * = Fixed HTTP/IO error behavior. We'll see how this goes Flash 9 is supposed to call HTTPError followed by an IO error but I suspect they come out of orde sometimes.
- * = Fixed invalid characters in file param names. Worked around flash bug by escaping the names. Should be transparent to devs.
- * = Fixed missing upload URL logic so it fires consistently
- * = Fixed file params not being sent when useQueryString is true
- * + Added SWFObject plugin and demo.
- * + Added CookieBug demo to demonstrate what they bug really is all about.
- * + Added VB.Net version of the Application Demo
-
-
- * --------- Version 2.1.0 Beta 1-----------
- * + Added allowScriptAccess="always" to the embed/object elements so the SWF can be served from different domains.
- * = Fixed a type-o in the debug output that prevented the instance id (movieName) from displaying. - Thx Joel
- * + Rewrote SWFUpload.js for better code reuse based on sample code from batiste.bieler (thanks!!!)
- * + Added queueComplete event to the Queue Plugin
- * + Added Simple Upload demo
- * = JSLinted all the JavaScript code
- * + Added use_query_string setting (and setUseQueryString function) that forces post_param and file_param values to be sent on the query_string instead of the post (for Flash 9 version)
- * = Fixed file.type and date properties so a default value is provided (rather than null) when no value is provided by flash.
- * = Fixed misc bugs in the demos
- * = Fixed ExternalInterface calls being made available for Flash 9 versions <9.0.28 which aren't supported
- * + Fixed use of & producing invalid XHTML in the and tags.
- * - Removed the use of the embed tag (using the sample from the Flash Satay method)
- * = Updated plugins to work with code rewrite changes.
- * = Extracted FileProgress object in to its own file.
- * + Added addPostParam and removePostParam functions
-
- * --------- Version 2.0.2 -----------
- * = Fixed a bug where post params could not be added to the current file (because it is removed from the queue when it becomes current)
- * = Fixed a conversion error when converting kilobytes to bytes in the file size check
- * = Fixed a problem in the documentation that said the file_size_limit was bytes when it is actually kilobytes
- * + Added formatting to the documentation, a table of contents, and details for each setting .
- * + Added units for file_size_limit setting. The setting understands B, KB, MB, GB. Default is KB.
- * + Added a check for the ExternalInterface functions in flashReady so SWFUpload will not fire the loaded event if those are not available.
-
- * --------- Version 2.0.1 -----------
- * = Fixed a bug where zero-byte files would stop file the queuing process.
- * = Finished updating Features Demo
- * + Added GetFileByIndex(i) that gets a JavaScript File Object. The index never changes. Finished files continue to be available.
- * The JavaScript GetFile function will accept a file_id or an index.
- * + Added CheckFileSize constants to replace the magic numbers
- * + Added some code in an attempt to fix "Script is running slowly" error messages
- * = Better cleanup of FileReference objects
-
- * --------- Version 2.0 -----------
- * + Re-created SWFUpload in Actionscript v2 for Flash 8 compatibility. Flash 8 loses POST and Server Data features. The two versions are otherwise fully compatible.
- * Flash 8 uses URL to pass post_params/file_params.
- * = Changed uploadStart event so it's part of the setTimeout/eventQueue workaround. This allows Flash functions to be called from uploadStart.
- * = Renamed uploadComplete to uploadSuccess and fileComplete to uploadComplete. All started uploads call uploadComplete (even if cancelled or stopped).
- * = Changed startUpload validation failure behavior. Rather than cancelling the upload the file is now requeued. Devs can cancel
- * or do whatever the need to in uploadError to handle the problem.
- * = Fixed fileQueueLimit/fileUploadLimit logic so it works correctly.
- * = Moved the upload request building to a later point so that the post params and file params can be updated in uploadStart.
- * - Removed the last of the UI stuff (ui_container, degraded_container).
- * + Started development on Plug-ins. Graceful Degradation, v1.0.2, Cookies, Queue Handling
- * = Fixed missing file_status field in FileItem.
- * + Added modificationDate to FileItem (file object)
- * + Added setStats function that lets you change the file upload count, etc. This will give more power over the queue limits. Not well tested.
- * = Renamed compeleted_uploads to successful_uploads in getStats object
- * + Added in_progress to getStats object
-
- * --------- Revision 7.0 beta 3 -----------
- * + Added an "event queue". Events are added to an array and executeEvent is called on a setTimeout. This prevents out of order issues that occur
- * in the Safari browser.
- * + Added a check for the UPLOAD_COMPLETE_DATA event constant which only became available in Flash Player 9.0.28. This
- * fixes the Flash Version detection (Flash Object Detection) which was accepting Flash Player 9 versions before 9.0.28.
- * - Removed old code block that was missed when moving from a Flash Timer to the JavaScript timeout (caused certain cancel events to be called twice)
- * = Change ShowUI to the swfUploadLoaded event which will hopefully make it more clear that this is an overrideable event
- * = Changed flashReady to behave like the other events (uses setTimeout and the Event Queue).
-
- * --------- Revision 7.0 beta 2 -----------
- * = Changed ERROR_CODE_FILE_NOT_FOUND to ERROR_CODE_FILE_ID_NOT_FOUND
- * + Grouped the error code constants in objects for queue errors and upload errors.
- * + Added an UPLOAD_STOPPED error code.
- * = Changed Event calling method (using Timer) in Flash. Timer is no longer called
- * instead setTimeout is called in JavaScript. This includes a change to the
- * JavaSCript design so the Event methods are not directly overridden but stored
- * internally and called if defined (with a setTimeout). This is an effort
- * be more compatible with the current Flash Player on Linux
- * = Changed the parameter order for the fileQueueError and uploadError events so the fileObj is first, like other events.
- * + Added an empty JavaScript object (customSettings) where users can store settings associated with the instance.
- * + Worked around an escaping bug in the ExternalInterface library by escaping all backslashes in out-going strings.
- * = Updated all the demos.
-
- * --------- Revision 7.0 beta 1 -----------
- * = Redesigned the Event Chain
- * - Removed much of the queue concepts
- * - Removed the fileValidation events. This can be done in the new uploadStart event
- * - Removed beginUploadOnQueue feature. This can be done in the new dialogComplete event.
- * - Removed use_server_data. This is now always on.
- * + Added functions for retrieving queue stats (number of files uploaded, queued, errors, etc)
- * + Added a file status property to the FileObject. This indicates, uploaded, error, waiting.
- * + Added a single file browser (user cannot select multiple files)
- * + Fixed bug (hopefully) caused if Flash call to JavaScript and in the callback JavaSCript calls to Flash
- * This only place this does not apply is to uploadStart. If you call in to Flash from uploadStart use a setTimeout to do it.
-
- * --------- Revision 6.2 -----------
- * + Added API calls for changing all the changeable settings dynamically
- * = Fixed a bug in FileComplete event handler (in the SWF) that caused an error in Debug Players
- * and prevent the event from being called
- * + Added a setting (use_server_data_event) to indicate whether FileComplete or ServerData should be called.
- * The SWFUpload architecture requires that only one file upload success event can be called.
- * = Updated all the Demos, especially the Features Demo and the Forms Demo
-
-
- * --------- Revision 6 -----------
- * - Removed the call to setUploadSettings in flashReady. This was a left over call that is unnecessary.
- * + Finished the parsing of post params during the init stage. This ommision was hidden by the call to setUploadSettings.
- * - Removed the flash_target_id setting. The Flash file should only ever be added to the body tag.
- * + Fixed (hopefully for good) another SWF race condition. IE executes the SWF very very early. The this.movieElement value should never be referenced.
- * The movie Element should always be retrieved using this.getMovieElement().
-
- * --------- Revision 6 -----------
- * + Ported to ActionScript 3. Revision 6 requires Flash Player 9.
- * = Fixed bug caused when cancelling single files. Would break any function that searched for a file_id.
- * - Removed the automatic cookie sending setting. Devs should just pass the value they want to send in the post_params
- * - Removed the query params settings (global and file specific). All params should be sent in the post_params
- * + Added post_params which adds post values to the file upload post.
- * + Added validate_files setting flag which causes the fileValidation event to be called before each file is uploaded.
- * + Added fileValidation event. Return false if validation fails and true if validation is successful.
- * + Added server_data parameter to the fileComplete event which returns any text that the upload script returns.
- * = Updated all demos to work with Revision 6
- * + Added in-code file extension validation. Before a file is queued the extension is checked against the valid extensions.
- * Files the have invalid extensions cause the error event to be raised.
- * + Added 'file_post_name' setting that allows the post variable name containing the file data to be named something other than 'Filedata'
- * = Fixed a race condition in loadFlash where a cached flash movie would execute before this.movieElement could be assigned and loading would fail.
-
- * --------- Revision 5.2 -----------
- * = A little more code cleaning and variable renaming
- * + Changed from an array queue to a FIFO queue. This eliminates the "current_index" and
- * should reduce some memory usage.
- * + Added out of order file uploading. Call StartUpload(/file_id/).
- * + Added custom query_string parameters in addition to the cookies
- * + Added the ability to modify the URL, cookies, params and send to flash
- * + Added per file query_string params
- * + Added files queued limit. Sometimes you may want the user to only queue one file at a time (or something)
- * + Fixed limits so a zero(0) value means unlimited.
-
- * --------- Revision 5 -------------
- * = More code cleaning. Ported SWF to FlashDevelop. (Since my Flash Studio trial expired)
- * The port to FlashDevelop is a big deal. It significantly changes the code structure
- * and could introduce bugs. Also there have been reported issues with the FlashDevelop
- * version from swfupload.mammon.se: Doesn't start when reloading in IE. Doesn't start
- * in Firefox if the SWF file is visible because of a page scroll.
- * + I fixed the Firefox issue by removing the wmode attribute from the embed object.
- * + I cannot reproduce the IE issue on my local machine (although I can reproduce it at swfupload.mammon.se)
- * + Event Handlers are now attached to the SWFUpload javascript object. The SWF file
- * now calls the handlers in the context of the SWFUpload object which means the "this"
- * object inside the handler refers to the proper SWFUpload instance.
- * + Tested and Fixed upload target cookie attachment
- * = Cleaned up / renamed everything for clarity and consistancy
- * + File queuing is now subject to the upload limit. If the user attempts to queue more files
- * than allowed an error is returned and the files are not queued.
- * + Fixed misc bugs and text encodings.
- * + Added more debug info for the SWF file.
- * + SWF file now obeys the debug setting.
- * + Added SetUploadTargetURL function that allows you to "dynamically" change the upload target
- * + Added error code for zero byte file uploads which always return an IO error. The files are now rejected
- * instead of being uploaded.
-
- * --------- Revision 4 -------------
- * = Cleaned up code. Added comments. Reorganized. Added more try..catches. Removed old unused methods.
- * - Removed the 'create_ui' setting. The UI is now completely up to the developer.
- * + Added upload_backend_cookies setting. Can set a string, or array of cookie names. These values will be
- * passed as part of the upload_backend url
- *
- * = Changed QueueComplete event to only fire if at least one file has been successfully uploaded.
- * + Added "Stop Upload" feature.
- * = Revised the FLA file to clean things up, better handle errors, etc.
- * = Fixed a bug where cancelling the first upload would cause the remaining uploads to fire before calling
- * "startUpload". This change is in the FLA.
- *
- * + Fixed a bug in the upload.swf that prevented further file processing after an error is returned.
- * + Added uploadLimit variable. Only complete uploads are counted. Once the limit is reached the flash
- * movie will not upload any more files. (The ability to select or queue many files is not affected
- * by the upload limit)
- * + Added cancelQueue and cancelUpload methods.
- * + Added ID property to the FileObj in the upload.swf
- * + Added Upload and Queue settings
- * + Added methods for generating the flash HTML and inserting it into the DOM.
- * - Removed SWFObject
- * + Updated the upload.swf and added the "flashReady" event. This will only call back
- * for Flash 8 and above. With this we don't need a flash version detect script.
- * The script initializes the Flash then waits for the Callback to init the UI.
- * + Added seperate ui_target, degraded_target, create_ui settings. This allows fine control
- * over what parts of the GUI the script displays and hides
- *
- * + Changed from a Static Class to an Instance (changed code/class structure)
- * + Added "flash_version" setting. When set to zero the version check is skipped
- * + Added Debug Console. The Instance class can't do document.write.
- * = De-obfuscated SWFObject a bit
- * - Removed standalone mode.
- * + Added "ui_target" setting. When non-blank the link is added.
- * + Added "flash_target" setting. When blank the flash is appended to the tag
- * = This fixes ASP.Net not allowing the flash to be added to the Form
- * + Added error checking to the callSWF method
- *
-
-
- * -------- -------- -------- -------- -------- -------- -------- --------
- * SWFUpload 0.7: Flash upload dialog - http://profandesign.se/swfupload/
- * SWFUpload is (c) 2006 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- * -------- -------- -------- -------- -------- -------- -------- --------
-
- * SWFUpload 0.7: Flash upload dialog - http://profandesign.se/swfupload/
- *
- * VERSION HISTORY
- * 0.5 - First release
- *
- * 0.6 - 2006-11-24
- * - Got rid of flash overlay
- * - SWF size reduced to 840b
- * - CSS-only styling of button
- * - Add upload to links etc.
- *
- * 0.7 - 2006-11-27
- * - Added filesize param and check in SWF
- *
- * 0.7.1 - 2006-12-01
- * - Added link_mode param for standalone links
- * if set to "standalone", createElement("a") won't run.
- * - Added link_text param if css isn't needed.
- * - Renamed cssClass to css_class for consistency
- *
- */
diff --git a/thirdparty/swfupload/plugins/SWFObject License.txt b/thirdparty/swfupload/plugins/SWFObject License.txt
deleted file mode 100644
index c39361947..000000000
--- a/thirdparty/swfupload/plugins/SWFObject License.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-/* SWFObject v2.0 rc4
- Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis
- This software is released under the MIT License
-*/
diff --git a/thirdparty/swfupload/plugins/swfupload.cookies.js b/thirdparty/swfupload/plugins/swfupload.cookies.js
deleted file mode 100644
index 242235839..000000000
--- a/thirdparty/swfupload/plugins/swfupload.cookies.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- Cookie Plug-in
-
- This plug in automatically gets all the cookies for this site and adds them to the post_params.
- Cookies are loaded only on initialization. The refreshCookies function can be called to update the post_params.
- The cookies will override any other post params with the same name.
-*/
-
-var SWFUpload;
-if (typeof(SWFUpload) === "function") {
- SWFUpload.prototype.initSettings = function (oldInitSettings) {
- return function (userSettings) {
- if (typeof(oldInitSettings) === "function") {
- oldInitSettings.call(this, userSettings);
- }
-
- this.refreshCookies(false); // The false parameter must be sent since SWFUpload has not initialzed at this point
- };
- }(SWFUpload.prototype.initSettings);
-
- // refreshes the post_params and updates SWFUpload. The sendToFlash parameters is optional and defaults to True
- SWFUpload.prototype.refreshCookies = function (sendToFlash) {
- if (sendToFlash === undefined) {
- sendToFlash = true;
- }
- sendToFlash = !!sendToFlash;
-
- // Get the post_params object
- var postParams = this.settings.post_params;
-
- // Get the cookies
- var i, cookieArray = document.cookie.split(';'), caLength = cookieArray.length, c, eqIndex, name, value;
- for (i = 0; i < caLength; i++) {
- c = cookieArray[i];
-
- // Left Trim spaces
- while (c.charAt(0) === " ") {
- c = c.substring(1, c.length);
- }
- eqIndex = c.indexOf("=");
- if (eqIndex > 0) {
- name = c.substring(0, eqIndex);
- value = c.substring(eqIndex + 1);
- postParams[name] = value;
- }
- }
-
- if (sendToFlash) {
- this.setPostParams(postParams);
- }
- };
-
-}
diff --git a/thirdparty/swfupload/plugins/swfupload.queue.js b/thirdparty/swfupload/plugins/swfupload.queue.js
deleted file mode 100644
index a3788bd97..000000000
--- a/thirdparty/swfupload/plugins/swfupload.queue.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- Queue Plug-in
-
- Features:
- *Adds a cancelQueue() method for cancelling the entire queue.
- *All queued files are uploaded when startUpload() is called.
- *If false is returned from uploadComplete then the queue upload is stopped.
- If false is not returned (strict comparison) then the queue upload is continued.
- *Adds a QueueComplete event that is fired when all the queued files have finished uploading.
- Set the event handler with the queue_complete_handler setting.
-
- */
-
-var SWFUpload;
-if (typeof(SWFUpload) === "function") {
- SWFUpload.queue = {};
-
- SWFUpload.prototype.initSettings = (function (oldInitSettings) {
- return function (userSettings) {
- if (typeof(oldInitSettings) === "function") {
- oldInitSettings.call(this, userSettings);
- }
-
- this.queueSettings = {};
-
- this.queueSettings.queue_cancelled_flag = false;
- this.queueSettings.queue_upload_count = 0;
-
- this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler;
- this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler;
- this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler;
- this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler;
-
- this.settings.queue_complete_handler = userSettings.queue_complete_handler || null;
- };
- })(SWFUpload.prototype.initSettings);
-
- SWFUpload.prototype.startUpload = function (fileID) {
- this.queueSettings.queue_cancelled_flag = false;
- this.callFlash("StartUpload", [fileID]);
- };
-
- SWFUpload.prototype.cancelQueue = function () {
- this.queueSettings.queue_cancelled_flag = true;
- this.stopUpload();
-
- var stats = this.getStats();
- while (stats.files_queued > 0) {
- this.cancelUpload();
- stats = this.getStats();
- }
- };
-
- SWFUpload.queue.uploadStartHandler = function (file) {
- var returnValue;
- if (typeof(this.queueSettings.user_upload_start_handler) === "function") {
- returnValue = this.queueSettings.user_upload_start_handler.call(this, file);
- }
-
- // To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value.
- returnValue = (returnValue === false) ? false : true;
-
- this.queueSettings.queue_cancelled_flag = !returnValue;
-
- return returnValue;
- };
-
- SWFUpload.queue.uploadCompleteHandler = function (file) {
- var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler;
- var continueUpload;
-
- if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) {
- this.queueSettings.queue_upload_count++;
- }
-
- if (typeof(user_upload_complete_handler) === "function") {
- continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true;
- } else if (file.filestatus === SWFUpload.FILE_STATUS.QUEUED) {
- // If the file was stopped and re-queued don't restart the upload
- continueUpload = false;
- } else {
- continueUpload = true;
- }
-
- if (continueUpload) {
- var stats = this.getStats();
- if (stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) {
- this.startUpload();
- } else if (this.queueSettings.queue_cancelled_flag === false) {
- this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]);
- this.queueSettings.queue_upload_count = 0;
- } else {
- this.queueSettings.queue_cancelled_flag = false;
- this.queueSettings.queue_upload_count = 0;
- }
- }
- };
-}
\ No newline at end of file
diff --git a/thirdparty/swfupload/plugins/swfupload.speed.js b/thirdparty/swfupload/plugins/swfupload.speed.js
deleted file mode 100644
index fc30d1d70..000000000
--- a/thirdparty/swfupload/plugins/swfupload.speed.js
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- Speed Plug-in
-
- Features:
- *Adds several properties to the 'file' object indicated upload speed, time left, upload time, etc.
- - currentSpeed -- String indicating the upload speed, bits per second
- - averageSpeed -- Overall average upload speed, bits per second
- - movingAverageSpeed -- Speed over averaged over the last several measurements, bits per second
- - timeRemaining -- Estimated remaining upload time in seconds
- - timeElapsed -- Number of seconds passed for this upload
- - percentUploaded -- Percentage of the file uploaded (0 to 100)
- - sizeUploaded -- Formatted size uploaded so far, bytes
-
- *Adds setting 'moving_average_history_size' for defining the window size used to calculate the moving average speed.
-
- *Adds several Formatting functions for formatting that values provided on the file object.
- - SWFUpload.speed.formatBPS(bps) -- outputs string formatted in the best units (Gbps, Mbps, Kbps, bps)
- - SWFUpload.speed.formatTime(seconds) -- outputs string formatted in the best units (x Hr y M z S)
- - SWFUpload.speed.formatSize(bytes) -- outputs string formatted in the best units (w GB x MB y KB z B )
- - SWFUpload.speed.formatPercent(percent) -- outputs string formatted with a percent sign (x.xx %)
- - SWFUpload.speed.formatUnits(baseNumber, divisionArray, unitLabelArray, fractionalBoolean)
- - Formats a number using the division array to determine how to apply the labels in the Label Array
- - factionalBoolean indicates whether the number should be returned as a single fractional number with a unit (speed)
- or as several numbers labeled with units (time)
- */
-
-var SWFUpload;
-if (typeof(SWFUpload) === "function") {
- SWFUpload.speed = {};
-
- SWFUpload.prototype.initSettings = (function (oldInitSettings) {
- return function (userSettings) {
- if (typeof(oldInitSettings) === "function") {
- oldInitSettings.call(this, userSettings);
- }
-
- this.ensureDefault = function (settingName, defaultValue) {
- this.settings[settingName] = (userSettings[settingName] == undefined) ? defaultValue : userSettings[settingName];
- };
-
- // List used to keep the speed stats for the files we are tracking
- this.fileSpeedStats = {};
- this.speedSettings = {};
-
- this.ensureDefault("moving_average_history_size", "10");
-
- this.speedSettings.user_file_queued_handler = this.settings.file_queued_handler;
- this.speedSettings.user_file_queue_error_handler = this.settings.file_queue_error_handler;
- this.speedSettings.user_upload_start_handler = this.settings.upload_start_handler;
- this.speedSettings.user_upload_error_handler = this.settings.upload_error_handler;
- this.speedSettings.user_upload_progress_handler = this.settings.upload_progress_handler;
- this.speedSettings.user_upload_success_handler = this.settings.upload_success_handler;
- this.speedSettings.user_upload_complete_handler = this.settings.upload_complete_handler;
-
- this.settings.file_queued_handler = SWFUpload.speed.fileQueuedHandler;
- this.settings.file_queue_error_handler = SWFUpload.speed.fileQueueErrorHandler;
- this.settings.upload_start_handler = SWFUpload.speed.uploadStartHandler;
- this.settings.upload_error_handler = SWFUpload.speed.uploadErrorHandler;
- this.settings.upload_progress_handler = SWFUpload.speed.uploadProgressHandler;
- this.settings.upload_success_handler = SWFUpload.speed.uploadSuccessHandler;
- this.settings.upload_complete_handler = SWFUpload.speed.uploadCompleteHandler;
-
- delete this.ensureDefault;
- };
- })(SWFUpload.prototype.initSettings);
-
-
- SWFUpload.speed.fileQueuedHandler = function (file) {
- if (typeof this.speedSettings.user_file_queued_handler === "function") {
- file = SWFUpload.speed.extendFile(file);
-
- return this.speedSettings.user_file_queued_handler.call(this, file);
- }
- };
-
- SWFUpload.speed.fileQueueErrorHandler = function (file, errorCode, message) {
- if (typeof this.speedSettings.user_file_queue_error_handler === "function") {
- file = SWFUpload.speed.extendFile(file);
-
- return this.speedSettings.user_file_queue_error_handler.call(this, file, errorCode, message);
- }
- };
-
- SWFUpload.speed.uploadStartHandler = function (file) {
- if (typeof this.speedSettings.user_upload_start_handler === "function") {
- file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
- return this.speedSettings.user_upload_start_handler.call(this, file);
- }
- };
-
- SWFUpload.speed.uploadErrorHandler = function (file, errorCode, message) {
- file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
- SWFUpload.speed.removeTracking(file, this.fileSpeedStats);
-
- if (typeof this.speedSettings.user_upload_error_handler === "function") {
- return this.speedSettings.user_upload_error_handler.call(this, file, errorCode, message);
- }
- };
- SWFUpload.speed.uploadProgressHandler = function (file, bytesComplete, bytesTotal) {
- this.updateTracking(file, bytesComplete);
- file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
-
- if (typeof this.speedSettings.user_upload_progress_handler === "function") {
- return this.speedSettings.user_upload_progress_handler.call(this, file, bytesComplete, bytesTotal);
- }
- };
-
- SWFUpload.speed.uploadSuccessHandler = function (file, serverData) {
- if (typeof this.speedSettings.user_upload_success_handler === "function") {
- file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
- return this.speedSettings.user_upload_success_handler.call(this, file, serverData);
- }
- };
- SWFUpload.speed.uploadCompleteHandler = function (file) {
- file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
- SWFUpload.speed.removeTracking(file, this.fileSpeedStats);
-
- if (typeof this.speedSettings.user_upload_complete_handler === "function") {
- return this.speedSettings.user_upload_complete_handler.call(this, file);
- }
- };
-
- // Private: extends the file object with the speed plugin values
- SWFUpload.speed.extendFile = function (file, trackingList) {
- var tracking;
-
- if (!file) {
- return file;
- }
-
- if (trackingList) {
- tracking = trackingList[file.id];
- }
-
- if (tracking) {
- file.currentSpeed = tracking.currentSpeed;
- file.averageSpeed = tracking.averageSpeed;
- file.movingAverageSpeed = tracking.movingAverageSpeed;
- file.timeRemaining = tracking.timeRemaining;
- file.timeElapsed = tracking.timeElapsed;
- file.percentUploaded = tracking.percentUploaded;
- file.sizeUploaded = tracking.bytesUploaded;
-
- } else {
- file.currentSpeed = 0;
- file.averageSpeed = 0;
- file.movingAverageSpeed = 0;
- file.timeRemaining = 0;
- file.timeElapsed = 0;
- file.percentUploaded = 0;
- file.sizeUploaded = 0;
- }
-
- return file;
- };
-
- // Private: Updates the speed tracking object, or creates it if necessary
- SWFUpload.prototype.updateTracking = function (file, bytesUploaded) {
- var tracking = this.fileSpeedStats[file.id];
- if (!tracking) {
- this.fileSpeedStats[file.id] = tracking = {};
- }
-
- // Sanity check inputs
- bytesUploaded = bytesUploaded || tracking.bytesUploaded || 0;
- if (bytesUploaded < 0) {
- bytesUploaded = 0;
- }
- if (bytesUploaded > file.size) {
- bytesUploaded = file.size;
- }
-
- var tickTime = (new Date()).getTime();
- if (!tracking.startTime) {
- tracking.startTime = (new Date()).getTime();
- tracking.lastTime = tracking.startTime;
- tracking.currentSpeed = 0;
- tracking.averageSpeed = 0;
- tracking.movingAverageSpeed = 0;
- tracking.movingAverageHistory = [];
- tracking.timeRemaining = 0;
- tracking.timeElapsed = 0;
- tracking.percentUploaded = bytesUploaded / file.size;
- tracking.bytesUploaded = bytesUploaded;
- } else if (tracking.startTime > tickTime) {
- this.debug("When backwards in time");
- } else {
- // Get time and deltas
- var now = (new Date()).getTime();
- var lastTime = tracking.lastTime;
- var deltaTime = now - lastTime;
- var deltaBytes = bytesUploaded - tracking.bytesUploaded;
-
- if (deltaBytes === 0 || deltaTime === 0) {
- return tracking;
- }
-
- // Update tracking object
- tracking.lastTime = now;
- tracking.bytesUploaded = bytesUploaded;
-
- // Calculate speeds
- tracking.currentSpeed = (deltaBytes * 8 ) / (deltaTime / 1000);
- tracking.averageSpeed = (tracking.bytesUploaded * 8) / ((now - tracking.startTime) / 1000);
-
- // Calculate moving average
- tracking.movingAverageHistory.push(tracking.currentSpeed);
- if (tracking.movingAverageHistory.length > this.settings.moving_average_history_size) {
- tracking.movingAverageHistory.shift();
- }
-
- tracking.movingAverageSpeed = SWFUpload.speed.calculateMovingAverage(tracking.movingAverageHistory);
-
- // Update times
- tracking.timeRemaining = (file.size - tracking.bytesUploaded) * 8 / tracking.movingAverageSpeed;
- tracking.timeElapsed = (now - tracking.startTime) / 1000;
-
- // Update percent
- tracking.percentUploaded = (tracking.bytesUploaded / file.size * 100);
- }
-
- return tracking;
- };
- SWFUpload.speed.removeTracking = function (file, trackingList) {
- try {
- trackingList[file.id] = null;
- delete trackingList[file.id];
- } catch (ex) {
- }
- };
-
- SWFUpload.speed.formatUnits = function (baseNumber, unitDivisors, unitLabels, singleFractional) {
- var i, unit, unitDivisor, unitLabel;
-
- if (baseNumber === 0) {
- return "0 " + unitLabels[unitLabels.length - 1];
- }
-
- if (singleFractional) {
- unit = baseNumber;
- unitLabel = unitLabels.length >= unitDivisors.length ? unitLabels[unitDivisors.length - 1] : "";
- for (i = 0; i < unitDivisors.length; i++) {
- if (baseNumber >= unitDivisors[i]) {
- unit = (baseNumber / unitDivisors[i]).toFixed(2);
- unitLabel = unitLabels.length >= i ? " " + unitLabels[i] : "";
- break;
- }
- }
-
- return unit + unitLabel;
- } else {
- var formattedStrings = [];
- var remainder = baseNumber;
-
- for (i = 0; i < unitDivisors.length; i++) {
- unitDivisor = unitDivisors[i];
- unitLabel = unitLabels.length > i ? " " + unitLabels[i] : "";
-
- unit = remainder / unitDivisor;
- if (i < unitDivisors.length -1) {
- unit = Math.floor(unit);
- } else {
- unit = unit.toFixed(2);
- }
- if (unit > 0) {
- remainder = remainder % unitDivisor;
-
- formattedStrings.push(unit + unitLabel);
- }
- }
-
- return formattedStrings.join(" ");
- }
- };
-
- SWFUpload.speed.formatBPS = function (baseNumber) {
- var bpsUnits = [1073741824, 1048576, 1024, 1], bpsUnitLabels = ["Gbps", "Mbps", "Kbps", "bps"];
- return SWFUpload.speed.formatUnits(baseNumber, bpsUnits, bpsUnitLabels, true);
-
- };
- SWFUpload.speed.formatTime = function (baseNumber) {
- var timeUnits = [86400, 3600, 60, 1], timeUnitLabels = ["d", "h", "m", "s"];
- return SWFUpload.speed.formatUnits(baseNumber, timeUnits, timeUnitLabels, false);
-
- };
- SWFUpload.speed.formatBytes = function (baseNumber) {
- var sizeUnits = [1073741824, 1048576, 1024, 1], sizeUnitLabels = ["GB", "MB", "KB", "bytes"];
- return SWFUpload.speed.formatUnits(baseNumber, sizeUnits, sizeUnitLabels, true);
-
- };
- SWFUpload.speed.formatPercent = function (baseNumber) {
- return baseNumber.toFixed(2) + " %";
- };
-
- SWFUpload.speed.calculateMovingAverage = function (history) {
- var vals = [], size, sum = 0.0, mean = 0.0, varianceTemp = 0.0, variance = 0.0, standardDev = 0.0;
- var i;
- var mSum = 0, mCount = 0;
-
- size = history.length;
-
- // Check for sufficient data
- if (size >= 8) {
- // Clone the array and Calculate sum of the values
- for (i = 0; i < size; i++) {
- vals[i] = history[i];
- sum += vals[i];
- }
-
- mean = sum / size;
-
- // Calculate variance for the set
- for (i = 0; i < size; i++) {
- varianceTemp += Math.pow((vals[i] - mean), 2);
- }
-
- variance = varianceTemp / size;
- standardDev = Math.sqrt(variance);
-
- //Standardize the Data
- for (i = 0; i < size; i++) {
- vals[i] = (vals[i] - mean) / standardDev;
- }
-
- // Calculate the average excluding outliers
- var deviationRange = 2.0;
- for (i = 0; i < size; i++) {
-
- if (vals[i] <= deviationRange && vals[i] >= -deviationRange) {
- mCount++;
- mSum += history[i];
- }
- }
-
- } else {
- // Calculate the average (not enough data points to remove outliers)
- mCount = size;
- for (i = 0; i < size; i++) {
- mSum += history[i];
- }
- }
-
- return mSum / mCount;
- };
-
-}
\ No newline at end of file
diff --git a/thirdparty/swfupload/plugins/swfupload.swfobject.js b/thirdparty/swfupload/plugins/swfupload.swfobject.js
deleted file mode 100644
index 7f5f459e3..000000000
--- a/thirdparty/swfupload/plugins/swfupload.swfobject.js
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- SWFUpload.SWFObject Plugin
-
- Summary:
- This plugin uses SWFObject to embed SWFUpload dynamically in the page. SWFObject provides accurate Flash Player detection and DOM Ready loading.
- This plugin replaces the Graceful Degradation plugin.
-
- Features:
- * swfupload_load_failed_hander event
- * swfupload_pre_load_handler event
- * minimum_flash_version setting (default: "9.0.28")
- * SWFUpload.onload event for early loading
-
- Usage:
- Provide handlers and settings as needed. When using the SWFUpload.SWFObject plugin you should initialize SWFUploading
- in SWFUpload.onload rather than in window.onload. When initialized this way SWFUpload can load earlier preventing the UI flicker
- that was seen using the Graceful Degradation plugin.
-
-
-
- Notes:
- You must provide set minimum_flash_version setting to "8" if you are using SWFUpload for Flash Player 8.
- The swfuploadLoadFailed event is only fired if the minimum version of Flash Player is not met. Other issues such as missing SWF files, browser bugs
- or corrupt Flash Player installations will not trigger this event.
- The swfuploadPreLoad event is fired as soon as the minimum version of Flash Player is found. It does not wait for SWFUpload to load and can
- be used to prepare the SWFUploadUI and hide alternate content.
- swfobject's onDomReady event is cross-browser safe but will default to the window.onload event when DOMReady is not supported by the browser.
- Early DOM Loading is supported in major modern browsers but cannot be guaranteed for every browser ever made.
-*/
-
-
-/* SWFObject v2.1
- Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
- This software is released under the MIT License
-*/
-var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("