1 2$.fn.UploadRun = function (opt) { 3 //è¯è¨çæ¬ 4 languageOpt = { 5 cn: { 6 unSupportMsg: '该ä¸ä¼ æä»¶ä¸æ¯ææ¨çæµè§å¨ï¼å¦ææ¨ä½¿ç¨çæ¯IEæµè§å¨ï¼è¯·å°è¯å级 flash ææ¾å¨', 7 browseMsg: 'ç¹å»éæ©æä»¶', 8 keepAddMsg: 'ç»§ç»æ·»å ', 9 allowTypeMsg: 'æ¯ææ ¼å¼ï¼', 10 delMsg: 'å é¤', 11 rightMsg: 'åå³æè½¬', 12 leftMsg: 'åå·¦æè½¬', 13 overMaxMsg: 'æä»¶å¤§å°è¶ åº', 14 pauseMsg: 'ä¸ä¼ æå', 15 failedMsg: 'ä¸ä¼ 失败ï¼è¯·éè¯', 16 previewMsg: 'é¢è§ä¸', 17 notPreviewMsg: 'ä¸è½é¢è§', 18 selectedMsg: 'éä¸@0个æä»¶ï¼å ±@1ã', 19 successmsg: 'å·²æåä¸ä¼ @0ï¼ä¸ä¼ 失败@1', 20 countMsg: 'å ±@0å¼ ï¼@1ï¼ï¼å·²ä¸ä¼ @2å¼ ', 21 failedCountMsg: 'ï¼å¤±è´¥@0å¼ ', 22 stopMsg: 'æåä¸ä¼ ', 23 continueMsg: 'ç»§ç»ä¸ä¼ ', 24 startMsg: 'å¼å§ä¸ä¼ ', 25 q_TYPE_DENIED: opt.fileExtMsg||"è¯·éæ©æ¯æçæä»¶æ ¼å¼ï¼", 26 q_EXCEED_NUM_LIMIT: "忬¡åªè½ä¸ä¼ 50个æä»¶ï¼", 27 q_EXCEED_SIZE_LIMIT: "忬¡ä¸ä¼ çæä»¶æ»éä¸è½è¶ è¿ @0KBï¼", 28 q_EXCEED_SIZE: opt.maxSizeMsg ||"å个æä»¶å®¹éè¿å¤§,æå¤§ @0KBï¼", 29 q_DUPLICATE: "éæ©äºé夿件ï¼", 30 31 }, 32 en: { 33 unSupportMsg: 'WebUploader does not support the browser you are using.', 34 browseMsg: 'Browse', 35 keepAddMsg: 'Keep adding', 36 allowTypeMsg: 'Allow upload format:', 37 delMsg: 'Delete', 38 rightMsg: 'Rotate right', 39 leftMsg: 'Rotate left', 40 overMaxMsg: 'File size exceeds maximum', 41 pauseMsg: 'Pause', 42 failedMsg: 'Upload failed,please try agains', 43 previewMsg: 'Preview', 44 notPreviewMsg: "Can't preview", 45 selectedMsg: 'Selected @0 filesï¼Total @1.', 46 successmsg: 'Success @0ï¼fail@1', 47 countMsg: 'Total @0(@1)ï¼Success @', 48 failedCountMsg: 'ï¼fail @0', 49 stopMsg: 'Pause', 50 continueMsg: 'Continue', 51 startMsg: 'Start', 52 q_TYPE_DENIED: opt.fileExtMsg ||"Please select a supported file format!", 53 q_EXCEED_NUM_LIMIT: "Only 50 files can be uploaded at a single time!", 54 q_EXCEED_SIZE_LIMIT: "Total file uploads cannot exceed @0KBï¼", 55 q_EXCEED_SIZE: opt.maxSizeMsg ||"The file is too large,maximum @0KB!", 56 q_DUPLICATE: "Duplicate file selected!", 57 58 } 59 }; 60 61 var $ = jQuery, 62 63 $wrap = $(opt.fileId), 64 65 swfUrl = window.location.protocol + '//' + window.location.host + $("script[websiteurl]").attr("websiteurl") + 'Res/webuploader/Uploader.swf', 66 67 uploadUrl = window.location.protocol + '//' + window.location.host + $("script[websiteurl]").attr("websiteurl") + 'Ajax/WhirUpload.aspx?formId=' + opt.formId + '&isPic=' + (opt.isPic ? '1' : '0'), 68 69 // å¾çå®¹å¨ 70 $queue = $('<ul class="filelist"></ul>') 71 .appendTo($wrap.find('.queueList')), 72 73 // ç¶ææ ï¼å æ¬è¿åº¦åæ§å¶æé® 74 $statusBar = $wrap.find('.statusBar'), 75 76 // æä»¶æ»ä½éæ©ä¿¡æ¯ã 77 $info = $statusBar.find('.info'), 78 79 // ä¸ä¼ æé® 80 $upload = $wrap.find('.uploadBtn'), 81 82 // æ²¡éæ©æä»¶ä¹åçå 容ã 83 $placeHolder = $wrap.find('.placeholder'), 84 85 // æ»ä½è¿åº¦æ¡ 86 $progress = $statusBar.find('.progress').hide(), 87 88 // æ·»å çæä»¶æ°é 89 fileCount = 0, 90 91 // æ·»å çæä»¶æ»å¤§å° 92 fileSize = 0, 93 94 //è¯è¨çæ¬ cn-䏿ï¼en-è±æ 95 lang = opt.lang || "cn", 96 97 // ä¼åretina, å¨retinaä¸è¿ä¸ªå¼æ¯2 98 ratio = window.devicePixelRatio || 1, 99 100 // 缩ç¥å¾å¤§å° 101 thumbnailWidth = 110 * ratio, 102 thumbnailHeight = 110 * ratio, 103 104 // å¯è½æpedding, ready, uploading, confirm, done. 105 state = 'pedding', 106 107 // æææä»¶çè¿åº¦ä¿¡æ¯ï¼key为file id 108 percentages = {}, 109 110 supportTransition = (function () { 111 var s = document.createElement('p').style, 112 r = 'transition' in s || 113 'WebkitTransition' in s || 114 'MozTransition' in s || 115 'msTransition' in s || 116 'OTransition' in s; 117 s = null; 118 return r; 119 })(), 120 121 // WebUploaderå®ä¾ 122 uploader; 123 124 if (!WebUploader.Uploader.support()) { 125 alert(languageOpt[lang]['unSupportMsg']); 126 throw new Error(languageOpt[lang]['unSupportMsg']); 127 } 128 129 // å®ä¾å 130 uploader = WebUploader.create({ 131 pick: { 132 id: opt.filePicker, 133 label: languageOpt[lang]['browseMsg'], 134 multiple: opt.isMulti 135 }, 136 dnd: opt.fileId + ' .queueList', 137 paste: document.body, 138 //ä¸ä¼ ç±»å 139 accept: { 140 title: 'Images', 141 extensions: opt.fileExt ? opt.fileExt : 'gif,jpg,jpeg,bmp,png', 142 mimeTypes: opt.isPic ? 'image/*' : 'file/*' 143 }, 144 145 // swfæä»¶è·¯å¾ 146 swf: swfUrl, 147 //æ¯å¦å è®¸ææ½ 148 disableGlobalDnd: true, 149 //åçä¸ä¼ 150 chunked: true, 151 //ä¸ä¼ æä»¶æ¥æ¶å°å 152 server: uploadUrl, 153 //æå¤éæ©æä»¶æ°é 154 fileNumLimit: 50, 155 //æ»æä»¶å¤§å° 156 fileSizeLimit: opt.size ? opt.size * 20 * 1024 : 200 * 1024 * 1024, // 200 M æä»¶å¤§å°éå¶ 157 //å个æä»¶å¤§å° 158 fileSingleSizeLimit: opt.size ? opt.size * 1024 : 5 * 1024 * 1024 // 5 M åæä»¶å¤§å°éå¶ 159 }); 160
161 // æ·»å âæ·»å æä»¶âçæé®ï¼ 162 uploader.addButton({ 163 id: opt.filePicker2, 164 label: languageOpt[lang]['keepAddMsg'] 165 }); 166 167 $placeHolder.append("<div>" + languageOpt[lang]['allowTypeMsg'] + opt.fileExt + "</div>"); 168 169 170 // 彿æä»¶æ·»å è¿æ¥æ¶æ§è¡ï¼è´è´£viewçå建 171 function addFile(file) { 172 var $li = $('<li id="' + file.id + '">' + 173 '<p class="title">' + file.name + '</p>' + 174 '<p class="imgWrap"></p>' + 175 '<p class="progress"><span></span></p>' + 176 '</li>'), 177 178 $btns = $('<div class="file-panel">' + 179 '<span class="cancel">' + languageOpt[lang]['delMsg'] + '</span>' + 180 '<span class="rotateRight">' + languageOpt[lang]['rightMsg'] + '</span>' + 181 '<span class="rotateLeft">' + languageOpt[lang]['leftMsg'] + '</span></div>').appendTo($li), 182 $prgress = $li.find('p.progress span'), 183 $wrap = $li.find('p.imgWrap'), 184 $info = $('<p class="error"></p>'), 185 186 showError = function (code) { 187 switch (code) { 188 case 'exceed_size': 189 text = languageOpt[lang]['overMaxMsg']; 190 break; 191 192 case 'interrupt': 193 text = languageOpt[lang]['pauseMsg']; 194 break; 195 196 default: 197 text = languageOpt[lang]['failedMsg']; 198 break; 199 } 200 201 $info.text(text).appendTo($li); 202 }; 203 204 if (file.getStatus() === 'invalid') { 205 showError(file.statusText); 206 } else { 207 // @todo lazyload 208 $wrap.text(languageOpt[lang]['previewMsg']); 209 uploader.makeThumb(file, function (error, src) { 210 if (error) { 211 $wrap.text(languageOpt[lang]['notPreviewMsg']); 212 return; 213 } 214 215 var img = $('<img src="' + src + '">'); 216 $wrap.empty().append(img); 217 }, thumbnailWidth, thumbnailHeight); 218 219 percentages[file.id] = [file.size, 0]; 220 file.rotation = 0; 221 $upload.removeClass("disabled"); 222 } 223 224 file.on('statuschange', function (cur, prev) { 225 if (prev === 'progress') { 226 $prgress.hide().width(0); 227 } else if (prev === 'queued') { 228 $li.off('mouseenter mouseleave'); 229 $btns.remove(); 230 } 231 232 // æå 233 if (cur === 'error' || cur === 'invalid') { 234 console.log(file.statusText); 235 showError(file.statusText); 236 percentages[file.id][1] = 1; 237 } else if (cur === 'interrupt') { 238 showError('interrupt'); 239 } else if (cur === 'queued') { 240 percentages[file.id][1] = 0; 241 } else if (cur === 'progress') { 242 $info.remove(); 243 $prgress.css('display', 'block'); 244 } else if (cur === 'complete') { 245 $li.append('<span class="success"></span>'); 246 } 247 248 $li.removeClass('state-' + prev).addClass('state-' + cur); 249 }); 250 251 $li.on('mouseenter', function () { 252 $btns.stop().animate({ height: 30 }); 253 }); 254 255 $li.on('mouseleave', function () { 256 $btns.stop().animate({ height: 0 }); 257 }); 258 259 $btns.on('click', 'span', function () { 260 var index = $(this).index(), 261 deg; 262 263 switch (index) { 264 case 0: 265 uploader.removeFile(file); 266 return; 267 268 case 1: 269 file.rotation += 90; 270 break; 271 272 case 2: 273 file.rotation -= 90; 274 break; 275 } 276 277 if (supportTransition) { 278 deg = 'rotate(' + file.rotation + 'deg)'; 279 $wrap.css({ 280 '-webkit-transform': deg,
281 '-mos-transform': deg, 282 '-o-transform': deg, 283 'transform': deg 284 }); 285 } else { 286 $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')'); 287 } 288 }); 289 290 $li.appendTo($queue); 291 } 292 293 // è´è´£viewç鿝 294 function removeFile(file) { 295 var $li = $('#' + file.id); 296 297 delete percentages[file.id]; 298 updateTotalProgress(); 299 $li.off().find('.file-panel').off().end().remove(); 300 } 301 302 function updateTotalProgress() { 303 var loaded = 0, 304 total = 0, 305 spans = $progress.children(), 306 percent; 307 308 $.each(percentages, function (k, v) { 309 total += v[0]; 310 loaded += v[0] * v[1]; 311 }); 312 313 percent = total ? loaded / total : 0; 314 315 spans.eq(0).text(Math.round(percent * 100) + '%'); 316 spans.eq(1).css('width', Math.round(percent * 100) + '%'); 317 updateStatus(); 318 } 319 320 function updateStatus() { 321 var text = '', stats; 322 323 if (state === 'ready') { 324 text = languageOpt[lang]['selectedMsg'].replace("@0", fileCount).replace("@1", WebUploader.formatSize(fileSize)); 325 } else if (state === 'confirm') { 326 stats = uploader.getStats(); 327 if (stats.uploadFailNum) { 328 text = languageOpt[lang]['successmsg'].replace("@0", stats.successNum).replace("@1", stats.uploadFailNum); 329 } 330 331 } else { 332 stats = uploader.getStats(); 333 text = languageOpt[lang]['countMsg'].replace("@0", fileCount).replace("@1", WebUploader.formatSize(fileSize)).replace("@2", stats.successNum); 334 335 if (stats.uploadFailNum) { 336 text = languageOpt[lang]['failedCountMsg'].replace("@0", stats.uploadFailNum); 337 } 338 } 339 340 $info.html(text); 341 } 342 343 function setState(val) { 344 var file, stats; 345 346 if (val === state) { 347 return; 348 } 349 350 $upload.removeClass('state-' + state); 351 $upload.addClass('state-' + val); 352 state = val; 353 354 switch (state) { 355 case 'pedding': 356 $placeHolder.removeClass('element-invisible'); 357 $queue.parent().removeClass('filled'); 358 $queue.hide(); 359 $statusBar.addClass('element-invisible'); 360 uploader.refresh(); 361 break; 362 363 case 'ready': 364 $placeHolder.addClass('element-invisible'); 365 $(opt.filePicker2).removeClass('element-invisible'); 366 $queue.parent().addClass('filled'); 367 $queue.show(); 368 $statusBar.removeClass('element-invisible'); 369 uploader.refresh(); 370 break; 371 372 case 'uploading': 373 $(opt.filePicker2).addClass('element-invisible'); 374 $progress.show(); 375 $upload.text(languageOpt[lang]['stopMsg']); 376 break; 377 378 case 'paused': 379 $progress.show(); 380 $upload.text(languageOpt[lang]['continueMsg']); startMsg 381 break; 382 383 case 'confirm': 384 $progress.hide(); 385 $upload.text(languageOpt[lang]['startMsg']).addClass('disabled'); 386 387 stats = uploader.getStats(); 388 if (stats.successNum && !stats.uploadFailNum) { 389 setState('finish'); 390 return; 391 } 392 break; 393 case 'finish': 394 stats = uploader.getStats(); 395 if (stats.successNum) { 396 //alert('ä¸ä¼ æå'); 397 } else { 398 // 没ææåçå¾çï¼é设 399 state = 'done'; 400 location.reload(); 401 } 402 break; 403 } 404 405 updateStatus(); 406 } 407 408 uploader.onUploadProgress = function (file, percentage) { 409 var $li = $('#' + file.id), 410 $percent = $li.find('.progress span'); 411 412 $percent.css('width', percentage * 100 + '%'); 413 percentages[file.id][1] = percentage; 414 updateTotalProgress(); 415 }; 416 417 uploader.onFileQueued = function (file) { 418 fileCount++; 419 fileSize += file.size; 420 421 if (fileCount === 1) { 422 $placeHolder.addClass('element-invisible'); 423 $statusBar.show(); 424 } 425 426 addFile(file); 427 setState('ready'); 428 updateTotalProgress(); 429 }; 430 431 uploader.onFileDequeued = function (file) { 432 fileCount--; 433 fileSize -= file.size; 434 435 if (!fileCount) { 436 setState('pedding'); 437 } 438 439 removeFile(file); 440 updateTotalProgress(); 441 442 }; 443 // æä»¶ä¸ä¼ æå 444 uploader.on('uploadSuccess', function (file, response) { 445 if (response.Result) { 446 // ä¸ä¼ æå 447 if (opt.isMulti) 448 $(opt.fileUrl).val($(opt.fileUrl).val() + "*" + response.Msg); 449 else 450 $(opt.fileUrl).val(response.Msg); 451 } else { 452 // ä¸ä¼ é误æå¤±è´¥ 453 var $file = $("#" + file.id); 454 $error = $('<p class="error"></p>'); 455 $error.text(response.Msg).appendTo($file); 456 $file.find(".success").remove(); 457 } 458 }); 459 460 uploader.on('all', function (type) { 461 var stats; 462 switch (type) { 463 case 'uploadFinished': 464 setState('confirm'); 465 break; 466 case 'startUpload': 467 setState('uploading'); 468 break; 469 470 case 'stopUpload': 471 setState('paused'); 472 break; 473 } 474 }); 475 476 uploader.onError = function (code) { 477 switch (code) { 478 case 'Q_TYPE_DENIED': 479 alert(languageOpt[lang]['q_TYPE_DENIED']); 480 break; 481 case 'Q_EXCEED_NUM_LIMIT': 482 alert(languageOpt[lang]['q_EXCEED_NUM_LIMIT']); 483 break; 484 case 'Q_EXCEED_SIZE_LIMIT': 485 alert(languageOpt[lang]['q_EXCEED_SIZE_LIMIT'].replace("@0", opt.size ? opt.size * 20 : 200)); 486 break; 487 case 'F_EXCEED_SIZE': 488 alert(languageOpt[lang]['q_EXCEED_SIZE'].replace("@0", opt.size ? opt.size : 5)); 489 break; 490 case 'F_DUPLICATE': 491 alert(languageOpt[lang]['q_DUPLICATE']);
492 break; 493 } 494 }; 495 496 $upload.on('click', function () { 497 if ($(this).hasClass('disabled')) { 498 return false; 499 } 500 501 if (state === 'ready') { 502 uploader.upload(); 503 } else if (state === 'paused') { 504 uploader.upload(); 505 } else if (state === 'uploading') { 506 uploader.stop(); 507 } 508 }); 509 510 $info.on('click', '.retry', function () { 511 uploader.retry(); 512 }); 513 514 $info.on('click', '.ignore', function () { 515 alert('todo'); 516 }); 517 518 $upload.addClass('state-' + state); 519 520 updateTotalProgress(); 521 522} 523
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.