docs: function(base) {
  				var self = this,
  					fm = this.fm,
  					node = $(base).children('img:first'),
  					dialog = $(base).closest('.ui-dialog'),
  					elfNode = fm.getUI(),
  					dfrd = $.Deferred(),
  					container = $('#elfinder-aviary-container'),
  					init = function(onload) {
  						var getLang = function() {
  								var langMap = {
  									'zh_TW' : 'zh_HANT',
  									'zh_CN' : 'zh_HANS'
  								};
  								return langMap[fm.lang]? langMap[fm.lang] : fm.lang;
  							}, opts;
  							
  						if (!container.length) {
  							container = $('<div id="elfinder-aviary-container" class="ui-front"/>').css({
  								position: 'fixed',
  								top: 0,
  								right: 0,
  								width: '100%',
  								height: $(window).height(),
  								overflow: 'auto'
  							}).hide().appendTo(elfNode.hasClass('elfinder-fullscreen')? elfNode : 'body');
  							// bind switch fullscreen event
  							elfNode.on('resize.'+fm.namespace, function(e, data) {
  								e.preventDefault();
  								e.stopPropagation();
  								data && data.fullscreen && container.appendTo(data.fullscreen === 'on'? elfNode : 'body');
  							});
  							fm.bind('destroy', function() {
  								container.remove();
  							});
  						} else {
  							// always moves to last
  							container.appendTo(container.parent());
  						}
  						node.on('click', launch).data('loading')();
  						opts = {
  							apiKey: self.confObj.apiKey,
  							onSave: function(imageID, newURL) {
  								var ext;
  								featherEditor.showWaitIndicator();
  								ext = newURL.replace(/.+\.([^.]+)$/, '$1');
  								if (node.data('ext') !== ext) {
  									node.closest('.ui-dialog').trigger('changeType', {
  										extention: ext,
  										mime : ext2mime[ext]
  									});
  								}
  								node.on('load error', function() {
  										node.data('loading')(true);
  									})
  									.attr('crossorigin', 'anonymous')
  									.attr('src', newURL)
  									.data('loading')();
  								featherEditor.close();
  							},
  							onLoad: onload || function(){},
  							onClose: function() { 
  								dialog.removeClass(fm.res('class', 'preventback'));
  								fm.toggleMaximize(container, false);
  								$(container).hide();
  							},
  							appendTo: container.get(0),
  							maxSize: 2048,
  							language: getLang()
  						};
  						// trigger event 'editEditorPrepare'
  						self.trigger('Prepare', {
  							node: base,
  							editorObj: Aviary,
  							instance: void(0),
  							opts: opts
  						});
  						featherEditor = new Aviary.Feather(opts);
  						// return editor instance
  						dfrd.resolve(featherEditor);
  						$(base).on('saveAsFail', launch);
  					},
  					launch = function() {
  						dialog.addClass(fm.res('class', 'preventback'));
  						fm.toggleMaximize(container, true);
  						fm.toFront(container);
  						$(container).show();
  						featherEditor.launch({
  							image: node.attr('id'),
  							url: node.attr('src')
  						});
  						node.data('loading')(true);
  					},
  					featherEditor, extraOpts;
  				
  				// load script then init
  				if (typeof Aviary === 'undefined') {
  					fm.loadScript(['https://dme0ih8comzn4.cloudfront.net/imaging/v3/editor.js'], function() {
  						init(launch);
  					}, {loadType: 'tag'});
  				} else {
  					init();
  					launch();
  				}
  				return dfrd;
  			}