kb
http://www.tianxiashua.com/Public/moive_play/lxdh.js
(function (root, factory) { var modules = {}, _require = function (deps, callback) { var args, len, i; if (typeof deps === 'string') { return getModule(deps); } else { args = []; for (len = deps.length, i = 0; i < len; i++) { args.push(getModule(deps[i])); } return callback.apply(null, args); } }, _define = function (id, deps, factory) { if (arguments.length === 2) { factory = deps; deps = null; } _require(deps || [], function () { setModule(id, factory, arguments); }); }, setModule = function (id, factory, args) { var module = { exports: factory }, returned; if (typeof factory === 'function') { args.length || (args = [_require, module.exports, module]); returned = factory.apply(null, args); returned !== undefined && (module.exports = returned); } modules[id] = module.exports; }, getModule = function (id) { var module = modules[id] || root[id]; if (!module) { throw new Error('`' + id + '` is undefined'); } return module; }, exportsTo = function (obj) { var key, host, parts, part, last, ucFirst; ucFirst = function (str) { return str && (str.charAt(0).toUpperCase() + str.substr(1)); }; for (key in modules) { host = obj; if (!modules.hasOwnProperty(key)) { continue; } parts = key.split('/'); last = ucFirst(parts.pop()); while ((part = ucFirst(parts.shift()))) { host[part] = host[part] || {}; host = host[part]; } host[last] = modules[key]; } return obj; }, makeExport = function (dollar) { root.__dollar = dollar; return exportsTo(factory(root, _define, _require)); }, origin; if (typeof module === 'object' && typeof module.exports === 'object') { module.exports = makeExport(); } else if (typeof define === 'function' && define.amd) { define(['jquery'], makeExport); } else { origin = root.WebUploader; root.WebUploader = makeExport(); root.WebUploader.noConflict = function () { root.WebUploader = origin; }; } })(window, function (window, define, require) { define('dollar-third', [], function () { var $ = window.__dollar || window.jQuery || window.Zepto; if (!$) { throw new Error('jQuery or Zepto not found!'); } return $; }); define('dollar', ['dollar-third'], function (_) { return _; }); define('promise-builtin', ['dollar'], function ($) { var api; function Callbacks(once) { var list = [], stack = !once && [], fire = function (data) { memory = data; fired = true; firingIndex = firingStart || 0; firingStart = 0; firingLength = list.length; firing = true; for (; list && firingIndex < firingLength; firingIndex++) { list[firingIndex].apply(data[0], data[1]); } firing = false; if (list) { if (stack) { stack.length && fire(stack.shift()); } else { list = []; } } }, self = { add: function () { if (list) { var start = list.length; (function add(args) { $.each(args, function (_, arg) { var type = $.type(arg); if (type === 'function') { list.push(arg); } else if (arg && arg.length && type !== 'string') { add(arg); } }); })(arguments); if (firing) { firingLength = list.length; } else if (memory) { firingStart = start; fire(memory); } } return this; }, disable: function () { list = stack = memory = undefined; return this; }, lock: function () { stack = undefined; if (!memory) { self.disable(); } return this; }, fireWith: function (context, args) { if (list && (!fired || stack)) { args = args || []; args = [context, args.slice ? args.slice() : args]; if (firing) { stack.push(args); } else { fire(args); } } return this; }, fire: function () { self.fireWith(this, arguments); return this; } }, fired, firing, firingStart, firingLength, firingIndex, memory; return self; } function Deferred(func) { var tuples = [ ['resolve', 'done', Callbacks(true), 'resolved'], ['reject', 'fail', Callbacks(true), 'rejected'], ['notify', 'progress', Callbacks()] ], state = 'pending', promise = { state: function () { return state; }, always: function () { deferred.done(arguments).fail(arguments); return this; }, then: function () { var fns = arguments; return Deferred(function (newDefer) { $.each(tuples, function (i, tuple) { var action = tuple[0], fn = $.isFunction(fns[i]) && fns[i]; deferred[tuple[1]](function () { var returned; returned = fn && fn.apply(this, arguments); if (returned && $.isFunction(returned.promise)) { returned.promise().done(newDefer.resolve).fail(newDefer.reject).progress(newDefer.notify); } else { newDefer[action + 'With'](this === promise ? newDefer.promise() : this, fn ? [returned] : arguments); } }); }); fns = null; }).promise(); }, promise: function (obj) { return obj != null ? $.extend(obj, promise) : promise; } }, deferred = {}; promise.pipe = promise.then; $.each(tuples, function (i, tuple) { var list = tuple[2], stateString = tuple[3]; promise[tuple[1]] = list.add; if (stateString) { list.add(function () { state = stateString; }, tuples[i ^ 1][2].disable, tuples[2][2].lock); } deferred[tuple[0]] = function () { deferred[tuple[0] + 'With'](this === deferred ? promise : this, arguments); return this; }; deferred[tuple[0] + 'With'] = list.fireWith; }); promise.promise(deferred); if (func) { func.call(deferred, deferred); } return deferred; } api = { Deferred: Deferred, isPromise: function (anything) { return anything && typeof anything.then === 'function'; }, when: function (subordinate) { var i = 0, slice = [].slice, resolveValues = slice.call(arguments), length = resolveValues.length, remaining = length !== 1 || (subordinate && $.isFunction(subordinate.promise)) ? length : 0, deferred = remaining === 1 ? subordinate : Deferred(), updateFunc = function (i, contexts, values) { return function (value) { contexts[i] = this; values[i] = arguments.length > 1 ? slice.call(arguments) : value; if (values === progressValues) { deferred.notifyWith(contexts, values); } else if (!(--remaining)) { deferred.resolveWith(contexts, values); } }; }, progressValues, progressContexts, resolveContexts; if (length > 1) { progressValues = new Array(length); progressContexts = new Array(length); resolveContexts = new Array(length); for (; i < length; i++) { if (resolveValues[i] && $.isFunction(resolveValues[i].promise)) { resolveValues[i].promise().done(updateFunc(i, resolveContexts, resolveValues)).fail(deferred.reject).progress(updateFunc(i, progressContexts, progressValues)); } else { --remaining; } } } if (!remaining) { deferred.resolveWith(resolveContexts, resolveValues); } return deferred.promise(); } }; return api; }); define('promise', ['promise-builtin'], function ($) { return $; }); define('base', ['dollar', 'promise'], function ($, promise) { var noop = function () {}, call = Function.call; function uncurryThis(fn) { return function () { return call.apply(fn, arguments); }; } function bindFn(fn, context) { return function () { return fn.apply(context, arguments); }; } function createObject(proto) { var f; if (Object.create) { return Object.create(proto); } else { f = function () {}; f.prototype = proto; return new f(); } } return { version: '0.1.5', $: $, Deferred: promise.Deferred, isPromise: promise.isPromise, when: promise.when, browser: (function (ua) { var ret = {}, webkit = ua.match(/WebKit\/([\d.]+)/), chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/), ie = ua.match(/MSIE\s([\d\.]+)/) || ua.match(/(?:trident)(?:.*rv:([\w.]+))?/i), firefox = ua.match(/Firefox\/([\d.]+)/), safari = ua.match(/Safari\/([\d.]+)/), opera = ua.match(/OPR\/([\d.]+)/); webkit && (ret.webkit = parseFloat(webkit[1])); chrome && (ret.chrome = parseFloat(chrome[1])); ie && (ret.ie = parseFloat(ie[1])); firefox && (ret.firefox = parseFloat(firefox[1])); safari && (ret.safari = parseFloat(safari[1])); opera && (ret.opera = parseFloat(opera[1])); return ret; })(navigator.userAgent), os: (function (ua) { var ret = {}, android = ua.match(/(?:Android);?[\s\/]+([\d.]+)?/), ios = ua.match(/(?:iPad|iPod|iPhone).*OS\s([\d_]+)/); android && (ret.android = parseFloat(android[1])); ios && (ret.ios = parseFloat(ios[1].replace(/_/g, '.'))); return ret; })(navigator.userAgent), inherits: function (Super, protos, staticProtos) { var child; if (typeof protos === 'function') { child = protos; protos = null; } else if (protos && protos.hasOwnProperty('constructor')) { child = protos.constructor; } else { child = function () { return Super.apply(this, arguments); }; } $.extend(true, child, Super, staticProtos || {}); child.__super__ = Super.prototype; child.prototype = createObject(Super.prototype); protos && $.extend(true, child.prototype, protos); return child; }, noop: noop, bindFn: bindFn, log: (function () { if (window.console) { return bindFn(console.log, console); } return noop; })(), nextTick: (function () { return function (cb) { setTimeout(cb, 1); }; })(), slice: uncurryThis([].slice), guid: (function () { var counter = 0; return function (prefix) { var guid = (+new Date()).toString(32), i = 0; for (; i < 5; i++) { guid += Math.floor(Math.random() * 65535).toString(32); } return (prefix || 'wu_') + guid + (counter++).toString(32); }; })(), formatSize: function (size, pointLength, units) { var unit; units = units || ['B', 'K', 'M', 'G', 'TB']; while ((unit = units.shift()) && size > 1024) { size = size / 1024; } return (unit === 'B' ? size : size.toFixed(pointLength || 2)) + unit; } }; }); define('mediator', ['base'], function (Base) { var $ = Base.$, slice = [].slice, separator = /\s+/, protos; function findHandlers(arr, name, callback, context) { return $.grep(arr, function (handler) { return handler && (!name || handler.e === name) && (!callback || handler.cb === callback || handler.cb._cb === callback) && (!context || handler.ctx === context); }); } function eachEvent(events, callback, iterator) { $.each((events || '').split(separator), function (_, key) { iterator(key, callback); }); } function triggerHanders(events, args) { var stoped = false, i = -1, len = events.length, handler; while (++i < len) { handler = events[i]; if (handler.cb.apply(handler.ctx2, args) === false) { stoped = true; break; } } return !stoped; } protos = { on: function (name, callback, context) { var me = this, set; if (!callback) { return this; } set = this._events || (this._events = []); eachEvent(name, callback, function (name, callback) { var handler = { e: name }; handler.cb = callback; handler.ctx = context; handler.ctx2 = context || me; handler.id = set.length; set.push(handler); }); return this; }, once: function (name, callback, context) { var me = this; if (!callback) { return me; } eachEvent(name, callback, function (name, callback) { var once = function () { me.off(name, once); return callback.apply(context || me, arguments); }; once._cb = callback; me.on(name, once, context); }); return me; }, off: function (name, cb, ctx) { var events = this._events; if (!events) { return this; } if (!name && !cb && !ctx) { this._events = []; return this; } eachEvent(name, cb, function (name, cb) { $.each(findHandlers(events, name, cb, ctx), function () { delete events[this.id]; }); }); return this; }, trigger: function (type) { var args, events, allEvents; if (!this._events || !type) { return this; } args = slice.call(arguments, 1); events = findHandlers(this._events, type); allEvents = findHandlers(this._events, 'all'); return triggerHanders(events, args) && triggerHanders(allEvents, arguments); } }; return $.extend({ installTo: function (obj) { return $.extend(obj, protos); } }, protos); }); define('uploader', ['base', 'mediator'], function (Base, Mediator) { var $ = Base.$; function Uploader(opts) { this.options = $.extend(true, {}, Uploader.options, opts); this._init(this.options); } Uploader.options = {}; Mediator.installTo(Uploader.prototype); $.each({ upload: 'start-upload', stop: 'stop-upload', getFile: 'get-file', getFiles: 'get-files', addFile: 'add-file', addFiles: 'add-file', sort: 'sort-files', removeFile: 'remove-file', cancelFile: 'cancel-file', skipFile: 'skip-file', retry: 'retry', isInProgress: 'is-in-progress', makeThumb: 'make-thumb', md5File: 'md5-file', getDimension: 'get-dimension', addButton: 'add-btn', predictRuntimeType: 'predict-runtime-type', refresh: 'refresh', disable: 'disable', enable: 'enable', reset: 'reset' }, function (fn, command) { Uploader.prototype[fn] = function () { return this.request(command, arguments); }; }); $.extend(Uploader.prototype, { state: 'pending', _init: function (opts) { var me = this; me.request('init', opts, function () { me.state = 'ready'; me.trigger('ready'); }); }, option: function (key, val) { var opts = this.options; if (arguments.length > 1) { if ($.isPlainObject(val) && $.isPlainObject(opts[key])) { $.extend(opts[key], val); } else { opts[key] = val; } } else { return key ? opts[key] : opts; } }, getStats: function () { var stats = this.request('get-stats'); return stats ? { successNum: stats.numOfSuccess, progressNum: stats.numOfProgress, cancelNum: stats.numOfCancel, invalidNum: stats.numOfInvalid, uploadFailNum: stats.numOfUploadFailed, queueNum: stats.numOfQueue, interruptNum: stats.numofInterrupt } : {}; }, trigger: function (type) { var args = [].slice.call(arguments, 1), opts = this.options, name = 'on' + type.substring(0, 1).toUpperCase() + type.substring(1); if (Mediator.trigger.apply(this, arguments) === false || $.isFunction(opts[name]) && opts[name].apply(this, args) === false || $.isFunction(this[name]) && this[name].apply(this, args) === false || Mediator.trigger.apply(Mediator, [this, type].concat(args)) === false) { return false; } return true; }, destroy: function () { this.request('destroy', arguments); this.off(); }, request: Base.noop }); Base.create = Uploader.create = function (opts) { return new Uploader(opts); }; Base.Uploader = Uploader; return Uploader; }); define('runtime/runtime', ['base', 'mediator'], function (Base, Mediator) { var $ = Base.$, factories = {}, getFirstKey = function (obj) { for (var key in obj) { if (obj.hasOwnProperty(key)) { return key; } } return null; }; function Runtime(options) { this.options = $.extend({ container: document.body }, options); this.uid = Base.guid('rt_'); } $.extend(Runtime.prototype, { getContainer: function () { var opts = this.options, parent, container; if (this._container) { return this._container; } parent = $(opts.container || document.body); container = $(document.createElement('div')); container.attr('id', 'rt_' + this.uid); container.css({ position: 'absolute', top: '0px', left: '0px', width: '1px', height: '1px', overflow: 'hidden' }); parent.append(container); parent.addClass('webuploader-container'); this._container = container; this._parent = parent; return container; }, init: Base.noop, exec: Base.noop, destroy: function () { this._container && this._container.remove(); this._parent && this._parent.removeClass('webuploader-container'); this.off(); } }); Runtime.orders = 'html5,flash'; Runtime.addRuntime = function (type, factory) { factories[type] = factory; }; Runtime.hasRuntime = function (type) { return !!(type ? factories[type] : getFirstKey(factories)); }; Runtime.create = function (opts, orders) { var type, runtime; orders = orders || Runtime.orders; $.each(orders.split(/\s*,\s*/g), function () { if (factories[this]) { type = this; return false; } }); type = type || getFirstKey(factories); if (!type) { throw new Error('Runtime Error'); } runtime = new factories[type](opts); return runtime; }; Mediator.installTo(Runtime.prototype); return Runtime; }); define('runtime/client', ['base', 'mediator', 'runtime/runtime'], function (Base, Mediator, Runtime) { var cache; cache = (function () { var obj = {}; return { add: function (runtime) { obj[runtime.uid] = runtime; }, get: function (ruid, standalone) { var i; if (ruid) { return obj[ruid]; } for (i in obj) { if (standalone && obj[i].__standalone) { continue; } return obj[i]; } return null; }, remove: function (runtime) { delete obj[runtime.uid]; } }; })(); function RuntimeClient(component, standalone) { var deferred = Base.Deferred(), runtime; this.uid = Base.guid('client_'); this.runtimeReady = function (cb) { return deferred.done(cb); }; this.connectRuntime = function (opts, cb) { if (runtime) { throw new Error('already connected!'); } deferred.done(cb); if (typeof opts === 'string' && cache.get(opts)) { runtime = cache.get(opts); } runtime = runtime || cache.get(null, standalone); if (!runtime) { runtime = Runtime.create(opts, opts.runtimeOrder); runtime.__promise = deferred.promise(); runtime.once('ready', deferred.resolve); runtime.init(); cache.add(runtime); runtime.__client = 1; } else { Base.$.extend(runtime.options, opts); runtime.__promise.then(deferred.resolve); runtime.__client++; } standalone && (runtime.__standalone = standalone); return runtime; }; this.getRuntime = function () { return runtime; }; this.disconnectRuntime = function () { if (!runtime) { return; } runtime.__client--; if (runtime.__client <= 0) { cache.remove(runtime); delete runtime.__promise; runtime.destroy(); } runtime = null; }; this.exec = function () { if (!runtime) { return; } var args = Base.slice(arguments); component && args.unshift(component); return runtime.exec.apply(this, args); }; this.getRuid = function () { return runtime && runtime.uid; }; this.destroy = (function (destroy) { return function () { destroy && destroy.apply(this, arguments); this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }; })(this.destroy); } Mediator.installTo(RuntimeClient.prototype); return RuntimeClient; }); define('lib/blob', ['base', 'runtime/client'], function (Base, RuntimeClient) { function Blob(ruid, source) { var me = this; me.source = source; me.ruid = ruid; this.size = source.size || 0; if (!source.type && this.ext && ~'jpg,jpeg,png,gif,bmp'.indexOf(this.ext)) { this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); } else { this.type = source.type || 'application/octet-stream'; } RuntimeClient.call(me, 'Blob'); this.uid = source.uid || this.uid; if (ruid) { me.connectRuntime(ruid); } } Base.inherits(RuntimeClient, { constructor: Blob, slice: function (start, end) { return this.exec('slice', start, end); }, getSource: function () { return this.source; } }); return Blob; }); define('lib/file', ['base', 'lib/blob'], function (Base, Blob) { var uid = 1, rExt = /\.([^.]+)$/; function File(ruid, file) { var ext; this.name = file.name || ('untitled' + uid++); ext = rExt.exec(file.name) ? RegExp.$1.toLowerCase() : ''; if (!ext && file.type) { ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec(file.type) ? RegExp.$1.toLowerCase() : ''; this.name += '.' + ext; } this.ext = ext; this.lastModifiedDate = file.lastModifiedDate || (new Date()).toLocaleString(); Blob.apply(this, arguments); } return Base.inherits(Blob, File); }); define('lib/filepicker', ['base', 'runtime/client', 'lib/file'], function (Base, RuntimeClent, File) { var $ = Base.$; function FilePicker(opts) { opts = this.options = $.extend({}, FilePicker.options, opts); opts.container = $(opts.id); if (!opts.container.length) { throw new Error('按钮指定错误'); } opts.innerHTML = opts.innerHTML || opts.label || opts.container.html() || ''; opts.button = $(opts.button || document.createElement('div')); opts.button.html(opts.innerHTML); opts.container.html(opts.button); RuntimeClent.call(this, 'FilePicker', true); } FilePicker.options = { button: null, container: null, label: null, innerHTML: null, multiple: true, accept: null, name: 'file' }; Base.inherits(RuntimeClent, { constructor: FilePicker, init: function () { var me = this, opts = me.options, button = opts.button; button.addClass('webuploader-pick'); me.on('all', function (type) { var files; switch (type) { case 'mouseenter': button.addClass('webuploader-pick-hover'); break; case 'mouseleave': button.removeClass('webuploader-pick-hover'); break; case 'change': files = me.exec('getFiles'); me.trigger('select', $.map(files, function (file) { file = new File(me.getRuid(), file); file._refer = opts.container; return file; }), opts.container); break; } }); me.connectRuntime(opts, function () { me.refresh(); me.exec('init', opts); me.trigger('ready'); }); this._resizeHandler = Base.bindFn(this.refresh, this); $(window).on('resize', this._resizeHandler); }, refresh: function () { var shimContainer = this.getRuntime().getContainer(), button = this.options.button, width = button.outerWidth ? button.outerWidth() : button.width(), height = button.outerHeight ? button.outerHeight() : button.height(), pos = button.offset(); width && height && shimContainer.css({ bottom: 'auto', right: 'auto', width: width + 'px', height: height + 'px' }).offset(pos); }, enable: function () { var btn = this.options.button; btn.removeClass('webuploader-pick-disable'); this.refresh(); }, disable: function () { var btn = this.options.button; this.getRuntime().getContainer().css({ top: '-99999px' }); btn.addClass('webuploader-pick-disable'); }, destroy: function () { var btn = this.options.button; $(window).off('resize', this._resizeHandler); btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' + 'webuploader-pick'); } }); return FilePicker; }); define('widgets/widget', ['base', 'uploader'], function (Base, Uploader) { var $ = Base.$, _init = Uploader.prototype._init, _destroy = Uploader.prototype.destroy, IGNORE = {}, widgetClass = []; function isArrayLike(obj) { if (!obj) { return false; } var length = obj.length, type = $.type(obj); if (obj.nodeType === 1 && length) { return true; } return type === 'array' || type !== 'function' && type !== 'string' && (length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj); } function Widget(uploader) { this.owner = uploader; this.options = uploader.options; } $.extend(Widget.prototype, { init: Base.noop, invoke: function (apiName, args) { var map = this.responseMap; if (!map || !(apiName in map) || !(map[apiName] in this) || !$.isFunction(this[map[apiName]])) { return IGNORE; } return this[map[apiName]].apply(this, args); }, request: function () { return this.owner.request.apply(this.owner, arguments); } }); $.extend(Uploader.prototype, { _init: function () { var me = this, widgets = me._widgets = [], deactives = me.options.disableWidgets || ''; $.each(widgetClass, function (_, klass) { (!deactives || !~deactives.indexOf(klass._name)) && widgets.push(new klass(me)); }); return _init.apply(me, arguments); }, request: function (apiName, args, callback) { var i = 0, widgets = this._widgets, len = widgets && widgets.length, rlts = [], dfds = [], widget, rlt, promise, key; args = isArrayLike(args) ? args : [args]; for (; i < len; i++) { widget = widgets[i]; rlt = widget.invoke(apiName, args); if (rlt !== IGNORE) { if (Base.isPromise(rlt)) { dfds.push(rlt); } else { rlts.push(rlt); } } } if (callback || dfds.length) { promise = Base.when.apply(Base, dfds); key = promise.pipe ? 'pipe' : 'then'; return promise[key](function () { var deferred = Base.Deferred(), args = arguments; if (args.length === 1) { args = args[0]; } setTimeout(function () { deferred.resolve(args); }, 1); return deferred.promise(); })[callback ? key : 'done'](callback || Base.noop); } else { return rlts[0]; } }, destroy: function () { _destroy.apply(this, arguments); this._widgets = null; } }); Uploader.register = Widget.register = function (responseMap, widgetProto) { var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, klass; if (arguments.length === 1) { widgetProto = responseMap; $.each(widgetProto, function (key) { if (key[0] === '_' || key === 'name') { key === 'name' && (map.name = widgetProto.name); return; } map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; }); } else { map = $.extend(map, responseMap); } widgetProto.responseMap = map; klass = Base.inherits(Widget, widgetProto); klass._name = map.name; widgetClass.push(klass); return klass; }; Uploader.unRegister = Widget.unRegister = function (name) { if (!name || name === 'anonymous') { return; } for (var i = widgetClass.length; i--;) { if (widgetClass[i]._name === name) { widgetClass.splice(i, 1) } } }; return Widget; }); define('widgets/filepicker', ['base', 'uploader', 'lib/filepicker', 'widgets/widget'], function (Base, Uploader, FilePicker) { var $ = Base.$; $.extend(Uploader.options, { pick: null, accept: null }); return Uploader.register({ name: 'picker', init: function (opts) { this.pickers = []; return opts.pick && this.addBtn(opts.pick); }, refresh: function () { $.each(this.pickers, function () { this.refresh(); }); }, addBtn: function (pick) { var me = this, opts = me.options, accept = opts.accept, promises = []; if (!pick) { return; } $.isPlainObject(pick) || (pick = { id: pick }); $(pick.id).each(function () { var options, picker, deferred; deferred = Base.Deferred(); options = $.extend({}, pick, { accept: $.isPlainObject(accept) ? [accept] : accept, swf: opts.swf, runtimeOrder: opts.runtimeOrder, id: this }); picker = new FilePicker(options); picker.once('ready', deferred.resolve); picker.on('select', function (files) { me.owner.request('add-file', [files]); }); picker.init(); me.pickers.push(picker); promises.push(deferred.promise()); }); return Base.when.apply(Base, promises); }, disable: function () { $.each(this.pickers, function () { this.disable(); }); }, enable: function () { $.each(this.pickers, function () { this.enable(); }); }, destroy: function () { $.each(this.pickers, function () { this.destroy(); }); this.pickers = null; } }); }); define('lib/image', ['base', 'runtime/client', 'lib/blob'], function (Base, RuntimeClient, Blob) { var $ = Base.$; function Image(opts) { this.options = $.extend({}, Image.options, opts); RuntimeClient.call(this, 'Image'); this.on('load', function () { this._info = this.exec('info'); this._meta = this.exec('meta'); }); } Image.options = { quality: 90, crop: false, preserveHeaders: false, allowMagnify: false }; Base.inherits(RuntimeClient, { constructor: Image, info: function (val) { if (val) { this._info = val; return this; } return this._info; }, meta: function (val) { if (val) { this._meta = val; return this; } return this._meta; }, loadFromBlob: function (blob) { var me = this, ruid = blob.getRuid(); this.connectRuntime(ruid, function () { me.exec('init', me.options); me.exec('loadFromBlob', blob); }); }, resize: function () { var args = Base.slice(arguments); return this.exec.apply(this, ['resize'].concat(args)); }, crop: function () { var args = Base.slice(arguments); return this.exec.apply(this, ['crop'].concat(args)); }, getAsDataUrl: function (type) { return this.exec('getAsDataUrl', type); }, getAsBlob: function (type) { var blob = this.exec('getAsBlob', type); return new Blob(this.getRuid(), blob); } }); return Image; }); define('widgets/image', ['base', 'uploader', 'lib/image', 'widgets/widget'], function (Base, Uploader, Image) { var $ = Base.$, throttle; throttle = (function (max) { var occupied = 0, waiting = [], tick = function () { var item; while (waiting.length && occupied < max) { item = waiting.shift(); occupied += item[0]; item[1](); } }; return function (emiter, size, cb) { waiting.push([size, cb]); emiter.once('destroy', function () { occupied -= size; setTimeout(tick, 1); }); setTimeout(tick, 1); }; })(5 * 1024 * 1024); $.extend(Uploader.options, { thumb: { width: 110, height: 110, quality: 70, allowMagnify: true, crop: true, preserveHeaders: false, type: 'image/jpeg' }, compress: { width: 1600, height: 1600, quality: 90, allowMagnify: false, crop: false, preserveHeaders: true } }); return Uploader.register({ name: 'image', makeThumb: function (file, cb, width, height) { var opts, image; file = this.request('get-file', file); if (!file.type.match(/^image/)) { cb(true); return; } opts = $.extend({}, this.options.thumb); if ($.isPlainObject(width)) { opts = $.extend(opts, width); width = null; } width = width || opts.width; height = height || opts.height; image = new Image(opts); image.once('load', function () { file._info = file._info || image.info(); file._meta = file._meta || image.meta(); if (width <= 1 && width > 0) { width = file._info.width * width; } if (height <= 1 && height > 0) { height = file._info.height * height; } image.resize(width, height); }); image.once('complete', function () { cb(false, image.getAsDataUrl(opts.type)); image.destroy(); }); image.once('error', function (reason) { cb(reason || true); image.destroy(); }); throttle(image, file.source.size, function () { file._info && image.info(file._info); file._meta && image.meta(file._meta); image.loadFromBlob(file.source); }); }, beforeSendFile: function (file) { var opts = this.options.compress || this.options.resize, compressSize = opts && opts.compressSize || 0, noCompressIfLarger = opts && opts.noCompressIfLarger || false, image, deferred; file = this.request('get-file', file); if (!opts || !~'image/jpeg,image/jpg'.indexOf(file.type) || file.size < compressSize || file._compressed) { return; } opts = $.extend({}, opts); deferred = Base.Deferred(); image = new Image(opts); deferred.always(function () { image.destroy(); image = null; }); image.once('error', deferred.reject); image.once('load', function () { var width = opts.width, height = opts.height; file._info = file._info || image.info(); file._meta = file._meta || image.meta(); if (width <= 1 && width > 0) { width = file._info.width * width; } if (height <= 1 && height > 0) { height = file._info.height * height; } image.resize(width, height); }); image.once('complete', function () { var blob, size; try { blob = image.getAsBlob(opts.type); size = file.size; if (!noCompressIfLarger || blob.size < size) { file.source = blob; file.size = blob.size; file.trigger('resize', blob.size, size); } file._compressed = true; deferred.resolve(); } catch (e) { deferred.resolve(); } }); file._info && image.info(file._info); file._meta && image.meta(file._meta); image.loadFromBlob(file.source); return deferred.promise(); } }); }); define('file', ['base', 'mediator'], function (Base, Mediator) { var $ = Base.$, idPrefix = 'WU_FILE_', idSuffix = 0, rExt = /\.([^.]+)$/, statusMap = {}; function gid() { return idPrefix + idSuffix++; } function WUFile(source) { this.name = source.name || 'Untitled'; this.size = source.size || 0; this.type = source.type || 'application/octet-stream'; this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); this.id = gid(); this.ext = rExt.exec(this.name) ? RegExp.$1 : ''; this.statusText = ''; statusMap[this.id] = WUFile.Status.INITED; this.source = source; this.loaded = 0; this.on('error', function (msg) { this.setStatus(WUFile.Status.ERROR, msg); }); } $.extend(WUFile.prototype, { setStatus: function (status, text) { var prevStatus = statusMap[this.id]; typeof text !== 'undefined' && (this.statusText = text); if (status !== prevStatus) { statusMap[this.id] = status; this.trigger('statuschange', status, prevStatus); } }, getStatus: function () { return statusMap[this.id]; }, getSource: function () { return this.source; }, destroy: function () { this.off(); delete statusMap[this.id]; } }); Mediator.installTo(WUFile.prototype); WUFile.Status = { INITED: 'inited', QUEUED: 'queued', PROGRESS: 'progress', ERROR: 'error', COMPLETE: 'complete', CANCELLED: 'cancelled', INTERRUPT: 'interrupt', INVALID: 'invalid' }; return WUFile; }); define('queue', ['base', 'mediator', 'file'], function (Base, Mediator, WUFile) { var $ = Base.$, STATUS = WUFile.Status; function Queue() { this.stats = { numOfQueue: 0, numOfSuccess: 0, numOfCancel: 0, numOfProgress: 0, numOfUploadFailed: 0, numOfInvalid: 0, numofDeleted: 0, numofInterrupt: 0 }; this._queue = []; this._map = {}; } $.extend(Queue.prototype, { append: function (file) { this._queue.push(file); this._fileAdded(file); return this; }, prepend: function (file) { this._queue.unshift(file); this._fileAdded(file); return this; }, getFile: function (fileId) { if (typeof fileId !== 'string') { return fileId; } return this._map[fileId]; }, fetch: function (status) { var len = this._queue.length, i, file; status = status || STATUS.QUEUED; for (i = 0; i < len; i++) { file = this._queue[i]; if (status === file.getStatus()) { return file; } } return null; }, sort: function (fn) { if (typeof fn === 'function') { this._queue.sort(fn); } }, getFiles: function () { var sts = [].slice.call(arguments, 0), ret = [], i = 0, len = this._queue.length, file; for (; i < len; i++) { file = this._queue[i]; if (sts.length && !~$.inArray(file.getStatus(), sts)) { continue; } ret.push(file); } return ret; }, removeFile: function (file) { var me = this, existing = this._map[file.id]; if (existing) { delete this._map[file.id]; file.destroy(); this.stats.numofDeleted++; } }, _fileAdded: function (file) { var me = this, existing = this._map[file.id]; if (!existing) { this._map[file.id] = file; file.on('statuschange', function (cur, pre) { me._onFileStatusChange(cur, pre); }); } }, _onFileStatusChange: function (curStatus, preStatus) { var stats = this.stats; switch (preStatus) { case STATUS.PROGRESS: stats.numOfProgress--; break; case STATUS.QUEUED: stats.numOfQueue--; break; case STATUS.ERROR: stats.numOfUploadFailed--; break; case STATUS.INVALID: stats.numOfInvalid--; break; case STATUS.INTERRUPT: stats.numofInterrupt--; break; } switch (curStatus) { case STATUS.QUEUED: stats.numOfQueue++; break; case STATUS.PROGRESS: stats.numOfProgress++; break; case STATUS.ERROR: stats.numOfUploadFailed++; break; case STATUS.COMPLETE: stats.numOfSuccess++; break; case STATUS.CANCELLED: stats.numOfCancel++; break; case STATUS.INVALID: stats.numOfInvalid++; break; case STATUS.INTERRUPT: stats.numofInterrupt++; break; } } }); Mediator.installTo(Queue.prototype); return Queue; }); define('widgets/queue', ['base', 'uploader', 'queue', 'file', 'lib/file', 'runtime/client', 'widgets/widget'], function (Base, Uploader, Queue, WUFile, File, RuntimeClient) { var $ = Base.$, rExt = /\.\w+$/, Status = WUFile.Status; return Uploader.register({ name: 'queue', init: function (opts) { var me = this, deferred, len, i, item, arr, accept, runtime; if ($.isPlainObject(opts.accept)) { opts.accept = [opts.accept]; } if (opts.accept) { arr = []; for (i = 0, len = opts.accept.length; i < len; i++) { item = opts.accept[i].extensions; item && arr.push(item); } if (arr.length) { accept = '\\.' + arr.join(',').replace(/,/g, '$|\\.').replace(/\*/g, '.*') + '$'; } me.accept = new RegExp(accept, 'i'); } me.queue = new Queue(); me.stats = me.queue.stats; if (this.request('predict-runtime-type') !== 'html5') { return; } deferred = Base.Deferred(); this.placeholder = runtime = new RuntimeClient('Placeholder'); runtime.connectRuntime({ runtimeOrder: 'html5' }, function () { me._ruid = runtime.getRuid(); deferred.resolve(); }); return deferred.promise(); }, _wrapFile: function (file) { if (!(file instanceof WUFile)) { if (!(file instanceof File)) { if (!this._ruid) { throw new Error('Can\'t add external files.'); } file = new File(this._ruid, file); } file = new WUFile(file); } return file; }, acceptFile: function (file) { var invalid = !file || !file.size || this.accept && rExt.exec(file.name) && !this.accept.test(file.name); return !invalid; }, _addFile: function (file) { var me = this; file = me._wrapFile(file); if (!me.owner.trigger('beforeFileQueued', file)) { return; } if (!me.acceptFile(file)) { me.owner.trigger('error', 'Q_TYPE_DENIED', file); return; } me.queue.append(file); me.owner.trigger('fileQueued', file); return file; }, getFile: function (fileId) { return this.queue.getFile(fileId); }, addFile: function (files) { var me = this; if (!files.length) { files = [files]; } files = $.map(files, function (file) { return me._addFile(file); }); me.owner.trigger('filesQueued', files); if (me.options.auto) { setTimeout(function () { me.request('start-upload'); }, 20); } }, getStats: function () { return this.stats; }, removeFile: function (file, remove) { var me = this; file = file.id ? file : me.queue.getFile(file); this.request('cancel-file', file); if (remove) { this.queue.removeFile(file); } }, getFiles: function () { return this.queue.getFiles.apply(this.queue, arguments); }, fetchFile: function () { return this.queue.fetch.apply(this.queue, arguments); }, retry: function (file, noForceStart) { var me = this, files, i, len; if (file) { file = file.id ? file : me.queue.getFile(file); file.setStatus(Status.QUEUED); noForceStart || me.request('start-upload'); return; } files = me.queue.getFiles(Status.ERROR); i = 0; len = files.length; for (; i < len; i++) { file = files[i]; file.setStatus(Status.QUEUED); } me.request('start-upload'); }, sortFiles: function () { return this.queue.sort.apply(this.queue, arguments); }, reset: function () { this.owner.trigger('reset'); this.queue = new Queue(); this.stats = this.queue.stats; }, destroy: function () { this.reset(); this.placeholder && this.placeholder.destroy(); } }); }); define('widgets/runtime', ['uploader', 'runtime/runtime', 'widgets/widget'], function (Uploader, Runtime) { Uploader.support = function () { return Runtime.hasRuntime.apply(Runtime, arguments); }; return Uploader.register({ name: 'runtime', init: function () { if (!this.predictRuntimeType()) { throw Error('Runtime Error'); } }, predictRuntimeType: function () { var orders = this.options.runtimeOrder || Runtime.orders, type = this.type, i, len; if (!type) { orders = orders.split(/\s*,\s*/g); for (i = 0, len = orders.length; i < len; i++) { if (Runtime.hasRuntime(orders[i])) { this.type = type = orders[i]; break; } } } return type; } }); }); define('lib/transport', ['base', 'runtime/client', 'mediator'], function (Base, RuntimeClient, Mediator) { var $ = Base.$; function Transport(opts) { var me = this; opts = me.options = $.extend(true, {}, Transport.options, opts || {}); RuntimeClient.call(this, 'Transport'); this._blob = null; this._formData = opts.formData || {}; this._headers = opts.headers || {}; this.on('progress', this._timeout); this.on('load error', function () { me.trigger('progress', 1); clearTimeout(me._timer); }); } Transport.options = { server: '', method: 'POST', withCredentials: false, fileVal: 'file', timeout: 2 * 60 * 1000, formData: {}, headers: {}, sendAsBinary: false }; $.extend(Transport.prototype, { appendBlob: function (key, blob, filename) { var me = this, opts = me.options; if (me.getRuid()) { me.disconnectRuntime(); } me.connectRuntime(blob.ruid, function () { me.exec('init'); }); me._blob = blob; opts.fileVal = key || opts.fileVal; opts.filename = filename || opts.filename; }, append: function (key, value) { if (typeof key === 'object') { $.extend(this._formData, key); } else { this._formData[key] = value; } }, setRequestHeader: function (key, value) { if (typeof key === 'object') { $.extend(this._headers, key); } else { this._headers[key] = value; } }, send: function (method) { this.exec('send', method); this._timeout(); }, abort: function () { clearTimeout(this._timer); return this.exec('abort'); }, destroy: function () { this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }, getResponse: function () { return this.exec('getResponse'); }, getResponseAsJson: function () { return this.exec('getResponseAsJson'); }, getStatus: function () { return this.exec('getStatus'); }, _timeout: function () { var me = this, duration = me.options.timeout; if (!duration) { return; } clearTimeout(me._timer); me._timer = setTimeout(function () { me.abort(); me.trigger('error', 'timeout'); }, duration); } }); Mediator.installTo(Transport.prototype); return Transport; }); define('widgets/upload', ['base', 'uploader', 'file', 'lib/transport', 'widgets/widget'], function (Base, Uploader, WUFile, Transport) { var $ = Base.$, isPromise = Base.isPromise, Status = WUFile.Status; $.extend(Uploader.options, { prepareNextFile: false, chunked: false, chunkSize: 5 * 1024 * 1024, chunkRetry: 2, threads: 3, formData: {} }); function CuteFile(file, chunkSize) { var pending = [], blob = file.source, total = blob.size, chunks = chunkSize ? Math.ceil(total / chunkSize) : 1, start = 0, index = 0, len, api; api = { file: file, has: function () { return !!pending.length; }, shift: function () { return pending.shift(); }, unshift: function (block) { pending.unshift(block); } }; while (index < chunks) { len = Math.min(chunkSize, total - start); pending.push({ file: file, start: start, end: chunkSize ? (start + len) : total, total: total, chunks: chunks, chunk: index++, cuted: api }); start += len; } file.blocks = pending.concat(); file.remaning = pending.length; return api; } Uploader.register({ name: 'upload', init: function () { var owner = this.owner, me = this; this.runing = false; this.progress = false; owner.on('startUpload', function () { me.progress = true; }).on('uploadFinished', function () { me.progress = false; }); this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this.__tick = Base.bindFn(this._tick, this); owner.on('uploadComplete', function (file) { file.blocks && $.each(file.blocks, function (_, v) { v.transport && (v.transport.abort(), v.transport.destroy()); delete v.transport; }); delete file.blocks; delete file.remaning; }); }, reset: function () { this.request('stop-upload', true); this.runing = false; this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this._trigged = false; this._promise = null; }, startUpload: function (file) { var me = this; $.each(me.request('get-files', Status.INVALID), function () { me.request('remove-file', this); }); if (file) { file = file.id ? file : me.request('get-file', file); if (file.getStatus() === Status.INTERRUPT) { $.each(me.pool, function (_, v) { if (v.file !== file) { return; } v.transport && v.transport.send(); }); file.setStatus(Status.QUEUED); } else if (file.getStatus() === Status.PROGRESS) { return; } else { file.setStatus(Status.QUEUED); } } else { $.each(me.request('get-files', [Status.INITED]), function () { this.setStatus(Status.QUEUED); }); } if (me.runing) { return; } me.runing = true; var files = []; $.each(me.pool, function (_, v) { var file = v.file; if (file.getStatus() === Status.INTERRUPT) { files.push(file); me._trigged = false; v.transport && v.transport.send(); } }); var file; while ((file = files.shift())) { file.setStatus(Status.PROGRESS); } file || $.each(me.request('get-files', Status.INTERRUPT), function () { this.setStatus(Status.PROGRESS); }); me._trigged = false; Base.nextTick(me.__tick); me.owner.trigger('startUpload'); }, stopUpload: function (file, interrupt) { var me = this; if (file === true) { interrupt = file; file = null; } if (me.runing === false) { return; } if (file) { file = file.id ? file : me.request('get-file', file); if (file.getStatus() !== Status.PROGRESS && file.getStatus() !== Status.QUEUED) { return; } file.setStatus(Status.INTERRUPT); $.each(me.pool, function (_, v) { if (v.file !== file) { return; } v.transport && v.transport.abort(); me._putback(v); me._popBlock(v); }); return Base.nextTick(me.__tick); } me.runing = false; if (this._promise && this._promise.file) { this._promise.file.setStatus(Status.INTERRUPT); } interrupt && $.each(me.pool, function (_, v) { v.transport && v.transport.abort(); v.file.setStatus(Status.INTERRUPT); }); me.owner.trigger('stopUpload'); }, cancelFile: function (file) { file = file.id ? file : this.request('get-file', file); file.blocks && $.each(file.blocks, function (_, v) { var _tr = v.transport; if (_tr) { _tr.abort(); _tr.destroy(); delete v.transport; } }); file.setStatus(Status.CANCELLED); this.owner.trigger('fileDequeued', file); }, isInProgress: function () { return !!this.progress; }, _getStats: function () { return this.request('get-stats'); }, skipFile: function (file, status) { file = file.id ? file : this.request('get-file', file); file.setStatus(status || Status.COMPLETE); file.skipped = true; file.blocks && $.each(file.blocks, function (_, v) { var _tr = v.transport; if (_tr) { _tr.abort(); _tr.destroy(); delete v.transport; } }); this.owner.trigger('uploadSkip', file); }, _tick: function () { var me = this, opts = me.options, fn, val; if (me._promise) { return me._promise.always(me.__tick); } if (me.pool.length < opts.threads && (val = me._nextBlock())) { me._trigged = false; fn = function (val) { me._promise = null; val && val.file && me._startSend(val); Base.nextTick(me.__tick); }; me._promise = isPromise(val) ? val.always(fn) : fn(val); } else if (!me.remaning && !me._getStats().numOfQueue && !me._getStats().numofInterrupt) { me.runing = false; me._trigged || Base.nextTick(function () { me.owner.trigger('uploadFinished'); }); me._trigged = true; } }, _putback: function (block) { var idx; block.cuted.unshift(block); idx = this.stack.indexOf(block.cuted); if (!~idx) { this.stack.unshift(block.cuted); } }, _getStack: function () { var i = 0, act; while ((act = this.stack[i++])) { if (act.has() && act.file.getStatus() === Status.PROGRESS) { return act; } else if (!act.has() || act.file.getStatus() !== Status.PROGRESS && act.file.getStatus() !== Status.INTERRUPT) { this.stack.splice(--i, 1); } } return null; }, _nextBlock: function () { var me = this, opts = me.options, act, next, done, preparing; if ((act = this._getStack())) { if (opts.prepareNextFile && !me.pending.length) { me._prepareNextFile(); } return act.shift(); } else if (me.runing) { if (!me.pending.length && me._getStats().numOfQueue) { me._prepareNextFile(); } next = me.pending.shift(); done = function (file) { if (!file) { return null; } act = CuteFile(file, opts.chunked ? opts.chunkSize : 0); me.stack.push(act); return act.shift(); }; if (isPromise(next)) { preparing = next.file; next = next[next.pipe ? 'pipe' : 'then'](done); next.file = preparing; return next; } return done(next); } }, _prepareNextFile: function () { var me = this, file = me.request('fetch-file'), pending = me.pending, promise; if (file) { promise = me.request('before-send-file', file, function () { if (file.getStatus() === Status.PROGRESS || file.getStatus() === Status.INTERRUPT) { return file; } return me._finishFile(file); }); me.owner.trigger('uploadStart', file); file.setStatus(Status.PROGRESS); promise.file = file; promise.done(function () { var idx = $.inArray(promise, pending); ~idx && pending.splice(idx, 1, file); }); promise.fail(function (reason) { file.setStatus(Status.ERROR, reason); me.owner.trigger('uploadError', file, reason); me.owner.trigger('uploadComplete', file); }); pending.push(promise); } }, _popBlock: function (block) { var idx = $.inArray(block, this.pool); this.pool.splice(idx, 1); block.file.remaning--; this.remaning--; }, _startSend: function (block) { var me = this, file = block.file, promise; if (file.getStatus() !== Status.PROGRESS) { if (file.getStatus() === Status.INTERRUPT) { me._putback(block); } return; } me.pool.push(block); me.remaning++; block.blob = block.chunks === 1 ? file.source : file.source.slice(block.start, block.end); promise = me.request('before-send', block, function () { if (file.getStatus() === Status.PROGRESS) { me._doSend(block); } else { me._popBlock(block); Base.nextTick(me.__tick); } }); promise.fail(function () { if (file.remaning === 1) { me._finishFile(file).always(function () { block.percentage = 1; me._popBlock(block); me.owner.trigger('uploadComplete', file); Base.nextTick(me.__tick); }); } else { block.percentage = 1; me.updateFileProgress(file); me._popBlock(block); Base.nextTick(me.__tick); } }); }, _doSend: function (block) { var me = this, owner = me.owner, opts = me.options, file = block.file, tr = new Transport(opts), data = $.extend({}, opts.formData), headers = $.extend({}, opts.headers), requestAccept, ret; block.transport = tr; tr.on('destroy', function () { delete block.transport; me._popBlock(block); Base.nextTick(me.__tick); }); tr.on('progress', function (percentage) { block.percentage = percentage; me.updateFileProgress(file); }); requestAccept = function (reject) { var fn; ret = tr.getResponseAsJson() || {}; ret._raw = tr.getResponse(); fn = function (value) { reject = value; }; if (!owner.trigger('uploadAccept', block, ret, fn)) { reject = reject || 'server'; } return reject; }; tr.on('error', function (type, flag) { block.retried = block.retried || 0; if (block.chunks > 1 && ~'http,abort'.indexOf(type) && block.retried < opts.chunkRetry) { block.retried++; tr.send(); } else { if (!flag && type === 'server') { type = requestAccept(type); } file.setStatus(Status.ERROR, type); owner.trigger('uploadError', file, type); owner.trigger('uploadComplete', file); } }); tr.on('load', function () { var reason; if ((reason = requestAccept())) { tr.trigger('error', reason, true); return; } if (file.remaning === 1) { me._finishFile(file, ret); } else { tr.destroy(); } }); data = $.extend(data, { id: file.id, name: file.name, type: file.type, lastModifiedDate: file.lastModifiedDate, size: file.size }); block.chunks > 1 && $.extend(data, { chunks: block.chunks, chunk: block.chunk }); owner.trigger('uploadBeforeSend', block, data, headers); tr.appendBlob(opts.fileVal, block.blob, file.name); tr.append(data); tr.setRequestHeader(headers); tr.send(); }, _finishFile: function (file, ret, hds) { var owner = this.owner; return owner.request('after-send-file', arguments, function () { file.setStatus(Status.COMPLETE); owner.trigger('uploadSuccess', file, ret, hds); }).fail(function (reason) { if (file.getStatus() === Status.PROGRESS) { file.setStatus(Status.ERROR, reason); } owner.trigger('uploadError', file, reason); }).always(function () { owner.trigger('uploadComplete', file); }); }, updateFileProgress: function (file) { var totalPercent = 0, uploaded = 0; if (!file.blocks) { return; } $.each(file.blocks, function (_, v) { uploaded += (v.percentage || 0) * (v.end - v.start); }); totalPercent = uploaded / file.size; this.owner.trigger('uploadProgress', file, totalPercent || 0); } }); }); define('widgets/log', ['base', 'uploader', 'widgets/widget'], function (Base, Uploader) { var $ = Base.$, logUrl = ' http://static.tieba.baidu.com/tb/pms/img/st.gif??', product = (location.hostname || location.host || 'protected').toLowerCase(), enable = product && /baidu/i.exec(product), base; if (!enable) { return; } base = { dv: 3, master: 'webuploader', online: /test/.exec(product) ? 0 : 1, module: '', product: product, type: 0 }; function send(data) { var obj = $.extend({}, base, data), url = logUrl.replace(/^(.*)\?/, '$1' + $.param(obj)), image = new Image(); image.src = url; } return Uploader.register({ name: 'log', init: function () { var owner = this.owner, count = 0, size = 0; owner.on('error', function (code) { send({ type: 2, c_error_code: code }); }).on('uploadError', function (file, reason) { send({ type: 2, c_error_code: 'UPLOAD_ERROR', c_reason: '' + reason }); }).on('uploadComplete', function (file) { count++; size += file.size; }).on('uploadFinished', function () { send({ c_count: count, c_size: size }); count = size = 0; }); send({ c_usage: 1 }); } }); }); define('runtime/compbase', [], function () { function CompBase(owner, runtime) { this.owner = owner; this.options = owner.options; this.getRuntime = function () { return runtime; }; this.getRuid = function () { return runtime.uid; }; this.trigger = function () { return owner.trigger.apply(owner, arguments); }; } return CompBase; }); define('runtime/html5/runtime', ['base', 'runtime/runtime', 'runtime/compbase'], function (Base, Runtime, CompBase) { var type = 'html5', components = {}; function Html5Runtime() { var pool = {}, me = this, destroy = this.destroy; Runtime.apply(me, arguments); me.type = type; me.exec = function (comp, fn) { var client = this, uid = client.uid, args = Base.slice(arguments, 2), instance; if (components[comp]) { instance = pool[uid] = pool[uid] || new components[comp](client, me); if (instance[fn]) { return instance[fn].apply(instance, args); } } }; me.destroy = function () { return destroy && destroy.apply(this, arguments); }; } Base.inherits(Runtime, { constructor: Html5Runtime, init: function () { var me = this; setTimeout(function () { me.trigger('ready'); }, 1); } }); Html5Runtime.register = function (name, component) { var klass = components[name] = Base.inherits(CompBase, component); return klass; }; if (window.Blob && window.FileReader && window.DataView) { Runtime.addRuntime(type, Html5Runtime); } return Html5Runtime; }); define('runtime/html5/blob', ['runtime/html5/runtime', 'lib/blob'], function (Html5Runtime, Blob) { return Html5Runtime.register('Blob', { slice: function (start, end) { var blob = this.owner.source, slice = blob.slice || blob.webkitSlice || blob.mozSlice; blob = slice.call(blob, start, end); return new Blob(this.getRuid(), blob); } }); }); define('runtime/html5/filepicker', ['base', 'runtime/html5/runtime'], function (Base, Html5Runtime) { var $ = Base.$; return Html5Runtime.register('FilePicker', { init: function () { var container = this.getRuntime().getContainer(), me = this, owner = me.owner, opts = me.options, label = this.label = $(document.createElement('label')), input = this.input = $(document.createElement('input')), arr, i, len, mouseHandler; input.attr('type', 'file'); input.attr('name', opts.name); input.addClass('webuploader-element-invisible'); label.on('click', function () { input.trigger('click'); }); label.css({ opacity: 0, width: '100%', height: '100%', display: 'block', cursor: 'pointer', background: '#ffffff' }); if (opts.multiple) { input.attr('multiple', 'multiple'); } if (opts.accept && opts.accept.length > 0) { arr = []; for (i = 0, len = opts.accept.length; i < len; i++) { arr.push(opts.accept[i].mimeTypes); } input.attr('accept', arr.join(',')); } container.append(input); container.append(label); mouseHandler = function (e) { owner.trigger(e.type); }; input.on('change', function (e) { var fn = arguments.callee, clone; me.files = e.target.files; clone = this.cloneNode(true); clone.value = null; this.parentNode.replaceChild(clone, this); input.off(); input = $(clone).on('change', fn).on('mouseenter mouseleave', mouseHandler); owner.trigger('change'); }); label.on('mouseenter mouseleave', mouseHandler); }, getFiles: function () { return this.files; }, destroy: function () { this.input.off(); this.label.off(); } }); }); define('runtime/html5/util', ['base'], function (Base) { var urlAPI = window.createObjectURL && window || window.URL && URL.revokeObjectURL && URL || window.webkitURL, createObjectURL = Base.noop, revokeObjectURL = createObjectURL; if (urlAPI) { createObjectURL = function () { return urlAPI.createObjectURL.apply(urlAPI, arguments); }; revokeObjectURL = function () { return urlAPI.revokeObjectURL.apply(urlAPI, arguments); }; } return { createObjectURL: createObjectURL, revokeObjectURL: revokeObjectURL, dataURL2Blob: function (dataURI) { var byteStr, intArray, ab, i, mimetype, parts; parts = dataURI.split(','); if (~parts[0].indexOf('base64')) { byteStr = atob(parts[1]); } else { byteStr = decodeURIComponent(parts[1]); } ab = new ArrayBuffer(byteStr.length); intArray = new Uint8Array(ab); for (i = 0; i < byteStr.length; i++) { intArray[i] = byteStr.charCodeAt(i); } mimetype = parts[0].split(':')[1].split(';')[0]; return this.arrayBufferToBlob(ab, mimetype); }, dataURL2ArrayBuffer: function (dataURI) { var byteStr, intArray, i, parts; parts = dataURI.split(','); if (~parts[0].indexOf('base64')) { byteStr = atob(parts[1]); } else { byteStr = decodeURIComponent(parts[1]); } intArray = new Uint8Array(byteStr.length); for (i = 0; i < byteStr.length; i++) { intArray[i] = byteStr.charCodeAt(i); } return intArray.buffer; }, arrayBufferToBlob: function (buffer, type) { var builder = window.BlobBuilder || window.WebKitBlobBuilder, bb; if (builder) { bb = new builder(); bb.append(buffer); return bb.getBlob(type); } return new Blob([buffer], type ? { type: type } : {}); }, canvasToDataUrl: function (canvas, type, quality) { return canvas.toDataURL(type, quality / 100); }, parseMeta: function (blob, callback) { callback(false, {}); }, updateImageHead: function (data) { return data; } }; }); define('runtime/html5/imagemeta', ['runtime/html5/util'], function (Util) { var api; api = { parsers: { 0xffe1: [] }, maxMetaDataSize: 262144, parse: function (blob, cb) { var me = this, fr = new FileReader(); fr.onload = function () { cb(false, me._parse(this.result)); fr = fr.onload = fr.onerror = null; }; fr.onerror = function (e) { cb(e.message); fr = fr.onload = fr.onerror = null; }; blob = blob.slice(0, me.maxMetaDataSize); fr.readAsArrayBuffer(blob.getSource()); }, _parse: function (buffer, noParse) { if (buffer.byteLength < 6) { return; } var dataview = new DataView(buffer), offset = 2, maxOffset = dataview.byteLength - 4, headLength = offset, ret = {}, markerBytes, markerLength, parsers, i; if (dataview.getUint16(0) === 0xffd8) { while (offset < maxOffset) { markerBytes = dataview.getUint16(offset); if (markerBytes >= 0xffe0 && markerBytes <= 0xffef || markerBytes === 0xfffe) { markerLength = dataview.getUint16(offset + 2) + 2; if (offset + markerLength > dataview.byteLength) { break; } parsers = api.parsers[markerBytes]; if (!noParse && parsers) { for (i = 0; i < parsers.length; i += 1) { parsers[i].call(api, dataview, offset, markerLength, ret); } } offset += markerLength; headLength = offset; } else { break; } } if (headLength > 6) { if (buffer.slice) { ret.imageHead = buffer.slice(2, headLength); } else { ret.imageHead = new Uint8Array(buffer).subarray(2, headLength); } } } return ret; }, updateImageHead: function (buffer, head) { var data = this._parse(buffer, true), buf1, buf2, bodyoffset; bodyoffset = 2; if (data.imageHead) { bodyoffset = 2 + data.imageHead.byteLength; } if (buffer.slice) { buf2 = buffer.slice(bodyoffset); } else { buf2 = new Uint8Array(buffer).subarray(bodyoffset); } buf1 = new Uint8Array(head.byteLength + 2 + buf2.byteLength); buf1[0] = 0xFF; buf1[1] = 0xD8; buf1.set(new Uint8Array(head), 2); buf1.set(new Uint8Array(buf2), head.byteLength + 2); return buf1.buffer; } }; Util.parseMeta = function () { return api.parse.apply(api, arguments); }; Util.updateImageHead = function () { return api.updateImageHead.apply(api, arguments); }; return api; }); define('runtime/html5/imagemeta/exif', ['base', 'runtime/html5/imagemeta'], function (Base, ImageMeta) { var EXIF = {}; EXIF.ExifMap = function () { return this; }; EXIF.ExifMap.prototype.map = { 'Orientation': 0x0112 }; EXIF.ExifMap.prototype.get = function (id) { return this[id] || this[this.map[id]]; }; EXIF.exifTagTypes = { 1: { getValue: function (dataView, dataOffset) { return dataView.getUint8(dataOffset); }, size: 1 }, 2: { getValue: function (dataView, dataOffset) { return String.fromCharCode(dataView.getUint8(dataOffset)); }, size: 1, ascii: true }, 3: { getValue: function (dataView, dataOffset, littleEndian) { return dataView.getUint16(dataOffset, littleEndian); }, size: 2 }, 4: { getValue: function (dataView, dataOffset, littleEndian) { return dataView.getUint32(dataOffset, littleEndian); }, size: 4 }, 5: { getValue: function (dataView, dataOffset, littleEndian) { return dataView.getUint32(dataOffset, littleEndian) / dataView.getUint32(dataOffset + 4, littleEndian); }, size: 8 }, 9: { getValue: function (dataView, dataOffset, littleEndian) { return dataView.getInt32(dataOffset, littleEndian); }, size: 4 }, 10: { getValue: function (dataView, dataOffset, littleEndian) { return dataView.getInt32(dataOffset, littleEndian) / dataView.getInt32(dataOffset + 4, littleEndian); }, size: 8 } }; EXIF.exifTagTypes[7] = EXIF.exifTagTypes[1]; EXIF.getExifValue = function (dataView, tiffOffset, offset, type, length, littleEndian) { var tagType = EXIF.exifTagTypes[type], tagSize, dataOffset, values, i, str, c; if (!tagType) { Base.log('Invalid Exif data: Invalid tag type.'); return; } tagSize = tagType.size * length; dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32(offset + 8, littleEndian) : (offset + 8); if (dataOffset + tagSize > dataView.byteLength) { Base.log('Invalid Exif data: Invalid data offset.'); return; } if (length === 1) { return tagType.getValue(dataView, dataOffset, littleEndian); } values = []; for (i = 0; i < length; i += 1) { values[i] = tagType.getValue(dataView, dataOffset + i * tagType.size, littleEndian); } if (tagType.ascii) { str = ''; for (i = 0; i < values.length; i += 1) { c = values[i]; if (c === '\u0000') { break; } str += c; } return str; } return values; }; EXIF.parseExifTag = function (dataView, tiffOffset, offset, littleEndian, data) { var tag = dataView.getUint16(offset, littleEndian); data.exif[tag] = EXIF.getExifValue(dataView, tiffOffset, offset, dataView.getUint16(offset + 2, littleEndian), dataView.getUint32(offset + 4, littleEndian), littleEndian); }; EXIF.parseExifTags = function (dataView, tiffOffset, dirOffset, littleEndian, data) { var tagsNumber, dirEndOffset, i; if (dirOffset + 6 > dataView.byteLength) { Base.log('Invalid Exif data: Invalid directory offset.'); return; } tagsNumber = dataView.getUint16(dirOffset, littleEndian); dirEndOffset = dirOffset + 2 + 12 * tagsNumber; if (dirEndOffset + 4 > dataView.byteLength) { Base.log('Invalid Exif data: Invalid directory size.'); return; } for (i = 0; i < tagsNumber; i += 1) { this.parseExifTag(dataView, tiffOffset, dirOffset + 2 + 12 * i, littleEndian, data); } return dataView.getUint32(dirEndOffset, littleEndian); }; EXIF.parseExifData = function (dataView, offset, length, data) { var tiffOffset = offset + 10, littleEndian, dirOffset; if (dataView.getUint32(offset + 4) !== 0x45786966) { return; } if (tiffOffset + 8 > dataView.byteLength) { Base.log('Invalid Exif data: Invalid segment size.'); return; } if (dataView.getUint16(offset + 8) !== 0x0000) { Base.log('Invalid Exif data: Missing byte alignment offset.'); return; } switch (dataView.getUint16(tiffOffset)) { case 0x4949: littleEndian = true; break; case 0x4D4D: littleEndian = false; break; default: Base.log('Invalid Exif data: Invalid byte alignment marker.'); return; } if (dataView.getUint16(tiffOffset + 2, littleEndian) !== 0x002A) { Base.log('Invalid Exif data: Missing TIFF marker.'); return; } dirOffset = dataView.getUint32(tiffOffset + 4, littleEndian); data.exif = new EXIF.ExifMap(); dirOffset = EXIF.parseExifTags(dataView, tiffOffset, tiffOffset + dirOffset, littleEndian, data); }; ImageMeta.parsers[0xffe1].push(EXIF.parseExifData); return EXIF; }); define('runtime/html5/image', ['base', 'runtime/html5/runtime', 'runtime/html5/util'], function (Base, Html5Runtime, Util) { var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D'; return Html5Runtime.register('Image', { modified: false, init: function () { var me = this, img = new Image(); img.onload = function () { me._info = { type: me.type, width: this.width, height: this.height }; if (!me._metas && 'image/jpeg' === me.type) { Util.parseMeta(me._blob, function (error, ret) { me._metas = ret; me.owner.trigger('load'); }); } else { me.owner.trigger('load'); } }; img.onerror = function () { me.owner.trigger('error'); }; me._img = img; }, loadFromBlob: function (blob) { var me = this, img = me._img; me._blob = blob; me.type = blob.type; img.src = Util.createObjectURL(blob.getSource()); me.owner.once('load', function () { Util.revokeObjectURL(img.src); }); }, resize: function (width, height) { var canvas = this._canvas || (this._canvas = document.createElement('canvas')); this._resize(this._img, canvas, width, height); this._blob = null; this.modified = true; this.owner.trigger('complete', 'resize'); }, crop: function (x, y, w, h, s) { var cvs = this._canvas || (this._canvas = document.createElement('canvas')), opts = this.options, img = this._img, iw = img.naturalWidth, ih = img.naturalHeight, orientation = this.getOrientation(); s = s || 1; cvs.width = w; cvs.height = h; opts.preserveHeaders || this._rotate2Orientaion(cvs, orientation); this._renderImageToCanvas(cvs, img, -x, -y, iw * s, ih * s); this._blob = null; this.modified = true; this.owner.trigger('complete', 'crop'); }, getAsBlob: function (type) { var blob = this._blob, opts = this.options, canvas; type = type || this.type; if (this.modified || this.type !== type) { canvas = this._canvas; if (type === 'image/jpeg') { blob = Util.canvasToDataUrl(canvas, type, opts.quality); if (opts.preserveHeaders && this._metas && this._metas.imageHead) { blob = Util.dataURL2ArrayBuffer(blob); blob = Util.updateImageHead(blob, this._metas.imageHead); blob = Util.arrayBufferToBlob(blob, type); return blob; } } else { blob = Util.canvasToDataUrl(canvas, type); } blob = Util.dataURL2Blob(blob); } return blob; }, getAsDataUrl: function (type) { var opts = this.options; type = type || this.type; if (type === 'image/jpeg') { return Util.canvasToDataUrl(this._canvas, type, opts.quality); } else { return this._canvas.toDataURL(type); } }, getOrientation: function () { return this._metas && this._metas.exif && this._metas.exif.get('Orientation') || 1; }, info: function (val) { if (val) { this._info = val; return this; } return this._info; }, meta: function (val) { if (val) { this._meta = val; return this; } return this._meta; }, destroy: function () { var canvas = this._canvas; this._img.onload = null; if (canvas) { canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height); canvas.width = canvas.height = 0; this._canvas = null; } this._img.src = BLANK; this._img = this._blob = null; }, _resize: function (img, cvs, width, height) { var opts = this.options, naturalWidth = img.width, naturalHeight = img.height, orientation = this.getOrientation(), scale, w, h, x, y; if (~[5, 6, 7, 8].indexOf(orientation)) { width ^= height; height ^= width; width ^= height; } scale = Math[opts.crop ? 'max' : 'min'](width / naturalWidth, height / naturalHeight); opts.allowMagnify || (scale = Math.min(1, scale)); w = naturalWidth * scale; h = naturalHeight * scale; if (opts.crop) { cvs.width = width; cvs.height = height; } else { cvs.width = w; cvs.height = h; } x = (cvs.width - w) / 2; y = (cvs.height - h) / 2; opts.preserveHeaders || this._rotate2Orientaion(cvs, orientation); this._renderImageToCanvas(cvs, img, x, y, w, h); }, _rotate2Orientaion: function (canvas, orientation) { var width = canvas.width, height = canvas.height, ctx = canvas.getContext('2d'); switch (orientation) { case 5: case 6: case 7: case 8: canvas.width = height; canvas.height = width; break; } switch (orientation) { case 2: ctx.translate(width, 0); ctx.scale(-1, 1); break; case 3: ctx.translate(width, height); ctx.rotate(Math.PI); break; case 4: ctx.translate(0, height); ctx.scale(1, -1); break; case 5: ctx.rotate(0.5 * Math.PI); ctx.scale(1, -1); break; case 6: ctx.rotate(0.5 * Math.PI); ctx.translate(0, -height); break; case 7: ctx.rotate(0.5 * Math.PI); ctx.translate(width, -height); ctx.scale(-1, 1); break; case 8: ctx.rotate(-0.5 * Math.PI); ctx.translate(-width, 0); break; } }, _renderImageToCanvas: (function () { if (!Base.os.ios) { return function (canvas) { var args = Base.slice(arguments, 1), ctx = canvas.getContext('2d'); ctx.drawImage.apply(ctx, args); }; } function detectVerticalSquash(img, iw, ih) { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), sy = 0, ey = ih, py = ih, data, alpha, ratio; canvas.width = 1; canvas.height = ih; ctx.drawImage(img, 0, 0); data = ctx.getImageData(0, 0, 1, ih).data; while (py > sy) { alpha = data[(py - 1) * 4 + 3]; if (alpha === 0) { ey = py; } else { sy = py; } py = (ey + sy) >> 1; } ratio = (py / ih); return (ratio === 0) ? 1 : ratio; } if (Base.os.ios >= 7) { return function (canvas, img, x, y, w, h) { var iw = img.naturalWidth, ih = img.naturalHeight, vertSquashRatio = detectVerticalSquash(img, iw, ih); return canvas.getContext('2d').drawImage(img, 0, 0, iw * vertSquashRatio, ih * vertSquashRatio, x, y, w, h); }; } function detectSubsampling(img) { var iw = img.naturalWidth, ih = img.naturalHeight, canvas, ctx; if (iw * ih > 1024 * 1024) { canvas = document.createElement('canvas'); canvas.width = canvas.height = 1; ctx = canvas.getContext('2d'); ctx.drawImage(img, -iw + 1, 0); return ctx.getImageData(0, 0, 1, 1).data[3] === 0; } else { return false; } } return function (canvas, img, x, y, width, height) { var iw = img.naturalWidth, ih = img.naturalHeight, ctx = canvas.getContext('2d'), subsampled = detectSubsampling(img), doSquash = this.type === 'image/jpeg', d = 1024, sy = 0, dy = 0, tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx; if (subsampled) { iw /= 2; ih /= 2; } ctx.save(); tmpCanvas = document.createElement('canvas'); tmpCanvas.width = tmpCanvas.height = d; tmpCtx = tmpCanvas.getContext('2d'); vertSquashRatio = doSquash ? detectVerticalSquash(img, iw, ih) : 1; dw = Math.ceil(d * width / iw); dh = Math.ceil(d * height / ih / vertSquashRatio); while (sy < ih) { sx = 0; dx = 0; while (sx < iw) { tmpCtx.clearRect(0, 0, d, d); tmpCtx.drawImage(img, -sx, -sy); ctx.drawImage(tmpCanvas, 0, 0, d, d, x + dx, y + dy, dw, dh); sx += d; dx += dw; } sy += d; dy += dh; } ctx.restore(); tmpCanvas = tmpCtx = null; }; })() }); }); define('runtime/html5/jpegencoder', [], function (require, exports, module) { function JPEGEncoder(quality) { var self = this; var fround = Math.round; var ffloor = Math.floor; var YTable = new Array(64); var UVTable = new Array(64); var fdtbl_Y = new Array(64); var fdtbl_UV = new Array(64); var YDC_HT; var UVDC_HT; var YAC_HT; var UVAC_HT; var bitcode = new Array(65535); var category = new Array(65535); var outputfDCTQuant = new Array(64); var DU = new Array(64); var byteout = []; var bytenew = 0; var bytepos = 7; var YDU = new Array(64); var UDU = new Array(64); var VDU = new Array(64); var clt = new Array(256); var RGB_YUV_TABLE = new Array(2048); var currentQuality; var ZigZag = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; var std_dc_luminance_nrcodes = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]; var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; var std_ac_luminance_nrcodes = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d]; var std_ac_luminance_values = [0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]; var std_dc_chrominance_nrcodes = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; var std_ac_chrominance_nrcodes = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77]; var std_ac_chrominance_values = [0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]; function initQuantTables(sf) { var YQT = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99]; for (var i = 0; i < 64; i++) { var t = ffloor((YQT[i] * sf + 50) / 100); if (t < 1) { t = 1; } else if (t > 255) { t = 255; } YTable[ZigZag[i]] = t; } var UVQT = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99]; for (var j = 0; j < 64; j++) { var u = ffloor((UVQT[j] * sf + 50) / 100); if (u < 1) { u = 1; } else if (u > 255) { u = 255; } UVTable[ZigZag[j]] = u; } var aasf = [1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379]; var k = 0; for (var row = 0; row < 8; row++) { for (var col = 0; col < 8; col++) { fdtbl_Y[k] = (1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); k++; } } } function computeHuffmanTbl(nrcodes, std_table) { var codevalue = 0; var pos_in_table = 0; var HT = new Array(); for (var k = 1; k <= 16; k++) { for (var j = 1; j <= nrcodes[k]; j++) { HT[std_table[pos_in_table]] = []; HT[std_table[pos_in_table]][0] = codevalue; HT[std_table[pos_in_table]][1] = k; pos_in_table++; codevalue++; } codevalue *= 2; } return HT; } function initHuffmanTbl() { YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes, std_dc_luminance_values); UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes, std_dc_chrominance_values); YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes, std_ac_luminance_values); UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes, std_ac_chrominance_values); } function initCategoryNumber() { var nrlower = 1; var nrupper = 2; for (var cat = 1; cat <= 15; cat++) { for (var nr = nrlower; nr < nrupper; nr++) { category[32767 + nr] = cat; bitcode[32767 + nr] = []; bitcode[32767 + nr][1] = cat; bitcode[32767 + nr][0] = nr; } for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) { category[32767 + nrneg] = cat; bitcode[32767 + nrneg] = []; bitcode[32767 + nrneg][1] = cat; bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg; } nrlower <<= 1; nrupper <<= 1; } } function initRGBYUVTable() { for (var i = 0; i < 256; i++) { RGB_YUV_TABLE[i] = 19595 * i; RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i; RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000; RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i; RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i; RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807FFF; RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i; RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i; } } function writeBits(bs) { var value = bs[0]; var posval = bs[1] - 1; while (posval >= 0) { if (value & (1 << posval)) { bytenew |= (1 << bytepos); } posval--; bytepos--; if (bytepos < 0) { if (bytenew == 0xFF) { writeByte(0xFF); writeByte(0); } else { writeByte(bytenew); } bytepos = 7; bytenew = 0; } } } function writeByte(value) { byteout.push(clt[value]); } function writeWord(value) { writeByte((value >> 8) & 0xFF); writeByte((value) & 0xFF); } function fDCTQuant(data, fdtbl) { var d0, d1, d2, d3, d4, d5, d6, d7; var dataOff = 0; var i; var I8 = 8; var I64 = 64; for (i = 0; i < I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff + 1]; d2 = data[dataOff + 2]; d3 = data[dataOff + 3]; d4 = data[dataOff + 4]; d5 = data[dataOff + 5]; d6 = data[dataOff + 6]; d7 = data[dataOff + 7]; var tmp0 = d0 + d7; var tmp7 = d0 - d7; var tmp1 = d1 + d6; var tmp6 = d1 - d6; var tmp2 = d2 + d5; var tmp5 = d2 - d5; var tmp3 = d3 + d4; var tmp4 = d3 - d4; var tmp10 = tmp0 + tmp3; var tmp13 = tmp0 - tmp3; var tmp11 = tmp1 + tmp2; var tmp12 = tmp1 - tmp2; data[dataOff] = tmp10 + tmp11; data[dataOff + 4] = tmp10 - tmp11; var z1 = (tmp12 + tmp13) * 0.707106781; data[dataOff + 2] = tmp13 + z1; data[dataOff + 6] = tmp13 - z1; tmp10 = tmp4 + tmp5; tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; var z5 = (tmp10 - tmp12) * 0.382683433; var z2 = 0.541196100 * tmp10 + z5; var z4 = 1.306562965 * tmp12 + z5; var z3 = tmp11 * 0.707106781; var z11 = tmp7 + z3; var z13 = tmp7 - z3; data[dataOff + 5] = z13 + z2; data[dataOff + 3] = z13 - z2; data[dataOff + 1] = z11 + z4; data[dataOff + 7] = z11 - z4; dataOff += 8; } dataOff = 0; for (i = 0; i < I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff + 8]; d2 = data[dataOff + 16]; d3 = data[dataOff + 24]; d4 = data[dataOff + 32]; d5 = data[dataOff + 40]; d6 = data[dataOff + 48]; d7 = data[dataOff + 56]; var tmp0p2 = d0 + d7; var tmp7p2 = d0 - d7; var tmp1p2 = d1 + d6; var tmp6p2 = d1 - d6; var tmp2p2 = d2 + d5; var tmp5p2 = d2 - d5; var tmp3p2 = d3 + d4; var tmp4p2 = d3 - d4; var tmp10p2 = tmp0p2 + tmp3p2; var tmp13p2 = tmp0p2 - tmp3p2; var tmp11p2 = tmp1p2 + tmp2p2; var tmp12p2 = tmp1p2 - tmp2p2; data[dataOff] = tmp10p2 + tmp11p2; data[dataOff + 32] = tmp10p2 - tmp11p2; var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; data[dataOff + 16] = tmp13p2 + z1p2; data[dataOff + 48] = tmp13p2 - z1p2; tmp10p2 = tmp4p2 + tmp5p2; tmp11p2 = tmp5p2 + tmp6p2; tmp12p2 = tmp6p2 + tmp7p2; var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; var z2p2 = 0.541196100 * tmp10p2 + z5p2; var z4p2 = 1.306562965 * tmp12p2 + z5p2; var z3p2 = tmp11p2 * 0.707106781; var z11p2 = tmp7p2 + z3p2; var z13p2 = tmp7p2 - z3p2; data[dataOff + 40] = z13p2 + z2p2; data[dataOff + 24] = z13p2 - z2p2; data[dataOff + 8] = z11p2 + z4p2; data[dataOff + 56] = z11p2 - z4p2; dataOff++; } var fDCTQuant; for (i = 0; i < I64; ++i) { fDCTQuant = data[i] * fdtbl[i]; outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5) | 0) : ((fDCTQuant - 0.5) | 0); } return outputfDCTQuant; } function writeAPP0() { writeWord(0xFFE0); writeWord(16); writeByte(0x4A); writeByte(0x46); writeByte(0x49); writeByte(0x46); writeByte(0); writeByte(1); writeByte(1); writeByte(0); writeWord(1); writeWord(1); writeByte(0); writeByte(0); } function writeSOF0(width, height) { writeWord(0xFFC0); writeWord(17); writeByte(8); writeWord(height); writeWord(width); writeByte(3); writeByte(1); writeByte(0x11); writeByte(0); writeByte(2); writeByte(0x11); writeByte(1); writeByte(3); writeByte(0x11); writeByte(1); } function writeDQT() { writeWord(0xFFDB); writeWord(132); writeByte(0); for (var i = 0; i < 64; i++) { writeByte(YTable[i]); } writeByte(1); for (var j = 0; j < 64; j++) { writeByte(UVTable[j]); } } function writeDHT() { writeWord(0xFFC4); writeWord(0x01A2); writeByte(0); for (var i = 0; i < 16; i++) { writeByte(std_dc_luminance_nrcodes[i + 1]); } for (var j = 0; j <= 11; j++) { writeByte(std_dc_luminance_values[j]); } writeByte(0x10); for (var k = 0; k < 16; k++) { writeByte(std_ac_luminance_nrcodes[k + 1]); } for (var l = 0; l <= 161; l++) { writeByte(std_ac_luminance_values[l]); } writeByte(1); for (var m = 0; m < 16; m++) { writeByte(std_dc_chrominance_nrcodes[m + 1]); } for (var n = 0; n <= 11; n++) { writeByte(std_dc_chrominance_values[n]); } writeByte(0x11); for (var o = 0; o < 16; o++) { writeByte(std_ac_chrominance_nrcodes[o + 1]); } for (var p = 0; p <= 161; p++) { writeByte(std_ac_chrominance_values[p]); } } function writeSOS() { writeWord(0xFFDA); writeWord(12); writeByte(3); writeByte(1); writeByte(0); writeByte(2); writeByte(0x11); writeByte(3); writeByte(0x11); writeByte(0); writeByte(0x3f); writeByte(0); } function processDU(CDU, fdtbl, DC, HTDC, HTAC) { var EOB = HTAC[0x00]; var M16zeroes = HTAC[0xF0]; var pos; var I16 = 16; var I63 = 63; var I64 = 64; var DU_DCT = fDCTQuant(CDU, fdtbl); for (var j = 0; j < I64; ++j) { DU[ZigZag[j]] = DU_DCT[j]; } var Diff = DU[0] - DC; DC = DU[0]; if (Diff == 0) { writeBits(HTDC[0]); } else { pos = 32767 + Diff; writeBits(HTDC[category[pos]]); writeBits(bitcode[pos]); } var end0pos = 63; for (; (end0pos > 0) && (DU[end0pos] == 0); end0pos--) {}; if (end0pos == 0) { writeBits(EOB); return DC; } var i = 1; var lng; while (i <= end0pos) { var startpos = i; for (; (DU[i] == 0) && (i <= end0pos); ++i) {} var nrzeroes = i - startpos; if (nrzeroes >= I16) { lng = nrzeroes >> 4; for (var nrmarker = 1; nrmarker <= lng; ++nrmarker) writeBits(M16zeroes); nrzeroes = nrzeroes & 0xF; } pos = 32767 + DU[i]; writeBits(HTAC[(nrzeroes << 4) + category[pos]]); writeBits(bitcode[pos]); i++; } if (end0pos != I63) { writeBits(EOB); } return DC; } function initCharLookupTable() { var sfcc = String.fromCharCode; for (var i = 0; i < 256; i++) { clt[i] = sfcc(i); } } this.encode = function (image, quality) { if (quality) setQuality(quality); byteout = new Array(); bytenew = 0; bytepos = 7; writeWord(0xFFD8); writeAPP0(); writeDQT(); writeSOF0(image.width, image.height); writeDHT(); writeSOS(); var DCY = 0; var DCU = 0; var DCV = 0; bytenew = 0; bytepos = 7; this.encode.displayName = "_encode_"; var imageData = image.data; var width = image.width; var height = image.height; var quadWidth = width * 4; var tripleWidth = width * 3; var x, y = 0; var r, g, b; var start, p, col, row, pos; while (y < height) { x = 0; while (x < quadWidth) { start = quadWidth * y + x; p = start; col = -1; row = 0; for (pos = 0; pos < 64; pos++) { row = pos >> 3; col = (pos & 7) * 4; p = start + (row * quadWidth) + col; if (y + row >= height) { p -= (quadWidth * (y + 1 + row - height)); } if (x + col >= quadWidth) { p -= ((x + col) - quadWidth + 4) } r = imageData[p++]; g = imageData[p++]; b = imageData[p++]; YDU[pos] = ((RGB_YUV_TABLE[r] + RGB_YUV_TABLE[(g + 256) >> 0] + RGB_YUV_TABLE[(b + 512) >> 0]) >> 16) - 128; UDU[pos] = ((RGB_YUV_TABLE[(r + 768) >> 0] + RGB_YUV_TABLE[(g + 1024) >> 0] + RGB_YUV_TABLE[(b + 1280) >> 0]) >> 16) - 128; VDU[pos] = ((RGB_YUV_TABLE[(r + 1280) >> 0] + RGB_YUV_TABLE[(g + 1536) >> 0] + RGB_YUV_TABLE[(b + 1792) >> 0]) >> 16) - 128; } DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); x += 32; } y += 8; } if (bytepos >= 0) { var fillbits = []; fillbits[1] = bytepos + 1; fillbits[0] = (1 << (bytepos + 1)) - 1; writeBits(fillbits); } writeWord(0xFFD9); var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join('')); byteout = []; return jpegDataUri } function setQuality(quality) { if (quality <= 0) { quality = 1; } if (quality > 100) { quality = 100; } if (currentQuality == quality) return var sf = 0; if (quality < 50) { sf = Math.floor(5000 / quality); } else { sf = Math.floor(200 - quality * 2); } initQuantTables(sf); currentQuality = quality; } function init() { if (!quality) quality = 50; initCharLookupTable() initHuffmanTbl(); initCategoryNumber(); initRGBYUVTable(); setQuality(quality); } init(); }; JPEGEncoder.encode = function (data, quality) { var encoder = new JPEGEncoder(quality); return encoder.encode(data); } return JPEGEncoder; }); define('runtime/html5/androidpatch', ['runtime/html5/util', 'runtime/html5/jpegencoder', 'base'], function (Util, encoder, Base) { var origin = Util.canvasToDataUrl, supportJpeg; Util.canvasToDataUrl = function (canvas, type, quality) { var ctx, w, h, fragement, parts; if (!Base.os.android) { return origin.apply(null, arguments); } if (type === 'image/jpeg' && typeof supportJpeg === 'undefined') { fragement = origin.apply(null, arguments); parts = fragement.split(','); if (~parts[0].indexOf('base64')) { fragement = atob(parts[1]); } else { fragement = decodeURIComponent(parts[1]); } fragement = fragement.substring(0, 2); supportJpeg = fragement.charCodeAt(0) === 255 && fragement.charCodeAt(1) === 216; } if (type === 'image/jpeg' && !supportJpeg) { w = canvas.width; h = canvas.height; ctx = canvas.getContext('2d'); return encoder.encode(ctx.getImageData(0, 0, w, h), quality); } return origin.apply(null, arguments); }; }); define('runtime/html5/transport', ['base', 'runtime/html5/runtime'], function (Base, Html5Runtime) { var noop = Base.noop, $ = Base.$; return Html5Runtime.register('Transport', { init: function () { this._status = 0; this._response = null; }, send: function () { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, formData, binary, fr; if (opts.sendAsBinary) { server += (/\?/.test(server) ? '&' : '?') + $.param(owner._formData); binary = blob.getSource(); } else { formData = new FormData(); $.each(owner._formData, function (k, v) { formData.append(k, v); }); formData.append(opts.fileVal, blob.getSource(), opts.filename || owner._formData.name || ''); } if (opts.withCredentials && 'withCredentials' in xhr) { xhr.open(opts.method, server, true); xhr.withCredentials = true; } else { xhr.open(opts.method, server); } this._setRequestHeader(xhr, opts.headers); if (binary) { xhr.overrideMimeType && xhr.overrideMimeType('application/octet-stream'); if (Base.os.android) { fr = new FileReader(); fr.onload = function () { xhr.send(this.result); fr = fr.onload = null; }; fr.readAsArrayBuffer(binary); } else { xhr.send(binary); } } else { xhr.send(formData); } }, getResponse: function () { return this._response; }, getResponseAsJson: function () { return this._parseJson(this._response); }, getStatus: function () { return this._status; }, abort: function () { var xhr = this._xhr; if (xhr) { xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; xhr.abort(); this._xhr = xhr = null; } }, destroy: function () { this.abort(); }, _initAjax: function () { var me = this, xhr = new XMLHttpRequest(), opts = this.options; if (opts.withCredentials && !('withCredentials' in xhr) && typeof XDomainRequest !== 'undefined') { xhr = new XDomainRequest(); } xhr.upload.onprogress = function (e) { var percentage = 0; if (e.lengthComputable) { percentage = e.loaded / e.total; } return me.trigger('progress', percentage); }; xhr.onreadystatechange = function () { if (xhr.readyState !== 4) { return; } xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; me._xhr = null; me._status = xhr.status; if (xhr.status >= 200 && xhr.status < 300) { me._response = xhr.responseText; return me.trigger('load'); } else if (xhr.status >= 500 && xhr.status < 600) { me._response = xhr.responseText; return me.trigger('error', 'server'); } return me.trigger('error', me._status ? 'http' : 'abort'); }; me._xhr = xhr; return xhr; }, _setRequestHeader: function (xhr, headers) { $.each(headers, function (key, val) { xhr.setRequestHeader(key, val); }); }, _parseJson: function (str) { var json; try { json = JSON.parse(str); } catch (ex) { json = {}; } return json; } }); }); define('webuploader', ['base', 'widgets/filepicker', 'widgets/image', 'widgets/queue', 'widgets/runtime', 'widgets/upload', 'widgets/log', 'runtime/html5/blob', 'runtime/html5/filepicker', 'runtime/html5/imagemeta/exif', 'runtime/html5/image', 'runtime/html5/androidpatch', 'runtime/html5/transport'], function (Base) { return Base; }); return require('webuploader'); }); $(function () { var uploader = WebUploader.create({ auto: true, swf: swffile, server: "/index.php/Order/csv.html", pick: '#filePicker', accept: { title: 'csv', extensions: 'csv', mimeTypes: 'csv/*' } }); uploader.on('fileQueued', function (file) { var keyVal = $("#Addons_pic").val(); if (keyVal == undefined || keyVal == "" || keyVal == null) {} else { $("#fileList div").remove(); }; }); uploader.on('uploadProgress', function (file, percentage) { var $li = $('#' + file.id), $percent = $li.find('.progress span'); if (!$percent.length) { $percent = $('<p class="progress"><span></span></p>').appendTo($li).find('span'); } $percent.css('width', percentage * 100 + '%'); }); uploader.on('uploadSuccess', function (file, response) { if (response['status'] == '1') { var data = response['data']; document.getElementById("postscript").value = data; $(".webuploader-pick").html('重新上传'); } else { alert(response['info']); $("#fileList div").remove(); }; }); uploader.on('uploadError', function (file) { alert('上传失败'); }); uploader.on('uploadComplete', function (file) { $('#' + file.id).find('.progress').remove(); }); });
html
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <!--IE优先使用chrome内核--> <meta name="renderer" content="webkit"> <!--360优先使用chrome内核--> <meta http-equiv="Cache-Control" content="no-siteapp"> <!-- 禁止手机百度转码 --> <title>天下刷空包</title> <meta name="Keywords" content="天下刷空包"> <meta name="Description" content="天下刷空包"> <link rel="stylesheet" type="text/css" href="/Public/css/lxindex.css"> <!--头部--> <div class="topNav" style="position:relative; z-index:101;"> <div class="resize"> <div class="topNav_l">欢迎上号,请<a href="/index.php/User/uslogin.html">登录</a><em>|</em><a href="/index.php/User/reg.html">注册</a> </div> <div class="topNav_r" style="width:701px"> <ul> <li style="margin-left: 10px;margin-top:2px"> <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=89783050&site=qq&menu=yes"> <img src="/Public/images/qq1.gif" width="92" height="22"> </a> </li> <li><a href="/index.php/User/Home.html">会员中心 </a> </li> <li><em style="color:#27bfe4; margin-right:8px; margin-left:8px">|</em><a href="/index.php/User/liuyan.html">提交工单</a><em style="color:#27bfe4; margin-right:8px; margin-left:8px">|</em> </li> <li><em style="color:#27bfe4; margin-right:8px; margin-left:8px">|</em><a href="/index.php/Cash/recharge.html">资金充值</a> </li> <li class="tg sp"> <div class="lnk-newuser-title"><span style="color:#ffcc00;" class="icon icon-giving"></span> 新手专区 <i></i> <div class="newuser-panel"> <div class="newuser-title"><a href="javascript:video(0)" class="first video_obj">站长介绍</a><a href="javascript:video(0)" class="first video_obj1">新手教程</a><a href="javascript:video(0)" class="first video_obj2"> 推广教程</a> </div> </div> </div> </li> <li><a class="lnk-item newuser-ticket" id="LnkNewUserTip" href="/index.php/Tg/index.html" title="" style="display: inline;"> 邀请好友有礼 <i></i></a> </li> </ul> </div> </div> <div class="helper-wrap"> <div class="helper-box"> <div class="helper-grab"> <div class="box-switch"> <a href="javascript:;" title="关闭" class="closehhh"></a> </div><span class="top-text">您可能遇到的问题?</span> </div> <div class="helper-transition"> <div class="box-list2" style="border-bottom: 1px solid #ddd"> <div class="list_con"> <div class="list-tit"><a href="/index.php/Help/help/id/1.html"><em style="color:#6f7473">新用户下单指引</em></a> </div> </div> </div><em style="color:#000"><p style="line-height: 30px;width: 50%;float: left;padding-bottom: 5px">售前QQ:89783050(7*12小时) <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=89783050&site=qq&menu=yes"><img src="/Public/images/pa.jpg" align="absmiddle"></a></p><p style="line-height: 30px;width: 50%;float: right;padding-bottom: 5px">售后电话:(7*12小时)</p></em> </div> </div> </div> <div class="kefu_img" style="position: fixed;_position: absolute; top: 430px;right: 1px;z-index: 10000;width: 38px;height: 128px;"><span class="kefu_head"></span><span class="kefu_cont"></span> </div> </div> <div class="index1_40" style="width:100%; height:62px; background:#00a2ca; z-index:100; position:relative;"> <div class="index1_41" style="overflow:visible"> <div class="index1_42"> <a href="/index.php" class="index1_43"> <img src="/Public/Uploads/admin/56176c8c34ca5.png" height="60px"> </a> </div> <ul id="menu"> <li><a href="/index.php" class="tit">首页</a> </li> <li><a href="/index.php/User/Home.html" title="管理中心" class="tit">管理中心</a> </li> <li><a href="/index.php/Order/kb.html" title="购买空包" class="tit">购买空包<img src="/Public/kindeditor/attached/image/20151119/20151119012125_88667.png" width="26" style="margin-left:5px;" alt="购买空包"></a> </li> <li><a href="/index.php/Cash/recharge.html" title="在线充值" class="tit">在线充值</a> </li> <li><a href="/index.php/Tg/index.html" title="推广赚钱" class="tit">推广赚钱<img src="/Public/kindeditor/attached/image/20151119/20151119012218_56568.gif" width="26" style="margin-left:5px;" alt="推广赚钱"></a> </li> <li><a href="/index.php/Article/index.html" title="资讯中心" class="tit">资讯中心</a> </li> </ul> <div id="qun"><a class="tit">QQ:89783050</a> </div> <br class="clr"> </div> </div> <style> .btn_jc { padding:3px 15px; border:1px solid #00a1cc; border-radius:4px; color:#00a1cc; margin:5px 0; } .tag_select { display:block; height:24px; line-height:24px; background:url("/Public/images/xlico.gif") right center no-repeat; border:1px solid #CFCFCF; border-radius:5px; padding:3px 48px 3px 8px; color:#7D7D7D; font-size:12px; cursor:pointer } ul.tag_options { position:absolute; margin:0; list-style:none; border:solid 1px #CFCFCF; background:#fff; overflow:hidden; font-size:12px; z-index:1000; } ul.tag_options li { background:#fff; display:block; padding:0px 8px 0px 8px; height:25px; text-decoration:none; line-height:30px; color:#7D7D7D; font-weight:normal; font-size:12px; cursor:pointer } ul.tag_options li.open_hover { background:#00a2ca; color:#000; color:#fff; width:auto; font-weight:normal; font-size:12px } ul.tag_options li.open_selected { background:#00a2ca; color:#fff; font-size:12px; } .kongbao_kuaidiInfos { position:relative; } .moban { float:right; left:380px; top:1px; position:absolute; z-index:9999; } .label_sele { float:right; padding-right:291px; padding-bottom:2px; } .pCont { width:300px; float:right; height:230px; overflow:hidden; background:url(/Public/images/p_cont.jpg) center top no-repeat; } .pCont .p_nr { width:190px; padding-top:56px; padding-left:60px; } .pCont .p_nr p { font-size:14px; color:#666; line-height:26px; } .content_body { width:1200px; height:580px; overflow:hidden; margin:0 auto } .content_body .symbol_img { float:left; margin-top:65px; margin-left:130px; width:420px; height:325px } .index1_8 { width:260px; overflow:hidden; float:right; margin-right:0; margin-top:65px; margin-right:150px; padding:20px; border:1px solid #ddd } .index1_9 { margin-top:10px; display:block; width:100%; line-height:28px; font-family:微软雅黑 } .index1_9 span { color:#4d4d4d; font-weight:600 } .index1_9 a { float:right; color:#00a2ca; font-family:微软雅黑 } .index1_8>input { width:248px; height:38px; line-height:38px; border-radius:3px; color:#666; border:1px solid #ddd; padding:0 5px } .index1_8>input:hover { border:1px solid #999 } .index1_10 { width:260px; height:35px; line-height:35px; font-family:微软雅黑; background:#00a2ca; border-radius:3px; display:block; text-align:center; margin-top:18px; color:#fff; font-size:14px } .index1_10:hover { color:#fff!important; text-decoration:none!important; background:#33b5d4 } .content_body .index1_8 .title { border-bottom:1px solid #ddd; line-height:25px; color:#4d4d4d; font-size:12px; margin-top:8px; font-family:'宋体' } .content_body .index1_8 .agreement { width:100%; line-height:25px; margin-top:50px } .content_body .index1_8 .agreement input { vertical-align:middle } .content_body .index1_8 .agreement a { color:#00a2ca } </style> <div class="getpass lbox" id="get_pass" style="display: none"> <form name="validateForm" id="reg" action="/index.php/User/back_send.html" method="POST" style="padding-top:0px; padding-bottom:0px;"> <table width="100%"> <tbody><tr> <td align="right" width="30%">安全提问:</td> <td class="pl20"> <select name="mibao_name" id="mibao_name"> <option value="">请选择安全问题</option> <option value="你父亲的姓名是?">你父亲的姓名是?</option> <option value="你母亲的姓名是?">你母亲的姓名是?</option> <option value="你的梦想是什么?">你的梦想是什么?</option> </select> </td> </tr> <tr> <td align="right">提问答案:</td> <td class="pl20"> <input type="text" name="mibao_daan" id="mibao_daan" class="account1_17"> </td> </tr> <tr> <td align="right">账号邮箱:</td> <td class="pl20"> <input type="text" name="mibao_email" id="mibao_email" class="account1_17"> </td> </tr> <tr> <td class="pt10"></td> <td class="pl20 pt10"> <input type="submit" onclick="return zhaohui_submit()" class="btn_jc" value="提交"> </td> </tr> </tbody></table> <input type="hidden" name="id" value=""> </form> </div> <div class="content_body"> <a href="#" target="_blank" class="symbol_img"> <img src="/Public/kindeditor/attached/image/20151009/20151009020236_39179.png" width="420px" height="325px" original-title=""> </a> <form action="/index.php/User/login" id="register_form" method="post"> <div class="index1_8"> <div class="title"><a href="/">天下刷空包首页</a> </div> <div class="index1_9"><span>登录名:</span> </div> <input id="username" name="username" type="text" style="color:#999999" placeholder="手机/邮箱/会员名"> <div class="index1_9"><span>登录密码:</span><a style="float:right; margin-right:10px;" href="javascript:void(0)" onclick="art.dialog({title:'找回密码',content:document.getElementById('get_pass'),lock:true})">忘记登录密码?</a> </div> <input type="password" id="password" name="password" placeholder="登录密码"> <div class="agreement" style="margin-top: 10px"> <input checked="" type="checkbox">我同意并已阅读 <a href="javascript:;">《天下刷空包服务协议》</a> </div> <input id="button_search" type="submit" value="" name="button_search"> <div class="index1_9"><a style="float:right; margin-right:10px;" href="/index.php/User/reg.html">免费注册</a> </div> </div> </form> </div> <style type="text/css"> #newFooter { margin-top:0px; padding:35px 0; border-top:1px solid #ccc; text-align:center } #newFooter p { text-align:center; color:#999; line-height:24px } #newFooter p a { margin:0 10px; font-size:14px; color:#666 } #newFooter p a:hover { text-decoration:underline } #newFooter p .f_icon { display:inline-block; width:22px; height:23px } #newFooter p .f_icon.f_icon1 { background:url(/Public/images/footer_icon.gif) 0 0 no-repeat } #newFooter p .f_icon.f_icon2 { background:url(/Public/images/footer_icon.gif) 0 -23px no-repeat } #newFooter .cop { text-align:center; color:#999; line-height:24px } .cbbfixed { position:fixed; right:1px; transition:bottom ease .3s; bottom:-85px; z-index:3; cursor:pointer } .cbbfixed .cbbtn { width:38px; height:38px; display:block; background-color:#ff9c00 } .cbbfixed .gotop { transition:background-color ease .3s; margin-top:1px } .cbbfixed .gotop .up-icon { float:left; margin:14px 0 0 9px; width:23px; height:12px; background:url(/Public/images/side-icon02.png) } .cbbfixed .gotop:hover { background-color:#00a3cc } </style> <div id="newFooter"> <div class="resize"> <p> </p><p class="link2">Copyright@ 2015-2018 天下刷空包 版权所有 </p> <p> <img src="/Public/images/Nindex15.jpg" width="25" height="25"> <img src="/Public/images/Nindex16.jpg" width="25" height="25"> </p> </div> <div><i class="f_icon f_icon1"></i><i class="f_icon f_icon2"></i> <p></p> </div> </div>