From 07d6be704a8c4702af6dd1b539eea2cd5bd12f10 Mon Sep 17 00:00:00 2001 From: gongfuxiang <2499232802@qq.com> Date: Tue, 16 Oct 2018 01:58:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=A4=B4=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Home/View/Default/Public/Footer.html | 3 + .../Home/View/Default/Public/Header.html | 1 + .../Home/View/Default/Public/UserMenu.html | 42 +- .../Home/View/Default/User/Index.html | 2 +- service/Public/Common/Lib/cropper/cropper.css | 248 +++ service/Public/Common/Lib/cropper/cropper.js | 1980 +++++++++++++++++ .../Public/Common/Lib/cropper/cropper.min.css | 9 + .../Public/Common/Lib/cropper/cropper.min.js | 10 + service/Public/Home/Default/Css/Common.css | 27 +- .../Public/Home/Default/Css/User.Index.css | 2 +- .../Default/Images/default-user-avatar-s.jpg | Bin 0 -> 23832 bytes .../Default/Images/default-user-avatar.jpg | Bin 23832 -> 8057 bytes service/Public/Home/Default/Js/Common.js | 134 ++ 13 files changed, 2454 insertions(+), 4 deletions(-) create mode 100755 service/Public/Common/Lib/cropper/cropper.css create mode 100755 service/Public/Common/Lib/cropper/cropper.js create mode 100755 service/Public/Common/Lib/cropper/cropper.min.css create mode 100755 service/Public/Common/Lib/cropper/cropper.min.js create mode 100755 service/Public/Home/Default/Images/default-user-avatar-s.jpg mode change 100755 => 100644 service/Public/Home/Default/Images/default-user-avatar.jpg diff --git a/service/Application/Home/View/Default/Public/Footer.html b/service/Application/Home/View/Default/Public/Footer.html index 73050dce0..6cb8bce5a 100755 --- a/service/Application/Home/View/Default/Public/Footer.html +++ b/service/Application/Home/View/Default/Public/Footer.html @@ -22,6 +22,9 @@ + + + diff --git a/service/Application/Home/View/Default/Public/Header.html b/service/Application/Home/View/Default/Public/Header.html index f79493cca..d3fcc082a 100755 --- a/service/Application/Home/View/Default/Public/Header.html +++ b/service/Application/Home/View/Default/Public/Header.html @@ -14,6 +14,7 @@ + diff --git a/service/Application/Home/View/Default/Public/UserMenu.html b/service/Application/Home/View/Default/Public/UserMenu.html index 928dce7c5..05972d798 100755 --- a/service/Application/Home/View/Default/Public/UserMenu.html +++ b/service/Application/Home/View/Default/Public/UserMenu.html @@ -26,4 +26,44 @@ - \ No newline at end of file + + + +
+
+
+

头像上传

+ × +
+
+
+ +
+
+ Picture +
+
+
+
+ + + + + +
+
+ +
+ + +
+ +
+ + + 请上传图片 +
+
+
+
\ No newline at end of file diff --git a/service/Application/Home/View/Default/User/Index.html b/service/Application/Home/View/Default/User/Index.html index 2af547f21..7eae0111a 100755 --- a/service/Application/Home/View/Default/User/Index.html +++ b/service/Application/Home/View/Default/User/Index.html @@ -34,7 +34,7 @@

{{$user.user_name_view}}

