| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486 |
- /**
- * This namespace should be in another file but I dicided to put it here for consistancy.
- */
- Ext.namespace('Ext.ux.Utils');
- /**
- * This class implements event queue behaviour.
- *
- * @class Ext.ux.Utils.EventQueue
- * @param function handler Event handler.
- * @param object scope Handler scope.
- */
- Ext.ux.Utils.EventQueue = function(handler, scope) {
- if (!handler) {
- throw 'Handler is required.';
- }
- this.handler = handler;
- this.scope = scope || window;
- this.queue = [];
- this.is_processing = false;
-
- /**
- * Posts event into the queue.
- *
- * @access public
- * @param mixed event Event identificator.
- * @param mixed data Event data.
- */
- this.postEvent = function(event, data) {
- data = data || null;
- this.queue.push({event: event, data: data});
- if (!this.is_processing) {
- this.process();
- }
- }
-
- this.flushEventQueue = function() {
- this.queue = [];
- },
-
- /**
- * @access private
- */
- this.process = function() {
- while (this.queue.length > 0) {
- this.is_processing = true;
- var event_data = this.queue.shift();
- this.handler.call(this.scope, event_data.event, event_data.data);
- }
- this.is_processing = false;
- }
- };
- /**
- * This class implements Mili's finite state automata behaviour.
- *
- * Transition / output table format:
- * {
- * 'state_1' : {
- * 'event_1' : [
- * {
- * p|predicate: function, // Transition predicate, optional, default to true.
- * // If array then conjunction will be applyed to the operands.
- * // Predicate signature is (data, event, this).
- * a|action: function|array, // Transition action, optional, default to Ext.emptyFn.
- * // If array then methods will be called sequentially.
- * // Action signature is (data, event, this).
- * s|state: 'state_x', // New state - transition destination, optional, default to
- * // current state.
- * scope: object // Predicate and action scope, optional, default to
- * // trans_table_scope or window.
- * }
- * ]
- * },
- *
- * 'state_2' : {
- * ...
- * }
- * ...
- * }
- *
- * @param mixed initial_state Initial state.
- * @param object trans_table Transition / output table.
- * @param trans_table_scope Transition / output table's methods scope.
- */
- Ext.ux.Utils.FSA = function(initial_state, trans_table, trans_table_scope) {
- this.current_state = initial_state;
- this.trans_table = trans_table || {};
- this.trans_table_scope = trans_table_scope || window;
- Ext.ux.Utils.FSA.superclass.constructor.call(this, this.processEvent, this);
- };
- Ext.extend(Ext.ux.Utils.FSA, Ext.ux.Utils.EventQueue,{
- current_state : null,
- trans_table : null,
- trans_table_scope : null,
-
- /**
- * Returns current state
- *
- * @access public
- * @return mixed Current state.
- */
- state : function() {
- return this.current_state;
- },
-
- /**
- * @access public
- */
- processEvent : function(event, data) {
- var transitions = this.currentStateEventTransitions(event);
- if (!transitions) {
- throw "State '" + this.current_state + "' has no transition for event '" + event + "'.";
- }
- for (var i = 0, len = transitions.length; i < len; i++) {
- var transition = transitions[i];
- var predicate = transition.predicate || transition.p || true;
- var action = transition.action || transition.a || Ext.emptyFn;
- var new_state = transition.state || transition.s || this.current_state;
- var scope = transition.scope || this.trans_table_scope;
-
- if (this.computePredicate(predicate, scope, data, event)) {
- this.callAction(action, scope, data, event);
- this.current_state = new_state;
- return;
- }
- }
-
- throw "State '" + this.current_state + "' has no transition for event '" + event + "' in current context";
- },
-
- /**
- * @access private
- */
- currentStateEventTransitions : function(event) {
- return this.trans_table[this.current_state] ?
- this.trans_table[this.current_state][event] || false
- :
- false;
- },
-
- /**
- * @access private
- */
- computePredicate : function(predicate, scope, data, event) {
- var result = false;
-
- switch (Ext.type(predicate)) {
- case 'function':
- result = predicate.call(scope, data, event, this);
- break;
- case 'array':
- result = true;
- for (var i = 0, len = predicate.length; result && (i < len); i++) {
- if (Ext.type(predicate[i]) == 'function') {
- result = predicate[i].call(scope, data, event, this);
- }
- else {
- throw [
- 'Predicate: ',
- predicate[i],
- ' is not callable in "',
- this.current_state,
- '" state for event "',
- event
- ].join('');
- }
- }
- break;
- case 'boolean':
- result = predicate;
- break;
- default:
- throw [
- 'Predicate: ',
- predicate,
- ' is not callable in "',
- this.current_state,
- '" state for event "',
- event
- ].join('');
- }
- return result;
- },
-
- /**
- * @access private
- */
- callAction : function(action, scope, data, event)
- {
- switch (Ext.type(action)) {
- case 'array':
- for (var i = 0, len = action.length; i < len; i++) {
- if (Ext.type(action[i]) == 'function') {
- action[i].call(scope, data, event, this);
- }
- else {
- throw [
- 'Action: ',
- action[i],
- ' is not callable in "',
- this.current_state,
- '" state for event "',
- event
- ].join('');
- }
- }
- break;
- case 'function':
- action.call(scope, data, event, this);
- break;
- default:
- throw [
- 'Action: ',
- action,
- ' is not callable in "',
- this.current_state,
- '" state for event "',
- event
- ].join('');
- }
- }
- });
- // ---------------------------------------------------------------------------------------------- //
- /**
- * Ext.ux.UploadDialog namespace.
- */
- Ext.namespace('Ext.ux.UploadDialog');
- /**
- * File upload browse button.
- *
- * @class Ext.ux.UploadDialog.BrowseButton
- */
- Ext.ux.UploadDialog.BrowseButton = Ext.extend(Ext.Button,{
- input_name : 'file',
-
- input_file : null,
-
- original_handler : null,
-
- original_scope : null,
-
- /**
- * @access private
- */
- initComponent : function()
- {
- Ext.ux.UploadDialog.BrowseButton.superclass.initComponent.call(this);
- this.original_handler = this.handler || null;
- this.original_scope = this.scope || window;
- this.handler = null;
- this.scope = null;
- },
-
- /**
- * @access private
- */
- onRender : function(ct, position)
- {
- Ext.ux.UploadDialog.BrowseButton.superclass.onRender.call(this, ct, position);
- this.createInputFile();
- },
-
- /**
- * @access private
- */
- createInputFile : function()
- {
- var button_container = this.el;
- button_container.position('relative');
- this.wrap = this.el.wrap({cls:'tbody'});
- this.input_file = this.wrap.createChild({
- tag: 'input',
- type: 'file',
- size: 1,
- name: this.input_name || Ext.id(this.el),
- style: "position: absolute; display: block; border: none; cursor: pointer"
- });
- this.input_file.setOpacity(0.0);
-
- var button_box = button_container.getBox();
- this.input_file.setStyle('font-size', (button_box.width * 0.5) + 'px');
- var input_box = this.input_file.getBox();
- var adj = {x: 3, y: 3}
- if (Ext.isIE) {
- adj = {x: 0, y: 3}
- }
-
- this.input_file.setLeft(button_box.width - input_box.width + adj.x + 'px');
- this.input_file.setTop(button_box.height - input_box.height + adj.y + 'px');
- this.input_file.setOpacity(0.0);
-
- if (this.handleMouseEvents) {
- this.input_file.on('mouseover', this.onMouseOver, this);
- this.input_file.on('mousedown', this.onMouseDown, this);
- }
-
- if(this.tooltip){
- if(typeof this.tooltip == 'object'){
- Ext.QuickTips.register(Ext.apply({target: this.input_file}, this.tooltip));
- }
- else {
- this.input_file.dom[this.tooltipType] = this.tooltip;
- }
- }
-
- this.input_file.on('change', this.onInputFileChange, this);
- this.input_file.on('click', function(e) { e.stopPropagation(); });
- },
-
- /**
- * @access public
- */
- detachInputFile : function(no_create)
- {
- var result = this.input_file;
-
- no_create = no_create || false;
-
- if (typeof this.tooltip == 'object') {
- Ext.QuickTips.unregister(this.input_file);
- }
- else {
- this.input_file.dom[this.tooltipType] = null;
- }
- this.input_file.removeAllListeners();
- this.input_file = null;
-
- if (!no_create) {
- this.createInputFile();
- }
- return result;
- },
-
- /**
- * @access public
- */
- getInputFile : function()
- {
- return this.input_file;
- },
-
- /**
- * @access public
- */
- disable : function()
- {
- Ext.ux.UploadDialog.BrowseButton.superclass.disable.call(this);
- this.input_file.dom.disabled = true;
- },
-
- /**
- * @access public
- */
- enable : function()
- {
- Ext.ux.UploadDialog.BrowseButton.superclass.enable.call(this);
- this.input_file.dom.disabled = false;
- },
-
- /**
- * @access public
- */
- destroy : function()
- {
- var input_file = this.detachInputFile(true);
- input_file.remove();
- input_file = null;
- Ext.ux.UploadDialog.BrowseButton.superclass.destroy.call(this);
- },
-
- /**
- * @access private
- */
- onInputFileChange : function()
- {
- if (this.original_handler) {
- this.original_handler.call(this.original_scope, this);
- }
- }
- });
- /**
- * Toolbar file upload browse button.
- *
- * @class Ext.ux.UploadDialog.TBBrowseButton
- */
- Ext.ux.UploadDialog.TBBrowseButton = Ext.extend(Ext.ux.UploadDialog.BrowseButton,{
- hideParent : true
- ,onDestroy : function() {
- Ext.ux.UploadDialog.TBBrowseButton.superclass.onDestroy.call(this);
- if(this.container) {
- this.container.remove();
- }
- }
- });
- /**
- * Record type for dialogs grid.
- *
- * @class Ext.ux.UploadDialog.FileRecord
- */
- Ext.ux.UploadDialog.FileRecord = Ext.data.Record.create([
- {name: 'filename'},
- {name: 'state', type: 'int'},
- {name: 'note'},
- {name: 'input_element'}
- ]);
- Ext.ux.UploadDialog.FileRecord.STATE_QUEUE = 0;
- Ext.ux.UploadDialog.FileRecord.STATE_FINISHED = 1;
- Ext.ux.UploadDialog.FileRecord.STATE_FAILED = 2;
- Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING = 3;
- /**
- * Dialog class.
- *
- * @class Ext.ux.UploadDialog.Dialog
- */
- Ext.ux.UploadDialog.Dialog = function(config) {
- var default_config = {
- border: false,
- width: 600,
- height: 350,
- // minWidth: 450,
- minHeight: 350,
- plain: true,
- constrainHeader: true,
- draggable: true,
- closable: true,
- maximizable: false,
- minimizable: false,
- resizable: true,
-
- layout:'fit',
- region:'center',
- autoDestroy: true,
- closeAction: 'hide',
- title: this.i18n.title,
- cls: 'ext-ux-uploaddialog-dialog',
- // --------
- url: '',
- base_params: {},
- permitted_extensions: [],
- reset_on_hide: true,
- allow_close_on_upload: false,
- upload_autostart: false,
- Make_Reload: false,
- post_var_name: 'file'
- };
- config = Ext.applyIf(config || {}, default_config);
- config.layout = 'absolute';
-
- Ext.ux.UploadDialog.Dialog.superclass.constructor.call(this, config);
- };
- Ext.extend(Ext.ux.UploadDialog.Dialog, Ext.Window,{
- fsa : null,
-
- state_tpl : null,
-
- form : null,
-
- grid_panel : null,
-
- progress_bar : null,
-
- is_uploading : false,
-
- initial_queued_count : 0,
-
- upload_frame : null,
-
- /**
- * @access private
- */
- //--------------------------------------------------------------------------------------------- //
- initComponent : function() {
- Ext.ux.UploadDialog.Dialog.superclass.initComponent.call(this);
-
- // Setting automata protocol
- var tt = {
- // --------------
- 'created' : {
- // --------------
- 'window-render' : [
- {
- action: [this.createForm, this.createProgressBar, this.createGrid],
- state: 'rendering'
- }
- ],
- 'destroy' : [
- {
- action: this.flushEventQueue,
- state: 'destroyed'
- }
- ]
- },
- // --------------
- 'rendering' : {
- // --------------
- 'grid-render' : [
- {
- action: [this.fillToolbar, this.updateToolbar],
- state: 'ready'
- }
- ],
- 'destroy' : [
- {
- action: this.flushEventQueue,
- state: 'destroyed'
- }
- ]
- },
- // --------------
- 'ready' : {
- // --------------
- 'file-selected' : [
- {
- predicate: [this.fireFileTestEvent, this.isPermittedFile],
- action: this.addFileToUploadQueue,
- state: 'adding-file'
- },
- {
- // If file is not permitted then do nothing.
- }
- ],
- 'grid-selection-change' : [
- {
- action: this.updateToolbar
- }
- ],
- 'remove-files' : [
- {
- action: [this.removeFiles, this.fireFileRemoveEvent]
- }
- ],
- 'reset-queue' : [
- {
- action: [this.resetQueue, this.fireResetQueueEvent]
- }
- ],
- 'start-upload' : [
- {
- predicate: this.hasUnuploadedFiles,
- action: [
- this.setUploadingFlag, this.saveInitialQueuedCount, this.updateToolbar,
- this.updateProgressBar, this.prepareNextUploadTask, this.fireUploadStartEvent
- ],
- state: 'uploading'
- },
- {
- // Has nothing to upload, do nothing.
- }
- ],
- 'stop-upload' : [
- {
- // We are not uploading, do nothing. Can be posted by user only at this state.
- }
- ],
- 'hide' : [
- {
- predicate: [this.isNotEmptyQueue, this.getResetOnHide],
- action: [this.resetQueue, this.fireResetQueueEvent]
- },
- {
- // Do nothing
- }
- ],
- 'destroy' : [
- {
- action: this.flushEventQueue,
- state: 'destroyed'
- }
- ]
- },
- // --------------
- 'adding-file' : {
- // --------------
- 'file-added' : [
- {
- predicate: this.isUploading,
- action: [this.incInitialQueuedCount, this.updateProgressBar, this.fireFileAddEvent],
- state: 'uploading'
- },
- {
- predicate: this.getUploadAutostart,
- action: [this.startUpload, this.fireFileAddEvent],
- state: 'ready'
- },
- {
- action: [this.updateToolbar, this.fireFileAddEvent],
- state: 'ready'
- }
- ]
- },
- // --------------
- 'uploading' : {
- // --------------
- 'file-selected' : [
- {
- predicate: [this.fireFileTestEvent, this.isPermittedFile],
- action: this.addFileToUploadQueue,
- state: 'adding-file'
- },
- {
- // If file is not permitted then do nothing.
- }
- ],
- 'grid-selection-change' : [
- {
- // Do nothing.
- }
- ],
- 'start-upload' : [
- {
- // Can be posted only by user in this state.
- }
- ],
- 'stop-upload' : [
- {
- predicate: this.hasUnuploadedFiles,
- action: [
- this.resetUploadingFlag, this.abortUpload, this.updateToolbar,
- this.updateProgressBar, this.fireUploadStopEvent
- ],
- state: 'ready'
- },
- {
- action: [
- this.resetUploadingFlag, this.abortUpload, this.updateToolbar,
- this.updateProgressBar, this.fireUploadStopEvent, this.fireUploadCompleteEvent
- ],
- state: 'ready'
- }
- ],
- 'file-upload-start' : [
- {
- action: [this.uploadFile, this.findUploadFrame, this.fireFileUploadStartEvent]
- }
- ],
- 'file-upload-success' : [
- {
- predicate: this.hasUnuploadedFiles,
- action: [
- this.resetUploadFrame, this.updateRecordState, this.updateProgressBar,
- this.prepareNextUploadTask, this.fireUploadSuccessEvent
- ]
- },
- {
- action: [
- this.resetUploadFrame, this.resetUploadingFlag, this.updateRecordState,
- this.updateToolbar, this.updateProgressBar, this.fireUploadSuccessEvent,
- this.fireUploadCompleteEvent
- ],
- state: 'ready'
- }
- ],
- 'file-upload-error' : [
- {
- predicate: this.hasUnuploadedFiles,
- action: [
- this.resetUploadFrame, this.updateRecordState, this.updateProgressBar,
- this.prepareNextUploadTask, this.fireUploadErrorEvent
- ]
- },
- {
- action: [
- this.resetUploadFrame, this.resetUploadingFlag, this.updateRecordState,
- this.updateToolbar, this.updateProgressBar, this.fireUploadErrorEvent,
- this.fireUploadCompleteEvent
- ],
- state: 'ready'
- }
- ],
- 'file-upload-failed' : [
- {
- predicate: this.hasUnuploadedFiles,
- action: [
- this.resetUploadFrame, this.updateRecordState, this.updateProgressBar,
- this.prepareNextUploadTask, this.fireUploadFailedEvent
- ]
- },
- {
- action: [
- this.resetUploadFrame, this.resetUploadingFlag, this.updateRecordState,
- this.updateToolbar, this.updateProgressBar, this.fireUploadFailedEvent,
- this.fireUploadCompleteEvent
- ],
- state: 'ready'
- }
- ],
- 'hide' : [
- {
- predicate: this.getResetOnHide,
- action: [this.stopUpload, this.repostHide]
- },
- {
- // Do nothing.
- }
- ],
- 'destroy' : [
- {
- predicate: this.hasUnuploadedFiles,
- action: [
- this.resetUploadingFlag, this.abortUpload,
- this.fireUploadStopEvent, this.flushEventQueue
- ],
- state: 'destroyed'
- },
- {
- action: [
- this.resetUploadingFlag, this.abortUpload,
- this.fireUploadStopEvent, this.fireUploadCompleteEvent, this.flushEventQueue
- ],
- state: 'destroyed'
- }
- ]
- },
- // --------------
- 'destroyed' : {
- // --------------
- }
- };
- this.fsa = new Ext.ux.Utils.FSA('created', tt, this);
-
- // Registering dialog events.
- this.addEvents({
- 'filetest': true
- ,'fileadd' : true
- ,'fileremove' : true
- ,'resetqueue' : true
- ,'uploadsuccess' : true
- ,'uploaderror' : true
- ,'uploadfailed' : true
- ,'uploadstart' : true
- ,'uploadstop' : true
- ,'uploadcomplete' : true
- ,'fileuploadstart' : true
- });
-
- // Attaching to window events.
- this.on('render', this.onWindowRender, this);
- this.on('beforehide', this.onWindowBeforeHide, this);
- this.on('hide', this.onWindowHide, this);
- this.on('destroy', this.onWindowDestroy, this);
-
- // Compiling state template.
- this.state_tpl = new Ext.Template(
- "<div class='ext-ux-uploaddialog-state ext-ux-uploaddialog-state-{state}'> </div>"
- ).compile();
- },
-
- createForm : function()
- {
- this.form = Ext.DomHelper.append(this.body, {
- tag: 'form',
- method: 'post',
- action: this.url,
- style: 'position: absolute; left: -100px; top: -100px; width: 100px; height: 100px; clear: both;'
- });
- },
-
- createProgressBar : function()
- {
- this.progress_bar = this.add(
- new Ext.ProgressBar({
- x: 0,
- y: 0,
- anchor: '0',
- value: 0.0,
- text: this.i18n.progress_waiting_text
- })
- );
- },
-
- createGrid : function()
- {
- var store = new Ext.data.Store({
- proxy: new Ext.data.MemoryProxy([]),
- reader: new Ext.data.JsonReader({}, Ext.ux.UploadDialog.FileRecord),
- sortInfo: {field: 'state', direction: 'DESC'},
- pruneModifiedRecords: true
- });
-
- var cm = new Ext.grid.ColumnModel([
- {
- header: this.i18n.state_col_title,
- width: this.i18n.state_col_width,
- resizable: false,
- dataIndex: 'state',
- sortable: true,
- renderer: this.renderStateCell.createDelegate(this)
- },
- {
- header: this.i18n.filename_col_title,
- width: this.i18n.filename_col_width,
- dataIndex: 'filename',
- sortable: true,
- renderer: this.renderFilenameCell.createDelegate(this)
- },
- {
- header: this.i18n.note_col_title,
- width: this.i18n.note_col_width,
- dataIndex: 'note',
- sortable: true,
- renderer: this.renderNoteCell.createDelegate(this)
- }
- ]);
- this.grid_panel = new Ext.grid.GridPanel({
- ds: store,
- cm: cm,
- layout:'fit',
- height: this.height-100,
- region:'center',
- x: 0,
- y: 22,
- border: true,
-
- viewConfig: {
- autoFill: true,
- forceFit: true
- },
-
- bbar : new Ext.Toolbar()
- });
- this.grid_panel.on('render', this.onGridRender, this);
-
- this.add(this.grid_panel);
-
- this.grid_panel.getSelectionModel().on('selectionchange', this.onGridSelectionChange, this);
- },
-
- fillToolbar : function()
- {
- var tb = this.grid_panel.getBottomToolbar();
- tb.x_buttons = {}
-
- tb.x_buttons.add = tb.addItem(new Ext.ux.UploadDialog.TBBrowseButton({
- input_name: this.post_var_name,
- text: this.i18n.add_btn_text,
- tooltip: this.i18n.add_btn_tip,
- iconCls: 'ext-ux-uploaddialog-addbtn',
- handler: this.onAddButtonFileSelected,
- scope: this
- }));
- tb.x_buttons.remove = tb.addButton({
- text: this.i18n.remove_btn_text,
- tooltip: this.i18n.remove_btn_tip,
- iconCls: 'ext-ux-uploaddialog-removebtn',
- handler: this.onRemoveButtonClick,
- scope: this
- });
- tb.x_buttons.reset = tb.addButton({
- text: this.i18n.reset_btn_text,
- tooltip: this.i18n.reset_btn_tip,
- iconCls: 'ext-ux-uploaddialog-resetbtn',
- handler: this.onResetButtonClick,
- scope: this
- });
- tb.x_buttons.upload = tb.addButton({
- text: this.i18n.upload_btn_start_text,
- tooltip: this.i18n.upload_btn_start_tip,
- iconCls: 'ext-ux-uploaddialog-uploadstartbtn',
- handler: this.onUploadButtonClick,
- scope: this
- });
- tb.x_buttons.close = tb.addButton({
- text: this.i18n.close_btn_text,
- tooltip: this.i18n.close_btn_tip,
- handler: this.onCloseButtonClick,
- scope: this
- });
- },
-
- renderStateCell : function(data, cell, record, row_index, column_index, store)
- {
- return this.state_tpl.apply({state: data});
- },
-
- renderFilenameCell : function(data, cell, record, row_index, column_index, store)
- {
- var view = this.grid_panel.getView();
- var f = function() {
- try {
- Ext.fly(
- view.getCell(row_index, column_index)
- ).child('.x-grid3-cell-inner').dom['qtip'] = data;
- }
- catch (e)
- {}
- }
- f.defer(1000);
- return data;
- },
-
- renderNoteCell : function(data, cell, record, row_index, column_index, store)
- {
- var view = this.grid_panel.getView();
- var f = function() {
- try {
- Ext.fly(
- view.getCell(row_index, column_index)
- ).child('.x-grid3-cell-inner').dom['qtip'] = data;
- }
- catch (e)
- {}
- }
- f.defer(1000);
- return data;
- },
-
- getFileExtension : function(filename)
- {
- var result = null;
- var parts = filename.split('.');
- if (parts.length > 1) {
- result = parts.pop();
- }
- return result;
- },
-
- isPermittedFileType : function(filename)
- {
- var result = true;
- if (this.permitted_extensions.length > 0) {
- result = this.permitted_extensions.indexOf(this.getFileExtension(filename)) != -1;
- }
- return result;
- },
- isPermittedFile : function(browse_btn)
- {
- var result = false;
- var filename = browse_btn.getInputFile().dom.value;
-
- if (this.isPermittedFileType(filename)) {
- result = true;
- }
- else {
- Ext.Msg.alert(
- this.i18n.error_msgbox_title,
- String.format(
- this.i18n.err_file_type_not_permitted,
- filename,
- this.permitted_extensions.join(this.i18n.permitted_extensions_join_str)
- )
- );
- result = false;
- }
-
- return result;
- },
-
- fireFileTestEvent : function(browse_btn)
- {
- return this.fireEvent('filetest', this, browse_btn.getInputFile().dom.value) !== false;
- },
-
- addFileToUploadQueue : function(browse_btn)
- {
- var input_file = browse_btn.detachInputFile();
-
- input_file.appendTo(this.form);
- input_file.setStyle('width', '100px');
- input_file.dom.disabled = true;
-
- var store = this.grid_panel.getStore();
- var fileApi = input_file.dom.files;
- var filename = (typeof fileApi != 'undefined') ? fileApi[0].name : input_file.dom.value.replace("C:\\fakepath\\", "");
- store.add(new Ext.ux.UploadDialog.FileRecord({
- state: Ext.ux.UploadDialog.FileRecord.STATE_QUEUE
- ,filename: filename
- ,note: this.i18n.note_queued_to_upload
- ,input_element: input_file
- }));
- this.fsa.postEvent('file-added', input_file.dom.value);
- },
-
- fireFileAddEvent : function(filename)
- {
- this.fireEvent('fileadd', this, filename);
- },
-
- updateProgressBar : function()
- {
- if (this.is_uploading) {
- var queued = this.getQueuedCount(true);
- var value = 1 - queued / this.initial_queued_count;
- this.progress_bar.updateProgress(value,String.format(this.i18n.progress_uploading_text,this.initial_queued_count - queued,this.initial_queued_count));
- }
- else {
- this.progress_bar.updateProgress(0, this.i18n.progress_waiting_text);
- }
- },
-
- updateToolbar : function() {
- var tb = this.grid_panel.getBottomToolbar();
- if (this.is_uploading) {
- tb.x_buttons.remove.disable();
- tb.x_buttons.reset.disable();
- tb.x_buttons.upload.enable();
- if (!this.getAllowCloseOnUpload()) {
- tb.x_buttons.close.disable();
- }
- tb.x_buttons.upload.setIconClass('ext-ux-uploaddialog-uploadstopbtn');
- tb.x_buttons.upload.setText(this.i18n.upload_btn_stop_text);
- tb.x_buttons.upload.getEl()
- .child(tb.x_buttons.upload.buttonSelector)
- .dom[tb.x_buttons.upload.tooltipType] = this.i18n.upload_btn_stop_tip;
- }
- else {
- tb.x_buttons.remove.enable();
- tb.x_buttons.reset.enable();
- tb.x_buttons.close.enable();
- tb.x_buttons.upload.setIconClass('ext-ux-uploaddialog-uploadstartbtn');
- tb.x_buttons.upload.setText(this.i18n.upload_btn_start_text);
-
- if (this.getQueuedCount() > 0) {
- tb.x_buttons.upload.enable();
- }
- else {
- tb.x_buttons.upload.disable();
- }
-
- if (this.grid_panel.getSelectionModel().hasSelection()) {
- tb.x_buttons.remove.enable();
- }
- else {
- tb.x_buttons.remove.disable();
- }
-
- if (this.grid_panel.getStore().getCount() > 0) {
- tb.x_buttons.reset.enable();
- }
- else {
- tb.x_buttons.reset.disable();
- }
- }
- },
-
- saveInitialQueuedCount : function()
- {
- this.initial_queued_count = this.getQueuedCount();
- },
-
- incInitialQueuedCount : function()
- {
- this.initial_queued_count++;
- },
-
- setUploadingFlag : function()
- {
- this.is_uploading = true;
- },
-
- resetUploadingFlag : function()
- {
- this.is_uploading = false;
- },
- prepareNextUploadTask : function()
- {
- // Searching for first unuploaded file.
- var store = this.grid_panel.getStore();
- var record = null;
-
- store.each(function(r) {
- if (!record && r.get('state') == Ext.ux.UploadDialog.FileRecord.STATE_QUEUE) {
- record = r;
- }
- else {
- r.get('input_element').dom.disabled = true;
- }
- });
-
- record.get('input_element').dom.disabled = false;
- record.set('state', Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING);
- record.set('note', this.i18n.note_processing);
- record.commit();
-
- this.fsa.postEvent('file-upload-start', record);
- },
-
- fireUploadStartEvent : function()
- {
- this.fireEvent('uploadstart', this);
- },
-
- removeFiles : function(file_records)
- {
- var store = this.grid_panel.getStore();
- for (var i = 0, len = file_records.length; i < len; i++) {
- var r = file_records[i];
- r.get('input_element').remove();
- store.remove(r);
- }
- },
-
- fireFileRemoveEvent : function(file_records)
- {
- for (var i = 0, len = file_records.length; i < len; i++) {
- this.fireEvent('fileremove', this, file_records[i].get('filename'));
- }
- },
-
- resetQueue : function() {
- var store = this.grid_panel.getStore();
- store.each(function(r) {
- r.get('input_element').remove();
- });
- store.removeAll();
- },
-
- fireResetQueueEvent : function() {
- this.fireEvent('resetqueue', this);
- }
-
- ,uploadFile : function(record) {
- Ext.Ajax.request({
- url: this.url
- ,params: this.base_params || this.baseParams || this.params
- ,method: 'POST'
- ,form: this.form
- ,isUpload: true
- ,success: this.onAjaxSuccess
- ,failure: this.onAjaxFailure
- ,scope: this
- ,record: record
- });
- },
-
- fireFileUploadStartEvent : function(record)
- {
- this.fireEvent('fileuploadstart', this, record.get('filename'));
- },
-
- updateRecordState : function(data)
- {
- if ('success' in data.response && data.response.success) {
- data.record.set('state', Ext.ux.UploadDialog.FileRecord.STATE_FINISHED);
- data.record.set(
- 'note', data.response.message || data.response.error || this.i18n.note_upload_success
- );
- }
- else {
- data.record.set('state', Ext.ux.UploadDialog.FileRecord.STATE_FAILED);
- data.record.set(
- 'note', data.response.message || data.response.error || this.i18n.note_upload_error
- );
- }
-
- data.record.commit();
- },
-
- fireUploadSuccessEvent : function(data)
- {
- this.fireEvent('uploadsuccess', this, data.record.get('filename'), data.response);
- },
-
- fireUploadErrorEvent : function(data)
- {
- this.fireEvent('uploaderror', this, data.record.get('filename'), data.response);
- },
-
- fireUploadFailedEvent : function(data)
- {
- this.fireEvent('uploadfailed', this, data.record.get('filename'));
- },
-
- fireUploadCompleteEvent : function()
- {
- this.fireEvent('uploadcomplete', this);
- },
-
- findUploadFrame : function()
- {
- this.upload_frame = Ext.getBody().child('iframe.x-hidden:last');
- },
-
- resetUploadFrame : function()
- {
- this.upload_frame = null;
- },
-
- removeUploadFrame : function()
- {
- if (this.upload_frame) {
- this.upload_frame.removeAllListeners();
- this.upload_frame.dom.src = 'about:blank';
- this.upload_frame.remove();
- }
- this.upload_frame = null;
- },
-
- abortUpload : function()
- {
- this.removeUploadFrame();
-
- var store = this.grid_panel.getStore();
- var record = null;
- store.each(function(r) {
- if (r.get('state') == Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING) {
- record = r;
- return false;
- }
- });
-
- record.set('state', Ext.ux.UploadDialog.FileRecord.STATE_FAILED);
- record.set('note', this.i18n.note_aborted);
- record.commit();
- },
-
- fireUploadStopEvent : function()
- {
- this.fireEvent('uploadstop', this);
- },
-
- repostHide : function()
- {
- this.fsa.postEvent('hide');
- },
-
- flushEventQueue : function()
- {
- this.fsa.flushEventQueue();
- },
-
- /**
- * @access private
- */
- // -------------------------------------------------------------------------------------------- //
- onWindowRender : function()
- {
- this.fsa.postEvent('window-render');
- },
-
- onWindowBeforeHide : function()
- {
- return this.isUploading() ? this.getAllowCloseOnUpload() : true;
- },
-
- onWindowHide : function()
- {
- this.fsa.postEvent('hide');
- },
-
- onWindowDestroy : function()
- {
- this.fsa.postEvent('destroy');
- },
-
- onGridRender : function()
- {
- this.fsa.postEvent('grid-render');
- },
-
- onGridSelectionChange : function()
- {
- this.fsa.postEvent('grid-selection-change');
- },
-
- onAddButtonFileSelected : function(btn)
- {
- this.fsa.postEvent('file-selected', btn);
- },
-
- onUploadButtonClick : function()
- {
- if (this.is_uploading) {
- this.fsa.postEvent('stop-upload');
- }
- else {
- this.fsa.postEvent('start-upload');
- }
- },
-
- onRemoveButtonClick : function()
- {
- var selections = this.grid_panel.getSelectionModel().getSelections();
- this.fsa.postEvent('remove-files', selections);
- },
-
- onResetButtonClick : function()
- {
- this.fsa.postEvent('reset-queue');
- },
-
- onCloseButtonClick : function()
- {
- this[this.closeAction].call(this);
- if(this.Make_Reload == true){
- document.location.reload();
- }
- },
-
- onAjaxSuccess : function(response, options) {
- var json_response = {
- 'success' : false,
- 'error' : this.i18n.note_upload_error
- }
- try {
- var rt = response.responseText;
- var filter = rt.match(/^<pre>((?:.|\n)*)<\/pre>$/i);
- if (filter) {
- rt = filter[1];
- }
- json_response = Ext.util.JSON.decode(rt);
- }
- catch (e) {}
-
- var data = {
- record: options.record,
- response: json_response
- }
-
- if ('success' in json_response && json_response.success) {
- this.fsa.postEvent('file-upload-success', data);
- }
- else {
- this.fsa.postEvent('file-upload-error', data);
- }
- },
-
- onAjaxFailure : function(response, options)
- {
- var data = {
- record : options.record,
- response : {
- 'success' : false,
- 'error' : this.i18n.note_upload_failed
- }
- }
- this.fsa.postEvent('file-upload-failed', data);
- },
-
- /**
- * @access public
- */
- // -------------------------------------------------------------------------------------------- //
- startUpload : function()
- {
- this.fsa.postEvent('start-upload');
- },
-
- stopUpload : function()
- {
- this.fsa.postEvent('stop-upload');
- },
-
- getUrl : function()
- {
- return this.url;
- },
-
- setUrl : function(url)
- {
- this.url = url;
- },
-
- getBaseParams : function()
- {
- return this.base_params;
- },
-
- setBaseParams : function(params)
- {
- this.base_params = params;
- },
-
- getUploadAutostart : function()
- {
- return this.upload_autostart;
- },
-
- setUploadAutostart : function(value)
- {
- this.upload_autostart = value;
- },
-
- ///////////EIGENE ERWEITERUNG RELOAD EXT//////////////////////
-
- getMakeReload : function()
- {
- return this.Make_Reload;
- },
-
- setMakeReload : function(value)
- {
- this.Make_Reload = value;
- }
-
- ///////////EIGENE ERWEITERUNG RELOAD EXT//////////////////////
-
- ,getAllowCloseOnUpload : function() {
- return this.allow_close_on_upload;
- }
-
- ,setAllowCloseOnUpload : function(value) {
- this.allow_close_on_upload;
- }
-
- ,getResetOnHide : function() {
- return this.reset_on_hide;
- }
-
- ,setResetOnHide : function(value) {
- this.reset_on_hide = value;
- }
-
- ,getPermittedExtensions : function() {
- return this.permitted_extensions;
- }
-
- ,setPermittedExtensions : function(value) {
- this.permitted_extensions = value;
- }
-
- ,isUploading : function() {
- return this.is_uploading;
- }
-
- ,isNotEmptyQueue : function() {
- return this.grid_panel.getStore().getCount() > 0;
- }
-
- ,getQueuedCount : function(count_processing) {
- var count = 0;
- var store = this.grid_panel.getStore();
- store.each(function(r) {
- if (r.get('state') == Ext.ux.UploadDialog.FileRecord.STATE_QUEUE) {
- count++;
- }
- if (count_processing && r.get('state') == Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING) {
- count++;
- }
- });
- return count;
- }
-
- ,hasUnuploadedFiles : function() {
- return this.getQueuedCount() > 0;
- }
- });
- // ---------------------------------------------------------------------------------------------- //
- var p = Ext.ux.UploadDialog.Dialog.prototype;
- p.i18n = {
- title: _('upload_files')
- ,state_col_title: _('upf_state')
- ,state_col_width: 70
- ,filename_col_title: _('upf_filename')
- ,filename_col_width: 230
- ,note_col_title: _('upf_note')
- ,note_col_width: 150
- ,add_btn_text: _('upf_add')
- ,add_btn_tip: _('upf_add_desc')
- ,remove_btn_text: _('upf_remove')
- ,remove_btn_tip: _('upf_remove_desc')
- ,reset_btn_text: _('upf_reset')
- ,reset_btn_tip: _('upf_reset_desc')
- ,upload_btn_start_text: _('upf_upload')
- ,upload_btn_start_tip: _('upf_upload_desc')
- ,upload_btn_stop_text: _('upf_abort')
- ,upload_btn_stop_tip: _('upf_abort_desc')
- ,close_btn_text: _('upf_close')
- ,close_btn_tip: _('upf_close_desc')
- ,progress_waiting_text: _('upf_progress_wait')
- ,progress_uploading_text: _('upf_uploading_desc')
- ,error_msgbox_title: _('upf_error')
- ,permitted_extensions_join_str: ','
- ,err_file_type_not_permitted: _('upf_err_filetype')
- ,note_queued_to_upload: _('upf_queued')
- ,note_processing: _('upf_uploading')
- ,note_upload_failed: _('upf_err_failed')
- ,note_upload_success: _('upf_success')
- ,note_upload_error: _('upf_upload_err')
- ,note_aborted: _('upf_aborted')
- };
|