/** * @fileOverview * * 添加和管理资源标签 * * @author: techird * @copyright: Baidu FEX, 2014 */ KityMinder.registerUI('ribbon/idea/resource', function(minder) { var $commandbuttonset = minder.getUI('widget/commandbuttonset'); var $tabs = minder.getUI('ribbon/tabs'); var $resourcePanel = new FUI.LabelPanel({ label: minder.getLang('panels.resource'), id: 'resource-panel' }).appendTo($tabs.idea); var $addInput = new FUI.Input().appendTo($resourcePanel); $addInput.getElement().type = 'text'; var $addButton = new FUI.Button({ label: '添加' }).appendTo($resourcePanel); var $resourceDrop = new FUI.DropPanel().appendTo($resourcePanel); var $dropContainer = $($resourceDrop.getPanelElement()); var $ul = $('').addClass('resource-list').appendTo($dropContainer); var $list = []; function addResource() { var resource = $addInput.getValue(); var origin = minder.queryCommandValue('resource'); if (/\S/.test(resource)) { if (!~origin.indexOf(resource)) origin.push(resource); origin.sort(); minder.execCommand('resource', origin); } $addInput.setValue(null); update(); $addInput.focus(); } $addInput.on('inputcomplete', function(e) { addResource(); }); $addButton.on('click', addResource); $dropContainer.delegate('input[type=checkbox]', 'change', function() { minder.execCommand('resource', $dropContainer.find('input[type=checkbox]:checked').map(function(index, chk) { return $(chk).data('resource'); }).toArray()); update(); }); function hash(resource, used) { return [resource.join(','), used.join(',')].join(';'); } function changed(resource, used) { var currentHash = hash(resource, used); if (currentHash == changed.lastHash) return false; changed.lastHash = currentHash; return true; } function update() { var resource = minder.queryCommandValue('resource'); var used = minder.getUsedResource(); used.sort(); switch (minder.queryCommandState('resource')) { case 0: $addInput.enable(); $addButton.enable(); $resourceDrop.enable(); $ul.find('input[type=checkbox]').removeAttr('disabled'); break; case -1: $addInput.disable(); $addButton.disable(); $resourceDrop.disable(); $ul.find('input[type=checkbox]').attr('disabled', true); break; } if (!changed(resource, used)) return; var delta = used.length - $ul.children().length; while (delta--) $ul.append('
  • '); while (++delta) $ul.children().first().remove(); used.forEach(function(name, index) { var $li = $ul.children().eq(index); var $label = $li.find('label'); var $chk = $label.find('input'); var $span = $label.find('span'); $chk.data('resource', name); $chk.prop('checked', ~resource.indexOf(name)); $span.text(name); var color = minder.getResourceColor(name); $li.css({ color: color.dec('l', 60).toString(), backgroundColor: ~resource.indexOf(name) ? color : color.dec('a', 0.85).toRGBA() }); }); } minder.on('interactchange', update); return $resourcePanel; });