diff --git a/service/Public/Common/Lib/cropper/cropper.css b/service/Public/Common/Lib/cropper/cropper.css new file mode 100755 index 000000000..6707912a2 --- /dev/null +++ b/service/Public/Common/Lib/cropper/cropper.css @@ -0,0 +1,248 @@ +/*! + * Cropper v0.9.2 + * https://github.com/fengyuanchen/cropper + * + * Copyright (c) 2014-2015 Fengyuan Chen and contributors + * Released under the MIT license + * + * Date: 2015-04-18T04:35:01.500Z + */ +.cropper-container { + position: relative; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; +} +.cropper-container img { + display: block; + width: 100%; + min-width: 0 !important; + max-width: none !important; + height: 100%; + min-height: 0 !important; + max-height: none !important; + + image-orientation: 0deg !important; +} +.cropper-canvas, +.cropper-drag-box, +.cropper-crop-box, +.cropper-modal { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} +.cropper-drag-box { + background-color: #fff; + filter: alpha(opacity=0); + opacity: 0; +} +.cropper-modal { + background-color: #000; + filter: alpha(opacity=50); + opacity: .5; +} +.cropper-view-box { + display: block; + width: 100%; + height: 100%; + overflow: hidden; + outline: 1px solid #69f; + outline-color: rgba(102, 153, 255, .75); +} +.cropper-dashed { + position: absolute; + display: block; + filter: alpha(opacity=50); + border: 0 dashed #fff; + opacity: .5; +} +.cropper-dashed.dashed-h { + top: 33.33333333%; + left: 0; + width: 100%; + height: 33.33333333%; + border-top-width: 1px; + border-bottom-width: 1px; +} +.cropper-dashed.dashed-v { + top: 0; + left: 33.33333333%; + width: 33.33333333%; + height: 100%; + border-right-width: 1px; + border-left-width: 1px; +} +.cropper-face, +.cropper-line, +.cropper-point { + position: absolute; + display: block; + width: 100%; + height: 100%; + filter: alpha(opacity=10); + opacity: .1; +} +.cropper-face { + top: 0; + left: 0; + cursor: move; + background-color: #fff; +} +.cropper-line { + background-color: #69f; +} +.cropper-line.line-e { + top: 0; + right: -3px; + width: 5px; + cursor: e-resize; +} +.cropper-line.line-n { + top: -3px; + left: 0; + height: 5px; + cursor: n-resize; +} +.cropper-line.line-w { + top: 0; + left: -3px; + width: 5px; + cursor: w-resize; +} +.cropper-line.line-s { + bottom: -3px; + left: 0; + height: 5px; + cursor: s-resize; +} +.cropper-point { + width: 5px; + height: 5px; + background-color: #69f; + filter: alpha(opacity=75); + opacity: .75; +} +.cropper-point.point-e { + top: 50%; + right: -3px; + margin-top: -3px; + cursor: e-resize; +} +.cropper-point.point-n { + top: -3px; + left: 50%; + margin-left: -3px; + cursor: n-resize; +} +.cropper-point.point-w { + top: 50%; + left: -3px; + margin-top: -3px; + cursor: w-resize; +} +.cropper-point.point-s { + bottom: -3px; + left: 50%; + margin-left: -3px; + cursor: s-resize; +} +.cropper-point.point-ne { + top: -3px; + right: -3px; + cursor: ne-resize; +} +.cropper-point.point-nw { + top: -3px; + left: -3px; + cursor: nw-resize; +} +.cropper-point.point-sw { + bottom: -3px; + left: -3px; + cursor: sw-resize; +} +.cropper-point.point-se { + right: -3px; + bottom: -3px; + width: 20px; + height: 20px; + cursor: se-resize; + filter: alpha(opacity=100); + opacity: 1; +} +.cropper-point.point-se:before { + position: absolute; + right: -50%; + bottom: -50%; + display: block; + width: 200%; + height: 200%; + content: " "; + background-color: #69f; + filter: alpha(opacity=0); + opacity: 0; +} +@media (min-width: 768px) { + .cropper-point.point-se { + width: 15px; + height: 15px; + } +} +@media (min-width: 992px) { + .cropper-point.point-se { + width: 10px; + height: 10px; + } +} +@media (min-width: 1200px) { + .cropper-point.point-se { + width: 5px; + height: 5px; + filter: alpha(opacity=75); + opacity: .75; + } +} +.cropper-bg { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC"); +} +.cropper-invisible { + filter: alpha(opacity=0); + opacity: 0; +} +.cropper-hide { + position: fixed; + top: 0; + left: 0; + z-index: -1; + width: auto!important; + min-width: 0!important; + max-width: none!important; + height: auto!important; + min-height: 0!important; + max-height: none!important; + filter: alpha(opacity=0); + opacity: 0; +} +.cropper-hidden { + display: none !important; +} +.cropper-move { + cursor: move; +} +.cropper-crop { + cursor: crosshair; +} +.cropper-disabled .cropper-drag-box, +.cropper-disabled .cropper-face, +.cropper-disabled .cropper-line, +.cropper-disabled .cropper-point { + cursor: not-allowed; +} diff --git a/service/Public/Common/Lib/cropper/cropper.js b/service/Public/Common/Lib/cropper/cropper.js new file mode 100755 index 000000000..733c2cd52 --- /dev/null +++ b/service/Public/Common/Lib/cropper/cropper.js @@ -0,0 +1,1980 @@ +/*! + * Cropper v0.9.2 + * https://github.com/fengyuanchen/cropper + * + * Copyright (c) 2014-2015 Fengyuan Chen and contributors + * Released under the MIT license + * + * Date: 2015-04-18T04:35:01.500Z + */ + +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as anonymous module. + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node / CommonJS + factory(require('jquery')); + } else { + // Browser globals. + factory(jQuery); + } +})(function ($) { + + 'use strict'; + + var $window = $(window), + $document = $(document), + location = window.location, + + // Constants + CROPPER_NAMESPACE = '.cropper', + CROPPER_PREVIEW = 'preview' + CROPPER_NAMESPACE, + + // RegExps + REGEXP_DRAG_TYPES = /^(e|n|w|s|ne|nw|sw|se|all|crop|move|zoom)$/, + + // Classes + CLASS_MODAL = 'cropper-modal', + CLASS_HIDE = 'cropper-hide', + CLASS_HIDDEN = 'cropper-hidden', + CLASS_INVISIBLE = 'cropper-invisible', + CLASS_MOVE = 'cropper-move', + CLASS_CROP = 'cropper-crop', + CLASS_DISABLED = 'cropper-disabled', + CLASS_BG = 'cropper-bg', + + // Events + EVENT_MOUSE_DOWN = 'mousedown touchstart', + EVENT_MOUSE_MOVE = 'mousemove touchmove', + EVENT_MOUSE_UP = 'mouseup mouseleave touchend touchleave touchcancel', + EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll', + EVENT_DBLCLICK = 'dblclick', + EVENT_RESIZE = 'resize' + CROPPER_NAMESPACE, // Bind to window with namespace + EVENT_BUILD = 'build' + CROPPER_NAMESPACE, + EVENT_BUILT = 'built' + CROPPER_NAMESPACE, + EVENT_DRAG_START = 'dragstart' + CROPPER_NAMESPACE, + EVENT_DRAG_MOVE = 'dragmove' + CROPPER_NAMESPACE, + EVENT_DRAG_END = 'dragend' + CROPPER_NAMESPACE, + EVENT_ZOOM_IN = 'zoomin' + CROPPER_NAMESPACE, + EVENT_ZOOM_OUT = 'zoomout' + CROPPER_NAMESPACE, + + // Supports + SUPPORT_CANVAS = $.isFunction($('')[0].getContext), + + // Others + sqrt = Math.sqrt, + min = Math.min, + max = Math.max, + abs = Math.abs, + sin = Math.sin, + cos = Math.cos, + num = parseFloat, + + // Prototype + prototype = {}; + + function isNumber(n) { + return typeof n === 'number'; + } + + function isUndefined(n) { + return typeof n === 'undefined'; + } + + function toArray(obj, offset) { + var args = []; + + if (isNumber(offset)) { // It's necessary for IE8 + args.push(offset); + } + + return args.slice.apply(obj, args); + } + + // Custom proxy to avoid jQuery's guid + function proxy(fn, context) { + var args = toArray(arguments, 2); + + return function () { + return fn.apply(context, args.concat(toArray(arguments))); + }; + } + + function isCrossOriginURL(url) { + var parts = url.match(/^(https?:)\/\/([^\:\/\?#]+):?(\d*)/i); + + return parts && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port); + } + + function addTimestamp(url) { + var timestamp = 'timestamp=' + (new Date()).getTime(); + + return (url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp); + } + + function inRange(source, target) { + return target.left < 0 && source.width < (target.left + target.width) && target.top < 0 && source.height < (target.top + target.height); + } + + function getRotateValue(degree) { + return degree ? 'rotate(' + degree + 'deg)' : 'none'; + } + + function getRotatedSizes(data, reverse) { + var deg = abs(data.degree) % 180, + arc = (deg > 90 ? (180 - deg) : deg) * Math.PI / 180, + sinArc = sin(arc), + cosArc = cos(arc), + width = data.width, + height = data.height, + aspectRatio = data.aspectRatio, + newWidth, + newHeight; + + if (!reverse) { + newWidth = width * cosArc + height * sinArc; + newHeight = width * sinArc + height * cosArc; + } else { + newWidth = width / (cosArc + sinArc / aspectRatio); + newHeight = newWidth / aspectRatio; + } + + return { + width: newWidth, + height: newHeight + }; + } + + function getSourceCanvas(image, data) { + var canvas = $('')[0], + context = canvas.getContext('2d'), + width = data.naturalWidth, + height = data.naturalHeight, + rotate = data.rotate, + rotated = getRotatedSizes({ + width: width, + height: height, + degree: rotate + }); + + if (rotate) { + canvas.width = rotated.width; + canvas.height = rotated.height; + context.save(); + context.translate(rotated.width / 2, rotated.height / 2); + context.rotate(rotate * Math.PI / 180); + context.drawImage(image, -width / 2, -height / 2, width, height); + context.restore(); + } else { + canvas.width = width; + canvas.height = height; + context.drawImage(image, 0, 0, width, height); + } + + return canvas; + } + + function Cropper(element, options) { + this.$element = $(element); + this.options = $.extend({}, Cropper.DEFAULTS, $.isPlainObject(options) && options); + + this.ready = false; + this.built = false; + this.rotated = false; + this.cropped = false; + this.disabled = false; + this.canvas = null; + this.cropBox = null; + + this.load(); + } + + prototype.load = function (url) { + var options = this.options, + $this = this.$element, + crossOrigin, + bustCacheUrl, + buildEvent, + $clone; + + if (!url) { + if ($this.is('img')) { + if (!$this.attr('src')) { + return; + } + + url = $this.prop('src'); + } else if ($this.is('canvas') && SUPPORT_CANVAS) { + url = $this[0].toDataURL(); + } + } + + if (!url) { + return; + } + + buildEvent = $.Event(EVENT_BUILD); + $this.one(EVENT_BUILD, options.build).trigger(buildEvent); // Only trigger once + + if (buildEvent.isDefaultPrevented()) { + return; + } + + if (options.checkImageOrigin && isCrossOriginURL(url)) { + crossOrigin = 'anonymous'; + + if (!$this.prop('crossOrigin')) { // Only when there was not a "crossOrigin" property + bustCacheUrl = addTimestamp(url); // Bust cache (#148) + } + } + + this.$clone = $clone = $(''); + + $clone.one('load', $.proxy(function () { + var naturalWidth = $clone.prop('naturalWidth') || $clone.width(), + naturalHeight = $clone.prop('naturalHeight') || $clone.height(); + + this.image = { + naturalWidth: naturalWidth, + naturalHeight: naturalHeight, + aspectRatio: naturalWidth / naturalHeight, + rotate: 0 + }; + + this.url = url; + this.ready = true; + this.build(); + }, this)).one('error', function () { + $clone.remove(); + }).attr({ + src: bustCacheUrl || url, + crossOrigin: crossOrigin + }); + + // Hide and insert into the document + $clone.addClass(CLASS_HIDE).insertAfter($this); + }; + + prototype.build = function () { + var $this = this.$element, + $clone = this.$clone, + options = this.options, + $cropper, + $cropBox; + + if (!this.ready) { + return; + } + + if (this.built) { + this.unbuild(); + } + + // Create cropper elements + this.$cropper = $cropper = $(Cropper.TEMPLATE); + + // Hide the original image + $this.addClass(CLASS_HIDDEN); + + // Show the clone iamge + $clone.removeClass(CLASS_HIDE); + + this.$container = $this.parent().append($cropper); + this.$canvas = $cropper.find('.cropper-canvas').append($clone); + this.$dragBox = $cropper.find('.cropper-drag-box'); + this.$cropBox = $cropBox = $cropper.find('.cropper-crop-box'); + this.$viewBox = $cropper.find('.cropper-view-box'); + + this.addListeners(); + this.initPreview(); + + // Format aspect ratio + options.aspectRatio = num(options.aspectRatio) || NaN; // 0 -> NaN + + if (options.autoCrop) { + this.cropped = true; + + if (options.modal) { + this.$dragBox.addClass(CLASS_MODAL); + } + } else { + $cropBox.addClass(CLASS_HIDDEN); + } + + if (options.background) { + $cropper.addClass(CLASS_BG); + } + + if (!options.highlight) { + $cropBox.find('.cropper-face').addClass(CLASS_INVISIBLE); + } + + if (!options.guides) { + $cropBox.find('.cropper-dashed').addClass(CLASS_HIDDEN); + } + + if (!options.movable) { + $cropBox.find('.cropper-face').data('drag', 'move'); + } + + if (!options.resizable) { + $cropBox.find('.cropper-line, .cropper-point').addClass(CLASS_HIDDEN); + } + + this.setDragMode(options.dragCrop ? 'crop' : 'move'); + + this.built = true; + this.render(); + $this.one(EVENT_BUILT, options.built).trigger(EVENT_BUILT); // Only trigger once + }; + + prototype.unbuild = function () { + if (!this.built) { + return; + } + + this.built = false; + this.container = null; + this.canvas = null; + this.cropBox = null; // This is necessary when replace + this.removeListeners(); + + this.resetPreview(); + this.$preview = null; + + this.$viewBox = null; + this.$cropBox = null; + this.$dragBox = null; + this.$canvas = null; + this.$container = null; + + this.$cropper.remove(); + this.$cropper = null; + }; + + $.extend(prototype, { + render: function () { + this.initContainer(); + this.initCanvas(); + this.initCropBox(); + + this.renderCanvas(); + + if (this.cropped) { + this.renderCropBox(); + } + }, + + initContainer: function () { + var $this = this.$element, + $container = this.$container, + $cropper = this.$cropper, + options = this.options; + + $cropper.addClass(CLASS_HIDDEN); + $this.removeClass(CLASS_HIDDEN); + + $cropper.css((this.container = { + width: max($container.width(), num(options.minContainerWidth) || 200), + height: max($container.height(), num(options.minContainerHeight) || 100) + })); + + $this.addClass(CLASS_HIDDEN); + $cropper.removeClass(CLASS_HIDDEN); + }, + + // image box (wrapper) + initCanvas: function () { + var container = this.container, + containerWidth = container.width, + containerHeight = container.height, + image = this.image, + aspectRatio = image.aspectRatio, + canvas = { + aspectRatio: aspectRatio, + width: containerWidth, + height: containerHeight + }; + + if (containerHeight * aspectRatio > containerWidth) { + canvas.height = containerWidth / aspectRatio; + } else { + canvas.width = containerHeight * aspectRatio; + } + + canvas.oldLeft = canvas.left = (containerWidth - canvas.width) / 2; + canvas.oldTop = canvas.top = (containerHeight - canvas.height) / 2; + + this.canvas = canvas; + this.limitCanvas(true, true); + this.initialImage = $.extend({}, image); + this.initialCanvas = $.extend({}, canvas); + }, + + limitCanvas: function (size, position) { + var options = this.options, + strict = options.strict, + container = this.container, + containerWidth = container.width, + containerHeight = container.height, + canvas = this.canvas, + aspectRatio = canvas.aspectRatio, + cropBox = this.cropBox, + cropped = this.cropped && cropBox, + minCanvasWidth, + minCanvasHeight; + + if (size) { + minCanvasWidth = num(options.minCanvasWidth) || 0; + minCanvasHeight = num(options.minCanvasHeight) || 0; + + if (minCanvasWidth) { + if (strict) { + minCanvasWidth = max(cropped ? cropBox.width : containerWidth, minCanvasWidth); + } + + minCanvasHeight = minCanvasWidth / aspectRatio; + } else if (minCanvasHeight) { + + if (strict) { + minCanvasHeight = max(cropped ? cropBox.height : containerHeight, minCanvasHeight); + } + + minCanvasWidth = minCanvasHeight * aspectRatio; + } else if (strict) { + if (cropped) { + minCanvasWidth = cropBox.width; + minCanvasHeight = cropBox.height; + + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } else { + minCanvasHeight = minCanvasWidth / aspectRatio; + } + } else { + minCanvasWidth = containerWidth; + minCanvasHeight = containerHeight; + + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasHeight = minCanvasWidth / aspectRatio; + } else { + minCanvasWidth = minCanvasHeight * aspectRatio; + } + } + } + + $.extend(canvas, { + minWidth: minCanvasWidth, + minHeight: minCanvasHeight, + maxWidth: Infinity, + maxHeight: Infinity + }); + } + + if (position) { + if (strict) { + if (cropped) { + canvas.minLeft = min(cropBox.left, (cropBox.left + cropBox.width) - canvas.width); + canvas.minTop = min(cropBox.top, (cropBox.top + cropBox.height) - canvas.height); + canvas.maxLeft = cropBox.left; + canvas.maxTop = cropBox.top; + } else { + canvas.minLeft = min(0, containerWidth - canvas.width); + canvas.minTop = min(0, containerHeight - canvas.height); + canvas.maxLeft = max(0, containerWidth - canvas.width); + canvas.maxTop = max(0, containerHeight - canvas.height); + } + } else { + canvas.minLeft = -canvas.width; + canvas.minTop = -canvas.height; + canvas.maxLeft = containerWidth; + canvas.maxTop = containerHeight; + } + } + }, + + renderCanvas: function (changed) { + var options = this.options, + canvas = this.canvas, + image = this.image, + aspectRatio, + rotated; + + if (this.rotated) { + this.rotated = false; + + // Computes rotatation sizes with image sizes + rotated = getRotatedSizes({ + width: image.width, + height: image.height, + degree: image.rotate + }); + + aspectRatio = rotated.width / rotated.height; + + if (aspectRatio !== canvas.aspectRatio) { + canvas.left -= (rotated.width - canvas.width) / 2; + canvas.top -= (rotated.height - canvas.height) / 2; + canvas.width = rotated.width; + canvas.height = rotated.height; + canvas.aspectRatio = aspectRatio; + this.limitCanvas(true, false); + } + } + + if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) { + canvas.left = canvas.oldLeft; + } + + if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) { + canvas.top = canvas.oldTop; + } + + canvas.width = min(max(canvas.width, canvas.minWidth), canvas.maxWidth); + canvas.height = min(max(canvas.height, canvas.minHeight), canvas.maxHeight); + + this.limitCanvas(false, true); + + canvas.oldLeft = canvas.left = min(max(canvas.left, canvas.minLeft), canvas.maxLeft); + canvas.oldTop = canvas.top = min(max(canvas.top, canvas.minTop), canvas.maxTop); + + this.$canvas.css({ + width: canvas.width, + height: canvas.height, + left: canvas.left, + top: canvas.top + }); + + this.renderImage(); + + if (this.cropped && options.strict && !inRange(this.container, canvas)) { + this.limitCropBox(true, true); + } + + if (changed) { + this.output(); + } + }, + + renderImage: function () { + var canvas = this.canvas, + image = this.image, + reversed; + + if (image.rotate) { + reversed = getRotatedSizes({ + width: canvas.width, + height: canvas.height, + degree: image.rotate, + aspectRatio: image.aspectRatio + }, true); + } + + $.extend(image, reversed ? { + width: reversed.width, + height: reversed.height, + left: (canvas.width - reversed.width) / 2, + top: (canvas.height - reversed.height) / 2 + } : { + width: canvas.width, + height: canvas.height, + left: 0, + top: 0 + }); + + this.$clone.css({ + width: image.width, + height: image.height, + marginLeft: image.left, + marginTop: image.top, + transform: getRotateValue(image.rotate) + }); + }, + + initCropBox: function () { + var options = this.options, + canvas = this.canvas, + aspectRatio = options.aspectRatio, + autoCropArea = num(options.autoCropArea) || 0.8, + cropBox = { + width: canvas.width, + height: canvas.height + }; + + if (aspectRatio) { + if (canvas.height * aspectRatio > canvas.width) { + cropBox.height = cropBox.width / aspectRatio; + } else { + cropBox.width = cropBox.height * aspectRatio; + } + } + + this.cropBox = cropBox; + this.limitCropBox(true, true); + + // Initialize auto crop area + cropBox.width = min(max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); + cropBox.height = min(max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + + // The width of auto crop area must large than "minWidth", and the height too. (#164) + cropBox.width = max(cropBox.minWidth, cropBox.width * autoCropArea); + cropBox.height = max(cropBox.minHeight, cropBox.height * autoCropArea); + cropBox.oldLeft = cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2; + cropBox.oldTop = cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2; + + this.initialCropBox = $.extend({}, cropBox); + }, + + limitCropBox: function (size, position) { + var options = this.options, + strict = options.strict, + container = this.container, + containerWidth = container.width, + containerHeight = container.height, + canvas = this.canvas, + cropBox = this.cropBox, + aspectRatio = options.aspectRatio, + minCropBoxWidth, + minCropBoxHeight; + + if (size) { + minCropBoxWidth = num(options.minCropBoxWidth) || 0; + minCropBoxHeight = num(options.minCropBoxHeight) || 0; + + // min/maxCropBoxWidth/Height must less than conatiner width/height + cropBox.minWidth = min(containerWidth, minCropBoxWidth); + cropBox.minHeight = min(containerHeight, minCropBoxHeight); + cropBox.maxWidth = min(containerWidth, strict ? canvas.width : containerWidth); + cropBox.maxHeight = min(containerHeight, strict ? canvas.height : containerHeight); + + if (aspectRatio) { + // compare crop box size with container first + if (cropBox.maxHeight * aspectRatio > cropBox.maxWidth) { + cropBox.minHeight = cropBox.minWidth / aspectRatio; + cropBox.maxHeight = cropBox.maxWidth / aspectRatio; + } else { + cropBox.minWidth = cropBox.minHeight * aspectRatio; + cropBox.maxWidth = cropBox.maxHeight * aspectRatio; + } + } + + // The "minWidth" must be less than "maxWidth", and the "minHeight" too. + cropBox.minWidth = min(cropBox.maxWidth, cropBox.minWidth); + cropBox.minHeight = min(cropBox.maxHeight, cropBox.minHeight); + } + + if (position) { + if (strict) { + cropBox.minLeft = max(0, canvas.left); + cropBox.minTop = max(0, canvas.top); + cropBox.maxLeft = min(containerWidth, canvas.left + canvas.width) - cropBox.width; + cropBox.maxTop = min(containerHeight, canvas.top + canvas.height) - cropBox.height; + } else { + cropBox.minLeft = 0; + cropBox.minTop = 0; + cropBox.maxLeft = containerWidth - cropBox.width; + cropBox.maxTop = containerHeight - cropBox.height; + } + } + }, + + renderCropBox: function () { + var options = this.options, + container = this.container, + containerWidth = container.width, + containerHeight = container.height, + $cropBox = this.$cropBox, + cropBox = this.cropBox; + + if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) { + cropBox.left = cropBox.oldLeft; + } + + if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) { + cropBox.top = cropBox.oldTop; + } + + cropBox.width = min(max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); + cropBox.height = min(max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + + this.limitCropBox(false, true); + + cropBox.oldLeft = cropBox.left = min(max(cropBox.left, cropBox.minLeft), cropBox.maxLeft); + cropBox.oldTop = cropBox.top = min(max(cropBox.top, cropBox.minTop), cropBox.maxTop); + + if (options.movable) { + $cropBox.find('.cropper-face').data('drag', (cropBox.width === containerWidth && cropBox.height === containerHeight) ? 'move' : 'all'); + } + + $cropBox.css({ + width: cropBox.width, + height: cropBox.height, + left: cropBox.left, + top: cropBox.top + }); + + if (this.cropped && options.strict && !inRange(container, this.canvas)) { + this.limitCanvas(true, true); + } + + if (!this.disabled) { + this.output(); + } + }, + + output: function () { + var options = this.options; + + this.preview(); + + if (options.crop) { + options.crop.call(this.$element, this.getData()); + } + } + }); + + prototype.initPreview = function () { + var url = this.url; + + this.$preview = $(this.options.preview); + this.$viewBox.html(''); + + // Override img element styles + // Add `display:block` to avoid margin top issue (Occur only when margin-top <= -height) + this.$preview.each(function () { + var $this = $(this); + + $this.data(CROPPER_PREVIEW, { + width: $this.width(), + height: $this.height(), + original: $this.html() + }).html(''); + }); + }; + + prototype.resetPreview = function () { + this.$preview.each(function () { + var $this = $(this); + + $this.html($this.data(CROPPER_PREVIEW).original).removeData(CROPPER_PREVIEW); + }); + }; + + prototype.preview = function () { + var image = this.image, + canvas = this.canvas, + cropBox = this.cropBox, + width = image.width, + height = image.height, + left = cropBox.left - canvas.left - image.left, + top = cropBox.top - canvas.top - image.top, + rotate = image.rotate; + + if (!this.cropped || this.disabled) { + return; + } + + this.$viewBox.find('img').css({ + width: width, + height: height, + marginLeft: -left, + marginTop: -top, + transform: getRotateValue(rotate) + }); + + this.$preview.each(function () { + var $this = $(this), + data = $this.data(CROPPER_PREVIEW), + ratio = data.width / cropBox.width, + newWidth = data.width, + newHeight = cropBox.height * ratio; + + if (newHeight > data.height) { + ratio = data.height / cropBox.height; + newWidth = cropBox.width * ratio; + newHeight = data.height; + } + + $this.width(newWidth).height(newHeight).find('img').css({ + width: width * ratio, + height: height * ratio, + marginLeft: -left * ratio, + marginTop: -top * ratio, + transform: getRotateValue(rotate) + }); + }); + }; + + prototype.addListeners = function () { + var options = this.options; + + this.$element.on(EVENT_DRAG_START, options.dragstart).on(EVENT_DRAG_MOVE, options.dragmove).on(EVENT_DRAG_END, options.dragend).on(EVENT_ZOOM_IN, options.zoomin).on(EVENT_ZOOM_OUT, options.zoomout); + this.$cropper.on(EVENT_MOUSE_DOWN, $.proxy(this.dragstart, this)).on(EVENT_DBLCLICK, $.proxy(this.dblclick, this)); + + if (options.zoomable && options.mouseWheelZoom) { + this.$cropper.on(EVENT_WHEEL, $.proxy(this.wheel, this)); + } + + $document.on(EVENT_MOUSE_MOVE, (this._dragmove = proxy(this.dragmove, this))).on(EVENT_MOUSE_UP, (this._dragend = proxy(this.dragend, this))); + + if (options.responsive) { + $window.on(EVENT_RESIZE, (this._resize = proxy(this.resize, this))); + } + }; + + prototype.removeListeners = function () { + var options = this.options; + + this.$element.off(EVENT_DRAG_START, options.dragstart).off(EVENT_DRAG_MOVE, options.dragmove).off(EVENT_DRAG_END, options.dragend).off(EVENT_ZOOM_IN, options.zoomin).off(EVENT_ZOOM_OUT, options.zoomout); + this.$cropper.off(EVENT_MOUSE_DOWN, this.dragstart).off(EVENT_DBLCLICK, this.dblclick); + + if (options.zoomable && options.mouseWheelZoom) { + this.$cropper.off(EVENT_WHEEL, this.wheel); + } + + $document.off(EVENT_MOUSE_MOVE, this._dragmove).off(EVENT_MOUSE_UP, this._dragend); + + if (options.responsive) { + $window.off(EVENT_RESIZE, this._resize); + } + }; + + $.extend(prototype, { + resize: function () { + var $container = this.$container, + container = this.container, + canvasData, + cropBoxData, + ratio; + + if (this.disabled) { + return; + } + + ratio = $container.width() / container.width; + + if (ratio !== 1 || $container.height() !== container.height) { + canvasData = this.getCanvasData(); + cropBoxData = this.getCropBoxData(); + + this.render(); + this.setCanvasData($.each(canvasData, function (i, n) { + canvasData[i] = n * ratio; + })); + this.setCropBoxData($.each(cropBoxData, function (i, n) { + cropBoxData[i] = n * ratio; + })); + } + }, + + dblclick: function () { + if (this.disabled) { + return; + } + + if (this.$dragBox.hasClass(CLASS_CROP)) { + this.setDragMode('move'); + } else { + this.setDragMode('crop'); + } + }, + + wheel: function (event) { + var e = event.originalEvent, + delta = 1; + + if (this.disabled) { + return; + } + + event.preventDefault(); + + if (e.deltaY) { + delta = e.deltaY > 0 ? 1 : -1; + } else if (e.wheelDelta) { + delta = -e.wheelDelta / 120; + } else if (e.detail) { + delta = e.detail > 0 ? 1 : -1; + } + + this.zoom(-delta * 0.1); + }, + + dragstart: function (event) { + var options = this.options, + originalEvent = event.originalEvent, + touches = originalEvent && originalEvent.touches, + e = event, + dragType, + dragStartEvent, + touchesLength; + + if (this.disabled) { + return; + } + + if (touches) { + touchesLength = touches.length; + + if (touchesLength > 1) { + if (options.zoomable && options.touchDragZoom && touchesLength === 2) { + e = touches[1]; + this.startX2 = e.pageX; + this.startY2 = e.pageY; + dragType = 'zoom'; + } else { + return; + } + } + + e = touches[0]; + } + + dragType = dragType || $(e.target).data('drag'); + + if (REGEXP_DRAG_TYPES.test(dragType)) { + event.preventDefault(); + + dragStartEvent = $.Event(EVENT_DRAG_START, { + originalEvent: originalEvent, + dragType: dragType + }); + + this.$element.trigger(dragStartEvent); + + if (dragStartEvent.isDefaultPrevented()) { + return; + } + + this.dragType = dragType; + this.cropping = false; + this.startX = e.pageX; + this.startY = e.pageY; + + if (dragType === 'crop') { + this.cropping = true; + this.$dragBox.addClass(CLASS_MODAL); + } + } + }, + + dragmove: function (event) { + var options = this.options, + originalEvent = event.originalEvent, + touches = originalEvent && originalEvent.touches, + e = event, + dragType = this.dragType, + dragMoveEvent, + touchesLength; + + if (this.disabled) { + return; + } + + if (touches) { + touchesLength = touches.length; + + if (touchesLength > 1) { + if (options.zoomable && options.touchDragZoom && touchesLength === 2) { + e = touches[1]; + this.endX2 = e.pageX; + this.endY2 = e.pageY; + } else { + return; + } + } + + e = touches[0]; + } + + if (dragType) { + event.preventDefault(); + + dragMoveEvent = $.Event(EVENT_DRAG_MOVE, { + originalEvent: originalEvent, + dragType: dragType + }); + + this.$element.trigger(dragMoveEvent); + + if (dragMoveEvent.isDefaultPrevented()) { + return; + } + + this.endX = e.pageX; + this.endY = e.pageY; + + this.change(); + } + }, + + dragend: function (event) { + var dragType = this.dragType, + dragEndEvent; + + if (this.disabled) { + return; + } + + if (dragType) { + event.preventDefault(); + + dragEndEvent = $.Event(EVENT_DRAG_END, { + originalEvent: event.originalEvent, + dragType: dragType + }); + + this.$element.trigger(dragEndEvent); + + if (dragEndEvent.isDefaultPrevented()) { + return; + } + + if (this.cropping) { + this.cropping = false; + this.$dragBox.toggleClass(CLASS_MODAL, this.cropped && this.options.modal); + } + + this.dragType = ''; + } + } + }); + + $.extend(prototype, { + reset: function () { + if (!this.built || this.disabled) { + return; + } + + this.image = $.extend({}, this.initialImage); + this.canvas = $.extend({}, this.initialCanvas); + this.renderCanvas(); + + if (this.cropped) { + this.cropBox = $.extend({}, this.initialCropBox); + this.renderCropBox(); + } + }, + + clear: function () { + if (!this.cropped || this.disabled) { + return; + } + + $.extend(this.cropBox, { + left: 0, + top: 0, + width: 0, + height: 0 + }); + + this.cropped = false; + this.renderCropBox(); + + this.limitCanvas(); + this.renderCanvas(); // Render canvas after render crop box + + this.$dragBox.removeClass(CLASS_MODAL); + this.$cropBox.addClass(CLASS_HIDDEN); + }, + + destroy: function () { + var $this = this.$element; + + if (this.ready) { + this.unbuild(); + $this.removeClass(CLASS_HIDDEN); + } else { + this.$clone.off('load').remove(); + } + + $this.removeData('cropper'); + }, + + replace: function (url) { + if (!this.disabled && url) { + this.load(url); + } + }, + + enable: function () { + if (this.built) { + this.disabled = false; + this.$cropper.removeClass(CLASS_DISABLED); + } + }, + + disable: function () { + if (this.built) { + this.disabled = true; + this.$cropper.addClass(CLASS_DISABLED); + } + }, + + move: function (offsetX, offsetY) { + var canvas = this.canvas; + + if (this.built && !this.disabled && isNumber(offsetX) && isNumber(offsetY)) { + canvas.left += offsetX; + canvas.top += offsetY; + this.renderCanvas(true); + } + }, + + zoom: function (delta) { + var canvas = this.canvas, + zoomEvent, + width, + height; + + delta = num(delta); + + if (delta && this.built && !this.disabled && this.options.zoomable) { + zoomEvent = delta > 0 ? $.Event(EVENT_ZOOM_IN) : $.Event(EVENT_ZOOM_OUT); + this.$element.trigger(zoomEvent); + + if (zoomEvent.isDefaultPrevented()) { + return; + } + + delta = delta <= -1 ? 1 / (1 - delta) : delta <= 1 ? (1 + delta) : delta; + width = canvas.width * delta; + height = canvas.height * delta; + canvas.left -= (width - canvas.width) / 2; + canvas.top -= (height - canvas.height) / 2; + canvas.width = width; + canvas.height = height; + this.renderCanvas(true); + this.setDragMode('move'); + } + }, + + rotate: function (degree) { + var image = this.image; + + degree = num(degree); + + if (degree && this.built && !this.disabled && this.options.rotatable) { + image.rotate = (image.rotate + degree) % 360; + this.rotated = true; + this.renderCanvas(true); + } + }, + + getData: function () { + var cropBox = this.cropBox, + canvas = this.canvas, + image = this.image, + ratio, + data; + + if (this.built && this.cropped) { + data = { + x: cropBox.left - canvas.left, + y: cropBox.top - canvas.top, + width: cropBox.width, + height: cropBox.height + }; + + ratio = image.width / image.naturalWidth; + + $.each(data, function (i, n) { + n = n / ratio; + data[i] = n; + }); + + } else { + data = { + x: 0, + y: 0, + width: 0, + height: 0 + }; + } + + data.rotate = image.rotate; + + return data; + }, + + getContainerData: function () { + return this.built ? this.container : {}; + }, + + getImageData: function () { + return this.ready ? this.image : {}; + }, + + getCanvasData: function () { + var canvas = this.canvas, + data; + + if (this.built) { + data = { + left: canvas.left, + top: canvas.top, + width: canvas.width, + height: canvas.height + }; + } + + return data || {}; + }, + + setCanvasData: function (data) { + var canvas = this.canvas, + aspectRatio = canvas.aspectRatio; + + if (this.built && !this.disabled && $.isPlainObject(data)) { + if (isNumber(data.left)) { + canvas.left = data.left; + } + + if (isNumber(data.top)) { + canvas.top = data.top; + } + + if (isNumber(data.width)) { + canvas.width = data.width; + canvas.height = data.width / aspectRatio; + } else if (isNumber(data.height)) { + canvas.height = data.height; + canvas.width = data.height * aspectRatio; + } + + this.renderCanvas(true); + } + }, + + getCropBoxData: function () { + var cropBox = this.cropBox, + data; + + if (this.built && this.cropped) { + data = { + left: cropBox.left, + top: cropBox.top, + width: cropBox.width, + height: cropBox.height + }; + } + + return data || {}; + }, + + setCropBoxData: function (data) { + var cropBox = this.cropBox, + aspectRatio = this.options.aspectRatio; + + if (this.built && this.cropped && !this.disabled && $.isPlainObject(data)) { + + if (isNumber(data.left)) { + cropBox.left = data.left; + } + + if (isNumber(data.top)) { + cropBox.top = data.top; + } + + if (aspectRatio) { + if (isNumber(data.width)) { + cropBox.width = data.width; + cropBox.height = cropBox.width / aspectRatio; + } else if (isNumber(data.height)) { + cropBox.height = data.height; + cropBox.width = cropBox.height * aspectRatio; + } + } else { + if (isNumber(data.width)) { + cropBox.width = data.width; + } + + if (isNumber(data.height)) { + cropBox.height = data.height; + } + } + + this.renderCropBox(); + } + }, + + getCroppedCanvas: function (options) { + var originalWidth, + originalHeight, + canvasWidth, + canvasHeight, + scaledWidth, + scaledHeight, + scaledRatio, + aspectRatio, + canvas, + context, + data; + + if (!this.built || !this.cropped || !SUPPORT_CANVAS) { + return; + } + + if (!$.isPlainObject(options)) { + options = {}; + } + + data = this.getData(); + originalWidth = data.width; + originalHeight = data.height; + aspectRatio = originalWidth / originalHeight; + + if ($.isPlainObject(options)) { + scaledWidth = options.width; + scaledHeight = options.height; + + if (scaledWidth) { + scaledHeight = scaledWidth / aspectRatio; + scaledRatio = scaledWidth / originalWidth; + } else if (scaledHeight) { + scaledWidth = scaledHeight * aspectRatio; + scaledRatio = scaledHeight / originalHeight; + } + } + + canvasWidth = scaledWidth || originalWidth; + canvasHeight = scaledHeight || originalHeight; + + canvas = $('')[0]; + canvas.width = canvasWidth; + canvas.height = canvasHeight; + context = canvas.getContext('2d'); + + if (options.fillColor) { + context.fillStyle = options.fillColor; + context.fillRect(0, 0, canvasWidth, canvasHeight); + } + + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage + context.drawImage.apply(context, (function () { + var source = getSourceCanvas(this.$clone[0], this.image), + sourceWidth = source.width, + sourceHeight = source.height, + args = [source], + srcX = data.x, // source canvas + srcY = data.y, + srcWidth, + srcHeight, + dstX, // destination canvas + dstY, + dstWidth, + dstHeight; + + if (srcX <= -originalWidth || srcX > sourceWidth) { + srcX = srcWidth = dstX = dstWidth = 0; + } else if (srcX <= 0) { + dstX = -srcX; + srcX = 0; + srcWidth = dstWidth = min(sourceWidth, originalWidth + srcX); + } else if (srcX <= sourceWidth) { + dstX = 0; + srcWidth = dstWidth = min(originalWidth, sourceWidth - srcX); + } + + if (srcWidth <= 0 || srcY <= -originalHeight || srcY > sourceHeight) { + srcY = srcHeight = dstY = dstHeight = 0; + } else if (srcY <= 0) { + dstY = -srcY; + srcY = 0; + srcHeight = dstHeight = min(sourceHeight, originalHeight + srcY); + } else if (srcY <= sourceHeight) { + dstY = 0; + srcHeight = dstHeight = min(originalHeight, sourceHeight - srcY); + } + + args.push(srcX, srcY, srcWidth, srcHeight); + + // Scale destination sizes + if (scaledRatio) { + dstX *= scaledRatio; + dstY *= scaledRatio; + dstWidth *= scaledRatio; + dstHeight *= scaledRatio; + } + + // Avoid "IndexSizeError" in IE and Firefox + if (dstWidth > 0 && dstHeight > 0) { + args.push(dstX, dstY, dstWidth, dstHeight); + } + + return args; + }).call(this)); + + return canvas; + }, + + setAspectRatio: function (aspectRatio) { + var options = this.options; + + if (!this.disabled && !isUndefined(aspectRatio)) { + options.aspectRatio = num(aspectRatio) || NaN; // 0 -> NaN + + if (this.built) { + this.initCropBox(); + + if (this.cropped) { + this.renderCropBox(); + } + } + } + }, + + setDragMode: function (mode) { + var $dragBox = this.$dragBox, + cropable = false, + movable = false; + + if (!this.ready || this.disabled) { + return; + } + + switch (mode) { + case 'crop': + if (this.options.dragCrop) { + cropable = true; + $dragBox.data('drag', mode); + } else { + movable = true; + } + + break; + + case 'move': + movable = true; + $dragBox.data('drag', mode); + + break; + + default: + $dragBox.removeData('drag'); + } + + $dragBox.toggleClass(CLASS_CROP, cropable).toggleClass(CLASS_MOVE, movable); + } + }); + + prototype.change = function () { + var dragType = this.dragType, + options = this.options, + canvas = this.canvas, + container = this.container, + cropBox = this.cropBox, + width = cropBox.width, + height = cropBox.height, + left = cropBox.left, + top = cropBox.top, + right = left + width, + bottom = top + height, + minLeft = 0, + minTop = 0, + maxWidth = container.width, + maxHeight = container.height, + renderable = true, + aspectRatio = options.aspectRatio, + range = { + x: this.endX - this.startX, + y: this.endY - this.startY + }, + offset; + + if (options.strict) { + minLeft = cropBox.minLeft; + minTop = cropBox.minTop; + maxWidth = minLeft + min(container.width, canvas.width); + maxHeight = minTop + min(container.height, canvas.height); + } + + if (aspectRatio) { + range.X = range.y * aspectRatio; + range.Y = range.x / aspectRatio; + } + + switch (dragType) { + // Move cropBox + case 'all': + left += range.x; + top += range.y; + break; + + // Resize cropBox + case 'e': + if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) { + renderable = false; + break; + } + + width += range.x; + + if (aspectRatio) { + height = width / aspectRatio; + top -= range.Y / 2; + } + + if (width < 0) { + dragType = 'w'; + width = 0; + } + + break; + + case 'n': + if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) { + renderable = false; + break; + } + + height -= range.y; + top += range.y; + + if (aspectRatio) { + width = height * aspectRatio; + left += range.X / 2; + } + + if (height < 0) { + dragType = 's'; + height = 0; + } + + break; + + case 'w': + if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) { + renderable = false; + break; + } + + width -= range.x; + left += range.x; + + if (aspectRatio) { + height = width / aspectRatio; + top += range.Y / 2; + } + + if (width < 0) { + dragType = 'e'; + width = 0; + } + + break; + + case 's': + if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) { + renderable = false; + break; + } + + height += range.y; + + if (aspectRatio) { + width = height * aspectRatio; + left -= range.X / 2; + } + + if (height < 0) { + dragType = 'n'; + height = 0; + } + + break; + + case 'ne': + if (aspectRatio) { + if (range.y <= 0 && (top <= minTop || right >= maxWidth)) { + renderable = false; + break; + } + + height -= range.y; + top += range.y; + width = height * aspectRatio; + } else { + if (range.x >= 0) { + if (right < maxWidth) { + width += range.x; + } else if (range.y <= 0 && top <= minTop) { + renderable = false; + } + } else { + width += range.x; + } + + if (range.y <= 0) { + if (top > 0) { + height -= range.y; + top += range.y; + } + } else { + height -= range.y; + top += range.y; + } + } + + if (width < 0 && height < 0) { + dragType = 'sw'; + height = 0; + width = 0; + } else if (width < 0) { + dragType = 'nw'; + width = 0; + } else if (height < 0) { + dragType = 'se'; + height = 0; + } + + break; + + case 'nw': + if (aspectRatio) { + if (range.y <= 0 && (top <= minTop || left <= minLeft)) { + renderable = false; + break; + } + + height -= range.y; + top += range.y; + width = height * aspectRatio; + left += range.X; + } else { + if (range.x <= 0) { + if (left > 0) { + width -= range.x; + left += range.x; + } else if (range.y <= 0 && top <= minTop) { + renderable = false; + } + } else { + width -= range.x; + left += range.x; + } + + if (range.y <= 0) { + if (top > 0) { + height -= range.y; + top += range.y; + } + } else { + height -= range.y; + top += range.y; + } + } + + if (width < 0 && height < 0) { + dragType = 'se'; + height = 0; + width = 0; + } else if (width < 0) { + dragType = 'ne'; + width = 0; + } else if (height < 0) { + dragType = 'sw'; + height = 0; + } + + break; + + case 'sw': + if (aspectRatio) { + if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) { + renderable = false; + break; + } + + width -= range.x; + left += range.x; + height = width / aspectRatio; + } else { + if (range.x <= 0) { + if (left > 0) { + width -= range.x; + left += range.x; + } else if (range.y >= 0 && bottom >= maxHeight) { + renderable = false; + } + } else { + width -= range.x; + left += range.x; + } + + if (range.y >= 0) { + if (bottom < maxHeight) { + height += range.y; + } + } else { + height += range.y; + } + } + + if (width < 0 && height < 0) { + dragType = 'ne'; + height = 0; + width = 0; + } else if (width < 0) { + dragType = 'se'; + width = 0; + } else if (height < 0) { + dragType = 'nw'; + height = 0; + } + + break; + + case 'se': + if (aspectRatio) { + if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) { + renderable = false; + break; + } + + width += range.x; + height = width / aspectRatio; + } else { + if (range.x >= 0) { + if (right < maxWidth) { + width += range.x; + } else if (range.y >= 0 && bottom >= maxHeight) { + renderable = false; + } + } else { + width += range.x; + } + + if (range.y >= 0) { + if (bottom < maxHeight) { + height += range.y; + } + } else { + height += range.y; + } + } + + if (width < 0 && height < 0) { + dragType = 'nw'; + height = 0; + width = 0; + } else if (width < 0) { + dragType = 'sw'; + width = 0; + } else if (height < 0) { + dragType = 'ne'; + height = 0; + } + + break; + + // Move image + case 'move': + canvas.left += range.x; + canvas.top += range.y; + this.renderCanvas(true); + renderable = false; + break; + + // Scale image + case 'zoom': + this.zoom(function (x1, y1, x2, y2) { + var z1 = sqrt(x1 * x1 + y1 * y1), + z2 = sqrt(x2 * x2 + y2 * y2); + + return (z2 - z1) / z1; + }( + abs(this.startX - this.startX2), + abs(this.startY - this.startY2), + abs(this.endX - this.endX2), + abs(this.endY - this.endY2) + )); + + this.startX2 = this.endX2; + this.startY2 = this.endY2; + renderable = false; + break; + + // Crop image + case 'crop': + if (range.x && range.y) { + offset = this.$cropper.offset(); + left = this.startX - offset.left; + top = this.startY - offset.top; + width = cropBox.minWidth; + height = cropBox.minHeight; + + if (range.x > 0) { + if (range.y > 0) { + dragType = 'se'; + } else { + dragType = 'ne'; + top -= height; + } + } else { + if (range.y > 0) { + dragType = 'sw'; + left -= width; + } else { + dragType = 'nw'; + left -= width; + top -= height; + } + } + + // Show the cropBox if is hidden + if (!this.cropped) { + this.cropped = true; + this.$cropBox.removeClass(CLASS_HIDDEN); + } + } + + break; + + // No default + } + + if (renderable) { + cropBox.width = width; + cropBox.height = height; + cropBox.left = left; + cropBox.top = top; + this.dragType = dragType; + + this.renderCropBox(); + } + + // Override + this.startX = this.endX; + this.startY = this.endY; + }; + + $.extend(Cropper.prototype, prototype); + + Cropper.DEFAULTS = { + // Defines the aspect ratio of the crop box + // Type: Number + aspectRatio: NaN, + + // Defines the percentage of automatic cropping area when initializes + // Type: Number (Must large than 0 and less than 1) + autoCropArea: 0.8, // 80% + + // Outputs the cropping results. + // Type: Function + crop: null, + + // Add extra containers for previewing + // Type: String (jQuery selector) + preview: '', + + // Toggles + strict: true, // strict mode, the image cannot zoom out less than the container + responsive: true, // Rebuild when resize the window + checkImageOrigin: true, // Check if the target image is cross origin + + modal: true, // Show the black modal + guides: true, // Show the dashed lines for guiding + highlight: true, // Show the white modal to highlight the crop box + background: true, // Show the grid background + + autoCrop: true, // Enable to crop the image automatically when initialize + dragCrop: true, // Enable to create new crop box by dragging over the image + movable: true, // Enable to move the crop box + resizable: true, // Enable to resize the crop box + rotatable: true, // Enable to rotate the image + zoomable: true, // Enable to zoom the image + touchDragZoom: true, // Enable to zoom the image by wheeling mouse + mouseWheelZoom: true, // Enable to zoom the image by dragging touch + + // Dimensions + minCanvasWidth: 0, + minCanvasHeight: 0, + minCropBoxWidth: 0, + minCropBoxHeight: 0, + minContainerWidth: 200, + minContainerHeight: 100, + + // Events + build: null, // Function + built: null, // Function + dragstart: null, // Function + dragmove: null, // Function + dragend: null, // Function + zoomin: null, // Function + zoomout: null // Function + }; + + Cropper.setDefaults = function (options) { + $.extend(Cropper.DEFAULTS, options); + }; + + // Use the string compressor: Strmin (https://github.com/fengyuanchen/strmin) + Cropper.TEMPLATE = (function (source, words) { + words = words.split(','); + return source.replace(/\d+/g, function (i) { + return words[i]; + }); + })('<0 6="5-container"><0 6="5-canvas"><0 6="5-2-9" 3-2="move"><0 6="5-crop-9"><1 6="5-view-9"><1 6="5-8 8-h"><1 6="5-8 8-v"><1 6="5-face" 3-2="all"><1 6="5-7 7-e" 3-2="e"><1 6="5-7 7-n" 3-2="n"><1 6="5-7 7-w" 3-2="w"><1 6="5-7 7-s" 3-2="s"><1 6="5-4 4-e" 3-2="e"><1 6="5-4 4-n" 3-2="n"><1 6="5-4 4-w" 3-2="w"><1 6="5-4 4-s" 3-2="s"><1 6="5-4 4-ne" 3-2="ne"><1 6="5-4 4-nw" 3-2="nw"><1 6="5-4 4-sw" 3-2="sw"><1 6="5-4 4-se" 3-2="se">', 'div,span,drag,data,point,cropper,class,line,dashed,box'); + + /* Template source: +
+
+
+
+ + + + + + + + + + + + + + + + +
+
+ */ + + // Save the other cropper + Cropper.other = $.fn.cropper; + + // Register as jQuery plugin + $.fn.cropper = function (options) { + var args = toArray(arguments, 1), + result; + + this.each(function () { + var $this = $(this), + data = $this.data('cropper'), + fn; + + if (!data) { + $this.data('cropper', (data = new Cropper(this, options))); + } + + if (typeof options === 'string' && $.isFunction((fn = data[options]))) { + result = fn.apply(data, args); + } + }); + + return isUndefined(result) ? this : result; + }; + + $.fn.cropper.Constructor = Cropper; + $.fn.cropper.setDefaults = Cropper.setDefaults; + + // No conflict + $.fn.cropper.noConflict = function () { + $.fn.cropper = Cropper.other; + return this; + }; + +}); diff --git a/service/Public/Common/Lib/cropper/cropper.min.css b/service/Public/Common/Lib/cropper/cropper.min.css new file mode 100755 index 000000000..558039ea4 --- /dev/null +++ b/service/Public/Common/Lib/cropper/cropper.min.css @@ -0,0 +1,9 @@ +/*! + * Cropper v0.9.2 + * https://github.com/fengyuanchen/cropper + * + * Copyright (c) 2014-2015 Fengyuan Chen and contributors + * Released under the MIT license + * + * Date: 2015-04-18T04:35:01.500Z + */.cropper-container{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.cropper-container img{display:block;width:100%;min-width:0!important;max-width:none!important;height:100%;min-height:0!important;max-height:none!important;image-orientation:0deg!important}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-drag-box{background-color:#fff;filter:alpha(opacity=0);opacity:0}.cropper-modal{background-color:#000;filter:alpha(opacity=50);opacity:.5}.cropper-view-box{display:block;width:100%;height:100%;overflow:hidden;outline:#69f solid 1px;outline-color:rgba(102,153,255,.75)}.cropper-dashed{position:absolute;display:block;filter:alpha(opacity=50);border:0 dashed #fff;opacity:.5}.cropper-dashed.dashed-h{top:33.33333333%;left:0;width:100%;height:33.33333333%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.33333333%;width:33.33333333%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;filter:alpha(opacity=10);opacity:.1}.cropper-face{top:0;left:0;cursor:move;background-color:#fff}.cropper-line{background-color:#69f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;background-color:#69f;filter:alpha(opacity=75);opacity:.75}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;filter:alpha(opacity=100);opacity:1}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:" ";background-color:#69f;filter:alpha(opacity=0);opacity:0}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{width:5px;height:5px;filter:alpha(opacity=75);opacity:.75}}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-invisible{filter:alpha(opacity=0);opacity:0}.cropper-hide{position:fixed;top:0;left:0;z-index:-1;width:auto!important;min-width:0!important;max-width:none!important;height:auto!important;min-height:0!important;max-height:none!important;filter:alpha(opacity=0);opacity:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed} \ No newline at end of file diff --git a/service/Public/Common/Lib/cropper/cropper.min.js b/service/Public/Common/Lib/cropper/cropper.min.js new file mode 100755 index 000000000..cc227c905 --- /dev/null +++ b/service/Public/Common/Lib/cropper/cropper.min.js @@ -0,0 +1,10 @@ +/*! + * Cropper v0.9.2 + * https://github.com/fengyuanchen/cropper + * + * Copyright (c) 2014-2015 Fengyuan Chen and contributors + * Released under the MIT license + * + * Date: 2015-04-18T04:35:01.500Z + */ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){"use strict";function b(a){return"number"==typeof a}function c(a){return"undefined"==typeof a}function d(a,c){var d=[];return b(c)&&d.push(c),d.slice.apply(a,d)}function e(a,b){var c=d(arguments,2);return function(){return a.apply(b,c.concat(d(arguments)))}}function f(a){var b=a.match(/^(https?:)\/\/([^\:\/\?#]+):?(\d*)/i);return b&&(b[1]!==o.protocol||b[2]!==o.hostname||b[3]!==o.port)}function g(a){var b="timestamp="+(new Date).getTime();return a+(-1===a.indexOf("?")?"?":"&")+b}function h(a,b){return b.left<0&&a.width90?180-e:e)*Math.PI/180,g=S(f),h=T(f),i=a.width,j=a.height,k=a.aspectRatio;return b?(c=i/(h+g/k),d=c/k):(c=i*h+j*g,d=i*g+j*h),{width:c,height:d}}function k(b,c){var d=a("")[0],e=d.getContext("2d"),f=c.naturalWidth,g=c.naturalHeight,h=c.rotate,i=j({width:f,height:g,degree:h});return h?(d.width=i.width,d.height=i.height,e.save(),e.translate(i.width/2,i.height/2),e.rotate(h*Math.PI/180),e.drawImage(b,-f/2,-g/2,f,g),e.restore()):(d.width=f,d.height=g,e.drawImage(b,0,0,f,g)),d}function l(b,c){this.$element=a(b),this.options=a.extend({},l.DEFAULTS,a.isPlainObject(c)&&c),this.ready=!1,this.built=!1,this.rotated=!1,this.cropped=!1,this.disabled=!1,this.canvas=null,this.cropBox=null,this.load()}var m=a(window),n=a(document),o=window.location,p=".cropper",q="preview"+p,r=/^(e|n|w|s|ne|nw|sw|se|all|crop|move|zoom)$/,s="cropper-modal",t="cropper-hide",u="cropper-hidden",v="cropper-invisible",w="cropper-move",x="cropper-crop",y="cropper-disabled",z="cropper-bg",A="mousedown touchstart",B="mousemove touchmove",C="mouseup mouseleave touchend touchleave touchcancel",D="wheel mousewheel DOMMouseScroll",E="dblclick",F="resize"+p,G="build"+p,H="built"+p,I="dragstart"+p,J="dragmove"+p,K="dragend"+p,L="zoomin"+p,M="zoomout"+p,N=a.isFunction(a("")[0].getContext),O=Math.sqrt,P=Math.min,Q=Math.max,R=Math.abs,S=Math.sin,T=Math.cos,U=parseFloat,V={};V.load=function(b){var c,d,e,h,i=this.options,j=this.$element;if(!b)if(j.is("img")){if(!j.attr("src"))return;b=j.prop("src")}else j.is("canvas")&&N&&(b=j[0].toDataURL());b&&(e=a.Event(G),j.one(G,i.build).trigger(e),e.isDefaultPrevented()||(i.checkImageOrigin&&f(b)&&(c="anonymous",j.prop("crossOrigin")||(d=g(b))),this.$clone=h=a(""),h.one("load",a.proxy(function(){var a=h.prop("naturalWidth")||h.width(),c=h.prop("naturalHeight")||h.height();this.image={naturalWidth:a,naturalHeight:c,aspectRatio:a/c,rotate:0},this.url=b,this.ready=!0,this.build()},this)).one("error",function(){h.remove()}).attr({src:d||b,crossOrigin:c}),h.addClass(t).insertAfter(j)))},V.build=function(){var b,c,d=this.$element,e=this.$clone,f=this.options;this.ready&&(this.built&&this.unbuild(),this.$cropper=b=a(l.TEMPLATE),d.addClass(u),e.removeClass(t),this.$container=d.parent().append(b),this.$canvas=b.find(".cropper-canvas").append(e),this.$dragBox=b.find(".cropper-drag-box"),this.$cropBox=c=b.find(".cropper-crop-box"),this.$viewBox=b.find(".cropper-view-box"),this.addListeners(),this.initPreview(),f.aspectRatio=U(f.aspectRatio)||0/0,f.autoCrop?(this.cropped=!0,f.modal&&this.$dragBox.addClass(s)):c.addClass(u),f.background&&b.addClass(z),f.highlight||c.find(".cropper-face").addClass(v),f.guides||c.find(".cropper-dashed").addClass(u),f.movable||c.find(".cropper-face").data("drag","move"),f.resizable||c.find(".cropper-line, .cropper-point").addClass(u),this.setDragMode(f.dragCrop?"crop":"move"),this.built=!0,this.render(),d.one(H,f.built).trigger(H))},V.unbuild=function(){this.built&&(this.built=!1,this.container=null,this.canvas=null,this.cropBox=null,this.removeListeners(),this.resetPreview(),this.$preview=null,this.$viewBox=null,this.$cropBox=null,this.$dragBox=null,this.$canvas=null,this.$container=null,this.$cropper.remove(),this.$cropper=null)},a.extend(V,{render:function(){this.initContainer(),this.initCanvas(),this.initCropBox(),this.renderCanvas(),this.cropped&&this.renderCropBox()},initContainer:function(){var a=this.$element,b=this.$container,c=this.$cropper,d=this.options;c.addClass(u),a.removeClass(u),c.css(this.container={width:Q(b.width(),U(d.minContainerWidth)||200),height:Q(b.height(),U(d.minContainerHeight)||100)}),a.addClass(u),c.removeClass(u)},initCanvas:function(){var b=this.container,c=b.width,d=b.height,e=this.image,f=e.aspectRatio,g={aspectRatio:f,width:c,height:d};d*f>c?g.height=c/f:g.width=d*f,g.oldLeft=g.left=(c-g.width)/2,g.oldTop=g.top=(d-g.height)/2,this.canvas=g,this.limitCanvas(!0,!0),this.initialImage=a.extend({},e),this.initialCanvas=a.extend({},g)},limitCanvas:function(b,c){var d,e,f=this.options,g=f.strict,h=this.container,i=h.width,j=h.height,k=this.canvas,l=k.aspectRatio,m=this.cropBox,n=this.cropped&&m;b&&(d=U(f.minCanvasWidth)||0,e=U(f.minCanvasHeight)||0,d?(g&&(d=Q(n?m.width:i,d)),e=d/l):e?(g&&(e=Q(n?m.height:j,e)),d=e*l):g&&(n?(d=m.width,e=m.height,e*l>d?d=e*l:e=d/l):(d=i,e=j,e*l>d?e=d/l:d=e*l)),a.extend(k,{minWidth:d,minHeight:e,maxWidth:1/0,maxHeight:1/0})),c&&(g?n?(k.minLeft=P(m.left,m.left+m.width-k.width),k.minTop=P(m.top,m.top+m.height-k.height),k.maxLeft=m.left,k.maxTop=m.top):(k.minLeft=P(0,i-k.width),k.minTop=P(0,j-k.height),k.maxLeft=Q(0,i-k.width),k.maxTop=Q(0,j-k.height)):(k.minLeft=-k.width,k.minTop=-k.height,k.maxLeft=i,k.maxTop=j))},renderCanvas:function(a){var b,c,d=this.options,e=this.canvas,f=this.image;this.rotated&&(this.rotated=!1,c=j({width:f.width,height:f.height,degree:f.rotate}),b=c.width/c.height,b!==e.aspectRatio&&(e.left-=(c.width-e.width)/2,e.top-=(c.height-e.height)/2,e.width=c.width,e.height=c.height,e.aspectRatio=b,this.limitCanvas(!0,!1))),(e.width>e.maxWidth||e.widthe.maxHeight||e.heightc.width?f.height=f.width/d:f.width=f.height*d),this.cropBox=f,this.limitCropBox(!0,!0),f.width=P(Q(f.width,f.minWidth),f.maxWidth),f.height=P(Q(f.height,f.minHeight),f.maxHeight),f.width=Q(f.minWidth,f.width*e),f.height=Q(f.minHeight,f.height*e),f.oldLeft=f.left=c.left+(c.width-f.width)/2,f.oldTop=f.top=c.top+(c.height-f.height)/2,this.initialCropBox=a.extend({},f)},limitCropBox:function(a,b){var c,d,e=this.options,f=e.strict,g=this.container,h=g.width,i=g.height,j=this.canvas,k=this.cropBox,l=e.aspectRatio;a&&(c=U(e.minCropBoxWidth)||0,d=U(e.minCropBoxHeight)||0,k.minWidth=P(h,c),k.minHeight=P(i,d),k.maxWidth=P(h,f?j.width:h),k.maxHeight=P(i,f?j.height:i),l&&(k.maxHeight*l>k.maxWidth?(k.minHeight=k.minWidth/l,k.maxHeight=k.maxWidth/l):(k.minWidth=k.minHeight*l,k.maxWidth=k.maxHeight*l)),k.minWidth=P(k.maxWidth,k.minWidth),k.minHeight=P(k.maxHeight,k.minHeight)),b&&(f?(k.minLeft=Q(0,j.left),k.minTop=Q(0,j.top),k.maxLeft=P(h,j.left+j.width)-k.width,k.maxTop=P(i,j.top+j.height)-k.height):(k.minLeft=0,k.minTop=0,k.maxLeft=h-k.width,k.maxTop=i-k.height))},renderCropBox:function(){var a=this.options,b=this.container,c=b.width,d=b.height,e=this.$cropBox,f=this.cropBox;(f.width>f.maxWidth||f.widthf.maxHeight||f.height'),this.$preview.each(function(){var c=a(this);c.data(q,{width:c.width(),height:c.height(),original:c.html()}).html('')})},V.resetPreview=function(){this.$preview.each(function(){var b=a(this);b.html(b.data(q).original).removeData(q)})},V.preview=function(){var b=this.image,c=this.canvas,d=this.cropBox,e=b.width,f=b.height,g=d.left-c.left-b.left,h=d.top-c.top-b.top,j=b.rotate;this.cropped&&!this.disabled&&(this.$viewBox.find("img").css({width:e,height:f,marginLeft:-g,marginTop:-h,transform:i(j)}),this.$preview.each(function(){var b=a(this),c=b.data(q),k=c.width/d.width,l=c.width,m=d.height*k;m>c.height&&(k=c.height/d.height,l=d.width*k,m=c.height),b.width(l).height(m).find("img").css({width:e*k,height:f*k,marginLeft:-g*k,marginTop:-h*k,transform:i(j)})}))},V.addListeners=function(){var b=this.options;this.$element.on(I,b.dragstart).on(J,b.dragmove).on(K,b.dragend).on(L,b.zoomin).on(M,b.zoomout),this.$cropper.on(A,a.proxy(this.dragstart,this)).on(E,a.proxy(this.dblclick,this)),b.zoomable&&b.mouseWheelZoom&&this.$cropper.on(D,a.proxy(this.wheel,this)),n.on(B,this._dragmove=e(this.dragmove,this)).on(C,this._dragend=e(this.dragend,this)),b.responsive&&m.on(F,this._resize=e(this.resize,this))},V.removeListeners=function(){var a=this.options;this.$element.off(I,a.dragstart).off(J,a.dragmove).off(K,a.dragend).off(L,a.zoomin).off(M,a.zoomout),this.$cropper.off(A,this.dragstart).off(E,this.dblclick),a.zoomable&&a.mouseWheelZoom&&this.$cropper.off(D,this.wheel),n.off(B,this._dragmove).off(C,this._dragend),a.responsive&&m.off(F,this._resize)},a.extend(V,{resize:function(){var b,c,d,e=this.$container,f=this.container;this.disabled||(d=e.width()/f.width,(1!==d||e.height()!==f.height)&&(b=this.getCanvasData(),c=this.getCropBoxData(),this.render(),this.setCanvasData(a.each(b,function(a,c){b[a]=c*d})),this.setCropBoxData(a.each(c,function(a,b){c[a]=b*d}))))},dblclick:function(){this.disabled||this.setDragMode(this.$dragBox.hasClass(x)?"move":"crop")},wheel:function(a){var b=a.originalEvent,c=1;this.disabled||(a.preventDefault(),b.deltaY?c=b.deltaY>0?1:-1:b.wheelDelta?c=-b.wheelDelta/120:b.detail&&(c=b.detail>0?1:-1),this.zoom(.1*-c))},dragstart:function(b){var c,d,e,f=this.options,g=b.originalEvent,h=g&&g.touches,i=b;if(!this.disabled){if(h){if(e=h.length,e>1){if(!f.zoomable||!f.touchDragZoom||2!==e)return;i=h[1],this.startX2=i.pageX,this.startY2=i.pageY,c="zoom"}i=h[0]}if(c=c||a(i.target).data("drag"),r.test(c)){if(b.preventDefault(),d=a.Event(I,{originalEvent:g,dragType:c}),this.$element.trigger(d),d.isDefaultPrevented())return;this.dragType=c,this.cropping=!1,this.startX=i.pageX,this.startY=i.pageY,"crop"===c&&(this.cropping=!0,this.$dragBox.addClass(s))}}},dragmove:function(b){var c,d,e=this.options,f=b.originalEvent,g=f&&f.touches,h=b,i=this.dragType;if(!this.disabled){if(g){if(d=g.length,d>1){if(!e.zoomable||!e.touchDragZoom||2!==d)return;h=g[1],this.endX2=h.pageX,this.endY2=h.pageY}h=g[0]}if(i){if(b.preventDefault(),c=a.Event(J,{originalEvent:f,dragType:i}),this.$element.trigger(c),c.isDefaultPrevented())return;this.endX=h.pageX,this.endY=h.pageY,this.change()}}},dragend:function(b){var c,d=this.dragType;if(!this.disabled&&d){if(b.preventDefault(),c=a.Event(K,{originalEvent:b.originalEvent,dragType:d}),this.$element.trigger(c),c.isDefaultPrevented())return;this.cropping&&(this.cropping=!1,this.$dragBox.toggleClass(s,this.cropped&&this.options.modal)),this.dragType=""}}}),a.extend(V,{reset:function(){this.built&&!this.disabled&&(this.image=a.extend({},this.initialImage),this.canvas=a.extend({},this.initialCanvas),this.renderCanvas(),this.cropped&&(this.cropBox=a.extend({},this.initialCropBox),this.renderCropBox()))},clear:function(){this.cropped&&!this.disabled&&(a.extend(this.cropBox,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(),this.renderCanvas(),this.$dragBox.removeClass(s),this.$cropBox.addClass(u))},destroy:function(){var a=this.$element;this.ready?(this.unbuild(),a.removeClass(u)):this.$clone.off("load").remove(),a.removeData("cropper")},replace:function(a){!this.disabled&&a&&this.load(a)},enable:function(){this.built&&(this.disabled=!1,this.$cropper.removeClass(y))},disable:function(){this.built&&(this.disabled=!0,this.$cropper.addClass(y))},move:function(a,c){var d=this.canvas;this.built&&!this.disabled&&b(a)&&b(c)&&(d.left+=a,d.top+=c,this.renderCanvas(!0))},zoom:function(b){var c,d,e,f=this.canvas;if(b=U(b),b&&this.built&&!this.disabled&&this.options.zoomable){if(c=a.Event(b>0?L:M),this.$element.trigger(c),c.isDefaultPrevented())return;b=-1>=b?1/(1-b):1>=b?1+b:b,d=f.width*b,e=f.height*b,f.left-=(d-f.width)/2,f.top-=(e-f.height)/2,f.width=d,f.height=e,this.renderCanvas(!0),this.setDragMode("move")}},rotate:function(a){var b=this.image;a=U(a),a&&this.built&&!this.disabled&&this.options.rotatable&&(b.rotate=(b.rotate+a)%360,this.rotated=!0,this.renderCanvas(!0))},getData:function(){var b,c,d=this.cropBox,e=this.canvas,f=this.image;return this.built&&this.cropped?(c={x:d.left-e.left,y:d.top-e.top,width:d.width,height:d.height},b=f.width/f.naturalWidth,a.each(c,function(a,d){d/=b,c[a]=d})):c={x:0,y:0,width:0,height:0},c.rotate=f.rotate,c},getContainerData:function(){return this.built?this.container:{}},getImageData:function(){return this.ready?this.image:{}},getCanvasData:function(){var a,b=this.canvas;return this.built&&(a={left:b.left,top:b.top,width:b.width,height:b.height}),a||{}},setCanvasData:function(c){var d=this.canvas,e=d.aspectRatio;this.built&&!this.disabled&&a.isPlainObject(c)&&(b(c.left)&&(d.left=c.left),b(c.top)&&(d.top=c.top),b(c.width)?(d.width=c.width,d.height=c.width/e):b(c.height)&&(d.height=c.height,d.width=c.height*e),this.renderCanvas(!0))},getCropBoxData:function(){var a,b=this.cropBox;return this.built&&this.cropped&&(a={left:b.left,top:b.top,width:b.width,height:b.height}),a||{}},setCropBoxData:function(c){var d=this.cropBox,e=this.options.aspectRatio;this.built&&this.cropped&&!this.disabled&&a.isPlainObject(c)&&(b(c.left)&&(d.left=c.left),b(c.top)&&(d.top=c.top),e?b(c.width)?(d.width=c.width,d.height=d.width/e):b(c.height)&&(d.height=c.height,d.width=d.height*e):(b(c.width)&&(d.width=c.width),b(c.height)&&(d.height=c.height)),this.renderCropBox())},getCroppedCanvas:function(b){var c,d,e,f,g,h,i,j,l,m,n;if(this.built&&this.cropped&&N)return a.isPlainObject(b)||(b={}),n=this.getData(),c=n.width,d=n.height,j=c/d,a.isPlainObject(b)&&(g=b.width,h=b.height,g?(h=g/j,i=g/c):h&&(g=h*j,i=h/d)),e=g||c,f=h||d,l=a("")[0],l.width=e,l.height=f,m=l.getContext("2d"),b.fillColor&&(m.fillStyle=b.fillColor,m.fillRect(0,0,e,f)),m.drawImage.apply(m,function(){var a,b,e,f,g,h,j=k(this.$clone[0],this.image),l=j.width,m=j.height,o=[j],p=n.x,q=n.y;return-c>=p||p>l?p=a=e=g=0:0>=p?(e=-p,p=0,a=g=P(l,c+p)):l>=p&&(e=0,a=g=P(c,l-p)),0>=a||-d>=q||q>m?q=b=f=h=0:0>=q?(f=-q,q=0,b=h=P(m,d+q)):m>=q&&(f=0,b=h=P(d,m-q)),o.push(p,q,a,b),i&&(e*=i,f*=i,g*=i,h*=i),g>0&&h>0&&o.push(e,f,g,h),o}.call(this)),l},setAspectRatio:function(a){var b=this.options;this.disabled||c(a)||(b.aspectRatio=U(a)||0/0,this.built&&(this.initCropBox(),this.cropped&&this.renderCropBox()))},setDragMode:function(a){var b=this.$dragBox,c=!1,d=!1;if(this.ready&&!this.disabled){switch(a){case"crop":this.options.dragCrop?(c=!0,b.data("drag",a)):d=!0;break;case"move":d=!0,b.data("drag",a);break;default:b.removeData("drag")}b.toggleClass(x,c).toggleClass(w,d)}}}),V.change=function(){var a,b=this.dragType,c=this.options,d=this.canvas,e=this.container,f=this.cropBox,g=f.width,h=f.height,i=f.left,j=f.top,k=i+g,l=j+h,m=0,n=0,o=e.width,p=e.height,q=!0,r=c.aspectRatio,s={x:this.endX-this.startX,y:this.endY-this.startY};switch(c.strict&&(m=f.minLeft,n=f.minTop,o=m+P(e.width,d.width),p=n+P(e.height,d.height)),r&&(s.X=s.y*r,s.Y=s.x/r),b){case"all":i+=s.x,j+=s.y;break;case"e":if(s.x>=0&&(k>=o||r&&(n>=j||l>=p))){q=!1;break}g+=s.x,r&&(h=g/r,j-=s.Y/2),0>g&&(b="w",g=0);break;case"n":if(s.y<=0&&(n>=j||r&&(m>=i||k>=o))){q=!1;break}h-=s.y,j+=s.y,r&&(g=h*r,i+=s.X/2),0>h&&(b="s",h=0);break;case"w":if(s.x<=0&&(m>=i||r&&(n>=j||l>=p))){q=!1;break}g-=s.x,i+=s.x,r&&(h=g/r,j+=s.Y/2),0>g&&(b="e",g=0);break;case"s":if(s.y>=0&&(l>=p||r&&(m>=i||k>=o))){q=!1;break}h+=s.y,r&&(g=h*r,i-=s.X/2),0>h&&(b="n",h=0);break;case"ne":if(r){if(s.y<=0&&(n>=j||k>=o)){q=!1;break}h-=s.y,j+=s.y,g=h*r}else s.x>=0?o>k?g+=s.x:s.y<=0&&n>=j&&(q=!1):g+=s.x,s.y<=0?j>0&&(h-=s.y,j+=s.y):(h-=s.y,j+=s.y);0>g&&0>h?(b="sw",h=0,g=0):0>g?(b="nw",g=0):0>h&&(b="se",h=0);break;case"nw":if(r){if(s.y<=0&&(n>=j||m>=i)){q=!1;break}h-=s.y,j+=s.y,g=h*r,i+=s.X}else s.x<=0?i>0?(g-=s.x,i+=s.x):s.y<=0&&n>=j&&(q=!1):(g-=s.x,i+=s.x),s.y<=0?j>0&&(h-=s.y,j+=s.y):(h-=s.y,j+=s.y);0>g&&0>h?(b="se",h=0,g=0):0>g?(b="ne",g=0):0>h&&(b="sw",h=0);break;case"sw":if(r){if(s.x<=0&&(m>=i||l>=p)){q=!1;break}g-=s.x,i+=s.x,h=g/r}else s.x<=0?i>0?(g-=s.x,i+=s.x):s.y>=0&&l>=p&&(q=!1):(g-=s.x,i+=s.x),s.y>=0?p>l&&(h+=s.y):h+=s.y;0>g&&0>h?(b="ne",h=0,g=0):0>g?(b="se",g=0):0>h&&(b="nw",h=0);break;case"se":if(r){if(s.x>=0&&(k>=o||l>=p)){q=!1;break}g+=s.x,h=g/r}else s.x>=0?o>k?g+=s.x:s.y>=0&&l>=p&&(q=!1):g+=s.x,s.y>=0?p>l&&(h+=s.y):h+=s.y;0>g&&0>h?(b="nw",h=0,g=0):0>g?(b="sw",g=0):0>h&&(b="ne",h=0);break;case"move":d.left+=s.x,d.top+=s.y,this.renderCanvas(!0),q=!1;break;case"zoom":this.zoom(function(a,b,c,d){var e=O(a*a+b*b),f=O(c*c+d*d);return(f-e)/e}(R(this.startX-this.startX2),R(this.startY-this.startY2),R(this.endX-this.endX2),R(this.endY-this.endY2))),this.startX2=this.endX2,this.startY2=this.endY2,q=!1;break;case"crop":s.x&&s.y&&(a=this.$cropper.offset(),i=this.startX-a.left,j=this.startY-a.top,g=f.minWidth,h=f.minHeight,s.x>0?s.y>0?b="se":(b="ne",j-=h):s.y>0?(b="sw",i-=g):(b="nw",i-=g,j-=h),this.cropped||(this.cropped=!0,this.$cropBox.removeClass(u)))}q&&(f.width=g,f.height=h,f.left=i,f.top=j,this.dragType=b,this.renderCropBox()),this.startX=this.endX,this.startY=this.endY},a.extend(l.prototype,V),l.DEFAULTS={aspectRatio:0/0,autoCropArea:.8,crop:null,preview:"",strict:!0,responsive:!0,checkImageOrigin:!0,modal:!0,guides:!0,highlight:!0,background:!0,autoCrop:!0,dragCrop:!0,movable:!0,resizable:!0,rotatable:!0,zoomable:!0,touchDragZoom:!0,mouseWheelZoom:!0,minCanvasWidth:0,minCanvasHeight:0,minCropBoxWidth:0,minCropBoxHeight:0,minContainerWidth:200,minContainerHeight:100,build:null,built:null,dragstart:null,dragmove:null,dragend:null,zoomin:null,zoomout:null},l.setDefaults=function(b){a.extend(l.DEFAULTS,b)},l.TEMPLATE=function(a,b){return b=b.split(","),a.replace(/\d+/g,function(a){return b[a]})}('<0 6="5-container"><0 6="5-canvas"><0 6="5-2-9" 3-2="move"><0 6="5-crop-9"><1 6="5-view-9"><1 6="5-8 8-h"><1 6="5-8 8-v"><1 6="5-face" 3-2="all"><1 6="5-7 7-e" 3-2="e"><1 6="5-7 7-n" 3-2="n"><1 6="5-7 7-w" 3-2="w"><1 6="5-7 7-s" 3-2="s"><1 6="5-4 4-e" 3-2="e"><1 6="5-4 4-n" 3-2="n"><1 6="5-4 4-w" 3-2="w"><1 6="5-4 4-s" 3-2="s"><1 6="5-4 4-ne" 3-2="ne"><1 6="5-4 4-nw" 3-2="nw"><1 6="5-4 4-sw" 3-2="sw"><1 6="5-4 4-se" 3-2="se">',"div,span,drag,data,point,cropper,class,line,dashed,box"),l.other=a.fn.cropper,a.fn.cropper=function(b){var e,f=d(arguments,1);return this.each(function(){var c,d=a(this),g=d.data("cropper");g||d.data("cropper",g=new l(this,b)),"string"==typeof b&&a.isFunction(c=g[b])&&(e=c.apply(g,f))}),c(e)?this:e},a.fn.cropper.Constructor=l,a.fn.cropper.setDefaults=l.setDefaults,a.fn.cropper.noConflict=function(){return a.fn.cropper=l.other,this}}); \ No newline at end of file diff --git a/service/Public/Home/Default/Css/Common.css b/service/Public/Home/Default/Css/Common.css index 102f8f725..e4858938c 100755 --- a/service/Public/Home/Default/Css/Common.css +++ b/service/Public/Home/Default/Css/Common.css @@ -688,4 +688,29 @@ background:url(../Images/ibar_sprites.png) no-repeat;background-position:0px -23 .user-main { padding-top: 10px; } .more-icon-rotate {-webkit-transform: rotate(-90deg);transform: rotate(-90deg);-webkit-transition: all 300ms;transition: all 300ms;} -button { outline: none !important;} \ No newline at end of file +button { outline: none !important;} + + + + +/** + * 公共头像样式 + */ +.common-cropper-popup .cropper-images-view, +.common-cropper-popup .img-preview, +.common-cropper-popup .submit-operation { overflow:hidden; } +.common-cropper-popup .img-container { width:200px; height:200px; margin-bottom:5px; } +.common-cropper-popup .cropper-input-images-submit { width:104px; margin:0px 5px 0px 2px; height: 32px; } +.common-cropper-popup .preview-lg { width:180px; height:180px; } +.common-cropper-popup .preview-md { width:100px; height:100px; } +.common-cropper-popup .preview-sm { width:50px; height:50px; } +.common-cropper-popup .img-preview { margin-left:20px; border: 1px solid #eee; background-color: #f9f9f9; } +.common-cropper-popup .cropper-container, .cropper-input-images-submit { border-radius:2px; } +.common-cropper-popup .am-form-file input[type="file"] { margin-top: 0; } +@media only screen and (max-width:641px){ + .common-cropper-popup .img-preview { margin-left:10px; } + .common-cropper-popup .preview-md, + .common-cropper-popup .preview-sm { margin:0 0 5px 8px; } + .common-cropper-popup .preview-md { width:90px; height:90px; } + .common-cropper-popup .preview-sm { width:50px; height:50px; } +} \ No newline at end of file diff --git a/service/Public/Home/Default/Css/User.Index.css b/service/Public/Home/Default/Css/User.Index.css index ac5fc1abc..f92d767eb 100644 --- a/service/Public/Home/Default/Css/User.Index.css +++ b/service/Public/Home/Default/Css/User.Index.css @@ -63,7 +63,7 @@ ul.user-base-icon { vertical-align: bottom; } .order-nav .nav-name i.order-icon { - background-image: url(../images/user-index-nav-order-icon.png); + background-image: url(../Images/user-index-nav-order-icon.png); } .order-nav .icon-tips, .order-base a { color: #888; diff --git a/service/Public/Home/Default/Images/default-user-avatar-s.jpg b/service/Public/Home/Default/Images/default-user-avatar-s.jpg new file mode 100755 index 0000000000000000000000000000000000000000..fce14d5f96a664d5c42116b398f4087204678ba3 GIT binary patch literal 23832 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 literal 0 HcmV?d00001 diff --git a/service/Public/Home/Default/Images/default-user-avatar.jpg b/service/Public/Home/Default/Images/default-user-avatar.jpg old mode 100755 new mode 100644 index fce14d5f96a664d5c42116b398f4087204678ba3..e9160f113d4ff91b354785069838df310a78b8de GIT binary patch literal 8057 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 literal 23832 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 diff --git a/service/Public/Home/Default/Js/Common.js b/service/Public/Home/Default/Js/Common.js index 937c71761..04eb9960c 100755 --- a/service/Public/Home/Default/Js/Common.js +++ b/service/Public/Home/Default/Js/Common.js @@ -150,5 +150,139 @@ $(function() store.set(store_user_menu_key, value); } }); + + + + + var $image = $('.user-head-img-container > img'), + $dataX = $('#user-head-img_x'), + $dataY = $('#user-head-img_y'), + $dataHeight = $('#user-head-img_height'), + $dataWidth = $('#user-head-img_width'), + $dataRotate = $('#user-head-img_rotate'), + options = { + // strict: false, + // responsive: false, + // checkImageOrigin: false + + // modal: false, + // guides: false, + // highlight: false, + // background: false, + + // autoCrop: false, + // autoCropArea: 0.5, + // dragCrop: false, + // movable: false, + // resizable: false, + // rotatable: false, + // zoomable: false, + // touchDragZoom: false, + // mouseWheelZoom: false, + + // minCanvasWidth: 320, + // minCanvasHeight: 180, + // minCropBoxWidth: 160, + // minCropBoxHeight: 90, + // minContainerWidth: 320, + // minContainerHeight: 180, + + // build: null, + // built: null, + // dragstart: null, + // dragmove: null, + // dragend: null, + // zoomin: null, + // zoomout: null, + + aspectRatio: 1 / 1, + preview: '.user-head-img-preview', + crop: function (data) { + $dataX.val(Math.round(data.x)); + $dataY.val(Math.round(data.y)); + $dataHeight.val(Math.round(data.height)); + $dataWidth.val(Math.round(data.width)); + $dataRotate.val(Math.round(data.rotate)); + } + }; + $image.on({}).cropper(options); + + // Methods + $(document.body).on('click', '[data-method]', function () { + var data = $(this).data(), + $target, + result; + if (data.method) { + data = $.extend({}, data); // Clone a new one + if (typeof data.target !== 'undefined') { + $target = $(data.target); + + if (typeof data.option === 'undefined') { + try { + data.option = JSON.parse($target.val()); + } catch (e) { + console.log(e.message); + } + } + } + + result = $image.cropper(data.method, data.option); + + if (data.method === 'getCroppedCanvas') { + $('#getCroppedCanvasModal').modal().find('.modal-body').html(result); + } + + if ($.isPlainObject(result) && $target) { + try { + $target.val(JSON.stringify(result)); + } catch (e) { + console.log(e.message); + } + } + + } + }).on('keydown', function (e) {}); + + + // 头像图片上传 + var $inputimage = $('.common-cropper-popup input[type="file"]'), + URL = window.URL || window.webkitURL, + blobURL; + + if (URL) { + $inputimage.change(function () { + var files = this.files, + file; + + if (files && files.length) { + file = files[0]; + + if (/^image\/\w+$/.test(file.type)) { + blobURL = URL.createObjectURL(file); + $image.one('built.cropper', function () { + URL.revokeObjectURL(blobURL); // Revoke when load complete + }).cropper('reset', true).cropper('replace', blobURL); + //$inputimage.val(''); + } else { + Prompt('Please choose an image file.'); + } + } + }); + } else { + $inputimage.parent().remove(); + } + + // 图片裁剪提交确认 + $('.common-cropper-popup button[type="submit"]').on('click', function() + { + var v = $inputimage.val(); + if(v.length == 0) + { + $(this).parents('.common-cropper-popup').find('.from-text-tips').removeClass('none'); + Prompt('请上传图片'); + return false; + } + }); + }); \ No newline at end of file