1
1
/*!
2
2
* ====================================================
3
- * kityminder-editor - v1.0.51 - 2016-01-22
3
+ * kityminder-editor - v1.0.51 - 2016-05-09
4
4
* https://github.com/fex-team/kityminder-editor
5
5
* GitHub: https://github.com/fex-team/kityminder-editor
6
6
* Copyright (c) 2016 ; Licensed
@@ -427,7 +427,7 @@ _p[7] = {
427
427
/**
428
428
* @fileOverview
429
429
*
430
- * 用于拖拽节点是屏蔽键盘事件
430
+ * 用于拖拽节点时屏蔽键盘事件
431
431
*
432
432
* @author : techird
433
433
* @copyright : Baidu FEX, 2014
@@ -454,7 +454,6 @@ _p[8] = {
454
454
} ) ;
455
455
}
456
456
var downX , downY ;
457
- var editorRect ;
458
457
var MOUSE_HAS_DOWN = 0 ;
459
458
var MOUSE_HAS_UP = 1 ;
460
459
var flag = MOUSE_HAS_UP ;
@@ -463,6 +462,7 @@ _p[8] = {
463
462
var frame ;
464
463
function move ( direction , speed ) {
465
464
if ( ! direction ) {
465
+ freeHorizen = freeVirtical = false ;
466
466
frame && kity . releaseFrame ( frame ) ;
467
467
frame = null ;
468
468
return ;
@@ -513,42 +513,40 @@ _p[8] = {
513
513
downY = e . originEvent . clientY ;
514
514
maxX = minder . getPaper ( ) . container . clientWidth ;
515
515
maxY = minder . getPaper ( ) . container . clientHeight ;
516
- editorRect = minder . getPaper ( ) . container . getBoundingClientRect ( ) ;
517
516
} ) ;
518
517
minder . on ( "mousemove" , function ( e ) {
519
- if ( flag == MOUSE_HAS_DOWN && minder . getSelectedNode ( ) && ( Math . abs ( downX - e . originEvent . clientX ) > 10 || Math . abs ( downY - e . originEvent . clientY ) > 10 ) ) {
520
- if ( fsm . state ( ) === "drag" ) {
521
- osx = e . originEvent . clientX ;
522
- osy = e . originEvent . clientY - editorRect . top ;
523
- if ( osx < 10 ) {
524
- move ( "right" , 10 - osx ) ;
525
- } else if ( osx > maxX - 10 ) {
526
- move ( "left" , 10 + osx - maxX ) ;
527
- } else {
528
- freeHorizen = true ;
529
- }
530
- if ( osy < 10 ) {
531
- move ( "bottom" , osy ) ;
532
- } else if ( osy > maxY - 10 ) {
533
- move ( "top" , 10 + osy - maxY ) ;
534
- } else {
535
- freeVirtical = true ;
536
- }
537
- if ( freeHorizen && freeVirtical ) {
538
- freeHorizen = freeVirtical = false ;
539
- move ( false ) ;
540
- }
518
+ if ( fsm . state ( ) === "drag" && flag == MOUSE_HAS_DOWN && minder . getSelectedNode ( ) && ( Math . abs ( downX - e . originEvent . clientX ) > 10 || Math . abs ( downY - e . originEvent . clientY ) > 10 ) ) {
519
+ osx = e . originEvent . offsetX ;
520
+ osy = e . originEvent . offsetY ;
521
+ if ( osx < 10 ) {
522
+ move ( "right" , 10 - osx ) ;
523
+ } else if ( osx > maxX - 10 ) {
524
+ move ( "left" , 10 + osx - maxX ) ;
541
525
} else {
542
- if ( fsm . state ( ) == "hotbox" ) {
543
- hotbox . active ( Hotbox . STATE_IDLE ) ;
544
- }
545
- return fsm . jump ( "drag" , "user-drag" ) ;
526
+ freeHorizen = true ;
527
+ }
528
+ if ( osy < 10 ) {
529
+ move ( "bottom" , osy ) ;
530
+ } else if ( osy > maxY - 10 ) {
531
+ move ( "top" , 10 + osy - maxY ) ;
532
+ } else {
533
+ freeVirtical = true ;
534
+ }
535
+ if ( freeHorizen && freeVirtical ) {
536
+ move ( false ) ;
546
537
}
547
538
}
539
+ if ( fsm . state ( ) != "drag" && flag == MOUSE_HAS_DOWN && minder . getSelectedNode ( ) && ( Math . abs ( downX - e . originEvent . clientX ) > 10 || Math . abs ( downY - e . originEvent . clientY ) > 10 ) ) {
540
+ if ( fsm . state ( ) == "hotbox" ) {
541
+ hotbox . active ( Hotbox . STATE_IDLE ) ;
542
+ }
543
+ return fsm . jump ( "drag" , "user-drag" ) ;
544
+ }
548
545
} ) ;
549
546
document . body . onmouseup = function ( e ) {
550
547
flag = MOUSE_HAS_UP ;
551
548
if ( fsm . state ( ) == "drag" ) {
549
+ move ( false ) ;
552
550
return fsm . jump ( "normal" , "drag-finish" ) ;
553
551
}
554
552
} ;
@@ -1171,6 +1169,12 @@ _p[12] = {
1171
1169
var node = minder . getSelectedNode ( ) ;
1172
1170
textNodes = commitInputText ( textNodes ) ;
1173
1171
commitInputNode ( node , textNodes ) ;
1172
+ if ( node . type == "root" ) {
1173
+ var rootText = minder . getRoot ( ) . getText ( ) ;
1174
+ minder . fire ( "initChangeRoot" , {
1175
+ text : rootText
1176
+ } ) ;
1177
+ }
1174
1178
}
1175
1179
function exitInputMode ( ) {
1176
1180
receiverElement . classList . remove ( "input" ) ;
@@ -2202,7 +2206,7 @@ angular.module('kityminderEditor').run(['$templateCache', function($templateCach
2202
2206
2203
2207
2204
2208
$templateCache . put ( 'ui/dialog/image/image.tpl.html' ,
2205
- "<div class=\"modal-header\"><h3 class=\"modal-title\">图片</h3></div><div class=\"modal-body\"><tabset><tab heading=\"图片搜索\"><form class=\"form-inline\"><div class=\"form-group\"><label for=\"search-keyword\">关键词:</label><input type=\"text\" class=\"form-control\" ng-model=\"data.searchKeyword2\" id=\"search-keyword\" placeholder=\"请输入搜索的关键词\"></div><button class=\"btn btn-primary\" ng-click=\"searchImage()\">百度一下</button></form><div class=\"search-result\" id=\"search-result\"><ul><li ng-repeat=\"image in list\" id=\"{{ 'img-item' + $index }}\" ng-class=\"{'selected' : isSelected}\" ng-click=\"selectImage($event)\"><img id=\"{{ 'img-' + $index }}\" ng-src=\"{{ image.src || '' }}\" alt=\"{{ image.title }}\" onerror=\"this.parentNode.removeChild(this)\"> <span>{{ image.title }}</span></li></ul></div></tab><tab heading=\"插入图片\" active=\"true\"><form><div class=\"form-group\" ng-class=\"{true: 'has-success', false: 'has-error'}[urlPassed]\"><label for=\"image-url\">链接地址:</label><input type=\"text\" class=\"form-control\" ng-model=\"data.url\" ng-blur=\"urlPassed = data.R_URL.test(data.url)\" ng-focus=\"this.value = data.url\" ng-keydown=\"shortCut($event)\" id=\"image-url\" placeholder=\"必填:以 http(s):// 开头\"></div><div class=\"form-group\" ng-class=\"{'has-success' : titlePassed}\"><label for=\"image-title\">提示文本:</label><input type=\"text\" class=\"form-control\" ng-model=\"data.title\" ng-blur=\"titlePassed = true\" id=\"image-title\" placeholder=\"选填:鼠标在图片上悬停时提示的文本\"></div><div class=\"form-group\"><label for=\"image-preview\">图片预览:</label><img class=\"image-preview\" id=\"image-preview\" ng-src=\"{{ data.url }}\" alt=\"{{ data.title }}\"></div></form></tab></tabset></div><div class=\"modal-footer\"><button class=\"btn btn-primary\" ng-click=\"ok()\">确定</button> <button class=\"btn btn-warning\" ng-click=\"cancel()\">取消</button></div>"
2209
+ "<div class=\"modal-header\"><h3 class=\"modal-title\">图片</h3></div><div class=\"modal-body\"><tabset><tab heading=\"图片搜索\"><form class=\"form-inline\"><div class=\"form-group\"><label for=\"search-keyword\">关键词:</label><input type=\"text\" class=\"form-control\" ng-model=\"data.searchKeyword2\" id=\"search-keyword\" placeholder=\"请输入搜索的关键词\"></div><button class=\"btn btn-primary\" ng-click=\"searchImage()\">百度一下</button></form><div class=\"search-result\" id=\"search-result\"><ul><li ng-repeat=\"image in list\" id=\"{{ 'img-item' + $index }}\" ng-class=\"{'selected' : isSelected}\" ng-click=\"selectImage($event)\"><img id=\"{{ 'img-' + $index }}\" ng-src=\"{{ image.src || '' }}\" alt=\"{{ image.title }}\" onerror=\"this.parentNode.removeChild(this)\"> <span>{{ image.title }}</span></li></ul></div></tab><tab heading=\"插入图片地址\"><form><div class=\"form-group\" ng-class=\"{true: 'has-success', false: 'has-error'}[urlPassed]\"><label for=\"image-url\">链接地址:</label><input type=\"text\" class=\"form-control\" ng-model=\"data.url\" ng-blur=\"urlPassed = data.R_URL.test(data.url)\" ng-focus=\"this.value = data.url\" ng-keydown=\"shortCut($event)\" id=\"image-url\" placeholder=\"必填:以 http(s):// 开头\"></div><div class=\"form-group\" ng-class=\"{'has-success' : titlePassed}\"><label for=\"image-title\">提示文本:</label><input type=\"text\" class=\"form-control\" ng-model=\"data.title\" ng-blur=\"titlePassed = true\" id=\"image-title\" placeholder=\"选填:鼠标在图片上悬停时提示的文本\"></div><div class=\"form-group\"><label for=\"image-preview\">图片预览:</label><img class=\"image-preview\" id=\"image-preview\" ng-src=\"{{ data.url }}\" alt=\"{{ data.title }}\"></div></form></tab><tab heading=\"上传图片\" active=\"true\"><form><div class=\"form-group\"><input type=\"file\" name=\"upload-image\" id=\"upload-image\" class=\"upload-image\" onchange=\"angular.element(this).scope().uploadImage()\"><label for=\"upload-image\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"17\" viewbox=\"0 0 20 17\"><path d=\"M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z\"></svg> <span>选择文件…</span></label></div><div class=\"form-group\" ng-class=\"{'has-success' : titlePassed}\"><label for=\"image-title\">提示文本:</label><input type=\"text\" class=\"form-control\" ng-model=\"data.title\" ng-blur=\"titlePassed = true\" id=\"image-title\" placeholder=\"选填:鼠标在图片上悬停时提示的文本\"></div><div class=\"form-group\"><label for=\"image-preview\">图片预览:</label><img class=\"image-preview\" id=\"image-preview\" ng-src=\"{{ data.url }}\" alt=\"{{ data.title }}\"></div></form></tab></tabset></div><div class=\"modal-footer\"><button class=\"btn btn-primary\" ng-click=\"ok()\">确定</button> <button class=\"btn btn-warning\" ng-click=\"cancel()\">取消</button></div>"
2206
2210
) ;
2207
2211
2208
2212
} ] ) ;
@@ -3114,6 +3118,17 @@ angular.module('kityminderEditor')
3114
3118
$scope . data . title = targetImg . attr ( 'alt' ) ;
3115
3119
} ;
3116
3120
3121
+ // 自动上传图片,后端需要直接返回图片 URL
3122
+ $scope . uploadImage = function ( ) {
3123
+ var fileInput = $ ( '#upload-image' ) ;
3124
+ if ( / ^ .* \. ( j p g | J P G | j p e g | J P E G | g i f | G I F | p n g | P N G ) $ / . test ( fileInput . val ( ) ) ) {
3125
+ var file = fileInput [ 0 ] . files [ 0 ] ;
3126
+ uploadFile ( $scope , file ) ;
3127
+ } else {
3128
+ alert ( "后缀只能是 jpg、gif 及 png" ) ;
3129
+ }
3130
+ }
3131
+
3117
3132
$scope . shortCut = function ( e ) {
3118
3133
e . stopPropagation ( ) ;
3119
3134
@@ -3134,8 +3149,11 @@ angular.module('kityminderEditor')
3134
3149
$scope . urlPassed = false ;
3135
3150
3136
3151
var $imageUrl = $ ( '#image-url' ) ;
3137
- $imageUrl . focus ( ) ;
3138
- $imageUrl [ 0 ] . setSelectionRange ( 0 , $scope . data . url . length ) ;
3152
+ if ( $imageUrl ) {
3153
+ $imageUrl . focus ( ) ;
3154
+ $imageUrl [ 0 ] . setSelectionRange ( 0 , $scope . data . url . length ) ;
3155
+ }
3156
+
3139
3157
}
3140
3158
3141
3159
editor . receiver . selectAll ( ) ;
@@ -3146,13 +3164,28 @@ angular.module('kityminderEditor')
3146
3164
editor . receiver . selectAll ( ) ;
3147
3165
} ;
3148
3166
3149
- function getImageData ( ) {
3167
+ function getImageData ( file ) {
3150
3168
var key = $scope . data . searchKeyword2 ;
3151
3169
var currentTime = new Date ( ) ;
3152
3170
var url = 'http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp=result&queryWord=' + key + '&cl=2&lm=-1&ie=utf-8&oe=utf-8&st=-1&ic=0&word=' + key + '&face=0&istype=2&nc=1&pn=60&rn=60&gsm=3c&' + currentTime . getTime ( ) + '=&callback=JSON_CALLBACK' ;
3153
3171
3154
3172
return $http . jsonp ( url ) ;
3155
3173
}
3174
+
3175
+ function uploadFile ( $scope , file ) {
3176
+ var url = '/upload.php' ;
3177
+ var xhr = new XMLHttpRequest ( ) ;
3178
+ var fd = new FormData ( ) ;
3179
+ xhr . open ( "POST" , url , true ) ;
3180
+ xhr . onreadystatechange = function ( ) {
3181
+ if ( xhr . readyState == 4 && xhr . status == 200 ) {
3182
+ $scope . data . url = xhr . responseText ;
3183
+ }
3184
+ } ;
3185
+ fd . append ( "upload_file" , file ) ;
3186
+ xhr . send ( fd ) ;
3187
+
3188
+ }
3156
3189
} ] ) ;
3157
3190
angular . module ( 'kityminderEditor' )
3158
3191
. directive ( 'appendNode' , [ 'commandBinder' , function ( commandBinder ) {
0 commit comments