{"id":240,"date":"2022-12-01T13:10:44","date_gmt":"2022-12-01T10:10:44","guid":{"rendered":"https:\/\/kb.astrocroc.com\/?p=240"},"modified":"2022-12-01T13:10:44","modified_gmt":"2022-12-01T10:10:44","slug":"%d1%80%d0%b5%d0%b4%d0%b0%d0%ba%d1%82%d0%be%d1%80-%d0%b8%d0%b7%d0%be%d0%b1%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d0%b9-%d0%bd%d0%b0-cropper-js","status":"publish","type":"post","link":"https:\/\/kb.astrocroc.com\/?p=240","title":{"rendered":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 cropper.js"},"content":{"rendered":"\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c web-part, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u044b<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\" data-line=\"\">&lt;script src=&quot;\/_layouts\/15\/cropper\/cropper.js&quot;&gt;&lt;\/script&gt;\n&lt;link href=&quot;\/_layouts\/15\/cropper\/cropper.css&quot; rel=&quot;stylesheet&quot; \/&gt;\n&lt;script src=&quot;\/_layouts\/15\/cropper\/jquery-cropper.js&quot;&gt;&lt;\/script&gt;\n\n&lt;div class=&quot;form-ui ui blue segment&quot;&gt;\n    &lt;span class=&quot;header&quot;&gt;\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b&lt;\/span&gt;\n    &lt;div class=&quot;form-row flex&quot;&gt;\n        &lt;div class=&quot;form-item&quot;&gt;\n            &lt;span class=&quot;title-ui&quot;&gt;X&lt;\/span&gt;\n            &lt;asp:TextBox ID=&quot;_posX&quot; CssClass=&quot;form-input&quot; runat=&quot;server&quot; style=&quot;width: 50px;&quot;&gt;&lt;\/asp:TextBox&gt;\n        &lt;\/div&gt;  \n        &lt;div class=&quot;form-item&quot;&gt;\n            &lt;span class=&quot;title-ui&quot;&gt;Y&lt;\/span&gt;\n            &lt;asp:TextBox ID=&quot;_posY&quot; CssClass=&quot;form-input&quot; runat=&quot;server&quot; style=&quot;width: 50px;&quot;&gt;&lt;\/asp:TextBox&gt;\n        &lt;\/div&gt; \n        &lt;div class=&quot;form-item&quot;&gt;\n            &lt;span class=&quot;title-ui&quot;&gt;Width&lt;\/span&gt;\n            &lt;asp:TextBox ID=&quot;_width&quot; CssClass=&quot;form-input&quot; runat=&quot;server&quot; style=&quot;width: 50px;&quot;&gt;&lt;\/asp:TextBox&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;\n            &lt;span class=&quot;title-ui&quot;&gt;Height&lt;\/span&gt;\n            &lt;asp:TextBox ID=&quot;_height&quot; CssClass=&quot;form-input&quot; runat=&quot;server&quot; style=&quot;width: 50px;&quot;&gt;&lt;\/asp:TextBox&gt;\n        &lt;\/div&gt; \n        &lt;div class=&quot;form-item&quot;&gt;\n            &lt;span class=&quot;title-ui&quot;&gt;Rotate&lt;\/span&gt;\n            &lt;asp:TextBox ID=&quot;_rotate&quot; CssClass=&quot;form-input&quot; runat=&quot;server&quot; style=&quot;width: 50px;&quot;&gt;&lt;\/asp:TextBox&gt;\n        &lt;\/div&gt; \n        &lt;div class=&quot;form-item&quot;&gt;\n            &lt;span class=&quot;title-ui&quot;&gt;ScaleX&lt;\/span&gt;\n            &lt;asp:TextBox ID=&quot;_scaleX&quot; CssClass=&quot;form-input&quot; runat=&quot;server&quot; style=&quot;width: 50px;&quot;&gt;&lt;\/asp:TextBox&gt;\n        &lt;\/div&gt; \n        &lt;div class=&quot;form-item&quot;&gt;\n            &lt;span class=&quot;title-ui&quot;&gt;ScaleY&lt;\/span&gt;\n            &lt;asp:TextBox ID=&quot;_scaleY&quot; CssClass=&quot;form-input&quot; runat=&quot;server&quot; style=&quot;width: 50px;&quot;&gt;&lt;\/asp:TextBox&gt;\n        &lt;\/div&gt; \n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;span class=&quot;title-ui&quot;&gt;\u0421\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d&lt;\/span&gt;\n            &lt;asp:RadioButtonList CssClass=&quot;aspect-ratio&quot; ID=&quot;_aspectRatio&quot; runat=&quot;server&quot; RepeatDirection=&quot;Horizontal&quot;&gt;\n                &lt;asp:ListItem Value=&quot;1&quot; Selected=&quot;True&quot;&gt;1:1&lt;\/asp:ListItem&gt;\n                &lt;asp:ListItem Value=&quot;1.7777777777777777&quot;&gt;16:9&lt;\/asp:ListItem&gt;\n                &lt;asp:ListItem Value=&quot;1.3333333333333333&quot;&gt;4:3&lt;\/asp:ListItem&gt;\n                &lt;asp:ListItem Value=&quot;0.6666666666666666&quot;&gt;2:3&lt;\/asp:ListItem&gt;\n                &lt;asp:ListItem Value=&quot;NaN&quot;&gt;\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439&lt;\/asp:ListItem&gt;\n            &lt;\/asp:RadioButtonList&gt;\n        &lt;\/div&gt;         \n    &lt;\/div&gt; \n    &lt;div class=&quot;form-row flex&quot;&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;input type=&quot;file&quot; id=&quot;_inputImage&quot; name=&quot;file&quot; class=&quot;form-file-upload&quot; accept=&quot;.jpg,.jpeg,.png,.gif,.bmp,.tiff&quot;&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;zoom&quot; data-option=&quot;0.1&quot; title=&quot;\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-magnifying-glass-plus&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt; \n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;zoom&quot; data-option=&quot;-0.1&quot; title=&quot;\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-magnifying-glass-minus&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;move&quot; data-option=&quot;-10&quot; data-second-option=&quot;0&quot; title=&quot;\u041f\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0432\u043b\u0435\u0432\u043e&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-arrow-left&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt; \n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;move&quot; data-option=&quot;10&quot; data-second-option=&quot;0&quot; title=&quot;\u041f\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0432\u043f\u0440\u0430\u0432\u043e&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-arrow-right&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;move&quot; data-option=&quot;0&quot; data-second-option=&quot;-10&quot; title=&quot;\u041f\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0432\u0432\u0435\u0440\u0445&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-arrow-up&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt; \n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;move&quot; data-option=&quot;0&quot; data-second-option=&quot;10&quot; title=&quot;\u041f\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0432\u043d\u0438\u0437&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-arrow-down&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;rotate&quot; data-option=&quot;-45&quot; title=&quot;\u0412\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043b\u0435\u0432\u043e&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-rotate-left&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;rotate&quot; data-option=&quot;45&quot; title=&quot;\u0412\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043f\u0440\u0430\u0432\u043e&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-rotate-right&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;scaleX&quot; data-option=&quot;-1&quot; title=&quot;\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-arrows-left-right&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;scaleY&quot; data-option=&quot;-1&quot; title=&quot;\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-arrows-up-down&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;reset&quot; title=&quot;\u0421\u0431\u0440\u043e\u0441&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-rotate&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;  \n            &lt;button class=&quot;action-btn&quot; type=&quot;button&quot; data-method=&quot;getCroppedCanvas&quot; data-option=&quot;{ &#039;maxWidth&#039;: 4096, &#039;maxHeight&#039;: 4096 }&quot; title=&quot;\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c&quot;&gt;\n                &lt;i class=&quot;fa-solid fa-check&quot;&gt;&lt;\/i&gt;\n            &lt;\/button&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;form-item&quot;&gt;              \n            &lt;a class=&quot;action-btn&quot; id=&quot;download&quot; href=&quot;\/&quot; title=&quot;\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c&quot; style=&quot;display:none;&quot; &gt;&lt;i class=&quot;fa-solid fa-download&quot;&gt;&lt;\/i&gt;&lt;\/a&gt;\n        &lt;\/div&gt; \n    &lt;\/div&gt;\n&lt;\/div&gt;\n\n&lt;div&gt;\n    &lt;asp:Image ID=&quot;_image&quot; runat=&quot;server&quot; \/&gt;\n&lt;\/div&gt;<\/code><\/pre>\n\n\n\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u0434 \u0432 code behind <\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-cs\" data-line=\"\">private SPSite oSite;\nprivate SPWeb oWeb;\nprivate string imgURL;\n\nprotected void Page_Load(object sender, EventArgs e)\n{\n    oSite = SPContext.Current.Site;\n    oWeb = SPContext.Current.Web;\n    _image.CssClass = &quot;cropper&quot;;\n\n    if (Page.Request.Params[&quot;source&quot;] != null)\n    {\n        imgURL = Page.Request.Params[&quot;source&quot;];                \n        _image.ImageUrl = imgURL;\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c JS<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\" data-line=\"\">&lt;script language=&quot;javascript&quot; type=&quot;text\/javascript&quot;&gt;\n    $(document).ready(function() {  \n        \n        $(&quot;div[class=&#039;ms-cui-topBar2&#039;]&quot;).hide();\n        $(&quot;table[class=&#039;ms-webpartPage-root&#039;]&quot;).css(&quot;border-spacing&quot;, &quot;0&quot;);\n        $(&quot;.ms-webpartPage-root&quot;).css(&quot;border-spacing&quot;, &quot;0&quot;);\n\n        var URL = window.URL || window.webkitURL;   \n        \n        var $image = $(&#039;.cropper&#039;);\n        var $download = $(&#039;#download&#039;);\n        var $inputImage = $(&quot;input[id$=&#039;_inputImage&#039;]&quot;);\n        $image.hide();\n        \n        setTimeout(InitCropper, 100);\n        \n        function InitCropper()\n        {\n            $image.show();\n        \n            var $dataX = $(&quot;input[id$=&#039;posX&#039;]&quot;);\n            $dataX.val($image.width());         \n            var $dataY = $(&quot;input[id$=&#039;posY&#039;]&quot;);\n            $dataY.val($image.height());    \n            var $dataHeight = $(&quot;input[id$=&#039;height&#039;]&quot;);\n            $dataHeight.val($image.height());\n            var $dataWidth = $(&quot;input[id$=&#039;width&#039;]&quot;);\n            $dataWidth.val($image.width());\n            var $dataRotate = $(&quot;input[id$=&#039;rotate&#039;]&quot;);\n            $dataRotate.val(&quot;0&quot;);\n            var $dataScaleX = $(&quot;input[id$=&#039;scaleX&#039;]&quot;);\n            $dataScaleX.val(&quot;0&quot;);\n            var $dataScaleY = $(&quot;input[id$=&#039;scaleY&#039;]&quot;);\n            $dataScaleY.val(&quot;0&quot;);\n            var options = {\n                aspectRatio: 1 \/ 1,\n                preview: &#039;.img-preview&#039;,                \n                \n                \/\/data:{ \/\/define cropbox size\n                  \/\/width: 200,\n                  \/\/height:  90,\n                \/\/},\n                crop: function (e) {\n                    $dataX.val(Math.round(e.detail.x));\n                    $dataY.val(Math.round(e.detail.y));\n                    $dataHeight.val(Math.round(e.detail.height));\n                    $dataWidth.val(Math.round(e.detail.width));\n                    \/\/$dataHeight.val(200);\n                    \/\/$dataWidth.val(200);\n                    $dataRotate.val(e.detail.rotate);\n                    $dataScaleX.val(e.detail.scaleX);\n                    $dataScaleY.val(e.detail.scaleY);\n                }\n            };\n            var $aspectRatio = $(&#039;.aspect-ratio&#039;);\n            \n            var $actionBtn = $(&#039;.action-btn&#039;);\n            \n            var originalImageURL = $image.attr(&#039;src&#039;);\n            var uploadedImageName = &#039;cropped.jpg&#039;;\n            var uploadedImageType = &#039;image\/jpeg&#039;;\n            var uploadedImageURL;\n            \/*\n            $image.cropper({\n                \/\/aspectRatio: 16 \/ 9,\n                crop: function(e) {\n                    $dataX.val(Math.round(e.detail.x));\n                    $dataY.val(Math.round(e.detail.y));\n                    $dataHeight.val(Math.round(e.detail.height));\n                    $dataWidth.val(Math.round(e.detail.width));\n                    $dataRotate.val(e.detail.rotate);\n                    $dataScaleX.val(e.detail.scaleX);\n                    $dataScaleY.val(e.detail.scaleY);           \n                }\n            });\n            *\/\n            \/\/ Get the Cropper.js instance after initialized\n            var cropper = $image.data(&#039;cropper&#039;);\n            \n            \/\/ Cropper\n            $image.on({\n                ready: function (e) {\n                    \/\/console.log(e.type);\n                },\n                cropstart: function (e) {\n                    \/\/console.log(e.type, e.detail.action);\n                },\n                cropmove: function (e) {\n                    \/\/console.log(e.type, e.detail.action);\n                },\n                cropend: function (e) {\n                    \/\/console.log(e.type, e.detail.action);\n                },\n                crop: function (e) {\n                    \/\/console.log(e.type);\n                },\n                zoom: function (e) {\n                    \/\/console.log(e.type, e.detail.ratio);\n                }\n            }).cropper(options);\n            \n            \/\/ \u0421\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\n            $aspectRatio.on(&#039;change&#039;, &#039;input&#039;, function () {\n                var $this = $(this);\n                \/\/var name = $this.attr(&#039;name&#039;);\n                \/\/var type = $this.prop(&#039;type&#039;);\n                var cropBoxData;\n                var canvasData;\n                \n                if (!$image.data(&#039;cropper&#039;)) {\n                    return;\n                }\n                \/*\n                if (type === &#039;checkbox&#039;) {\n                    options[name] = $this.prop(&#039;checked&#039;);\n                    cropBoxData = $image.cropper(&#039;getCropBoxData&#039;);\n                    canvasData = $image.cropper(&#039;getCanvasData&#039;);\n                    \n                    options.ready = function () {\n                        $image.cropper(&#039;setCropBoxData&#039;, cropBoxData);\n                        $image.cropper(&#039;setCanvasData&#039;, canvasData);\n                    };\n                } \n                else *\/\n                \/\/if (type === &#039;radio&#039;) \n                \/\/{\n                options[&quot;aspectRatio&quot;] = $this.val();\n                \/\/}\n                \n                $image.cropper(&#039;destroy&#039;).cropper(options);\n            });\n            \n            \/\/ Download\n            if (typeof $download[0].download === &#039;undefined&#039;) {\n                $download.addClass(&#039;disabled&#039;);\n            }\n            \n            \/\/ \u041a\u043d\u043e\u043f\u043a\u0438\n            $actionBtn.click(function() {\n                var $this = $(this);\n                var data = $this.data();\n                var cropper = $image.data(&#039;cropper&#039;);\n                var cropped;\n                var $target;\n                var result;\n                \n                if ($this.prop(&#039;disabled&#039;) || $this.hasClass(&#039;disabled&#039;)) {\n                    return;\n                }\n                \n                if (cropper &amp;&amp; data.method) {\n                    data = $.extend({}, data); \/\/ Clone a new one\n                \n                    if (typeof data.target !== &#039;undefined&#039;) {\n                        $target = $(data.target);\n                \n                        if (typeof data.option === &#039;undefined&#039;) {\n                            try \n                            {\n                                data.option = JSON.parse($target.val());\n                            } catch (e) \n                            {\n                                console.log(e.message);\n                            }\n                        }\n                    }\n                \n                    cropped = cropper.cropped;\n                \n                    switch (data.method) \n                    {\n                        case &#039;rotate&#039;:\n                            if (cropped &amp;&amp; options.viewMode &gt; 0) \n                            {\n                                $image.cropper(&#039;clear&#039;);\n                            }\n                \n                        break;\n                \n                        case &#039;getCroppedCanvas&#039;:\n                            if (uploadedImageType === &#039;image\/jpeg&#039;) \n                            {\n                                if (!data.option) \n                                {\n                                    data.option = {};\n                                }\n                \n                                data.option.fillColor = &#039;#fff&#039;;\n                            }\n                \n                        break;\n                    }\n                \n                    result = $image.cropper(data.method, data.option, data.secondOption);\n                \n                    switch (data.method) {\n                        case &#039;rotate&#039;:\n                        if (cropped &amp;&amp; options.viewMode &gt; 0) \n                        {\n                            $image.cropper(&#039;crop&#039;);\n                        }\n                \n                        break;\n                \n                        case &#039;scaleX&#039;:\n                        case &#039;scaleY&#039;:\n                        $(this).data(&#039;option&#039;, -data.option);\n                         break;\n                \n                        case &#039;getCroppedCanvas&#039;:\n                        if (result) \n                        {\n                            \/\/console.log(result.toDataURL(uploadedImageType));\n                            \/\/window.open(result.toDataURL(uploadedImageType), &#039;_blank&#039;).focus();\n                            $download.attr(&#039;href&#039;, result.toDataURL(uploadedImageType));\n                            $download.css(&quot;display&quot;, &quot;block&quot;)\n                            \/\/ Bootstrap&#039;s Modal\n                            \/\/$(&#039;#getCroppedCanvasModal&#039;).modal().find(&#039;.modal-body&#039;).html(result);\n                \n                            if (!$download.hasClass(&#039;disabled&#039;)) \n                            {\n                                download.download = uploadedImageName;\n                                $download.attr(&#039;href&#039;, result.toDataURL(uploadedImageType));\n                            }\n                            \n                        }\n                \n                        break;\n                \n                        case &#039;destroy&#039;:\n                            if (uploadedImageURL) \n                            {\n                                URL.revokeObjectURL(uploadedImageURL);\n                                uploadedImageURL = &#039;&#039;;\n                                $image.attr(&#039;src&#039;, originalImageURL);\n                            }\n                \n                        break;\n                    }\n                \n                    if ($.isPlainObject(result) &amp;&amp; $target) \n                    {\n                        try \n                        {\n                            $target.val(JSON.stringify(result));\n                        } \n                        catch (e) \n                        {\n                            console.log(e.message);\n                        }\n                    }\n                }\n            });\n            \n            \/\/ Keyboard\n            $(document.body).on(&#039;keydown&#039;, function (e) {\n                if (e.target !== this || !$image.data(&#039;cropper&#039;) || this.scrollTop &gt; 300) \n                {\n                    return;\n                }\n            \n                switch (e.which) {\n                    case 37:\n                        e.preventDefault();\n                        $image.cropper(&#039;move&#039;, -1, 0);\n                        break;\n                \n                    case 38:\n                        e.preventDefault();\n                        $image.cropper(&#039;move&#039;, 0, -1);\n                        break;\n                \n                    case 39:\n                        e.preventDefault();\n                        $image.cropper(&#039;move&#039;, 1, 0);\n                        break;\n                \n                    case 40:\n                        e.preventDefault();\n                        $image.cropper(&#039;move&#039;, 0, 1);\n                        break;\n                }\n            });\n            \n            \/\/ \u0418\u043c\u043f\u043e\u0440\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f           \n            if (URL) \n            {\n                $inputImage.change(function () {\n                    var files = this.files;\n                    var file;\n                \n                    if (!$image.data(&#039;cropper&#039;)) \n                    {\n                        return;\n                    }\n                \n                    if (files &amp;&amp; files.length) \n                    {\n                        file = files[0];\n                \n                        if (\/^image\\\/\\w+$\/.test(file.type)) \n                        {\n                            uploadedImageName = file.name;\n                            uploadedImageType = file.type;\n                \n                            if (uploadedImageURL) \n                            {\n                                URL.revokeObjectURL(uploadedImageURL);\n                            }\n                \n                            uploadedImageURL = URL.createObjectURL(file);\n                            $image.cropper(&#039;destroy&#039;).attr(&#039;src&#039;, uploadedImageURL).cropper(options);\n                            $inputImage.val(&#039;&#039;);\n                            $download.css(&quot;display&quot;, &quot;none&quot;)\n                        } \n                        else \n                        {\n                            window.alert(&#039;\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435 \u0444\u0430\u0439\u043b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c&#039;);\n                        }\n                    }\n                });\n            } \n            else \n            {\n                $inputImage.prop(&#039;disabled&#039;, true).parent().addClass(&#039;disabled&#039;);\n            }\n        }           \n            \n    });\n&lt;\/script&gt;\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c web-part, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u0434 \u0432 code behind \u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c JS<\/p>\n","protected":false},"author":1,"featured_media":241,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,11,3],"tags":[47,28,33],"class_list":["post-240","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","category-sharepoint","category-web","tag-image-editor","tag-javascript","tag-sharepoint"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=\/wp\/v2\/posts\/240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=240"}],"version-history":[{"count":1,"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=\/wp\/v2\/posts\/240\/revisions"}],"predecessor-version":[{"id":242,"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=\/wp\/v2\/posts\/240\/revisions\/242"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=\/wp\/v2\/media\/241"}],"wp:attachment":[{"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kb.astrocroc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}