%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/image_uploader/ |
Current File : /home/bitrix/www/bitrix/image_uploader/aurigma.uploader.js |
(function(window, undefined) { var axVERSION = '7.0.37.0', jVERSION = '7.0.37.0'; var uploaderClassID = '7ECB1A47-6647-4B2C-A8DA-675569C9FF15', uploaderProgID='Aurigma.Uploader.7037.1'; var thumbnailClassID = '493B5A90-6B34-44BF-9CB4-37B22E511415', thumbnailProgID = 'Aurigma.Thumbnail.7037.1'; var // Global entry AU = window.Aurigma ? (window.Aurigma.ImageUploader || {}) : {}, undefinedStr = 'undefined', objectCache = AU._objectCache || (AU._objectCache = { _cache: {}, _uid: 0, put: function (obj) { if (typeof obj != undefinedStr) { var id = obj.id() || ('_obj' + (++this._uid)); obj._cacheId = id; this._cache[id] = obj; } }, get: function (id) { var c = this._cache; if (c[id]) { return c[id]; } else { for (var i = 0, imax = c.length; i < imax; i++) { if (c[i] && c[i].id() === id) { return c[i]; } } return null; } } }), browser = AU.browser = new (function () { var a = navigator.userAgent.toLowerCase(); this.isOpera = (a.indexOf("opera") > -1); this.isKonq = (a.indexOf("konqueror") > -1); this.isChrome = (a.indexOf("chrome") > -1); this.isSafari = (a.indexOf("safari") > -1) && !this.isChrome; this.isKhtml = this.isSafari || this.isKonq || this.isChrome; this.isIE = (a.indexOf("msie") != -1) && !this.isOpera; this.isIE6XPSP2 = this.isIE && (a.indexOf("sv1") > -1); this.isIE7 = this.isIE && (a.indexOf("msie 7.0") > -1); this.isIE8 = this.isIE && (a.indexOf("msie 8.0") > -1); this.isIE9 = this.isIE && (a.indexOf("msie 9.0") > -1); this.isBeforeIE6XPSP2 = this.isIE && !this.isIE6XPSP2 && !this.isIE7 && !this.isIE8 && !this.isIE9; this.isWinIE = this.isIE && (a.indexOf('mac') == -1); this.isIE64 = this.isIE && (a.indexOf('win64') > -1); this.isFF = (a.indexOf('firefox') > -1); this.isWindowsOS = (navigator.platform.indexOf("Win") > -1); })(), showInfo = function (msg) { AU.debug().showInfo(msg); }, showError = function (msg) { AU.debug().showError(msg); }, //encode reserved html symbols htmlencode = function (text) { if (text && typeof text.replace === 'function') { var entities = [ ["\"", """], ["'", "'"], ["&", "&"], ["<", "<"], [">", ">"] ]; var rg = /\"|\'|&|<|>/g; return text.replace(rg, function (c) { for (var i = 0, cnt = entities.length; i < cnt; i++) { if (c == entities[i][0]) { return entities[i][1]; } } return c; }); } else { return text; } }, getCurrentUrl = window.getCurrentUrl = function () { return document.location.href; }, // get handler name for event // it will be global function called from uploader control getGlobalHandlerName = function (uploader, eventName) { // pattern: '__uploaderID_eventName' return '__' + uploader.id() + '_' + eventName; }, // get uploader parameters in array of { name: 'name', value: 'value' } objects getParams = function () { /// <summary> /// For internal use only! Get params array for rendering control. /// </summary> var params = [], i, cnt, value, properties = this._simpleProperties; //simple properties just copy to array if (properties && properties.length > 0) { for (i = 0, cnt = this._simpleProperties.length; i < cnt; i++) { if (!properties[i].isAttribute) { value = this[properties[i].name]() + ''; if (value != 'null' && value != undefinedStr) { var name = properties[i].render || properties[i].name; name = name.charAt(0).toUpperCase() + name.substring(1); params.push({ name: name, value: value }); } } } } // getParams from object properties if (this._objectProperties && this._objectProperties.length > 0) { for (i = 0, cnt = this._objectProperties.length; i < cnt; i++) { value = this[this._objectProperties[i].name](); if (typeof value.getParams === "function") { params = params.concat(value.getParams()); } } } return params; }, extend = function (target, options, deep) { // copy reference to target object var name, src, copy; // Handle case when target is a string or something (possible in deep copy) if (typeof target !== "object" && Object.prototype.toString.call(target) !== "[object Function]") { target = {}; } // Only deal with non-null/undefined values if (options != null) { // Extend the base object for (name in options) { src = target[name]; copy = options[name]; // Prevent never-ending loop if (target === copy) { continue; } // Recurse if we're merging object literal values or arrays if (deep && (typeof copy === "object")) { if (!src) { if (Object.prototype.toString.call(copy) === "[object Array]") { src = []; } else { src = {}; } } // Never move original objects, clone them target[name] = extend(src, copy, deep); // Don't bring in undefined values } else if (copy !== undefined) { target[name] = copy; } } } // Return the modified object return target; }, helpers = { prop: function (obj, name, setter, value, options) { options = options || {}; if (options.func) { var p; if (setter) { p = 'set' + name; if (!(p in obj)) { showError('Control have not "' + p + '" property.'); return null; } obj[p](fixValue(value)); } else { p = 'get' + name; if (!(p in obj)) { showError('Control have not "' + p + '" property.'); return null; } return javaUtil.convertToJS(obj[p]()); } } else { if (setter) { obj[name] = value; } else { return obj[name]; } } }, objProp: function (obj, name, setter, value, options) { if (setter) { this.set(obj[name], value); } else { return obj[name]; } }, set: function (obj, options) { for (var name in options) { if (options.hasOwnProperty(name)) { if (typeof obj[name] === 'function') { obj[name](options[name]); } else { showError('"' + name + '" property is not defined.'); } } } } }, propertyMaker = { createSimpleProperty: function (obj, property) { /// <summary> /// Create method with the name property.name for object obj. /// Method works like property: if we pass argument it set new value, /// if we call method without arguments it return stored value. /// </summary> /// <param name="obj" type="Object"> /// The object for which to create a method. /// </param> /// <param name="property" type="Object"> /// The object which contains method name and defaut value. /// </param> if (typeof property.name === 'string') { var field = '_' + property.name; obj[field] = property.defaultValue; obj[property.name] = function () { return helpers.prop(this, field, arguments.length, arguments[0]); }; } }, createObjectProperty: function (obj, property, uploader) { /// <summary> /// Create method with the name property.name for object obj. /// Method works like property: if we pass argument it set new value, /// if we call method wothout arguments it return stored value. /// </summary> /// <param name="obj" type="Object"> /// The object for which to create a method. /// </param> /// <param name="property" type="Object"> /// The object which contains method name and defaut value. /// </param> // Create new object for this property var valueObj = new property.type(); var field = "_" + property.name; obj[field] = valueObj; // Init created object // In init usually we create object's simple and object properties if (typeof property.type.init === 'function') { property.type.init(valueObj, uploader); } else { var errMsg = "Can not create property '" + property.name + "'. 'init' method is not a function."; showError(errMsg); throw errMsg; } obj[property.name] = function () { return helpers.objProp(this, field, arguments.length, arguments[0]); } }, createControlProperty: function (obj, property) { /// <summary> /// Create method with the name property.name for object obj. /// Method works like property: if we pass argument it set new value, /// if we call method wothout arguments it return stored value. /// The value get from or set to the underlying flash, activex or java control. /// </summary> /// <param name="obj" type="Object"> /// The object for which to create a method. /// </param> /// <param name="property" type="Object"> /// The object which contains method name and defaut value. /// </param> if (typeof property.name === 'string' && !property.renderOnly) { try { // save current property value var oldValue = obj[property.name](), uploader = obj._uploader, element = uploader.getElement(); var getter = property.getter, setter = property.setter; if (getter === 1 || setter === 1) { var propName = property.render || property.name; propName = propName.charAt(0).toUpperCase() + propName.substring(1); } // Enable property detection only for windows if (AU.browser.isWindowsOS) { if (getter === 1) { getter = "get" + propName; } if (setter === 1) { setter = "set" + propName; } // Check if get method exist in control if (getter && !(getter in element)) { showInfo('Function "' + getter + '" undefined'); } // Check if set method exist in control // Note it may be just a read only property if (setter && !(setter in element)) { showInfo('Function "' + setter + '" undefined'); } } obj[property.name] = function () { return helpers.prop(element, propName, arguments.length, arguments[0], { func: true }); }; } catch (err) { var msg = "Can't create property '" + property.name + "'.\r\n"; if (typeof err === "string") { err = msg + err; } else { err.message = msg + (err.message || err.description || err); } throw err; } } }, createAttributeProperty: function (obj, property) { /// <summary> /// Create method with the name property.name for object obj. /// Method works like property: if we pass argument it set new value, /// if we call method wothout arguments it return stored value. /// The value get from or set to the underlying element <b>attribute</b>. /// </summary> /// <param name="obj" type="Object"> /// The object for which to create a method. /// </param> /// <param name="property" type="Object"> /// The object which contains method name and defaut value. /// </param> var element = obj._uploader.getElement(), name = property.name; obj[name] = function () { return helpers.prop(element, name, arguments.length, arguments[0]); }; }, createMethod: function (obj, method) { var uploader = obj._uploader, element = uploader.getElement(); var controlMethodName = method.controlMethodName || method.name; obj[method.name] = function () { // We need to pass incominag arguments to control's function. // 'apply' and 'call' does not work for activex and java functions. var arg = arguments; switch (arg.length) { case 0: return element[controlMethodName](); case 1: return element[controlMethodName](fixValue(arg[0])); case 2: return element[controlMethodName](fixValue(arg[0]), fixValue(arg[1])); case 3: return element[controlMethodName](fixValue(arg[0]), fixValue(arg[1]), fixValue(arg[2])); case 4: return element[controlMethodName](fixValue(arg[0]), fixValue(arg[1]), fixValue(arg[2]), fixValue(arg[3])); case 5: return element[controlMethodName](fixValue(arg[0]), fixValue(arg[1]), fixValue(arg[2]), fixValue(arg[3]), fixValue(arg[4])); default: // use eval :( showInfo('Method "' + controlMethodName + '" called using "eval" expression.'); var js = 'element[controlMethodName]('; for (var i = 0, imax = arg.length; i < imax; i++) { js += 'arg[' + i + ']'; if (i = 1 < imax) { js += ', '; } } js += ')'; return eval(js); } }; }, _typicalInit: function (obj, uploader) { /// <summary> /// DO NOT CALL THIS FUNCTION, use 'init' method for particular type /// Usually 'init' should create simple and object properties for particular type, /// and in this case we can use this function in type's init method. /// </summary> /// <param name="obj" type="Object"> /// The object for which to create a method. /// </param> /// <param name="uploader" type="Object"> /// The parent uploader object. /// </param> // Add reference to the parent uploader object obj._uploader = uploader; // Init simple properties if (obj._simpleProperties) { for (var i = 0, imax = obj._simpleProperties.length; i < imax; i++) { propertyMaker.createSimpleProperty(obj, obj._simpleProperties[i]); } } // Init object properties if (obj._objectProperties) { for (var i = 0, imax = obj._objectProperties.length; i < imax; i++) { propertyMaker.createObjectProperty(obj, obj._objectProperties[i], uploader); } } }, _typicalReinit: function (obj) { // Map uploader properties to the control if (obj._simpleProperties) { for (var i = 0, imax = obj._simpleProperties.length; i < imax; i++) { var property = obj._simpleProperties[i]; if (!property.isAttribute) { propertyMaker.createControlProperty(obj, property); } } } if (obj._objectProperties) { for (var i = 0, imax = obj._objectProperties.length; i < imax; i++) { var property = obj._objectProperties[i]; if (property.type && typeof property.type.reinit === 'function') { property.type.reinit(obj[property.name]()); } } } if (obj._methods && obj._methods.length > 0) { for (var i = 0, imax = obj._methods.length; i < imax; i++) { propertyMaker.createMethod(obj, obj._methods[i]); } } } }; function ax2jsArray(axArray) { /// <summary> /// Convert activex array-like object to js array. /// </summary> /// <param name="axArray" type="object"> /// Object returned from acrivex method. /// </param> /// <returns type="Array" /> return new VBArray(axArray).toArray(); } function js2axArray(jsArray) { /// <summary> /// Convert js array to array-like object for activex. /// </summary> /// <param name="jsArray" type="Array"> /// </param> /// <returns type="Object" /> var dict = new ActiveXObject("Scripting.Dictionary"); if (!dict) { showError('Scripting.Dictionary object not available.'); } for (var i = 0, imax = jsArray.length; i < imax; i++) { dict.add(i, jsArray[i]); } return dict.Items(); } function java2jsArray(javaArray) { /// <summary> /// Convert java array-like object to js array. /// </summary> /// <param name="javaArray" type="object"> /// Object returned from java method. /// </param> /// <returns type="Array" /> var arr = []; for (var i = 0, imax = javaArray.length; i < imax; i++) { arr.push(javaArray[i]); } return arr; } function fixValue(value) { // BUG13680: Convert arguments to string return value + ''; } var javaUtil = { convertToJS: function (value) { /// <summary> /// Convert java object to native javascript type. /// </summary> var type = typeof value; if (type !== 'string' && type !== 'number' && type !== 'boolean') { try { if ('intValue' in value) { value = value.intValue() * 1; // Convert to number } else if ('booleanValue' in value) { value = !!value.booleanValue(); // Convert to boolean } else { value += ''; // Convert to string } } catch (err) { } } return value; } }; // Based on Java Deployment Toolkit script AU.javaDetector = { // mime-type of the DeployToolkit plugin object oldMimeType: 'application/npruntime-scriptable-plugin;DeploymentToolkit', mimeType: 'application/java-deployment-toolkit', list: null, getJREs: function () { if (this.list == null) { if (!this._written) { this.writePluginTag(); } var list = [], version, matches; var ua = navigator.userAgent.toLowerCase(); var javaPlugin = document.getElementById('deployJavaPlugin'); if (javaPlugin && javaPlugin.jvms) { // Try to detect java using Java Deployment Toolkit. version = this.testUsingDeploymentPlugin(javaPlugin); } else if (window.ActiveXObject) { // Detect java version for IE without Java Deployment Toolkit. version = this.testUsingActiveX(); } else { if (typeof window.java !== undefinedStr && window.java.lang) { // The second method: check window.java property. version = this.testUsingJavaProperty(); } else { // Test using mime-types array version = this.testUsingMimeTypes(); if (!version) { // Test using plugis array version = this.testUsingPluginsArray(); } } } if (version) { // Convert version number from string values to numbers. for (var i = 0, imax = version.length; i < imax; i++) { var n = parseInt(version[i], 10); if (!isNaN(n)) { version[i] = n; } } list.push(version); } this.list = list; return list; } else { return this.list; } }, // return version array or null if java is not detected. testUsingDeploymentPlugin: function (javaPlugin) { var jvms = javaPlugin.jvms, version = []; for (var i = 0, imax = jvms.getLength(); i < imax; i++) { var v = jvms.get(i).version; if (v) { matches = /^(\d+)\.(\d+)\.(\d+)_(\d+)$/.exec(v); if (!matches || matches.length === 0) { matches = /^(\d+)\.(\d+)\.(\d+)$/.exec(v); if (matches && matches.length > 0) { matches[4] = 0; } else { continue; } } v = matches.slice(1); if (version.length == 0 || ( parseInt(version[0], 10) < parseInt(v[0], 10) || parseInt(version[1], 10) < parseInt(v[1], 10) || parseInt(version[2], 10) < parseInt(v[2], 10) || parseInt(version[3], 10) < parseInt(v[3], 10))) { version = v; } } } if (version.length > 0) { return version; } else { return null; } }, // return version array or null if java is not detected. testUsingActiveX: function () { // Try to detect java in IE using ActiveX var versions = ['1.8.0.0', '1.7.0.0', '1.6.0.0', '1.5.0.0', '1.4.2.0'], version; for (var i = 0, imax = versions.length; i < imax; i++) { var v = versions[i]; objectName = 'JavaWebStart.isInstalled.' + v; try { if (new ActiveXObject(objectName) != null) { version = v.split('.'); } } catch (e) { } } // We can get only two numbers of version, the third and forth we set to undefined. if (version) { version[3] = undefined; if (version[2] == '0') { // For 1.4.2 it will be 2 version[2] = undefined; } } return version; }, // return version array or null if java is not detected. testUsingJavaProperty: function () { var j = window.java, version = null; try { var v = j.lang.System.getProperty("java.version"); matches = /^(\d+)\.(\d+)\.(\d+)_(\d+)$/.exec(v); version = matches.slice(1); } catch (e) { } return version; }, // Return version array or null if java is not detected. testUsingMimeTypes: function () { // Test using mime-types array var mtypes = navigator.mimeTypes, version = null, version1 = '', mathes; if (mtypes && mtypes.length > 0) { for (var i = 0, imax = mtypes.length; i < imax; i++) { var mtype = mtypes[i].type; // The jpi-version is the plug-in version. This is the best version to use. matches = /^application\/x-java-applet;jpi-version=(.*)$/.exec(mtype); if (matches && matches.length > 0) { version = matches[1]; // Parse version string matches = /^(\d+)\.(\d+)\.?(\d+)?_?(\d+)?$/.exec(version); version = matches.slice(1); break; } matches = /^application\/x-java-applet\x3Bversion=(1\.8|1\.7|1\.6|1\.5|1\.4\.2)$/.exec(mtype); if (matches && matches.length > 0) { // The possible string values are: "1.8", "1.7", "1.6", "1.5", "1.4.2". // We can compare them without without splitting by dot and converting to number. version1 = version1 < matches[1] ? matches[1] : version1; } } if (!version && version1) { // We get version from application\/x-java-applet;version=... mime-type. version = version1.split('.'); // This method is not so precise and we can get only first two number of version // (or three for 1.4.2). // The third and fourth numbers set to undefined. while (version.length < 4) { version.push(undefined); } } } return version; }, testUsingPluginsArray: function () { var plugins, version = []; if ((plugins = navigator.plugins) && plugins.length > 0) { var m, s; for (var i = 0, imax = plugins.length; i < imax; i++) { var d = plugins[i].description; var matches = /^Java (1\.4|1\.5|1\.6|1\.7|1\.8)\.?(\d+)?_?(\d+)?.* Plug-in/.exec(d); if (matches && matches.length > 0) { // From regular expressin we get first and second numbers in one value and need to split it. var v = matches.slice(0); v[0] = matches[1].split('.')[0]; v[1] = matches[1].split('.')[1]; if (version.length == 0 || ( parseInt(version[0], 10) < parseInt(v[0], 10) || parseInt(version[1], 10) < parseInt(v[1], 10) || parseInt(version[2], 10) < parseInt(v[2], 10) || parseInt(version[3], 10) < parseInt(v[3], 10))) { version = v; } } } } if (version.length > 0) { return version; } else { return null; } }, // return true if 'installed' (considered as a JRE version string) is // greater than or equal to 'required' (again, a JRE version string). compareVersions: function (installed, required) { var a = installed; var b = required; for (var i = 0, imax = Math.min(a.length, b.length); i < imax; i++) { if (a[i] < b[i]) { return false; } } return true; }, writePluginTag: function () { //check if ActiveX enabled if (typeof ActiveXObject != undefinedStr) { try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); this.isActiveXEnabled = true; } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); this.isActiveXEnabled = true; } catch (e1) { this.isActiveXEnabled = false; } } } else { this.isActiveXEnabled = false; } if (this.isActiveXEnabled) { var o = document.createElement('object'); o.id = 'deployJavaPlugin'; var style = o.style; style.width = 0; style.height = 0; style.position = 'absolute'; style.left = '-10px'; style.padding = 0; style.margin = 0; style.border = '0 none'; // BUG0013497 put classid assignment into try-catch block try { o.classid = 'clsid:CAFEEFAC-DEC7-0000-0001-ABCDEFFEDCBA'; } catch (ex) { try { // try old classid o.classid = 'clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA'; } catch (ex) {} } if (o.classid) { var body = document.getElementsByTagName('body')[0]; body.insertBefore(o, body.firstChild); } } else if (AU.browser.isSafari || AU.browser.isOpera) { //don't have plugin for Safari or Opera } else { this.writeEmbedTag(); } this._written = true; }, writeEmbedTag: function () { var o = null; if (navigator.mimeTypes != null) { for (var i = 0; i < navigator.mimeTypes.length; i++) { if (navigator.mimeTypes[i].type == this.mimeType) { if (navigator.mimeTypes[i].enabledPlugin) { o = document.createElement('embed'); o.type = this.mimeType; break; } } } // if we ddn't find new mimeType, look for old mimeType if (o == null) { for (var i = 0; i < navigator.mimeTypes.length; i++) { if (navigator.mimeTypes[i].type == this.oldMimeType) { if (navigator.mimeTypes[i].enabledPlugin) { o = document.createElement('embed'); o.type = this.oldMimeType; break; } } } } if (o != null) { o.id = 'deployJavaPlugin'; o.hidden = true; var style = o.style; style.padding = 0; style.margin = 0; style.border = '0 none'; style.width = 0; style.height = 0; var body = document.getElementsByTagName('body')[0]; body.insertBefore(o, body.firstChild); } } } }; (function ff(jd) { if (jd._written) { return; } var ready; if (!document && document.getElementsByTagName) { ready = false; } else { var body = document.getElementsByTagName('body'); if (body && body.length > 0 && (body = body[0]) != null && body.firstChild) { ready = true; } } if (ready) { jd.writePluginTag(); } else { setTimeout(function () { ff(AU.javaDetector); }, 50); } })(AU.javaDetector); AU.debug = function () { /// <summary> /// Get configure debug object. /// </summary> /// <returns type="$au.debug" /> if (!this._debug) { var f = function () { this.constructor = AU.debug; }; f.prototype = AU.debug.prototype; this._debug = new f(); } return this._debug; }; AU.debug.prototype = { __class: true, // disable debug by default _level: 0, _mode: ['popup', 'console', 'alert'], mode: function (mode) { /// <summary> /// Get or set debug mode. Debug mode specifies where /// the debug messages will be shown. /// </summary> /// <param name="mode" type="Array"> /// An array with possible debug places: 'popup', 'console' or 'alert'. /// </param> /// <returns type="Number" /> if (arguments.length > 0) { var v = arguments[0]; if (v instanceof Array) { this._mode = arguments[0]; } else { this._mode = [arguments[0]]; } } else { return this._mode; } }, level: function (level) { /// <summary> /// Get or set debug level. /// Possible values: /// 0 - no debug messages, /// 1 - errors, /// 2 - errors and debug messages from uploader, /// 3 - errors, debug messages from uploader and informaion messages. /// Default value is 0. /// </summary> /// <param name="level" type="Number"> /// Debug level /// </param> /// <returns type="Number" /> if (arguments.length > 0) { this._level = arguments[0]; } else { return this._level; } }, /// <summary> /// Show error message. /// </summary> /// <param name="msg" type="String"> /// Messsage /// </param> showError: function (msg) { this.showMessage(msg, 1); }, /// <summary> /// Show message from Image Uploader. /// The method called from Image Uploader trace event. /// </summary> /// <param name="msg" type="String"> /// Messsage /// </param> _showUploaderMessage: function (msg) { this.showMessage(msg, 2); }, /// <summary> /// Show information message. /// </summary> /// <param name="msg" type="String"> /// Messsage /// </param> showInfo: function (msg) { this.showMessage(msg, 3); }, showMessage: function (msg, level) { if (level > this._level) { return; } for (var i = 0, imax = this._mode.length; i < imax; i++) { switch (this._mode[i]) { case 'console': // check the console available if (typeof window.console != undefinedStr && console.log) { // print message to console console.log(msg); return; } break; case 'popup': if (!this._popupWindow || this._popupWindow.closed) { // open popup window this._popupWindow = window.open('', 'ImageUploaderDebugWindow', 'width=300,height=200,menubar=1,status=1,scrollbars=1,resizable=1'); // popup has been blocked if (!this._popupWindow) break; var list = this._popupWindow.document.getElementsByTagName("ol"); if (!list || list.length == 0) { // write log window html var html = []; html.push('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n'); html.push('<html xmlns="http://www.w3.org/1999/xhtml">\n'); html.push('<head>'); html.push('<title>Image Uploader Log Window</title>'); html.push('<style type="text/css">* { margin:0; padding: 0; font-family: "Lucida Console", Monaco, monospace; } li { border-bottom:1px solid #aaa; padding: 10px; } li:nth-child(odd) { background-color: #fafafa; }</style>'); html.push('</head>'); html.push('<body>'); html.push('<input type="button" value="Clear" onclick=\'document.getElementsByTagName("ol")[0].innerHTML = "";\' />'); html.push('<ol>'); html.push('</ol>'); html.push('<input type="button" value="Clear" onclick=\'document.getElementsByTagName("ol")[0].innerHTML = "";\' />'); html.push('</body>'); html.push('</html>'); this._popupWindow.document.write(html.join('')); } } // add log message var el = this._popupWindow.document.createElement("li"), pre = this._popupWindow.document.createElement("pre"), text = this._popupWindow.document.createTextNode(msg); pre.appendChild(text); el.appendChild(pre); this._popupWindow.document.getElementsByTagName("ol")[0].appendChild(el); return; case 'alert': // show alert alert(msg); return; } } } }; var formHelper = (function() { function fieldValue(el) { var n = el.name, t = el.type, tag = el.tagName.toLowerCase(); if (!n || el.disabled || t == 'reset' || t == 'button' || t == 'file' || t == 'submit' || t == 'image' || (t == 'checkbox' || t == 'radio') && !el.checked || tag == 'select' && el.selectedIndex == -1) { return null; } if (tag == 'select') { var index = el.selectedIndex; if (index < 0) return null; var a = [], ops = el.options; var one = (t == 'select-one'); var max = (one ? index + 1 : ops.length); for (var i = (one ? index : 0); i < max; i++) { var op = ops[i]; if (op.selected) { var v = op.value; if (!v) // for IE... v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value; if (one) return v; a.push(v); } } return a; } return el.value; } function formToArray(form) { var a = []; var els = form.elements; if (!els) return a; for (var i = 0, cnt = els.length; i < cnt; i++) { var el = els[i]; var n = el.name; if (!n) continue; var v = fieldValue(el); if (v && v.constructor == Array) { for (var j = 0, jmax = v.length; j < jmax; j++) a.push({ name: n, value: v[j], array: true, first: (j === 0) }); } else if (v !== null && typeof v != undefinedStr) a.push({ name: n, value: v }); } return a; } return { formToArray: formToArray }; })(); // Base prototype for uploader and thumbnail controls function baseControl() { // We inherit from this class, so we can not place this array into prototype this._simpleProperties = [{ name: "id", isAttribute: true}]; } baseControl.prototype = { __class: true, type: function () { function detectType(typeString) { var types = (typeString + "").split('|'); // Check availability for all except last one. // The last will be used if all previous are not available. for (var i = 0, imax = types.length - 1; i < imax; i++) { var type = types[i].toLowerCase(); if (type === 'activex') { // Can we use ActiveX? if (this.activeXControl().isActiveXSupported()) { return type; } } else if (type === 'java') { // Can we use Java? if (this.javaControl().isJavaSupported()) { return type; } } } // Can't detect what platform available. Choose the last one. return types[types.length - 1]; } if (arguments.length > 0) { // Set value if we pass parameter this._platform = detectType.call(this, arguments[0]); } else { if (!this._platform) { var type = 'activex|java'; this._platform = detectType.call(this, type); } // Return value if call method without parameter. return this._platform; } }, state: function () { if (arguments.length > 0) { this._state = arguments[0]; } else { return this._state; } }, set: function (obj) { /// <summary> /// Set uploader properties /// </summary> /// <param name="obj" type="Object"> /// An object with uploader properties /// </param> for (var name in obj) { if (typeof this[name] === 'function') { this[name](obj[name]); } else { showError('Control have not ' + name + ' property.'); } } }, writeHtml: function () { window.document.write(this.getHtml()); }, getHtml: function () { var self = this, id = this.id(), events = this.events(); /* create events function*/ var createEventHandler = function (event, eventName) { var h = function () { var result1 = true; if (event._handlers && event._handlers.length > 0) { var args = []; for (var j = 0, jmax = arguments.length; j < jmax; j++) { args.push(javaUtil.convertToJS(arguments[j])); } for (var i = 0, imax = event._handlers.length; i < imax; i++) { try { var handler = event._handlers[i]; var result; if (typeof handler === 'function') { result = handler.apply(self, args); } else if (typeof window[handler] === 'function') { result = window[handler].apply(self, args); } else { showError(eventName + " error:\n \"" + handler + "\" handler is not defined."); } if (eventName === 'beforeUpload' || eventName === 'afterPackageUpload') { // for beforeUpload and afterPackageUpload events // we returns false if any event handler returns false if (!result1) { // already get false in prev handler result = result1; } else if (result != null) { // check if method returns false result1 = !(result === false); } } } catch (err) { showError(eventName + " error:\n" + (err.message || err.description || err)); throw err; } } } // return result from last handler return result; }; if (eventName == 'initComplete') { return function () { setTimeout(h, 500); } } else { return h; } }; // Bug 0012013: Workaround property for FF on Mac OS. var enableResumeUploadCallback = /mac/i.test(navigator.platform) && /firefox/i.test(navigator.userAgent); if (enableResumeUploadCallback) { showInfo('ResumeUploadCallback mode is turned on.'); createEventHandler = function (event, eventName) { var h = function () { var result1 = true; if (event._handlers && event._handlers.length > 0) { var args = []; for (var j = 0, jmax = arguments.length; j < jmax; j++) { args.push(javaUtil.convertToJS(arguments[j])); } for (var i = 0, imax = event._handlers.length; i < imax; i++) { try { var handler = event._handlers[i]; var result; if (typeof handler === 'function') { result = handler.apply(self, args); } else if (typeof window[handler] === 'function') { result = window[handler].apply(self, args); } else { showError(eventName + " error:\n \"" + handler + "\" handler is not defined."); } if (eventName === 'beforeUpload' || eventName === 'afterPackageUpload') { // for beforeUpload and afterPackageUpload events // we returns false if any event handler returns false if (!result1) { // already get false in prev handler result = result1; } else if (result != null) { // check if method returns false result1 = !(result === false); } } } catch (err) { showError(eventName + " error:\n" + (err.message || err.description || err)); throw err; } } } if (eventName === 'beforeUpload' || eventName === 'beforePackageUpload' || eventName === 'afterPackageUpload' || eventName === 'beforeSendRequest') { setTimeout(function () { // Call uploader method to return value from event handler var el = document.getElementById(id); if (el && 'ResumeUpload' in el) { showInfo('Call ResumeUpload for ' + eventName + ' event.'); el.ResumeUpload(eventName, result); } }, 50); } // return result from last handler return result; }; if (eventName == 'initComplete') { return function () { setTimeout(h, 500); } } else { return h; } }; } // fire preRender event if (events.preRender().count() > 0) { (createEventHandler(events.preRender(), 'preRender'))(); } if (AU.debug().level() >= 2 && events.trace) { // add trace events events.trace().add(function (msg) { AU.debug()._showUploaderMessage(msg); }); } for (var i in events) { if (i != 'getParams' && i != 'preRender') { var event = events[i]; if (typeof event === 'function' && event() instanceof AU.event && event().count() > 0) { window[getGlobalHandlerName(this, i)] = createEventHandler(event(), i); } } } var html, type = this.type(); if (type == "java") { html = javaRenderer(this, { enableResumeUploadCallback: enableResumeUploadCallback }).html(); } else if (type == "activex") { html = activeXRenderer(this).html(); } else { html = 'Not supported.'; } return html; }, getElement: function () { return window.document.getElementById(this.id()); }, getParams: function () { var params = getParams.call(this); return params; }, registerCallback: function (name, callback, context) { this._clbs = this._clbs || {}; this._clbs[name] = this._clbs[name] || []; this._clbs[name].push({ 'func': callback, 'ctx': context }); }, _invokeCallback: function (name, args) { if (!this._clbs || !this._clbs[name]) { return; } var clbs = this._clbs[name] for (var i = 0, imax = clbs.length; i < imax; i++) { var clb = clbs[i]; clb.func.apply(clb.ctx, args); } }, id: function (value) { /// <summary> /// Get or set control id /// </summary> /// <param name="value" type="String"> /// id /// </param> /// <returns type="String" /> } }; function baseEvents(initObj) { // We inherit from this class, so we can not place this array into prototype this._eventNames = ["initComplete", "preRender"]; }; baseEvents.prototype = { __class: true, initComplete: function () { /// <summary> /// InitComplete event. /// </summary> /// <returns type="$au.event" /> /* will be created while initialization*/ }, preRender: function () { /// <summary> /// PreRender event. /// </summary> /// <returns type="$au.event" /> /* will be created while initialization*/ }, getParams: function () { var params = []; for (var i = 0, imax = this._eventNames.length; i < imax; i++) { var eventName = this._eventNames[i], evt = this[eventName]; if (typeof evt === 'function' && evt().count() > 0) { params.push({ name: eventName.toLowerCase() + "listener", value: getGlobalHandlerName(this._uploader, eventName) }); } } return params; } }; baseEvents.init = function (obj, uploader) { obj._uploader = uploader; var events = obj._eventNames; var f = function () { var eventObj = new AU.event(); return function () { if (arguments.length > 0) { eventObj.add(arguments[0]); } return eventObj; }; } for (var i = 0, imax = events.length; i < imax; i++) { obj[events[i]] = f(); } }; baseEvents.prototype.constructor = baseEvents; AU.activeXControl = function (uploader) { this._uploader = uploader; this.codeBase('Scripts/ImageUploader7.cab'); this.codeBase64('Scripts/ImageUploader7_x64.cab'); }; AU.activeXControl.prototype = { __class: true, getActiveXInstalledToUpdate: function () { var progId = this.progId(); if (progId) { try { // Get installed control version var a = new ActiveXObject(progId); var currVersion = a.Version.split(','); delete a; // Get required control version var requiredVersion = this.version().split('.'); // Compare versions for (var i = 0; i < 4; i++) { if (parseInt(currVersion[i], 10) < parseInt(requiredVersion[i], 10)) { //installed version is older then the current one //need to update control return true; } } } catch (e) { } } //no update required return false; }, isActiveXSupported: function () { return (typeof window.ActiveXObject !== undefinedStr); // True if window.ActiveXObject exists. }, actualVersion: function () { var el = this._uploader.getElement(); if (el) { return el.getVersion(); } else { return null; } }, codeBase: function (value) { /// <summary> /// Get or set URL to .cab file /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> return helpers.prop(this, '_codeBase', arguments.length, value); }, codeBase64: function (value) { /// <summary> /// Get or set URL to x64 .cab file /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> return helpers.prop(this, '_codeBase64', arguments.length, value); }, classId: function (value) { /// <summary> /// Get or set clsid of activex control. /// </summary> /// <param name="value" type="String"> /// classId /// </param> /// <returns type="String" /> return helpers.prop(this, '_classId', arguments.length, value); }, progId: function (value) { /// <summary> /// Get or set progid of activex control. /// </summary> /// <param name="value" type="String"> /// progId /// </param> /// <returns type="String" /> return helpers.prop(this, '_progId', arguments.length, value); }, version: function (value) { /// <summary> /// Gets or sets minimum required version of the ActiveX control (ImageUploader7.cab file). /// </summary> /// <param name="value" type="String"> /// Version string in the x.x.x.x format /// </param> /// <returns type="String" /> return helpers.prop(this, '_version', arguments.length, value); } }; AU.addFilesProgressDialog = function () { /// <summary> /// Get or set addFolderDialog properties /// </summary> /// <param name="addFilesProgressDialog" type="Object"> /// An object with restrictions parameters /// </param> /// <returns type="$au.addFilesProgressDialog" /> } AU.addFilesProgressDialog.prototype = { __class: true, _simpleProperties: [ { name: "cancelButtonText", getter: 1, setter: 1, render: "AddFilesProgressDialogCancelButtonText" }, { name: "currentFileText", getter: 1, setter: 1, render: "AddFilesProgressDialogCurrentFileText" }, { name: "titleText", getter: 1, setter: 1, render: "AddFilesProgressDialogTitleText" }, { name: "totalFilesText", getter: 1, setter: 1, render: "AddFilesProgressDialogTotalFilesText" }, { name: "waitText", getter: 1, setter: 1, render: "AddFilesProgressDialogWaitText" } ], getParams: getParams, cancelButtonText: function (value) { /// <summary> /// Gets or sets cancel button text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, currentFileText: function (value) { /// <summary> /// Gets or sets message like "Processing file: [fileName]". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, titleText: function (value) { /// <summary> /// Gets or sets title text of the add folder dialog window. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, totalFilesText: function (value) { /// <summary> /// Gets or sets message like "already processed files: [fileCount]". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, waitText: function (value) { /// <summary> /// Gets or sets message like "Please wait, it may take some time...". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ } } AU.addFilesProgressDialog.init = propertyMaker._typicalInit; AU.addFilesProgressDialog.reinit = propertyMaker._typicalReinit; AU.authenticationDialog = function () { /// <summary> /// Get or set authenticationDialog properties /// </summary> /// <param name="authenticationDialog" type="Object"> /// An object with restrictions parameters /// </param> /// <returns type="$au.authenticationDialog" /> } AU.authenticationDialog.prototype = { __class: true, _simpleProperties: [ { name: "cancelButtonText", getter: 1, setter: 1, render: "AuthenticationDialogCancelButtonText" }, { name: "loginText", getter: 1, setter: 1, render: "AuthenticationDialogLoginText" }, { name: "okButtonText", getter: 1, setter: 1, render: "AuthenticationDialogOkButtonText" }, { name: "passwordText", getter: 1, setter: 1, render: "AuthenticationDialogPasswordText" }, { name: "realmText", getter: 1, setter: 1, render: "AuthenticationDialogRealmText" }, { name: "text", getter: 1, setter: 1, render: "AuthenticationDialogText" } ], getParams: getParams, cancelButtonText: function (value) { /// <summary> /// Gets or sets cancel button text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, loginText: function (value) { /// <summary> /// Gets or sets login label text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, okButtonText: function (value) { /// <summary> /// Gets or sets ok button text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, passwordText: function (value) { /// <summary> /// Gets or sets password label text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, realmText: function (value) { /// <summary> /// Gets or sets realm label text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, text: function (value) { /// <summary> /// Gets or sets text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ } } AU.authenticationDialog.init = propertyMaker._typicalInit; AU.authenticationDialog.reinit = propertyMaker._typicalReinit; AU.contextMenu = function () { /// <summary> /// Get or set contextMenu properties /// </summary> /// <param name="contextMenu" type="Object"> /// An object with restrictions parameters /// </param> /// <returns type="$au.contextMenu" /> } AU.contextMenu.prototype = { __class: true, _simpleProperties: [ { name: "addFilesText", getter: 1, setter: 1, render: "AddFilesMenuText" }, { name: "addFolderText", getter: 1, setter: 1, render: "AddFolderMenuText" }, { name: "arrangeByDimensionsText", getter: 1, setter: 1, render: "ArrangeByDimensionsMenuText" }, { name: "arrangeByModifiedText", getter: 1, setter: 1, render: "ArrangeByModifiedMenuText" }, { name: "arrangeByNameText", getter: 1, setter: 1, render: "ArrangeByNameMenuText" }, { name: "arrangeByPathText", getter: 1, setter: 1, render: "ArrangeByPathMenuText" }, { name: "arrangeBySizeText", getter: 1, setter: 1, render: "ArrangeBySizeMenuText" }, { name: "arrangeByText", getter: 1, setter: 1, render: "ArrangeByMenuText" }, { name: "arrangeByTypeText", getter: 1, setter: 1, render: "ArrangeByTypeMenuText" }, { name: "checkAllText", getter: 1, setter: 1, render: "CheckAllMenuText" }, { name: "checkText", getter: 1, setter: 1, render: "CheckMenuText" }, { name: "detailsViewText", getter: 1, setter: 1, render: "DetailsViewMenuText" }, { name: "editText", getter: 1, setter: 1, render: "EditMenuText" }, { name: "editDescriptionText", getter: 1, setter: 1, render: "EditDescriptionMenuText" }, { name: "listViewText", getter: 1, setter: 1, render: "ListViewMenuText" }, { name: "navigateToFolderText", getter: 1, setter: 1, render: "NavigateToFolderMenuText" }, { name: "openText", getter: 1, setter: 1, render: "OpenMenuText" }, { name: "pasteText", getter: 1, setter: 1, render: "PasteMenuText" }, { name: "removeAllText", getter: 1, setter: 1, render: "RemoveAllMenuText" }, { name: "removeText", getter: 1, setter: 1, render: "RemoveMenuText" }, { name: "thumbnailsViewText", getter: 1, setter: 1, render: "ThumbnailsViewMenuText" }, { name: "tilesViewText", getter: 1, setter: 1, render: "TilesViewMenuText" }, { name: "uncheckAllText", getter: 1, setter: 1, render: "UncheckAllMenuText" }, { name: "uncheckText", getter: 1, setter: 1, render: "UncheckMenuText" } ], getParams: getParams, addFilesText: function (value) { /// <summary> /// Gets or sets "Add Files..." menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, addFolderText: function (value) { /// <summary> /// Gets or sets "Add Folder..." menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, checkAllText: function (value) { /// <summary> /// Gets or sets "Check all" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, checkText: function (value) { /// <summary> /// Gets or sets "Check" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, arrangeByDimensionsText: function (value) { /// <summary> /// Gets or sets "Arrange by" -> "Dimensions" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, arrangeByModifiedText: function (value) { /// <summary> /// Gets or sets "Arrange by" -> "Modified" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, arrangeByNameText: function (value) { /// <summary> /// Gets or sets "Arrange by" -> "Name" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, arrangeByPathText: function (value) { /// <summary> /// Gets or sets "Arrange by" -> "Path" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, arrangeBySizeText: function (value) { /// <summary> /// Gets or sets "Arrange by" -> "Size" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, arrangeByText: function (value) { /// <summary> /// Gets or sets "Arrange by" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, arrangeByTypeText: function (value) { /// <summary> /// Gets or sets "Arrange by" -> "Type" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, detailsViewText: function (value) { /// <summary> /// Gets or sets "Details" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, editText: function (value) { /// <summary> /// Gets or sets "Edit" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, editDescriptionText: function (value) { /// <summary> /// Gets or sets "Edit Description" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, listViewText: function (value) { /// <summary> /// Gets or sets "List" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, navigateToFolderText: function (value) { /// <summary> /// Gets or sets "Navigate to folder..." menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, openText: function (value) { /// <summary> /// Gets or sets "Open" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, pasteText: function (value) { /// <summary> /// Gets or sets "Paste" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, removeAllText: function (value) { /// <summary> /// Gets or sets "Remove All" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, removeText: function (value) { /// <summary> /// Gets or sets "Remove" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, thumbnailsViewText: function (value) { /// <summary> /// Gets or sets "Thumbnails" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, tilesViewText: function (value) { /// <summary> /// Gets or sets "Tiles" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, uncheckAllText: function (value) { /// <summary> /// Gets or sets "Uncheck all" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, uncheckText: function (value) { /// <summary> /// Gets or sets "Uncheck" menu item text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ } } AU.contextMenu.init = propertyMaker._typicalInit; AU.contextMenu.reinit = propertyMaker._typicalReinit; AU.converter = function (json) { if (AU.converter.init) { AU.converter.init(); } this.mode('*.*=SourceFile'); if (json) { this.set(json); } }; AU.converter.init = function () { // Init simple properties var obj = AU.converter.prototype; if (obj._simpleProperties) { for (var i = 0, imax = obj._simpleProperties.length; i < imax; i++) { var prop = obj._simpleProperties[i]; propertyMaker.createSimpleProperty(obj, prop); } } delete AU.converter.init; } AU.converter.prototype = { __class: true, _simpleProperties: [ { name: "hash", getter: 1, setter: 1, render: "ConverterHash" }, { name: "thumbnailApplyCrop", getter: 1, setter: 1, render: "ConverterThumbnailApplyCrop" }, { name: "thumbnailBgColor", getter: 1, setter: 1, render: "ConverterThumbnailBgColor" }, { name: "thumbnailCompressOversizedOnly", getter: 1, setter: 1, render: "ConverterThumbnailCompressOversizedOnly" }, { name: "thumbnailCopyExif", getter: 1, setter: 1, render: "ConverterThumbnailCopyExif" }, { name: "thumbnailCopyIptc", getter: 1, setter: 1, render: "ConverterThumbnailCopyIptc" }, { name: "thumbnailFitMode", getter: 1, setter: 1, render: "ConverterThumbnailFitMode" }, { name: "thumbnailHeight", getter: 1, setter: 1, render: "ConverterThumbnailHeight" }, { name: "thumbnailJpegQuality", getter: 1, setter: 1, render: "ConverterThumbnailJpegQuality" }, { name: "thumbnailKeepColorSpace", getter: 1, setter: 1, render: "ConverterThumbnailKeepColorSpace" }, { name: "thumbnailResizeQuality", getter: 1, setter: 1, render: "ConverterThumbnailResizeQuality" }, { name: "thumbnailResolution", getter: 1, setter: 1, render: "ConverterThumbnailResolution" }, { name: "thumbnailWatermark", getter: 1, setter: 1, render: "ConverterThumbnailWatermark" }, { name: "thumbnailWidth", getter: 1, setter: 1, render: "ConverterThumbnailWidth" } ], // for mode need additional validation mode: function () { /// <summary> /// Get or set converter mode string. /// </summary> /// <param name="value" type="String"> /// "mask11,mask12,...=mode1,mode2,...;mask21,mask22,...=mode1,mode2,...;..." /// Where mask is the file extension, mode is the one of the string "SourceFile", "Thumbnail", "Icon", "Zip". /// For example, "*.*=SourceFile" - source file will be uploaded, /// "*.jpg,*.png,*.gif=Thumbnail;*.*=Icon" - thumbnail will be uploaded for jpg, png, gif images, /// and file icon for other files. /// </param> /// <returns type="String" /> /* will be created while initialization */ if (arguments.length > 0) { if (arguments[0]) { this._validateMode(arguments[0]); this._mode = arguments[0]; } } else { return this._mode; } }, hash: function (value) { /// <summary> /// Gets or sets an algorithm to generate a hash value for converted file. /// </summary> /// <param name="value" type="String"> /// The algorithm to generate a hash value. The "SHA", "MD2", "MD5" algorithms are supported. /// </param> /// <returns type="String" /> /* will be created while initialization */ }, thumbnailApplyCrop: function (value) { /// <summary> /// Enable or disable crop thumbnail if crop settings specified for the file. /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> /* will be created while initialization */ }, thumbnailBgColor: function (value) { /// <summary> /// Get or set thumbnail background color /// </summary> /// <param name="value" type="String"> /// Color /// </param> /// <returns type="String" /> /* will be created while initialization */ }, thumbnailCompressOversizedOnly: function (value) { /// <summary> /// Switch that specifies whether an original file should be /// uploaded as the specified thumbnail in case when original /// image dimensions and file size are not bigger than dimensions /// and file size of the thumbnail. /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> /* will be created while initialization */ }, thumbnailCopyExif: function (value) { /// <summary> /// Enable or disable copying EXIF data from original file to thumbnail. /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> /* will be created while initialization */ }, thumbnailCopyIptc: function (value) { /// <summary> /// Enable or disable copying IPTC data from original file to thumbnail. /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> /* will be created while initialization */ }, thumbnailFitMode: function (value) { /// <summary> /// Get or set how the thumbnail will be resized. /// </summary> /// <param name="value" type="String"> /// One of the values "Fit", "Width", "Height", "ActualSize" or their number equivalent. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, thumbnailHeight: function (value) { /// <summary> /// Get or set maximum thumbnail height. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, thumbnailJpegQuality: function (value) { /// <summary> /// Get or set JPEG quality for thumbnail. /// </summary> /// <param name="value" type="Number"> /// Integer number from 0 to 100. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, thumbnailKeepColorSpace: function (value) { /// <summary> /// Keep original colorspace when create thumbnail /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> /* will be created while initialization */ }, thumbnailResizeQuality: function (value) { /// <summary> /// Get or set thumbnail resize quality. /// </summary> /// <param name="value" type="String"> /// One of the values "ResizeQualityMedium", "ResizeQualityHigh" or their number equivalent. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, thumbnailResolution: function (value) { /// <summary> /// Get or set thumbnail resolution. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, thumbnailWatermark: function (value) { /// <summary> /// Get or set watermark format for thumbnail. /// </summary> /// <param name="value" type="String"> /// Watermark format string /// </param> /// <returns type="String" /> /* will be created while initialization */ }, thumbnailWidth: function (value) { /// <summary> /// Get or set maximum thumbnail width. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, set: function (json) { if (json) { if (typeof json.toJson == 'function') json = json.toJson(); for (var p in json) { if (!json.hasOwnProperty || json.hasOwnProperty(p)) { if (typeof this[p] === 'function' && json[p] != null) { this[p](json[p]); } } } } }, toJson: function () { var obj = {}, value, prop; if (this.mode()) { obj.mode = this.mode(); } if (this._simpleProperties) { for (var i = 0, imax = this._simpleProperties.length; i < imax; i++) { prop = this._simpleProperties[i]; value = this[prop.name](); if (value != null) { obj[prop.name] = value; } } } return obj; }, _validateMode: function (modeString) { var rg = /^((.*=)?(SourceFile|Thumbnail|Icon|None|Zip);)*(.*=)?(SourceFile|Thumbnail|Icon|None|Zip);?$/; if (rg.test(modeString)) { return true; } else { showError("Converter mode string is not valid.\n" + modeString); return false; } } }; AU.converter.prototype.mode.isUploaderProperty = true; AU.converter.prototype.constructor = AU.converter; //change converter to work with rendered control AU.converter.reinit = function (converter, element) { converter.mode = function () { if (arguments.length > 0) { if (arguments[0]) { this._validateMode(arguments[0]); element.setConverterMode(fixValue(this._index), fixValue(arguments[0])); } } else { return javaUtil.convertToJS(element.getConverterMode(fixValue(this._index))); } }; converter.mode.isUploaderProperty = true; if (converter._simpleProperties) { for (var i = 0, imax = converter._simpleProperties.length; i < imax; i++) { var property = converter._simpleProperties[i]; if (!property.isAttribute) { (function (property) { var getter = property.getter, setter = property.setter; if (getter === 1 || setter === 1) { var p = property.render || property.name; p = p.charAt(0).toUpperCase() + p.substring(1); if (getter === 1) { getter = "get" + p; } if (setter === 1) { setter = "set" + p; } } // replace property function to the new, which get/set value from/to uploader, // instead of internal variable converter[property.name] = function () { if (arguments.length > 0) { if (arguments[0] != null) { element[setter](fixValue(this._index), fixValue(arguments[0])); } } else { return javaUtil.convertToJS(element[getter](fixValue(this._index))); } } // mark that function is uploader's property converter[property.name].isUploaderProperty = true; })(property); } } } }; AU.converters = function () { /// <summary> /// Get or set upload converters properties /// </summary> /// <returns type="$au.converters" /> } AU.converters.prototype = { __class: true, add: function (converter) { /// <summary> /// Add new converter to uploader. /// </summary> /// <returns type="$au.converter" /> if (converter !== undefined) { if (!(converter instanceof AU.converter)) { converter = new AU.converter(converter); } this._items.push(converter); return converter; } }, count: function () { /// <summary> /// Get count of added converters. /// </summary> /// <returns type="Number" /> return this._items.length; }, get: function (index) { /// <summary> /// Get added converter. /// </summary> /// <param name="index" type="Number"> /// Converter index /// </param> /// <returns type="$au.converter" /> return this._items[index]; }, remove: function (index) { /// <summary> /// Remove converter. /// </summary> /// <param name="index" type="Number"> /// Converter index /// </param> this._items.splice(index, 1); }, removeAll: function () { /// <summary> /// Remove all converters. /// </summary> this._items.length = 0; while (this.count() > 0) { this.remove(0); } } }; AU.converters.init = function (obj, uploader) { obj._uploader = uploader; obj._items = [new AU.converter({ mode: "*.*=SourceFile" })]; } // change prototype to work with rendered control // for internal use AU.converters.reinit = function (converters) { try { showInfo("[js_info] Reinit converters."); var element = converters._uploader.getElement(); if (AU.debug().level() >= 3) { // check element converter methods existance if (!('getConverterCount' in element)) { showError('getConverterCount method is not defined.'); } if (!('AddConverter' in element)) { showError('addConverter method is not defined.'); } if (!('RemoveConverter' in element)) { showError('removeConverter method is not defined.'); } } //save converters added before var convertersArr = [], i, imax; for (i = 0, imax = converters._items.length; i < imax; i++) { var cv = converters._items[i]; convertersArr.push(cv.toJson()); } // remove converters from control while (element.getConverterCount() > 0) { element.RemoveConverter(fixValue(0)); } //clear internal converters array converters._itemsCache = []; converters.add = function () { /// <summary> /// Add converter to uploader /// </summary> /// <returns type="$au.converter" added converter /> if (arguments[0] === undefined) { return; } var index = element.AddConverter("*.*=SourceFile"); if (arguments[0]) { var conv = this.get(index); conv.set(arguments[0]); return conv; } }; converters.count = function () { return javaUtil.convertToJS(element.getConverterCount()); }; converters.get = function (index) { /// <summary> /// Get converter /// </summary> /// <param name="index" type="Number"> /// Converter index /// </param> /// <returns type="$au.converter" /> if (index < this.count()) { if (this._itemsCache && this._itemsCache[index]) { return this._itemsCache[index]; } else { this._itemsCache = this._itemsCache || []; //create object to provide methods to work with thumbnail var converter = new AU.converter(); converter._index = index; AU.converter.reinit(converter, element); this._itemsCache[index] = converter; return converter; } } else { return null; } }; converters.remove = function (index) { /// <summary> /// Remove thumbnail /// </summary> /// <param name="index" type="Number"> /// thumbnail index /// </param> // remove from control element.RemoveConverter(fixValue(index)); //remove from internal array this._itemsCache.splice(index, 1); // re-index items for (var i in this._items) { this._itemsCache[i]._index = i; } }; // add saved converters to uploader control for (i = 0, imax = convertersArr.length; i < imax; i++) { converters.add(convertersArr[i]); } } catch (err) { showError('Converters initialization failed.\n' + (err.message || err.description || err)); throw err; } }; AU.deleteFilesDialog = function () { /// <summary> /// Get or set deleteFilesDialog properties /// </summary> /// <param name="deleteFilesDialog" type="Object"> /// An object with parameters /// </param> /// <returns type="$au.deleteFilesDialog" /> } AU.deleteFilesDialog.prototype = { __class: true, _simpleProperties: [ { name: "message", getter: 1, setter: 1, render: "DeleteFilesDialogMessage" }, { name: "titleText", getter: 1, setter: 1, render: "DeleteFilesDialogTitleText" } ], getParams: getParams, message: function (value) { /// <summary> /// Gets or sets message text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, titleText: function (value) { /// <summary> /// Gets or sets dialog title. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ } } AU.deleteFilesDialog.init = propertyMaker._typicalInit; AU.deleteFilesDialog.reinit = propertyMaker._typicalReinit; AU.descriptionEditor = function () { /// <summary> /// Get or set addFolderDialog properties /// </summary> /// <param name="addFolderDialog" type="Object"> /// An object with restrictions parameters /// </param> /// <returns type="$au.addFolderDialog" /> } AU.descriptionEditor.prototype = { __class: true, _simpleProperties: [ { name: "cancelHyperlinkText", getter: 1, setter: 1, render: "DescriptionEditorCancelHyperlinkText" }, { name: "maxTextLength", getter: 1, setter: 1, render: "DescriptionEditorMaxTextLength" }, { name: "orEscLabelText", getter: 1, setter: 1, render: "DescriptionEditorOrEscLabelText" }, { name: "saveButtonText", getter: 1, setter: 1, render: "DescriptionEditorSaveButtonText" } ], getParams: getParams, cancelHyperlinkText: function (value) { /// <summary> /// Cancel button text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, maxTextLength: function (value) { /// <summary> /// Maximum length of the description string /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, orEscLabelText: function (value) { /// <summary> /// "(or Esc)" label text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, saveButtonText: function (value) { /// <summary> /// Save button text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ } } AU.descriptionEditor.init = propertyMaker._typicalInit; AU.descriptionEditor.reinit = propertyMaker._typicalReinit; AU.detailsViewColumns = function () { /// <summary> /// Get or set pane columns properties /// </summary> /// <param name="paneColumns" type="Object"> /// An object with restrictions parameters /// </param> /// <returns type="$au.paneColumns" /> } AU.detailsViewColumns.prototype = { __class: true, _simpleProperties: [ { name: "dimensionsText", getter: 1, setter: 1, render: "DetailsViewColumnDimensionsText" }, { name: "fileNameText", getter: 1, setter: 1, render: "DetailsViewColumnFileNameText" }, { name: "fileSizeText", getter: 1, setter: 1, render: "DetailsViewColumnSizeText" }, { name: "fileTypeText", getter: 1, setter: 1, render: "DetailsViewColumnTypeText" }, { name: "infoText", getter: 1, setter: 1, render: "DetailsViewColumnInfoText" }, { name: "lastModifiedText", getter: 1, setter: 1, render: "DetailsViewColumnLastModifiedText" } ], getParams: getParams, dimensionsText: function (value) { /// <summary> /// Get or set title of the Dimensions column in the Details view. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, fileSizeText: function (value) { /// <summary> /// Get or set title of the file size column in the Details view. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, fileTypeText: function (value) { /// <summary> /// Get or set title of the file type column in the Details view. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, infoText: function (value) { /// <summary> /// Get or set title of the Info column in the Details view. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, lastModifiedText: function (value) { /// <summary> /// Get or set title of the last modification date column in the Details view. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> } } AU.detailsViewColumns.init = propertyMaker._typicalInit; AU.detailsViewColumns.reinit = propertyMaker._typicalReinit; AU.events = function (initObj) { /// <summary> /// Get or set uploader events /// </summary> /// <param name="initObj" type="Object"> /// Events /// </param> /// <returns type="$au.events" /> /* will be created while initialization */ }; AU.events.prototype = new baseEvents(); extend(AU.events.prototype, { _eventNames: [undefined /*base event - initComplete*/, undefined /*base event - preRender*/, "afterPackageUpload", "afterSendRequest", "afterUpload", "beforePackageUpload", "beforeSendRequest", "beforeUpload", "folderChange", "imageEditorClose", "imageRotated", "restrictionFailed", "error", "progress", "selectionChange", "trace", "uploadFileCountChange", "viewChange" ], afterPackageUpload: function () { /// <summary> /// AfterPackageUpload event /// </summary> /// <returns type="$au.event" /> }, afterSendRequest: function () { /// <summary> /// AfterSendRequest event /// </summary> /// <returns type="$au.event" /> }, afterUpload: function () { /// <summary> /// AfterUpload event /// </summary> /// <returns type="$au.event" /> }, beforePackageUpload: function () { /// <summary> /// BeforePackageUpload event /// </summary> /// <returns type="$au.event" /> }, beforeSendRequest: function () { /// <summary> /// BeforeSendRequest event /// </summary> /// <returns type="$au.event" /> }, beforeUpload: function () { /// <summary> /// BeforeUpload event /// </summary> /// <returns type="$au.event" /> }, folderChange: function () { /// <summary> /// FolderChange event /// </summary> /// <returns type="$au.event" /> }, imageEditorClose: function () { /// <summary> /// ImageEditorClose event /// </summary> /// <returns type="$au.event" /> }, imageRotated: function () { /// <summary> /// ImageRotated event /// </summary> /// <returns type="$au.event" /> }, restrictionFailed: function () { /// <summary> /// RestrictionFailed event /// </summary> /// <returns type="$au.event" /> }, error: function () { /// <summary> /// Error event /// </summary> /// <returns type="$au.event" /> }, progress: function () { /// <summary> /// Progress event /// </summary> /// <returns type="$au.event" /> }, selectionChange: function () { /// <summary> /// SelectionChange event /// </summary> /// <returns type="$au.event" /> }, trace: function () { /// <summary> /// Trace event /// </summary> /// <returns type="$au.event" /> }, uploadFileCountChange: function () { /// <summary> /// UploadFileCountChange event /// </summary> /// <returns type="$au.event" /> }, viewChange: function () { /// <summary> /// ViewChange event /// </summary> /// <returns type="$au.event" /> } }, true); AU.events.init = baseEvents.init; AU.events.prototype.constructor = AU.events; AU.file = function (json) { if (json) { this.set(json); } this.constructor = AU.file.prototype; }; AU.file.prototype = { __class: true, angle: function (value) { /// <summary> /// Get or set rotate angle. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, cropBounds: function (value) { /// <summary> /// Get or set crop settings of the file in the upload pane. /// When specified, all thumbnails from converters with enabled thumbnailCrop property will be cropped. /// </summary> /// <param name="value" type="Array"> /// Array with 4 integer values: [left, top, width, height]. /// </param> /// <returns type="Array" /> /* will be created while initialization */ }, description: function (value) { /// <summary> /// Get or set description for uploaded file. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, focused: function () { /// <summary> /// Check if file focused in the upload pane. /// </summary> /// <returns type="Boolen" /> /* will be created while initialization */ }, format: function () { /// <summary> /// Get type of the file in the upload pane. /// </summary> /// <returns type="String" /> /* will be created while initialization */ }, guid: function () { /// <summary> /// Get guid of the file in the upload pane. /// </summary> /// <returns type="String" /> /* will be created while initialization */ }, height: function () { /// <summary> /// Get height of the file in the upload pane. Returns 0 for non-image file. /// </summary> /// <returns type="Number" /> /* will be created while initialization */ }, horizontalResolution: function () { /// <summary> /// Get image horizontal image resolution of the file in the upload pane. Returns 0 for non-image file. /// </summary> /// <returns type="Number" /> /* will be created while initialization */ }, name: function () { /// <summary> /// Get name of the file in the upload pane. /// </summary> /// <returns type="String" /> /* will be created while initialization */ }, selected: function (selected) { /// <summary> /// Check if file seleced in the upload pane. /// </summary> /// <returns type="Boolean" /> /* will be created while initialization */ }, size: function () { /// <summary> /// Get size of the file in the upload pane. /// </summary> /// <returns type="Number" /> /* will be created while initialization */ }, tag: function (value) { /// <summary> /// Get or set tag for uploaded file. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, tileTemplate: function (value) { /// <summary> /// Get or set template text to show for the file in tiles view. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, type: function () { /// <summary> /// Get type of the file in the upload pane. /// </summary> /// <returns type="String" /> /* will be created while initialization */ }, verticalResolution: function () { /// <summary> /// Get image vertical image resolution of the file in the upload pane. Returns 0 for non-image file. /// </summary> /// <returns type="Number" /> /* will be created while initialization */ }, width: function () { /// <summary> /// Get width of the file in the upload pane. Returns 0 for non-image file. /// </summary> /// <returns type="Number" /> /* will be created while initialization */ }, remove: function () { /// <summary> /// Remove file from upload list. /// </summary> /* will be created while initialization */ } }; //change object to work with rendered control AU.file.reinit = function (element, obj) { obj.angle = function (angle) { if (angle || angle === 0) { element.setUploadFileAngle(this._index, fixValue(angle)); } else { return element.getUploadFileAngle(this._index); } }; obj.cropBounds = function (bounds) { // TODO: use more elegant way to detect uploader type var ax = (element.getAttribute('classid') + '').toLowerCase() === ('clsid:' + this._uploader.activeXControl().classId()).toLowerCase(); if (bounds !== undefined) { // accept null or false to reset crop if (!bounds) { bounds = [0, 0, 1000000, 1000000]; } // accept two values to set crop from (0, 0) coordinates if (bounds.length === 2) { bounds = [0, 0].concat(bounds); } if (!bounds || bounds.length !== 4) { // invalid arguments showError('Invalid crop argument.'); return; } if (ax) { element.setUploadFileCropBounds(this._index, js2axArray(bounds)); } else { element.setUploadFileCropBounds(this._index, bounds); } } else { bounds = element.getUploadFileCropBounds(this._index); if (ax) { return ax2jsArray(bounds); } else { return java2jsArray(bounds); } } }; obj.description = function (description) { if (description !== undefined) { element.setUploadFileDescription(this._index, fixValue(description)); } else { return javaUtil.convertToJS(element.getUploadFileDescription(this._index)); } }; obj.focused = function () { return javaUtil.convertToJS(element.getUploadFileFocused(this._index)); }; obj.format = function () { return javaUtil.convertToJS(element.getUploadFileFormat(this._index)); }; obj.guid = function () { return javaUtil.convertToJS(element.getUploadFileGuid(this._index)); }; obj.height = function () { return javaUtil.convertToJS(element.getUploadFileHeight(this._index)); }; obj.horizontalResolution = function () { return javaUtil.convertToJS(element.getUploadFileHorizontalResolution(this._index)); }; obj.name = function () { return javaUtil.convertToJS(element.getUploadFileName(this._index)); }; obj.selected = function (selected) { if (selected !== undefined) { element.setUploadFileSelected(this._index, selected); } else { return javaUtil.convertToJS(element.getUploadFileSelected(this._index)); } }; obj.size = function () { return javaUtil.convertToJS(element.getUploadFileSize(this._index)); }; obj.tag = function (tag) { if (tag !== undefined) { element.setUploadFileTag(this._index, fixValue(tag)); } else { return javaUtil.convertToJS(element.getUploadFileTag(this._index)); } }; obj.tileTemplate = function (value) { if (value !== undefined) { element.setUploadFileTileTemplate(this._index, value); } else { return javaUtil.convertToJS(element.getUploadFileTileTemplate(this._index)); } }; obj.type = function () { return javaUtil.convertToJS(element.getUploadFileType(this._index)); }; obj.verticalResolution = function () { return javaUtil.convertToJS(element.getUploadFileVerticalResolution(this._index)); }; obj.width = function () { return javaUtil.convertToJS(element.getUploadFileWidth(this._index)); }; obj.remove = function () { return element.UploadFileRemove(this._index); }; }; AU.files = function () { /// <summary> /// Get collection of files to upload. /// </summary> /// <returns type="$au.files" /> }; AU.files.prototype = { __class: true, count: function () { /// <summary> /// Get count of files selected to upload. /// </summary> /// <returns type="Number" /> // can't select files before uploader initialization return 0; }, get: function (index) { /// <summary> /// Get file to upload /// </summary> /// <param name="index" type="Number"> /// Index of files in the list view /// </param> /// <returns type="$au.file" /> // can't select files before uploader initialization return null; }, totalFileSize: function () { /// <summary> /// Get total size of all files selected for upload. /// </summary> /// <returns type="Number" /> return 0; }, remove: function (index) { /// <summary> /// Remove file from upload list /// </summary> /// <param name="index" type="Number"> /// Index of files in the upload list /// </param> }, removeByGuid: function (guid) { /// <summary> /// Remove file from upload list by file guid /// </summary> /// <param name="guid" type="String"> /// File guid /// </param> } }; AU.files.init = propertyMaker._typicalInit; // change object to work with rendered control // for internal use AU.files.reinit = function (obj) { showInfo("[js_info] Reinit files API."); var element = obj._uploader.getElement(); obj.count = function () { return javaUtil.convertToJS(element.getUploadFileCount()); }; obj.totalFileSize = function () { return javaUtil.convertToJS(element.getTotalFileSize()); }; obj.get = function (index) { if (index < this.count()) { if (this._items && this._items[index]) { return this._items[index]; } else { this._items = this._items || []; //create object to provide methods to work with file var f = new AU.file(); f._uploader = this._uploader; f._index = index; AU.file.reinit(element, f); this._items[index] = f; return f; } } else { return null; } }; obj.remove = function (index) { return element.UploadFileRemove(index); }; obj.removeByGuid = function (guid) { return element.UploadFileRemoveByGuid(guid); }; }; AU.imageEditor = function () { /// <summary> /// Get or set image editor properties /// </summary> /// <param name="imageEditor" type="Object"> /// An object with restrictions parameters /// </param> /// <returns type="$au.imageEditor" /> } AU.imageEditor.prototype = { __class: true, _simpleProperties: [ { name: "cancelButtonImageFormat", getter: 1, setter: 1, render: "ImageEditorCancelButtonImageFormat" }, { name: "cancelButtonText", getter: 1, setter: 1, render: "ImageEditorCancelButtonText" }, { name: "cancelCropButtonImageFormat", getter: 1, setter: 1, render: "ImageEditorCancelCropButtonImageFormat" }, { name: "cancelCropButtonText", getter: 1, setter: 1, render: "ImageEditorCancelCropButtonText" }, { name: "cropButtonImageFormat", getter: 1, setter: 1, render: "ImageEditorCropButtonImageFormat" }, { name: "cropButtonText", getter: 1, setter: 1, render: "ImageEditorCropButtonText" }, { name: "cropMinSize", getter: 1, setter: 1, render: "ImageEditorCropMinSize" }, { name: "cropRatio", getter: 1, setter: 1, render: "ImageEditorCropRatio" }, { name: "descriptionHintText", getter: 1, setter: 1, render: "ImageEditorDescriptionHintText" }, { name: "enableCrop", getter: 1, setter: 1, render: "ImageEditorEnableCrop" }, { name: "rotateButtonImageFormat", getter: 1, setter: 1, render: "ImageEditorRotateButtonImageFormat" }, { name: "rotateButtonText", getter: 1, setter: 1, render: "ImageEditorRotateButtonText" }, { name: "saveButtonImageFormat", getter: 1, setter: 1, render: "ImageEditorSaveButtonImageFormat" }, { name: "saveButtonText", getter: 1, setter: 1, render: "ImageEditorSaveButtonText" } ], _methods: [ { name: "show", controlMethodName: "ShowImageEditor" } ], getParams: getParams, cancelButtonImageFormat: function (value) { /// <summary> /// Cancel button image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, cancelButtonText: function (value) { /// <summary> /// Cancel button text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, cancelCropButtonImageFormat: function (value) { /// <summary> /// Cancel Crop button image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, cancelCropButtonText: function (value) { /// <summary> /// Cancel Crop button text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, cropButtonImageFormat: function (value) { /// <summary> /// Crop button image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, cropButtonText: function (value) { /// <summary> /// Crop button text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, cropMinSize: function (value) { /// <summary> /// Minimum crop size /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> }, cropRatio: function (value) { /// <summary> /// Crop ratio /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> }, descriptionHintText: function (value) { /// <summary> /// Text watermark in the description textbox /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, enableCrop: function (value) { /// <summary> /// Enable or disable crop /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, rotateButtonImageFormat: function (value) { /// <summary> /// Rotate button image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, rotateButtonText: function (value) { /// <summary> /// Rotate button text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, saveButtonImageFormat: function (value) { /// <summary> /// Save button image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, saveButtonText: function (value) { /// <summary> /// Save button text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, show: function (index) { /// <summary> /// Open image editor dialog. /// </summary> /// <param name="index" type="Number"> /// Index of the image file in the upload pane. /// </param> /* will be created while initialization */ } } AU.imageEditor.init = propertyMaker._typicalInit; AU.imageEditor.reinit = propertyMaker._typicalReinit; AU.imageEditor.prototype.constructor = AU.imageEditor; AU.informationBar = function () { /// <summary> /// Get or set information bar properties /// </summary> /// <param name="informationBar" type="Object"> /// An object with information bar parameters /// </param> /// <returns type="$au.informationBar" /> } AU.informationBar.prototype = { __class: true, _simpleProperties: [ { name: "closeIconImageFormat", getter: 1, setter: 1, render: "InformationBarCloseIconImageFormat" }, { name: "errorColor", getter: 1, setter: 1, render: "InformationBarErrorColor" }, { name: "messageColor", getter: 1, setter: 1, render: "InformationBarMessageColor" }, { name: "warningColor", getter: 1, setter: 1, render: "InformationBarWarningColor" } ], _methods: [ { name: "show", controlMethodName: "ShowInformationBar" } ], getParams: getParams, closeIconImageFormat: function (value) { /// <summary> /// Close information bar icon image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, errorColor: function (value) { /// <summary> /// Color of the information bar with error messages /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, messageColor: function (value) { /// <summary> /// Color of the information bar with notification messages /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, warningColor: function (value) { /// <summary> /// Color of the information bar with warning messages /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, show: function (text, type) { /// <summary> /// Show message on the information bar. /// </summary> /// <param name="text" type="String"> /// Message text /// </param> /// <param name="type" type="String"> /// "Error" or "Message" /// </param> } } AU.informationBar.init = propertyMaker._typicalInit; AU.informationBar.reinit = propertyMaker._typicalReinit; AU.informationBar.prototype.constructor = AU.informationBar; AU.javaControl = function (uploader) { this._uploader = uploader; this.codeBase('Scripts/ImageUploader7.jar'); this.cached(true); }; AU.javaControl.prototype = { __class: true, getJarFileName: function () { var codeBase = this.codeBase(); var parts = codeBase.split('/'); if (parts.length > 0) { return parts[parts.length - 1]; } else { showError('Incorrect codebase string: "' + codeBase + '"'); return codeBase; } }, isJavaSupported: function () { if (this.getJREInstalled() >= 0) { return true; } else { return false; } }, // -2 - Java not installed or not enabled // -1 - Installed Java version is less then required // 0 - Unable determine java // 1 - Required java version available getJREInstalled: function () { var result = -2; if (navigator.javaEnabled()) { var ver = AU.javaDetector.getJREs(); if (ver == null) { //we can't get information about java in this browser result = 0; } else if (ver.length > 0) { //java installed and we have its version result = -1; for (var i = 0, maxi = ver.length; i < maxi; i++) { if (AU.javaDetector.compareVersions(ver[i], this.javaVersionRequired)) { result = 1; break; } } } } return result; }, javaVersionRequired: [1, 5, 0, 0], actualVersion: function () { var el = this._uploader.getElement(); if (el) { return el.getVersion(); } else { return null; } }, codeBase: function (value) { /// <summary> /// Get or set URL to JAR file /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> return helpers.prop(this, '_codeBase', arguments.length, value); }, className: function (value) { /// <summary> /// Get or set uploader java class name. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> return helpers.prop(this, '_className', arguments.length, value); }, cached: function (value) { /// <summary> /// Enable or disable cache java applet. /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> return helpers.prop(this, '_cached', arguments.length, value); }, version: function (value) { /// <summary> /// Gets or sets minimum required version of the Java applet (ImageUploader7.jar file). /// </summary> /// <param name="value" type="String"> /// Version string in the x.x.x.x format /// </param> /// <returns type="String" /> return helpers.prop(this, '_version', arguments.length, value); } }; AU.messages = function () { /// <summary> /// Get status panel /// </summary> /// <returns type="$au.messages" /> } AU.messages.prototype = { __class: true, _simpleProperties: [ { name: "cmykImagesNotAllowed", getter: 1, setter: 1, render: "CmykImagesNotAllowedMessage" }, { name: "deletingFilesError", getter: 1, setter: 1, render: "DeletingFilesErrorMessage" }, { name: "dimensionsTooLarge", getter: 1, setter: 1, render: "DimensionsTooLargeMessage" }, { name: "dimensionsTooSmall", getter: 1, setter: 1, render: "DimensionsTooSmallMessage" }, { name: "fileNameNotAllowed", getter: 1, setter: 1, render: "FileNameNotAllowedMessage" }, { name: "fileSizeTooSmall", getter: 1, setter: 1, render: "FileSizeTooSmallMessage" }, { name: "filesNotAdded", getter: 1, setter: 1, render: "FilesNotAddedMessage" }, { name: "maxFileCountExceeded", getter: 1, setter: 1, render: "MaxFileCountExceededMessage" }, { name: "maxFileSizeExceeded", getter: 1, setter: 1, render: "MaxFileSizeExceededMessage" }, { name: "maxTotalFileSizeExceeded", getter: 1, setter: 1, render: "MaxTotalFileSizeExceededMessage" }, { name: "noResponseFromServer", getter: 1, setter: 1, render: "NoResponseFromServerMessage" }, { name: "serverError", getter: 1, setter: 1, render: "ServerErrorMessage" }, { name: "serverNotFound", getter: 1, setter: 1, render: "ServerNotFoundMessage" }, { name: "unexpectedError", getter: 1, setter: 1, render: "UnexpectedErrorMessage" }, { name: "uploadCancelled", getter: 1, setter: 1, render: "UploadCancelledMessage" }, { name: "uploadCompleted", getter: 1, setter: 1, render: "UploadCompletedMessage" }, { name: "uploadFailed", getter: 1, setter: 1, render: "UploadFailedMessage" } ], getParams: getParams, cmykImagesNotAllowed: function (value) { /// <summary> /// CMYK denied message text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, deletingFilesError: function (value) { /// <summary> /// Deleting files error message text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, dimensionsTooLarge: function (value) { /// <summary> /// Get or set text of the dimensions too large message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, dimensionsTooSmall: function (value) { /// <summary> /// Get or set text of the dimensions too small message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, fileNameNotAllowed: function (value) { /// <summary> /// Get or set text of the file name not allowed message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, fileSizeTooSmall: function (value) { /// <summary> /// Get or set text of the file size too small message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, filesNotAdded: function (value) { /// <summary> /// Get or set text of the message, showing after adding files /// if several files were not added due restrictions. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, maxFileCountExceeded: function (value) { /// <summary> /// Get or set text of the maximum file count exceeded message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, maxFileSizeExceeded: function (value) { /// <summary> /// Get or set text of the maximum file size exceeded message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, maxTotalFileSizeExceeded: function (value) { /// <summary> /// Get or set text of the maximum total file size exceeded message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, noResponseFromServer: function (value) { /// <summary> /// Get or set text of the no response from server message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, serverError: function (value) { /// <summary> /// Get or set text of the server side error message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, serverNotFound: function (value) { /// <summary> /// Get or set text of the server not found message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, unexpectedError: function (value) { /// <summary> /// Get or set text of the unexpected error message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, uploadCancelled: function (value) { /// <summary> /// Get or set text of the upload cancelled message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, uploadCompleted: function (value) { /// <summary> /// Get or set text of the upload completed message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, uploadFailed: function (value) { /// <summary> /// Get or set text of the upload failed message. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> } }; AU.messages.init = propertyMaker._typicalInit; AU.messages.reinit = propertyMaker._typicalReinit; AU.metadata = function () { /// <summary> /// Get or set additional upload data /// </summary> /// <returns type="$au.metadata" /> } AU.metadata.prototype = { __class: true, _simpleProperties: [ { name: "cookie", getter: 1, setter: 1 }, { name: "exif", getter: 1, setter: 1, render: "ExtractExif" }, { name: "hash", getter: 1, setter: 1, render: "HashAlgorithm" }, { name: "iptc", getter: 1, setter: 1, render: "ExtractIptc" }, { name: "userAgent", getter: 1, setter: 1, defaultValue: navigator.userAgent }, { name: "valueSeparator", getter: 1, setter: 1, render: "MetadataValueSeparator" } ], addCustomField: function (name, value, add) { /// <summary> /// Add additional field to upload. /// </summary> /// <param name="name" type="String"> /// Field name /// </param> /// <param name="value" type="String"> /// Field value /// </param> /// <param name="add" type="Boolean"> /// If true, then preserve previous value of the field. Several values will be sent to server. /// If false, then previous value of the field will be overwritten with this value. (Default) /// </param> this._customFields = this._customFields || []; if (name && value != null) { this._customFields.push({ action: "add", name: name, value: value, add: add }); } }, removeCustomField: function (name) { /// <summary> /// Remove additional field. The field wouldn't be sent to server. /// </summary> /// <param name="name" type="String"> /// Field name /// </param> this._customFields = this._customFields || []; if (name) { this._customFields.push({ action: "remove", name: name }); } }, enableStandardField: function (name, enable) { /// <summary> /// Enable or diable standard field. If field disabled it is not sended to server. /// </summary> /// <param name="name" type="String"> /// Standard field name /// </param> /// <param name="enable" type="Boolean"> /// </param> this._standardFields = this._standardFields || []; if (name) { this._standardFields.push({ action: "enable", name: name, enable: enable }); } }, renameStandardField: function (oldName, newName) { /// <summary> /// Rename standard field. /// </summary> /// <param name="oldName" type="String"> /// Original standard field name. /// </param> /// <param name="newName" type="String"> /// New standard field name. /// </param> this._standardFields = this._standardFields || []; if (oldName && newName) { this._standardFields.push({ action: "rename", oldName: oldName, newName: newName }); } }, enableAllStandardFields: function (enable) { /// <summary> /// Enable or disable all standard fields. Disabled fields are not sended to server. /// </summary> /// <param name="enable" type="Boolean"> /// </param> this._standardFields = this._standardFields || []; this._standardFields.push({ action: "enableAll", enable: enable }); }, addCookie: function (value) { /// <summary> /// Add cookie. /// </summary> /// <param name="value" type="String"> /// Cookie string /// </param> AU.debug().showMessage('Call to obsolete method "uploader.metadata.addCookie". Use "uploader.metadata.cookie" instead.', 2); this.cookie(value); }, resetCookie: function () { /// <summary> /// Reset cookie /// </summary> AU.debug().showMessage('Call to obsolete method "uploader.metadata.resetCookie". Use "uploader.metadata.cookie" with empty string parameter instead.', 2); this.cookie(''); }, additionalFormName: function (name) { /// <summary> /// Name of the HTML form with additional information which should be sent to the server along with files. /// </summary> /// <param name="name" type="String"> /// Form name /// </param> if (arguments.length == 0) { return this._formName; } else { if (this._beforeUploadHandler) { this._uploader.events().beforeUpload().remove(this._beforeUploadHandler); delete this._beforeUploadHandler; delete this._formName; } if (name) { this._formName = name; this._beforeUploadHandler = function () { var metadata = this.metadata(); var form = document.forms[metadata._formName]; if (form) { var fields = formHelper.formToArray(form), cnt = fields.length; if (cnt > 0) { for (var i = 0; i < cnt; i++) { var f = fields[i]; if (!f.array || f.first) { metadata.addCustomField(f.name, f.value); } else { metadata.addCustomField(f.name, f.value, true); } } } } }; this._uploader.events().beforeUpload().add(this._beforeUploadHandler); } } }, getParams: getParams, cookie: function (value) { /// <summary> /// Get or set cookies string. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, exif: function (value) { /// <summary> /// Get or set EXIF values to extract and upload along with files. /// </summary> /// <param name="value" type="String"> /// EXIF field names separated with a semicolon. /// </param> /// <returns type="String" /> }, hash: function (value) { /// <summary> /// Get or set algorithm to generate a hash value for each original file selected for upload. /// </summary> /// <param name="value" type="String"> /// Algorithm name. The "SHA", "MD2", "MD5" algorithms are supported. /// </param> /// <returns type="String" /> }, iptc: function (value) { /// <summary> /// Get or set IPTC values to extract and upload along with files. /// </summary> /// <param name="value" type="String"> /// IPTC field names separated with a semicolon. /// </param> /// <returns type="String" /> }, userAgent: function (value) { /// <summary> /// Get or set user agent string for uploader requests. /// </summary> /// <param name="value" type="String"> /// User agent string /// </param> /// <returns type="String" /> }, valueSeparator: function (value) { /// <summary> /// Get or set value separator for multi-value EXIF and IPTC fields /// </summary> /// <param name="value" type="String"> /// Separator character /// </param> /// <returns type="String" /> } }; AU.metadata.init = propertyMaker._typicalInit; AU.metadata.reinit = function (obj) { showInfo("[js_info] Reinit metadata."); var element = obj._uploader.getElement(); obj.addCustomField = function (name, value, add) { element.AddCustomField(name, value, !!add); }; obj.removeCustomField = function (name) { if (name != null) { element.RemoveCustomField(name); } }; obj.enableStandardField = function (name, enable) { element.EnableStandardField(name, enable); }; obj.renameStandardField = function (oldName, newName) { element.RenameStandardField(oldName, newName); }; obj.enableAllStandardFields = function (enable) { element.EnableAllStandardFields(enable); } // Add or remove custom fields if (obj._customFields && obj._customFields.length > 0) { for (var i = 0, max = obj._customFields.length; i < max; i++) { var f = obj._customFields[i]; switch (f.action) { case "add": obj.addCustomField(f.name, f.value, f.add); break; case "remove": obj.removeCustomField(f.name); break; } } } // Enable, disable, rename standard fields if (obj._standardFields && obj._standardFields.length > 0) { for (var i = 0, max = obj._standardFields.length; i < max; i++) { var f = obj._standardFields[i]; switch (f.action) { case 'enable': obj.enableStandardField(f.name, f.enable); break; case 'rename': obj.renameStandardField(f.oldName, f.newName); break; case 'enableAll': obj.enableAllStandardFields(f.enable); break; } } } propertyMaker._typicalReinit(obj); } AU.folderPane = function () { /// <summary> /// Get or set folder pane properties /// </summary> /// <param name="folderPane" type="Object"> /// An object with tree pane parameters /// </param> /// <returns type="$au.folderPane" /> } AU.folderPane.prototype = { __class: true, _simpleProperties: [ { name: "filterHintText", getter: 1, setter: 1, render: "FolderPaneFilterHintText" }, { name: "filterClearIconImageFormat", getter: 1, setter: 1 }, { name: 'headerText', getter: 1, setter: 1, render: "FolderPaneHeaderText" }, { name: "height", getter: 1, setter: 1, render: "FolderPaneHeight" }, { name: "previewSize", getter: 1, setter: 1, render: "FolderPanePreviewSize" }, { name: "showAllowedItemsOnly", getter: 1, setter: 1 }, { name: "sortMode", getter: 1, setter: 1, render: "FolderPaneSortMode" }, { name: "tileHeight", getter: 1, setter: 1, render: "FolderPaneTileHeight" }, { name: "tilePreviewSize", getter: 1, setter: 1, render: "FolderPaneTilePreviewSize" }, { name: "tileTemplate", getter: 1, setter: 1, render: "FolderPaneTileTemplate" }, { name: "tileWidth", getter: 1, setter: 1, render: "FolderPaneTileWidth" }, { name: "viewMode", getter: 1, setter: 1, render: "FolderPaneViewMode" } ], _methods: [ { name: "canGoToFolder", controlMethodName: "CanGoToFolder" }, { name: "deselectAll", controlMethodName: "DeselectAll" }, { name: "goToFolder", controlMethodName: "GoToFolder" }, { name: "goToParentFolder", controlMethodName: "GoToParentFolder" }, { name: "goToPreviousFolder", controlMethodName: "GoToPreviousFolder" }, { name: "selectAll", controlMethodName: "SelectAll" } ], getParams: getParams, filterHintText: function (value) { /// <summary> /// "Search" textbox watermark text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, filterClearIconImageFormat: function (value) { /// <summary> /// Clear filter icon image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, headerText: function (value) { /// <summary> /// Header text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, height: function (value) { /// <summary> /// Gets or sets height of the folder pane. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, previewSize: function (value) { /// <summary> /// Thumbnail preview size /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, showAllowedItemsOnly: function (value) { /// <summary> /// Enable or disable display of the files which can not be select to upload. /// </summary> /// <param name="value" type="Boolean"> /// </param> /// <returns type="Boolean" /> /* will be created while initialization */ }, sortMode: function (value) { /// <summary> /// Folder pane sort mode. /// </summary> /// <param name="value" type="String"> /// One of the values "Name", "Size", "Type", "Modified", "Path" /// or their equivalent number. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, tileHeight: function (value) { /// <summary> /// Folder pane tile height. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, tilePreviewSize: function (value) { /// <summary> /// Folder pane tile preview size. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, tileTemplate: function (value) { /// <summary> /// Folder pane tile template text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, tileWidth: function (value) { /// <summary> /// Folder pane tile width. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, viewMode: function (value) { /// <summary> /// Folder pane view. /// </summary> /// <param name="value" type="String"> /// One of the values "Thumbnails", "Icons", "List", "Details" /// or their equivalent number. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, canGoToFolder: function (folder) { /// <summary> /// Verifies whether the specified special folder is available. /// </summary> /// <param name="folder" type="String"> /// One of the following values: "BitBucket", "Desktop", "MyComputer", "MyDocuments", "MyMusic", /// "MyPictures", "MyVideo", "Network", "Recent". /// </param> /// <returns type="Boolean" /> /* will be created while initialization */ }, deselectAll: function () { /// <summary> /// Deselect all files in the folder pane. /// </summary> /* will be created while initialization */ }, goToFolder: function (path) { /// <summary> /// Navigates to a specified folder. /// </summary> /// <param name="path" type="String"> /// Path to the folder /// </param> /// <returns type="Boolean" /> /* will be created while initialization */ }, goToParentFolder: function () { /// <summary> /// Navigates to the parent folder. /// </summary> /// <returns type="Boolean" /> /* will be created while initialization */ }, goToPreviousFolder: function () { /// <summary> /// Navigates to the previous visited folder. /// </summary> /// <returns type="Boolean" /> /* will be created while initialization */ }, selectAll: function () { /// <summary> /// Select all files in the upload pane. /// </summary> /* will be created while initialization */ } } AU.folderPane.init = propertyMaker._typicalInit; AU.folderPane.reinit = propertyMaker._typicalReinit; AU.qualityMeter = function(json) { /// <summary> /// Get or set Quality Meter properties. /// </summary> /// <param name="json" type="Object"> /// An object with quality meter properties /// </param> /// <returns type="$au.qualityMeter" /> } AU.qualityMeter.prototype = { __class: true, _simpleProperties: [ { name: "acceptableQualityColor", getter: 1, setter: 1, render: "QualityMeterAcceptableQualityColor" }, { name: "backgroundColor", getter: 1, setter: 1, render: "QualityMeterBackgroundColor" }, { name: "borderColor", getter: 1, setter: 1, render: "QualityMeterBorderColor" }, { name: "formats", getter: 1, setter: 1, render: "QualityMeterFormats" }, { name: "height", getter: 1, setter: 1, render: "QualityMeterHeight" }, { name: "highQualityColor", getter: 1, setter: 1, render: "QualityMeterHighQualityColor" }, { name: "lowQualityColor", getter: 1, setter: 1, render: "QualityMeterLowQualityColor" } ], getParams: getParams, acceptableQualityColor: function (value) { /// <param name="value" type="String" /> /// <returns type="String" /> }, backgroundColor: function (value) { /// <param name="value" type="String" /> /// <returns type="String" /> }, borderColor: function (value) { /// <param name="value" type="String" /> /// <returns type="String" /> }, formats: function (value) { /// <summary> /// A value which defines print formats for the quality meter. /// </summary> /// <param name="value" type="String"> /// The string in the following format: /// "Format1 name,format1 width (pixels),format1 height (pixels),format1 acceptable ratio;Format2 name,format2 width (pixels),format2 height (pixels),format2 acceptable ratio;..." /// </param> /// <returns type="String" /> }, height: function (value) { /// <summary> /// Height of the quality meter bar. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> }, highQualityColor: function (value) { /// <param name="value" type="String" /> /// <returns type="String" /> }, lowQualityColor: function (value) { /// <param name="value" type="String" /> /// <returns type="String" /> } } AU.qualityMeter.init = propertyMaker._typicalInit; AU.qualityMeter.reinit = propertyMaker._typicalReinit; AU.paneItem = function() { /// <summary> /// Get or set pane item properties /// </summary> /// <param name="paneItem" type="Object"> /// An object with pane item parameters /// </param> /// <returns type="$au.paneItem" /> } AU.paneItem.prototype = { __class: true, _simpleProperties: [ { name: "checkedItemBorderColor", getter: 1, setter: 1 }, { name: "checkedItemColor", getter: 1, setter: 1 }, { name: "checkedItemTextColor", getter: 1, setter: 1 }, { name: "descriptionAddedIconImageFormat", getter: 1, setter: 1 }, { name: "descriptionEditorIconImageFormat", getter: 1, setter: 1 }, { name: "descriptionEditorIconTooltip", getter: 1, setter: 1 }, { name: "enableDisproportionalExifThumbnails", getter: 1, setter: 1 }, { name: "enableFileNameTooltip", getter: 1, setter: 1 }, { name: "hoverBorderColor", getter: 1, setter: 1 }, { name: "hoverColor", getter: 1, setter: 1 }, { name: "imageCroppedIconImageFormat", getter: 1, setter: 1 }, { name: "imageCroppedIconTooltip", getter: 1, setter: 1 }, { name: "imageEditorIconImageFormat", getter: 1, setter: 1 }, { name: "imageEditorIconTooltip", getter: 1, setter: 1 }, { name: "inactiveCheckedItemBorderColor", getter: 1, setter: 1 }, { name: "inactiveCheckedItemColor", getter: 1, setter: 1 }, { name: "inactiveSelectionBorderColor", getter: 1, setter: 1 }, { name: "inactiveSelectionColor", getter: 1, setter: 1 }, { name: "previewQuality", getter: 1, setter: 1 }, { name: "removalIconImageFormat", getter: 1, setter: 1 }, { name: "removalIconTooltip", getter: 1, setter: 1 }, { name: "rotationIconImageFormat", getter: 1, setter: 1 }, { name: "rotationIconTooltip", getter: 1, setter: 1 }, { name: "selectedTextColor", getter: 1, setter: 1 }, { name: "selectionBorderColor", getter: 1, setter: 1 }, { name: "selectionColor", getter: 1, setter: 1 }, { name: "selectionHoverBorderColor", getter: 1, setter: 1 }, { name: "selectionHoverColor", getter: 1, setter: 1 }, { name: "showFileNameInThumbnailsView", getter: 1, setter: 1 }, { name: "uploadIndicatorBorderColor", getter: 1, setter: 1 }, { name: "uploadIndicatorColor", getter: 1, setter: 1 } ], _objectProperties: [ { name: "qualityMeter", type: AU.qualityMeter } ], qualityMeter: AU.qualityMeter, getParams: getParams, checkedItemBorderColor: function (value) { /// <summary> /// Get or set color of the pane item border in checked state. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, checkedItemColor: function (value) { /// <summary> /// Get or set color of the pane item in checked state. /// Specify two colors separated by semicolon to set gradient, e.g. "#000000;#FFFFFF". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, checkedItemTextColor: function (value) { /// <summary> /// Get or set color of the text on the selected pane item when item is checked. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, descriptionAddedIconImageFormat: function (value) { /// <summary> /// Description icon image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, descriptionEditorIconImageFormat: function (value) { /// <summary> /// Description editor icon image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, descriptionEditorIconTooltip: function (value) { /// <summary> /// Description editor icon tooltip /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, enableDisproportionalExifThumbnails: function (value) { /// <summary> /// Use disproportional EXIF thumbnails for image preview /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableFileNameTooltip: function (value) { /// <summary> /// Enable file name tooltip /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, hoverBorderColor: function (value) { /// <summary> /// Get or set color of the pane item border in highlighted state. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, hoverColor: function (value) { /// <summary> /// Get or set color of the pane item in highlighted state. /// Specify two colors separated by semicolon to set gradient, e.g. "#000000;#FFFFFF". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, imageCroppedIconImageFormat: function (value) { /// <summary> /// Image format of the icon, showing when image cropped /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, imageCroppedIconTooltip: function (value) { /// <summary> /// Tooltip of the icon, showed when image cropped /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, imageEditorIconImageFormat: function (value) { /// <summary> /// Image editor icon image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, imageEditorIconTooltip: function (value) { /// <summary> /// Image editor icon tooltip /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, inactiveCheckedItemBorderColor: function (value) { /// <summary> /// Get or set color of the checked pane item border in inactive state. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, inactiveCheckedItemColor: function (value) { /// <summary> /// Get or set color of the checked pane item in inactive state. /// Specify two colors separated by semicolon to set gradient, e.g. "#000000;#FFFFFF". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, inactiveSelectionBorderColor: function (value) { /// <summary> /// Get or set color of the selected pane item border in inactive state. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, inactiveSelectionColor: function (value) { /// <summary> /// Get or set color of the selected pane item in inactive state. /// Specify two colors separated by semicolon to set gradient, e.g. "#000000;#FFFFFF". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, previewQuality: function (value) { /// <summary> /// Preview quality /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, selectedTextColor: function (value) { /// <summary> /// Get or set color of the text on the selected pane item when item is focused. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, selectionBorderColor: function (value) { /// <summary> /// Get or set color of the pane item border when this item selected and focused. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, selectionColor: function (value) { /// <summary> /// Get or set color of the pane item when this item selected and focused. /// Specify two colors separated by semicolon to set gradient, e.g. "#000000;#FFFFFF". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, selectionHoverBorderColor: function (value) { /// <summary> /// Get or set color of the pane item border when this item selected and mouse pointer is hovered over it. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, selectionHoverColor: function (value) { /// <summary> /// Get or set color of the pane item when this item selected and mouse pointer is hovered over it. /// Specify two colors separated by semicolon to set gradient, e.g. "#000000;#FFFFFF". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, removalIconImageFormat: function (value) { /// <summary> /// Removal icon image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, removalIconTooltip: function (value) { /// <summary> /// Removal icon tooltip /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, rotationIconImageFormat: function (value) { /// <summary> /// Rotation icon image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, rotationIconTooltip: function (value) { /// <summary> /// Rotation icon tooltip /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, showFileNameInThumbnailsView: function (value) { /// <summary> /// Show file name in thumbnails view /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, uploadIndicatorBorderColor: function (value) { /// <summary> /// Border color of uploaded items. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, uploadIndicatorColor: function (value) { /// <summary> /// Color of uploaded items. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> } } AU.paneItem.init = propertyMaker._typicalInit; AU.paneItem.reinit = propertyMaker._typicalReinit; AU.restrictions = function() { /// <summary> /// Get or set upload restrictions properties /// </summary> /// <param name="restrictions" type="Object"> /// An object with restrictions parameters /// </param> /// <returns type="$au.restrictions" /> } AU.restrictions.prototype = { __class: true, _simpleProperties: [ { name: "deniedFileMask", getter: 1, setter: 1 }, { name: "enableCmyk", getter: 1, setter: 1 }, { name: "fileMask", getter: 1, setter: 1 }, { name: "maxFileCount", getter: 1, setter: 1 }, { name: "maxFileSize", getter: 1, setter: 1 }, { name: "maxImageHeight", getter: 1, setter: 1 }, { name: "maxImageWidth", getter: 1, setter: 1 }, { name: "maxTotalFileSize", getter: 1, setter: 1 }, { name: "minFileCount", getter: 1, setter: 1 }, { name: "minFileSize", getter: 1, setter: 1 }, { name: "minImageHeight", getter: 1, setter: 1 }, { name: "minImageWidth", getter: 1, setter: 1 } ], deniedFileMask: function (value) { /// <summary> /// Get or set DeniedFileMask property /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, enableCmyk: function (value) { /// <summary> /// Enable or disable CMYK images to upload. /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> /* will be created while initialization */ }, fileMask: function (mask) { /// <summary> /// Get or set FileMask property /// </summary> /// <param name="mask" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, maxFileCount: function (value) { /// <summary> /// Maximum number of files allowed for upload per one session /// </summary> /// <param name="value" type="Number"> /// Number of files allowed for upload. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, maxFileSize: function () { /// <summary> /// Maximum file size allowed for upload. /// </summary> /// <param name="value" type="Number"> /// Maximum file size. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, maxImageHeight: function () { /// <summary> /// Maximum image height allowed for upload. /// </summary> /// <param name="value" type="Number"> /// Maximum image height. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, maxImageWidth: function () { /// <summary> /// Maximum image width allowed for upload. /// </summary> /// <param name="value" type="Number"> /// Maximum image width. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, maxTotalFileSize: function () { /// <summary> /// Maximum total file size allowed for upload. /// </summary> /// <param name="value" type="Number"> /// Total file size. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, minFileCount: function (value) { /// <summary> /// Minimum number of files allowed for upload per one session /// </summary> /// <param name="value" type="Number"> /// Number of files allowed for upload. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, minFileSize: function() { /// <summary> /// Minimum file size allowed for upload. /// </summary> /// <param name="value" type="Number"> /// Minimum file size. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, minImageHeight: function () { /// <summary> /// Minimum image height allowed for upload. /// </summary> /// <param name="value" type="Number"> /// Minimum image height. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, minImageWidth: function () { /// <summary> /// Minimum image width allowed for upload. /// </summary> /// <param name="value" type="Number"> /// Minimum image width. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, getParams: getParams }; AU.restrictions.init = propertyMaker._typicalInit; AU.restrictions.reinit = propertyMaker._typicalReinit; AU.statusPane = function () { /// <summary> /// Get or set status pane properties /// </summary> /// <param name="statusPane" type="Object"> /// An object with status pane parameters /// </param> /// <returns type="$au.statusPane" /> } AU.statusPane.prototype = { __class: true, _simpleProperties: [ { name: "clearAllHyperlinkText", getter: 1, setter: 1, render: "StatusPaneClearAllHyperlinkText" }, { name: "color", getter: 1, setter: 1, render: "StatusPaneColor" }, { name: "filesToUploadText", getter: 1, setter: 1, render: "StatusPaneFilesToUploadText" }, { name: "noFilesToUploadText", getter: 1, setter: 1, render: "StatusPaneNoFilesToUploadText" }, { name: "progressBarText", getter: 1, setter: 1, render: "StatusPaneProgressBarText" } ], getParams: getParams, clearAllHyperlinkText: function (value) { /// <summary> /// Get or set text of the "Clear all" hyperlink /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, color: function (value) { /// <summary> /// Get or set status pane color. /// Specify two colors separated by semicolon to set gradient, e.g. "#000000;#FFFFFF". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, filesToUploadText: function (value) { /// <summary> /// Get or set "Selected N file(s) to upload" text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, noFilesToUploadText: function (value) { /// <summary> /// Get or set "No files to upload" text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, progressBarText: function (value) { /// <summary> /// Get or set text on the progress bar on status pane /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> } } AU.statusPane.init = propertyMaker._typicalInit; AU.statusPane.reinit = propertyMaker._typicalReinit; AU.statusPane.prototype.constructor = AU.statusPane; AU.treePane = function () { /// <summary> /// Get or set tree pane properties /// </summary> /// <param name="treePane" type="Object"> /// An object with tree pane parameters /// </param> /// <returns type="$au.treePane" /> } AU.treePane.prototype = { __class: true, _simpleProperties: [ { name: "titleText", getter: 1, setter: 1, render: "TreePaneTitleText" }, { name: "unixFileSystemRootText", getter: 1, setter: 1 }, { name: "unixHomeDirectoryText", getter: 1, setter: 1 }, { name: "width", getter: 1, setter: 1, render: "TreePaneWidth" } ], getParams: getParams, titleText: function (value) { /// <summary> /// Gets or sets tree pane title text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, unixFileSystemRootText: function (value) { /// <summary> /// Gets or sets caption of the folder tree node which /// specifies the system directory at *NIX systems. . /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, unixHomeDirectoryText: function (value) { /// <summary> /// Gets or sets caption of the folder tree node which specifies the home directory at *NIX systems. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, width: function (value) { /// <summary> /// Get or set width of the tree pane. /// </summary> /// <param name="value" type="Number"> /// Width /// </param> /// <returns type="Number" /> /* will be created while initialization */ } } AU.treePane.init = propertyMaker._typicalInit; AU.treePane.reinit = propertyMaker._typicalReinit; AU.uploadPane = function () { /// <summary> /// Get or set upload pane properties /// </summary> /// <param name="uploadPane" type="Object"> /// An object with upload pane parameters /// </param> /// <returns type="$au.uploadPane" /> } AU.uploadPane.prototype = { __class: true, _simpleProperties: [ { name: "dropFilesHereImageFormat", getter: 1, setter: 1 }, { name: "dropFilesHereText", getter: 1, setter: 1 }, { name: "previewSize", getter: 1, setter: 1, render: "UploadPanePreviewSize" }, { name: "sortMode", getter: 1, setter: 1, render: "UploadPaneSortMode" }, { name: "tileHeight", getter: 1, setter: 1, render: "UploadPaneTileHeight" }, { name: "tilePreviewSize", getter: 1, setter: 1, render: "UploadPaneTilePreviewSize" }, { name: "tileTemplate", getter: 1, setter: 1, render: "UploadPaneTileTemplate" }, { name: "tileWidth", getter: 1, setter: 1, render: "UploadPaneTileWidth" }, { name: "viewMode", getter: 1, setter: 1, render: "UploadPaneViewMode" } ], _methods: [ { name: "addAllFiles", controlMethodName: "AddAllFiles" }, // private label only {name: "addFiles", controlMethodName: "AddFiles" }, { name: "addFileByPath", controlMethodName: "AddFileByPath" }, // private label only {name: "addFolders", controlMethodName: "AddFolders" }, { name: "addFolderByPath", controlMethodName: "AddFolderByPath" }, // private label only {name: "addSelectedFiles", controlMethodName: "AddSelectedFiles" }, // private label only {name: "loadUploadList", controlMethodName: "LoadUploadList" }, { name: "removeAllFiles", controlMethodName: "RemoveAllFiles" }, { name: "removeSelectedFiles", controlMethodName: "RemoveSelectedFiles" }, { name: "resetUploadList", controlMethodName: "ResetUploadList" }, { name: "saveUploadList", controlMethodName: "SaveUploadList" } ], getParams: getParams, dropFilesHereImageFormat: function (value) { /// <summary> /// Get or set image format for "Drop file here" label. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, dropFilesHereText: function (value) { /// <summary> /// Get or set "Drop files here" label text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, previewSize: function (value) { /// <summary> /// Size of the image previews in the upload pane /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, sortMode: function (value) { /// <summary> /// Get or set upload pane sort mode. /// </summary> /// <param name="value" type="String"> /// One of the values "Name", "Size", "Type", "Modified", "Path" /// or their equivalent number. /// </param> /// <returns type="String" /> /* will be created while initialization */ }, tileHeight: function (value) { /// <summary> /// Folder pane tile height. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, tilePreviewSize: function (value) { /// <summary> /// Folder pane tile preview size. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, tileTemplate: function (value) { /// <summary> /// Folder pane tile template text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, tileWidth: function (value) { /// <summary> /// Folder pane tile width. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, viewMode: function (value) { /// <summary> /// Get or set folder pane view mode. /// </summary> /// <param name="value" type="String"> /// One of the values "Thumbnails", "Icons", "List", "Details" /// or their equivalent number. /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, // addAllFiles is not available in standard Image Uploader version due the security reasons addFiles: function () { /// <summary> /// Show Open File Dialog to add files to upload list /// </summary> /* will be created while initialization */ }, // addFileByPath is not available in standard Image Uploader version due the security reasons addFolders: function () { /// <summary> /// Show Browse Folder Dialog and add all files from the selected folder to upload pane /// </summary> /* will be created while initialization */ }, // addFolderByPath is not available in standard Image Uploader version due the security reasons. // addSelectedFiles is not available in standard Image Uploader version due the security reasons. loadUploadList: function (id) { /// <summary> /// Loads the upload list. /// Before load the list you need to save it with saveUploadList method. /// </summary> /// <param name="id" type="Number"> /// Integer value from 1 to 50. /// </param> /* will be created while initialization */ }, removeAllFiles: function () { /// <summary> /// Remove all files from upload list. /// </summary> /* will be created while initialization */ }, removeSelectedFiles: function () { /// <summary> /// Remove selected files from upload list. /// </summary> /* will be created while initialization */ }, resetUploadList: function (id) { /// <summary> /// Erase saved upload list. /// </summary> /// <param name="id" type="Number"> /// An id of the saved upload list. Integer value from 1 to 50. /// </param> /* will be created while initialization */ }, saveUploadList: function (id) { /// <summary> /// Save upload list. /// </summary> /// <param name="id" type="Number"> /// An id of the saved upload list. Integer value from 1 to 50. /// </param> /* will be created while initialization */ } } AU.uploadPane.init = propertyMaker._typicalInit; AU.uploadPane.reinit = propertyMaker._typicalReinit; AU.uploadProgressDialog = function(properties) { /// <summary> /// Get or set upload progress dialog properties /// </summary> /// <param name="properties" type="Object"> /// An object with dialog properties /// </param> /// <returns type="$au.uploadProgressDialog" /> } AU.uploadProgressDialog.prototype = { __class: true, _simpleProperties: [ { name: "cancelUploadButtonText", getter: 1, setter: 1, render: "UploadProgressDialogCancelUploadButtonText" }, { name: "estimationText", getter: 1, setter: 1, render: "UploadProgressDialogEstimationText" }, { name: "hideButtonText", getter: 1, setter: 1, render: "UploadProgressDialogHideButtonText" }, { name: "hoursText", getter: 1, setter: 1 }, { name: "infoText", getter: 1, setter: 1, render: "UploadProgressDialogInfoText" }, { name: "kilobytesText", getter: 1, setter: 1 }, { name: "megabytesText", getter: 1, setter: 1 }, { name: "minutesText", getter: 1, setter: 1 }, { name: "preparingText", getter: 1, setter: 1, render: 'UploadProgressDialogPreparingText' }, { name: "reconnectionText", getter: 1, setter: 1, render: 'UploadProgressDialogReconnectionText' }, { name: "secondsText", getter: 1, setter: 1 }, { name: "timeFormat", getter: 1, setter: 1 }, { name: "titleText", getter: 1, setter: 1, render: "UploadProgressDialogTitleText" } ], getParams: getParams, cancelUploadButtonText: function (value) { /// <summary> /// Get or set Cancel button text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, estimationText: function (value) { /// <summary> /// Get or set estimation text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, hideButtonText: function (value) { /// <summary> /// Get or set Hide button text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, hoursText: function (value) { /// <summary> /// Get or set text for the hours unit. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, infoText: function (value) { /// <summary> /// Get or set info text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, kilobytesText: function (value) { /// <summary> /// Get or set text for the kilobytes unit. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, megabytesText: function (value) { /// <summary> /// Get or set text for the megabytes unit. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, minutesText: function (value) { /// <summary> /// Get or set text for the minutes unit. /// </summary> /// <param name="value" type="String /"> /// <returns type="String" /> /* will be created while initialization */ }, preparingText: function (value) { /// <summary> /// Get or set preparing text. /// </summary> /// <param name="value" type="String /"> /// <returns type="String" /> /* will be created while initialization */ }, reconnectionText: function (value) { /// <summary> /// Get or set reconnection text. /// </summary> /// <param name="value" type="String /"> /// <returns type="String" /> /* will be created while initialization */ }, secondsText: function (value) { /// <summary> /// Get or set text for the seconds unit. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, timeFormat: function (value) { /// <summary> /// Get or set time format string. /// </summary> /// <param name="value" type="String"> /// A string value that specifies a format using the following syntax: /// "variable1=value1;variable2=value2;...", /// where variable is one of the string "Appearance", "PresentDirection", "DigitsFormat", "HideZero". /// </param> /// <returns type="String" /> /* will be created while initialization */ }, titleText: function (value) { /// <summary> /// Get or set title text. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ } } AU.uploadProgressDialog.init = propertyMaker._typicalInit; AU.uploadProgressDialog.reinit = propertyMaker._typicalReinit; AU.uploadSettings = function () { /// <summary> /// Upload options. /// </summary> /// <returns type="$au.uploadSettings" /> } AU.uploadSettings.prototype = { __class: true, _simpleProperties: [ { name: "actionUrl", getter: 1, setter: 1 }, { name: "autoRecoveryMaxAttemptCount", getter: 1, setter: 1 }, { name: "autoRecoveryTimeout", getter: 1, setter: 1 }, { name: "charset", getter: 1, setter: 1 }, { name: "chunkSize", getter: 1, setter: 1 }, { name: "connectionTimeout", getter: 1, setter: 1 }, { name: "enableInstantUpload", getter: 1, setter: 1 }, { name: "filesPerPackage", getter: 1, setter: 1 }, { name: "progressBytesMode", getter: 1, setter: 1 }, { name: "uploadConverterOutputSeparately", getter: 1, setter: 1 } ], redirectUrl: function (url) { /// <summary> /// Get or set URL to redirect after upload /// </summary> /// <param name="url" type="String"> /// URL to redirect after upload /// </param> /// <returns type="String" /> if (arguments.length > 0) { this._redirectUrl = arguments[0]; var uploader = this._uploader; if (this._afterUpload) { uploader.events().afterUpload().remove(this._afterUpload); delete this._afterUpload; } if (this._redirectUrl) { var self = this; this._afterUpload = function () { setTimeout(function () { window.location = self._redirectUrl; }, 100); } uploader.events().afterUpload().add(this._afterUpload); } } else { return this._redirectUrl; } }, getParams: getParams, actionUrl: function (url) { /// <summary> /// Get or set URL where to upload files. /// </summary> /// <param name="url" type="String"> /// URL to to upload /// </param> /// <returns type="String" /> }, autoRecoveryMaxAttemptCount: function (value) { /// <summary> /// Get or set number of tries that should be performed to submit files. /// </summary> /// <param name="value" type="Number"> /// </param> /// <returns type="Number" /> }, autoRecoveryTimeout: function (value) { /// <summary> /// Get or set interval in which Image Uploader should try to resume the upload if it was interrupted. /// </summary> /// <param name="value" type="Number"> /// </param> /// <returns type="Number" /> }, charset: function (value) { /// <summary> /// Get or set charset used to encode the text data submitted by Image Uploader. /// </summary> /// <param name="value" type="String"> /// </param> /// <returns type="String" /> }, chunkSize: function (size) { /// <summary> /// Get or set size of the chunk. /// </summary> /// <param name="size" type="Number"> /// Max file size per one chunk. Set to zero to disable upload by chunks. /// </param> /// <returns type="Number" /> }, connectionTimeout: function (value) { /// <summary> /// Get or set timeout of the HTTP connection. /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> }, enableInstantUpload: function (value) { /// <summary> /// Enable or disable instant upload feature. /// </summary> /// <param name="value" type="Boolean"> /// </param> /// <returns type="Boolean" /> }, filesPerPackage: function (value) { /// <summary> /// Get or set max number of files in one package. /// </summary> /// <param name="count" type="Number" /> /// <returns type="Number" /> }, progressBytesMode: function (value) { /// <summary> /// Specifies how to calculate the total size of uploaded data. /// "ByPackageSize" - Total bytes equals the size of the currently uploaded package. /// "BySourceSize" - Total bytes equals the size of the all selected for upload files. /// Only original file counting, the size of thumbnails is not included. /// </summary> /// <param name="value" type="String"> /// One of the strings "ByPackageSize" (0), "BySourceSize" (1) or their number equivalent. /// </param> /// <returns type="Number" /> }, uploadConverterOutputSeparately: function (value) { /// <summary> /// Enable or disable sending file for every converter in separate request. /// Using this we can send many thumbnails for every selected to upload file. /// </summary> /// <param name="value" type="Boolean"> /// </param> /// <returns type="Boolean" /> } }; AU.uploadSettings.init = propertyMaker._typicalInit; AU.uploadSettings.reinit = propertyMaker._typicalReinit; AU.uploader = function (obj) { /// <summary> /// 1: uploader(id) - Get created uploader. /// 2: uploader(obj) - Create new uploader. /// </summary> /// <param name="obj" type="Object"> /// 1: obj - Init object for new uploader. /// 2: id - An id of existing uploader. /// </param> /// <returns type="$au.uploader" /> return new AU.uploader.fn.init(obj); }; AU.uploader.fn = AU.uploader.prototype = new baseControl(); // Extend uploader prototype with new object extend(AU.uploader.fn, { _simpleProperties: [ undefined, { name: "auxiliaryTextColor", getter: 1, setter: 1 }, { name: "backgroundColor", getter: 1, setter: 1 }, { name: "borderStyle", getter: 1, setter: 1 }, { name: "cancelUploadButtonImageFormat", getter: 1, setter: 1 }, { name: "cancelUploadButtonText", getter: 1, setter: 1 }, { name: "dialogColor", getter: 1, setter: 1 }, { name: "dialogBorderColor", getter: 1, setter: 1 }, { name: "enableAutoRotation", getter: 1, setter: 1 }, { name: "enableCheckByClick", getter: 1, setter: 1 }, { name: "enableContextMenu", getter: 1, setter: 1 }, { name: "enableDescriptionEditor", getter: 1, setter: 1 }, { name: "enableDragAndDrop", getter: 1, setter: 1 }, { name: "enableImageEditor", getter: 1, setter: 1 }, { name: "enableFileViewer", getter: 1, setter: 1 }, { name: "enableOriginalFilesDeletion", getter: 1, setter: 1 }, { name: "enableRotation", getter: 1, setter: 1 }, { name: "enableStatusPane", getter: 1, setter: 1 }, { name: "enableUploadPane", getter: 1, setter: 1 }, { name: "enableUploadProgress", getter: 1, setter: 1 }, { name: "folderProcessingMode", getter: 1, setter: 1 }, { name: "headerColor", getter: 1, setter: 1 }, { name: "headerTextColor", getter: 1, setter: 1 }, { name: "height", isAttribute: true, defaultValue: "400px" }, { name: "hyperlinkColor", getter: 1, setter: 1 }, { name: "licenseKey", getter: 1, setter: 1 }, { name: "loadingFolderContentText", getter: 1, setter: 1 }, { name: "paneFont", getter: 1, setter: 1 }, { name: "paneLayout", getter: 1, setter: 1 }, { name: "panelColor", getter: 1, setter: 1 }, { name: "panelBorderColor", getter: 1, setter: 1 }, { name: "pasteFileNameTemplate", getter: 1, setter: 1 }, { name: "textColor", getter: 1, setter: 1 }, { name: "titleFont", getter: 1, setter: 1 }, { name: "uploadButtonImageFormat", getter: 1, setter: 1 }, { name: "uploadButtonText", getter: 1, setter: 1 }, { name: "width", isAttribute: true, defaultValue: "600px" } ], _objectProperties: [ { name: "addFilesProgressDialog", type: AU.addFilesProgressDialog }, { name: "authenticationDialog", type: AU.authenticationDialog }, { name: "contextMenu", type: AU.contextMenu }, { name: "converters", type: AU.converters }, { name: "deleteFilesDialog", type: AU.deleteFilesDialog }, { name: "descriptionEditor", type: AU.descriptionEditor }, { name: "detailsViewColumns", type: AU.detailsViewColumns }, { name: "events", type: AU.events }, { name: "files", type: AU.files }, { name: "folderPane", type: AU.folderPane }, { name: "imageEditor", type: AU.imageEditor }, { name: "informationBar", type: AU.informationBar }, { name: "messages", type: AU.messages }, { name: "metadata", type: AU.metadata }, { name: "paneItem", type: AU.paneItem }, { name: "restrictions", type: AU.restrictions }, { name: "statusPane", type: AU.statusPane }, { name: "treePane", type: AU.treePane }, { name: "uploadPane", type: AU.uploadPane }, { name: "uploadProgressDialog", type: AU.uploadProgressDialog }, { name: "uploadSettings", type: AU.uploadSettings } ], _methods: [ { name: "refresh", controlMethodName: "Refresh" }, { name: "upload", controlMethodName: "Upload" }, { name: "cancelUpload", controlMethodName: "CancelUpload" } ], init: function (initObj) { /// <returns type="$au.uploader" /> if (typeof initObj === 'string') { return objectCache.get(initObj); } this._uploader = this; this._activeXControl = new AU.activeXControl(this); this.activeXControl({ classId: uploaderClassID, progId: uploaderProgID, version: axVERSION }); this._javaControl = new AU.javaControl(this); this.javaControl({ className: 'com.aurigma.imageuploader.ImageUploader.class', version: jVERSION }); // Init simple properties for (var i = 0, imax = this._simpleProperties.length; i < imax; i++) { propertyMaker.createSimpleProperty(this, this._simpleProperties[i]); } // Init object properties for (var i = 0, imax = this._objectProperties.length; i < imax; i++) { var property = this._objectProperties[i]; if (property.type === AU.converters) { // special create logic for events and converters // Create new object for this property var convertersObj = new AU.converters(); // init default value AU.converters.init(convertersObj, this); this[property.name] = function () { var newConverters = arguments[0]; if (newConverters instanceof Array) { // remove old vales from array convertersObj._items.length = 0; // and remove from actual control while (convertersObj.count() > 0) { convertersObj.remove(0); } // BUG 0014064: Remove last item in IE browser if it is undefined. // This item is appears if there is a comma after last element in array. if (AU.browser.isIE && newConverters[newConverters.length - 1] === undefined) { newConverters.pop(); } // add new converters for (var i = 0, imax = newConverters.length; i < imax; i++) { convertersObj.add(newConverters[i]); } } else { return convertersObj; } } } else { propertyMaker.createObjectProperty(this, property, this); } } //add InitComplete event to know that control rendered this.events().initComplete(function () { this.reinit(); }); showInfo('[js_info] Start apply uploader init object.'); this.set(initObj); showInfo('[js_info] Finish apply uploader init object.'); // put object into cache objectCache.put(this); return this; }, reinit: function () { showInfo("[js_info] Start control re-initialization."); if (this.state()) { showInfo("Control tries to reinit twice"); } var element = document.getElementById(this.id()), i, cnt; var type = this.type(); if (type === 'activex') { // Special ActiveX actions var o = element; var props = new Array(); for (propName in o) { var c = propName.charAt(0); if (c == c.toUpperCase()) { props.push(propName); } } var createIndexedProperty = function (obj, propName) { obj["set" + propName] = function (i, v) { this[propName](i) = v; }; obj["get" + propName] = function (i) { return this[propName](i); }; }; var createProperty = function (obj, propName) { obj["set" + propName] = function (v) { this[propName] = v; }; obj["get" + propName] = function () { return this[propName]; }; }; for (i = 0; i < props.length; i++) { //Check whether property is indexed if (typeof (o[props[i]]) == "unknown") { createIndexedProperty(o, props[i]); } else { createProperty(o, props[i]); } } } else if (type == 'java') { // Special java actions } //create methods showInfo("[js_info] Creating methods."); if (this._methods && this._methods.length > 0) { for (var i = 0, imax = this._methods.length; i < imax; i++) { propertyMaker.createMethod(this, this._methods[i]); } } showInfo("[js_info] Reinit control properties."); // Map uploader properties to the control if (this._simpleProperties) { for (var i = 0, imax = this._simpleProperties.length; i < imax; i++) { var property = this._simpleProperties[i]; if (!property.isAttribute) { propertyMaker.createControlProperty(this, property); } else { propertyMaker.createAttributeProperty(this, property); } } } if (this._objectProperties) { for (var i = 0, imax = this._objectProperties.length; i < imax; i++) { var property = this._objectProperties[i]; if (property.type && typeof property.type.reinit === 'function') { property.type.reinit(this[property.name]()); } } } showInfo("[js_info] Control re-initialization completed."); this.state(1); }, auxiliaryTextColor: function (value) { /// <summary> /// Get or set auxiliary text color /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, backgroundColor: function (value) { /// <summary> /// Get or set background color /// </summary> /// <param name="value" type="String" /> /// </param> /// <returns type="String" /> }, borderStyle: function (value) { /// <summary> /// Get or set border style /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, cancelUploadButtonImageFormat: function (value) { /// <summary> /// Cancel upload button image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, cancelUploadButtonText: function (value) { /// <summary> /// Cancel upload button text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, dialogColor: function (value) { /// <summary> /// Dialog color. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, dialogBorderColor: function (value) { /// <summary> /// Dialog border color. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, enableAutoRotation: function (value) { /// <summary> /// Enable auto rotation /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableCheckByClick: function (value) { /// <summary> /// Enable checking files by single click /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableContextMenu: function (value) { /// <summary> /// Enable context menu /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableDescriptionEditor: function (value) { /// <summary> /// Enable description editor /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableDragAndDrop: function (value) { /// <summary> /// Enable drag and drop /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableImageEditor: function (value) { /// <summary> /// Enable image editor /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableFileViewer: function (value) { /// <summary> /// Enable file viewer /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableOriginalFilesDeletion: function (value) { /// <summary> /// Enable original file deletion /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableRotation: function (value) { /// <summary> /// Enable rotation /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableStatusPane: function (value) { /// <summary> /// Enable status pane /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableUploadPane: function (value) { /// <summary> /// Enable upload pane /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, enableUploadProgress: function (value) { /// <summary> /// Enable upload progress dialog /// </summary> /// <param name="value" type="Boolean" /> /// <returns type="Boolean" /> }, folderProcessingMode: function (value) { /// <summary> /// Get or set the way for folder processing /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, headerColor: function (value) { /// <summary> /// Get or set header color. /// Specify two colors separated by semicolon to set gradient, e.g. "#000000;#FFFFFF". /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, headerTextColor: function (value) { /// <summary> /// Get or set text color of panes headers /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, height: function (value) { /// <summary> /// Get or set control height /// </summary> /// <param name="value" type="Number" /> /// <returns type="Number" /> /* will be created while initialization */ }, hyperlinkColor: function (value) { /// <summary> /// Get or set hyperlink color /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, licenseKey: function (value) { /// <summary> /// Get or set license key /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, loadingFolderContentText: function (value) { /// <summary> /// Get or set "Loading content... " text in folder pane and tree pane /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, paneFont: function (value) { /// <summary> /// Get or set pane font. Pane font uses as primary font for all panes. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, paneLayout: function (value) { /// <summary> /// Get or set pane layout /// </summary> /// <param name="value" type="String"> /// One of the values "OnePane", "TwoPanes", "ThreePanes" or equivalent number value /// </param> /// <returns type="Number" /> }, panelColor: function (value) { /// <summary> /// Get or set panel color /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, panelBorderColor: function (value) { /// <summary> /// Get or set panel border color /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, pasteFileNameTemplate: function (value) { /// <summary> /// Get or set file name template for files pasted from clipboard. Default value is "Paste_[Date]_[Time]". /// The [Date] and [Time] placeholders available. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, textColor: function (value) { /// <summary> /// Primary color for all text labels. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, titleFont: function (value) { /// <summary> /// Get or set font of the panes title. /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> }, uploadButtonImageFormat: function (value) { /// <summary> /// Upload button image format /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, uploadButtonText: function (value) { /// <summary> /// Upload button text /// </summary> /// <param name="value" type="String" /> /// <returns type="String" /> /* will be created while initialization */ }, width: function (width) { /// <summary> /// Get or set control width /// </summary> /// <param name="width" type="Number"> /// Width /// </param> /// <returns type="Number" /> }, activeXControl: function () { /// <summary> /// Get or set ActiveX control parameters /// </summary> /// <returns type="$au.activeXControl" /> return helpers.objProp(this, '_activeXControl', arguments.length, arguments[0]); }, addFilesProgressDialog: AU.addFilesProgressDialog, authenticationDialog: AU.authenticationDialog, contextMenu: AU.contextMenu, converters: AU.converters, deleteFilesDialog: AU.deleteFilesDialog, descriptionEditor: AU.descriptionEditor, detailsViewColumns: AU.detailsViewColumns, events: AU.events, files: AU.files, folderPane: AU.folderPane, imageEditor: AU.imageEditor, informationBar: AU.informationBar, javaControl: function () { /// <summary> /// Get or set java control parameters /// </summary> /// <returns type="$au.javaControl" /> return helpers.objProp(this, '_javaControl', arguments.length, arguments[0]); }, messages: AU.messages, metadata: AU.metadata, paneItem: AU.paneItem, restrictions: AU.restrictions, statusPane: AU.statusPane, treePane: AU.treePane, uploadPane: AU.uploadPane, uploadProgressDialog: AU.uploadProgressDialog, uploadSettings: AU.uploadSettings, refresh: function () { /// <summary> /// Refresh folder pane content /// </summary> }, upload: function () { /// <summary> /// Upload selected images to server. /// </summary> }, cancelUpload: function () { /// <summary> /// Cancel upload images. /// </summary> } }, true); AU.uploader.__class = true; AU.uploader.prototype.constructor = AU.uploader; // Give the init function the Aurigma.uploader prototype for later instantiation AU.uploader.fn.init.prototype = AU.uploader.fn; AU.thumbnailEvents = function () { /// <summary> /// Thumbnail event object. You do not need to create it directly. /// </summary> /// <returns type="$au.thumbnailEvents" /> /* will be created while initialization */ }; AU.thumbnailEvents.prototype = new baseEvents(); extend(AU.thumbnailEvents.prototype, { _eventNames: [undefined /*base event - initComplete*/, undefined /*base event - preRender*/, "click" ], click: function () { /// <summary> /// Click event /// </summary> /// <returns type="$au.event" /> } }, true); AU.thumbnailEvents.init = baseEvents.init; AU.thumbnailEvents.prototype.constructor = AU.thumbnailEvents; AU.thumbnail = function (initObj) { /// <summary> /// 1: $au.thumbnail(id) - Get created thumbnail control. /// 2: $au.thumbnail(obj) - Create new thumbnail control. /// </summary> /// <param name="initObj" type="Object"> /// 1: obj - Init object for thumbnail control. /// 2: id - An id of existing thumbnail control. /// </param> /// <returns type="$au.thumbnail" /> return new AU.thumbnail.fn.init(initObj); }; AU.thumbnail.fn = AU.thumbnail.prototype = new baseControl(); extend(AU.thumbnail.fn, { _simpleProperties: [ undefined, { name: "backgroundColor", getter: 1, setter: 1 }, { name: "guid", getter: 1, setter: 1 }, { name: "height", isAttribute: true, defaultValue: "100px" }, { name: "parentControlName", getter: 1, setter: 1 }, { name: "width", isAttribute: true, defaultValue: "100px" } ], _objectProperties: [ { name: "events", type: AU.thumbnailEvents } ], init: function (initObj) { /// <returns type="$au.thumbnail" /> if (typeof initObj === 'string') { return objectCache.get(initObj); } this._uploader = this; this._activeXControl = new AU.activeXControl(this); this.activeXControl({ classId: thumbnailClassID, progId: thumbnailProgID, version: axVERSION }); this._javaControl = new AU.javaControl(this); this.javaControl({ className: 'com.aurigma.imageuploader.Thumbnail.class', version: jVERSION }); // Init simple properties for (var i = 0, imax = this._simpleProperties.length; i < imax; i++) { propertyMaker.createSimpleProperty(this, this._simpleProperties[i]); } // Init object properties for (var i = 0, imax = this._objectProperties.length; i < imax; i++) { var property = this._objectProperties[i]; propertyMaker.createObjectProperty(this, property, this); } //add InitComplete event to know that control rendered this.events().initComplete(function () { this.reinit(); }); showInfo('[js_info] Start apply uploader init object.'); this.set(initObj); showInfo('[js_info] Finish apply uploader init object.'); // put object into cache objectCache.put(this); return this; }, reinit: function () { showInfo("[js_info] Start control re-initialization."); if (this.state()) { showInfo("Control tries to reinit twice"); return; } var element = document.getElementById(this.id()), i, cnt; var type = this.type(); if (type === 'activex') { // Special ActiveX actions var o = element; var props = new Array(); for (propName in o) { var c = propName.charAt(0); if (c == c.toUpperCase()) { props.push(propName); } } var createIndexedProperty = function (obj, propName) { obj["set" + propName] = function (i, v) { this[propName](i) = v; }; obj["get" + propName] = function (i) { return this[propName](i); }; }; var createProperty = function (obj, propName) { obj["set" + propName] = function (v) { this[propName] = v; }; obj["get" + propName] = function () { return this[propName]; }; }; for (i = 0; i < props.length; i++) { //Check whether property is indexed if (typeof (o[props[i]]) == "unknown") { createIndexedProperty(o, props[i]); } else { createProperty(o, props[i]); } } } else if (type == 'java') { // Special java actions } showInfo("[js_info] Reinit control properties."); // Map uploader properties to the control if (this._simpleProperties) { for (var i = 0, imax = this._simpleProperties.length; i < imax; i++) { var property = this._simpleProperties[i]; if (!property.isAttribute) { propertyMaker.createControlProperty(this, property); } else { propertyMaker.createAttributeProperty(this, property); } } } if (this._objectProperties) { for (var i = 0, imax = this._objectProperties.length; i < imax; i++) { var property = this._objectProperties[i]; if (property.type && typeof property.type.reinit === 'function') { property.type.reinit(this[property.name]()); } } } //create methods showInfo("[js_info] Creating methods."); if (this._methods && this._methods.length > 0) { for (var i = 0, imax = this._methods.length; i < imax; i++) { propertyMaker.createMethod(this, this._methods[i]); } } showInfo("[js_info] Control re-initialization completed."); this.state(1); }, activeXControl: function () { /// <summary> /// Get or set ActiveX control parameters /// </summary> /// <returns type="$au.activeXControl" /> return helpers.objProp(this, '_activeXControl', arguments.length, arguments[0]); }, javaControl: function () { /// <summary> /// Get or set java control parameters /// </summary> /// <returns type="$au.javaControl" /> return helpers.objProp(this, '_javaControl', arguments.length, arguments[0]); }, events: AU.thumbnailEvents, backgroundColor: function (value) { /// <summary> /// Get or set control background color /// </summary> /// <param name="value" type="String"> /// Color /// </param> /// <returns type="String" /> /* will be created while initialization */ }, guid: function (value) { /// <summary> /// Get or set identifier (GUID) of the item which is represented with this Thumbnail control. /// </summary> /// <param name="value" type="String"> /// Guid ({XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}) of the item in the uploader's upload list. /// </param> /// <returns type="String" /> /* will be created while initialization */ }, height: function (value) { /// <summary> /// Get or set control height /// </summary> /// <param name="value" type="Number"> /// control height /// </param> /// <returns type="Number" /> /* will be created while initialization */ }, parentControlName: function (value) { /// <summary> /// Get or set name of the ImageUploader control instance this thumbnail is associated with. /// </summary> /// <param name="value" type="String"> /// Id of the ImageUploader control. /// </param> /// <returns type="String" /> /* will be created while initialization */ }, width: function (width) { /// <summary> /// Get or set control width /// </summary> /// <param name="width" type="Number"> /// control width /// </param> /// <returns type="Number" /> /* will be created while initialization */ } }, true); AU.thumbnail.__class = true; AU.thumbnail.prototype.constructor = AU.thumbnail; // Give the init function the Aurigma.uploader prototype for later instantiation AU.thumbnail.fn.init.prototype = AU.thumbnail.fn; AU.event = function evt() { /// <summary> /// Event object. You do not need to directly create it. /// </summary> /// <returns type="$au.event" /> this._handlers = this._handlers || []; }; AU.event.prototype = { __class: true, add: function (handler) { if (handler instanceof Array) { for (var i = 0, cnt = handler.length; i < cnt; i++) this._handlers.push(handler[i]); } else { this._handlers.push(handler); } }, remove: function (handler) { for (var i in this._handlers) { if (this._handlers[i] === handler) { this._handlers.splice(i, 1); return true; } } return false; }, clear: function () { this._handlers = []; }, count: function () { return this._handlers.length; } }; AU.event.prototype.constructor = AU.event; /********************* ** ActiveX renderer ** *********************/ var activeXRenderer = function (uploader) { if (!uploader) return; function createEventHtml(name, value) { name = name.substr(0, name.length - "listener".length); var id = uploader.id(), scriptId = id + name, isNew = false; var scriptElement = document.getElementById(scriptId); if (scriptElement == null) { scriptElement = document.createElement('script'); scriptElement.id = scriptId; scriptElement.type = 'text/javascript'; scriptElement.htmlFor = id; scriptElement.event = name; isNew = true; } var s = 'return ' + value + '.apply(this, arguments);'; try { scriptElement.appendChild(document.createTextNode(s)); } catch (e) { scriptElement.text = s; } if (isNew) { var head = document.getElementsByTagName('head')[0]; scriptElement = head.insertBefore(scriptElement, head.firstChild); } } //create browser specific activex uploader markup var getHtml = function () { var html = [], events = [], i, id = uploader.id(), objectAttrs = { id: id, name: id, codebase: browser.isIE64 ? uploader.activeXControl().codeBase64() : uploader.activeXControl().codeBase(), classid: "clsid:" + uploader.activeXControl().classId() }; var v = uploader.activeXControl().version(); if (v) { v = (v + '').replace(/\./g, ","); objectAttrs.codebase += ("#version=" + v); } // object tag for IE browser if (browser.isIE && browser.isWindowsOS && !browser.isOpera) { // invoke activeXBeforeOpenTagRender callback var activeXBeforeOpenTagRenderArgs = [uploader, { resultHtml: ''}], result; uploader._invokeCallback('activeXBeforeOpenTagRender', activeXBeforeOpenTagRenderArgs); // add before open tag html if any if (result = activeXBeforeOpenTagRenderArgs[1].resultHtml) { html.push(result); } html.push('<object '); // add uploader width and height objectAttrs.width = uploader.width(); objectAttrs.height = uploader.height(); for (i in objectAttrs) { html.push(i + '="' + htmlencode(objectAttrs[i]) + '" '); } html.push('>'); var objectParams = uploader.getParams(); for (i in objectParams) { var p = objectParams[i]; if (/listener$/.test(p.name)) { createEventHtml(p.name, p.value); } else { html.push('<param name="' + p.name + '" value="' + htmlencode(p.value) + '" /> '); } } // invoke activeXBeforeCloseTagRender callback var activeXBeforeCloseTagRenderArgs = [uploader, { resultHtml: ''}], result; uploader._invokeCallback('activeXBeforeCloseTagRender', activeXBeforeCloseTagRenderArgs); // add before close tag html if any if (result = activeXBeforeCloseTagRenderArgs[1].resultHtml) { html.push(result); } html.push('</object>'); // invoke activeXBeforeCloseTagRender callback var activeXAfterCloseTagRenderArgs = [uploader, { resultHtml: ''}], result; uploader._invokeCallback('activeXAfterCloseTagRender', activeXAfterCloseTagRenderArgs); // add before close tag html if any if (result = activeXAfterCloseTagRenderArgs[1].resultHtml) { html.push(result); } } else { // ActiveX available for IE only. var msg = "Browser doesn't support activex."; showError(msg); throw new Error(msg); } return html.join(""); }; return { html: getHtml, write: function () { /// <summary> /// write flash uploader markup /// </summary> document.write(this.html()); } }; }; /****************** ** Java renderer ** ******************/ var javaRenderer = function (uploader, options) { var getHtml = function () { var html = [], events = [], i, tagName, id = uploader.id(); var attributes = { id: id }; var params = uploader.getParams(); if (options.enableResumeUploadCallback) { params.push({ name: 'EnableResumeUploadCallback', value: true }); } var jarFileName = uploader.javaControl().getJarFileName(); var codeBase = uploader.javaControl().codeBase() + ""; // cut jar filename codeBase = codeBase.split("/"); codeBase = codeBase.slice(0, codeBase.length - 1); if (codeBase.length == 0) { codeBase = '.'; } else if (codeBase.length == 1 && codeBase[0] == '') { codeBase = '/'; } else { codeBase = codeBase.join("/"); } // all resources contain in .jar archive params.push({ name: "codebase_lookup", value: "false" }); // set cache options if (uploader.javaControl().cached() && uploader.javaControl().version()) { params.push({ name: "cache_archive", value: jarFileName }); params.push({ name: "cache_version", value: (uploader.javaControl().version() + "").replace(/,/g, ".") }); } // BUGBUG 0014000 Add control id in param for IE browser params.push({ name: "control_id", value: id }); var javaVersion = uploader.javaControl().javaVersionRequired; // I think we can use <object> tag for most browsers. // IE always supports <object> tag // Chrome, FF on Windows - work // Safari, Chrome, FF on Mac - work // FF on Linux - work var useObjectTag = true; if (useObjectTag) { tagName = 'object'; attributes.classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"; // java classId // IE-x64 need to manual download and install x64 version of Java. if (!browser.isIE64) { javaVersion = javaVersion.join(','); attributes.codebase = window.location.protocol + "//java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab#Version=" + javaVersion; } params.push({ name: "archive", value: jarFileName }); if (codeBase) { params.push({ name: "codebase", value: codeBase }); } // remove ".class" from class name var className = uploader.javaControl().className(); if (className.substring(className.length - 6) == '.class') { className = className.substring(0, className.length - 6); } params.push({ name: "code", value: className }); params.push({ name: "mayscript", value: "true" }); params.push({ name: "scriptable", value: "true" }); params.push({ name: "java_version", value: "1.5+" }); if (!browser.isIE) { attributes.archive = uploader.javaControl().getJarFileName(); attributes.codebase = codeBase; javaVersion = uploader.javaControl().javaVersionRequired; javaVersion = javaVersion[0] + '.' + javaVersion[1]; attributes.type = "application/x-java-applet;version=" + javaVersion; params.push({ name: "type", value: "application/x-java-applet;version=" + javaVersion }); delete attributes.classid; } } else { tagName = "applet"; attributes.code = uploader.javaControl().className(); attributes.archive = uploader.javaControl().getJarFileName(); if (codeBase) { attributes.codebase = codeBase; } attributes.mayscript = "true"; attributes.scriptable = "true"; } // invoke javaBeforeOpenTagRender callback var javaBeforeOpenTagRenderArgs = [uploader, { resultHtml: ''}], result; uploader._invokeCallback('javaBeforeOpenTagRender', javaBeforeOpenTagRenderArgs); // add before open tag html if any if (result = javaBeforeOpenTagRenderArgs[1].resultHtml) { html.push(result); } html.push('<' + tagName); // invoke javaRenderStyleAttribute callback var javaRenderStyleAttributeArgs = [uploader, { resultHtml: ''}], result; uploader._invokeCallback('javaRenderStyleAttribute', javaRenderStyleAttributeArgs); // add style attributes if any if (result = javaRenderStyleAttributeArgs[1].resultHtml) { html.push(' style="' + result + '" '); } attributes.width = uploader.width(); attributes.height = uploader.height(); for (var attrName in attributes) { if (attributes.hasOwnProperty(attrName)) { html.push(' ' + attrName + '="' + attributes[attrName] + '"'); } } if (tagName === 'embed') { for (var i = 0, maxi = params.length; i < maxi; i++) { var param = params[i]; html.push(param.name + '="' + htmlencode(param.value) + '" '); } html.push('>'); } else { html.push('>'); for (var i = 0, maxi = params.length; i < maxi; i++) { var param = params[i]; html.push('<param name="' + param.name + '" value="' + htmlencode(param.value) + '" />'); } } // invoke javaBeforeCloseTagRender callback var javaBeforeCloseTagRenderArgs = [uploader, { resultHtml: ''}], result; uploader._invokeCallback('javaBeforeCloseTagRender', javaBeforeCloseTagRenderArgs); // add before close tag html if any if (result = javaBeforeCloseTagRenderArgs[1].resultHtml) { html.push(result); } html.push('</' + tagName + '>'); // invoke javaAfterCloseTagRender callback var javaAfterCloseTagRenderArgs = [uploader, { resultHtml: ''}], result; uploader._invokeCallback('javaAfterCloseTagRender', javaAfterCloseTagRenderArgs); // add after close tag html if any if (result = javaAfterCloseTagRenderArgs[1].resultHtml) { html.push(result); } // Fix LiveConnect bug in Firefox on Mac OS. // By unknown reason java code can't call // javascript code, until we call java code // from javascript. if (/mac/i.test(window.navigator.platform) && /firefox/i.test(window.navigator.userAgent) && ('java' in window)) { window.java.lang.System.getProperty('java.version'); } return html.join(""); } return { html: getHtml, write: function () { /// <summary> /// write java uploader markup /// </summary> document.write(this.html()); } }; }; // set namespace property for VS intelisense AU.__namespace = true; //expose to global window.Aurigma = window.Aurigma || { __namespace: true }; window.Aurigma.ImageUploader = AU; // short alias window.$au = AU; })(window);