/**
* @fileOverview
*
* 插入和管理图片
*
* @author: techird
* @copyright: Baidu FEX, 2014
*/
KityMinder.registerUI('ribbon/idea/image', function(minder) {
var $attachment = minder.getUI('ribbon/idea/attachment');
var $imageButtonMenu = new FUI.ButtonMenu({
id: 'image-button-menu',
text: minder.getLang('ui.image'),
layout: 'bottom',
buttons: [{}, {
label: minder.getLang('ui.image')
}],
menu: {
items: [minder.getLang('ui.removeimage')]
}
}).appendTo($attachment);
$imageButtonMenu.bindCommandState(minder, 'image');
var $imageDialog = new FUI.Dialog({
width: 600,
height: 600,
prompt: true,
className: 'image-dialog',
caption: minder.getLang('ui.image')
}).appendTo(document.getElementById('content-wrapper'));
var $dialogBody = $($imageDialog.getBodyElement());
// writed by yangxiaohu 2014-10-20
var tabs = new FUI.Tabs( {
buttons: [ "图片搜索", "插入图片" ]
} );
$dialogBody.html([
'
',
''
].join(''));
tabs.appendButtonTo( document.getElementById( 'img_buttons') );
tabs.appendPanelTo( document.getElementById( 'img_panels'));
tabs.getPanel(0).getContentElement().innerHTML = ['',
'
',
''
].join('');
tabs.getPanel(1).getContentElement().innerHTML = ['',
'',
'
'].join('');
//the content below is from xujinquan's ueditor
/*搜索图片 */
$G = function ( id ) {
return document.getElementById( id )
};
function SearchImage() {
this.init();
}
SearchImage.prototype = {
lang: {
searchRemind : '请输入搜索关键词',
searchLoading : '图片加载中,请稍后……',
searchRetry : '抱歉,没有找到图片!请重试一次!',
},
data: {
imgUrl: '',
imgTitle: '',
},
init: function () {
this.initEvents();
},
initEvents: function(){
var _this = this;
/* 点击搜索按钮 */
$('#img_searchBtn').on('click', function(){
var key = $G('img_searchTxt').value;
if(key && key != _this.lang.searchRemind) {
_this.getImageData();
}
});
/* 搜索框聚焦 */
$('#img_searchTxt').on('focus', function(){
var key = $G('img_searchTxt').value;
if(key && key == _this.lang.searchRemind) {
$G('img_searchTxt').value = '';
}
});
/* 搜索框回车键搜索 */
$('#img_searchTxt').on('keydown', function(e){
var keyCode = e.keyCode || e.which;
if (keyCode == 13) {
$G('img_searchBtn').click();
return false;
}
});
/* 选中图片 */
$('#img_searchList').on('click', function(e){
var target = e.target || e.srcElement,
$li = $(target).closest('li');
_this.data.imgUrl = $li.find('img').attr('src');
_this.data.imgTitle = $li.find('span').attr('title');
$li.siblings('.selected').removeClass('selected');
$li.addClass('selected');
});
},
/* 改变图片大小 */
scale: function (img, w, h) {
var ow = img.width,
oh = img.height;
if (ow >= oh) {
img.width = w * ow / oh;
img.height = h;
img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
} else {
img.width = w;
img.height = h * oh / ow;
img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
}
},
getImageData: function(){
var _this = this,
key = $G('img_searchTxt').value,
keepOriginName = '1';
url = "http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&st=-1&tn=baiduimagejson&istype=2&rn=3200&fm=index&pv=&word=" + key + "&ie=utf-8&oe=utf-8&keeporiginname=" + keepOriginName + "&" + +new Date;
$G('img_searchListUl').innerHTML = _this.lang.searchLoading;
$.ajax({url : url,
dataType: 'jsonp',
scriptCharset: 'GB18030',
success:function(json){
var list = [];
if(json && json.data) {
for(var i = 0; i < json.data.length; i++) {
if(json.data[i].objURL) {
list.push({
title: json.data[i].fromPageTitleEnc,
src: json.data[i].objURL,
url: json.data[i].fromURL
});
}
}
}
_this.setList(list);
},
error:function(){
$G('img_searchListUl').innerHTML = _this.lang.searchRetry;
}
});
},
/* 添加图片到列表界面上 */
setList: function (list) {
var i, item, p, img, title, _this = this,
listUl = $G('img_searchListUl');
listUl.innerHTML = '';
if(list.length) {
for (i = 0; i < list.length; i++) {
item = document.createElement('li');
img = document.createElement('img');
title = document.createElement('span');
img.setAttribute('src', list[i].src);
title.innerHTML = list[i].title;
item.appendChild(img);
item.appendChild(title);
listUl.appendChild(item);
img.onerror = function() {
$(this).closest('li').remove();
};
}
} else {
listUl.innerHTML = _this.lang.searchRetry;
}
},
getInsertList: function () {
var child,
src,
align = getAlign(),
list = [],
items = $G('img_searchListUl').children;
for(var i = 0; i < items.length; i++) {
child = items[i].firstChild && items[i].firstChild.firstChild;
if(child.tagName && child.tagName.toLowerCase() == 'img' && $(items[i]).hasClass('selected')) {
src = child.src;
list.push({
src: src,
_src: src,
alt: src.substr(src.lastIndexOf('/') + 1),
floatStyle: align
});
}
}
return list;
}
};
var searchImage = new SearchImage();
// the end content writed by yangxiaohu
var $url = $dialogBody.find('.image-url');
var $title = $dialogBody.find('.image-title');
var $preview = $dialogBody.find('.image-preview');
var $errorMsg = $('');
$imageDialog.on('ok', function() {
var index = tabs.getSelectedIndex();
switch(index) {
case 1:
minder.execCommand('image', $url.val(), $title.val());
break;
case 0:
minder.execCommand('image', searchImage.data.imgUrl, searchImage.data.imgTitle);
break;
}
});
$imageDialog.on('open', function() {
var image = minder.queryCommandValue('image');
$url.val(image.url);
$title.val(image.title);
$preview.attr('src', image.url || '');
error(false);
});
function error(value) {
if (value) {
$url.addClass('validate-error');
$errorMsg.text('图片无法加载');
// $ok.disable();
} else {
$url.removeClass('validate-error');
$errorMsg.text('');
// $imageDialog.enable();
}
return value;
}
$url.after($errorMsg);
$url.on('input', function() {
var url = $url.val();
if (/^https?\:\/\/(\w+\.)+\w+/.test(url)) {
$preview.attr('src', url);
error(false);
// $imageDialog.disable();
$preview.addClass('loading');
} else {
error(true);
}
});
$preview.on('load', function() {
error(false);
$preview.removeClass('loading');
}).on('error', function() {
if ($preview.attr('src')) error(true);
$preview.removeClass('loading');
});
$imageButtonMenu.on('buttonclick', function() {
$imageDialog.open();
$url[0].focus();
});
$imageButtonMenu.on('select', function() {
minder.execCommand('removeimage');
});
return $imageButtonMenu;
});