resource.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /**
  2. * @fileOverview
  3. *
  4. * 添加和管理资源标签
  5. *
  6. * @author: techird
  7. * @copyright: Baidu FEX, 2014
  8. */
  9. KityMinder.registerUI('ribbon/idea/resource', function(minder) {
  10. var $commandbuttonset = minder.getUI('widget/commandbuttonset');
  11. var $tabs = minder.getUI('ribbon/tabs');
  12. var $resourcePanel = new FUI.LabelPanel({
  13. label: minder.getLang('panels.resource'),
  14. id: 'resource-panel'
  15. }).appendTo($tabs.idea);
  16. var $addInput = new FUI.Input().appendTo($resourcePanel);
  17. $addInput.getElement().type = 'text';
  18. var $addButton = new FUI.Button({
  19. label: '添加'
  20. }).appendTo($resourcePanel);
  21. var $resourceDrop = new FUI.DropPanel().appendTo($resourcePanel);
  22. var $dropContainer = $($resourceDrop.getPanelElement());
  23. var $ul = $('<ul></ul>').addClass('resource-list').appendTo($dropContainer);
  24. var $list = [];
  25. function addResource() {
  26. var resource = $addInput.getValue();
  27. var origin = minder.queryCommandValue('resource');
  28. if (/\S/.test(resource)) {
  29. if (!~origin.indexOf(resource)) origin.push(resource);
  30. origin.sort();
  31. minder.execCommand('resource', origin);
  32. }
  33. $addInput.setValue(null);
  34. update();
  35. $addInput.focus();
  36. }
  37. $addInput.on('inputcomplete', function(e) {
  38. addResource();
  39. });
  40. $addButton.on('click', addResource);
  41. $dropContainer.delegate('input[type=checkbox]', 'change', function() {
  42. minder.execCommand('resource', $dropContainer.find('input[type=checkbox]:checked').map(function(index, chk) {
  43. return $(chk).data('resource');
  44. }).toArray());
  45. update();
  46. });
  47. function hash(resource, used) {
  48. return [resource.join(','), used.join(',')].join(';');
  49. }
  50. function changed(resource, used) {
  51. var currentHash = hash(resource, used);
  52. if (currentHash == changed.lastHash) return false;
  53. changed.lastHash = currentHash;
  54. return true;
  55. }
  56. function update() {
  57. var resource = minder.queryCommandValue('resource');
  58. var used = minder.getUsedResource();
  59. used.sort();
  60. switch (minder.queryCommandState('resource')) {
  61. case 0:
  62. $addInput.enable();
  63. $addButton.enable();
  64. $resourceDrop.enable();
  65. $ul.find('input[type=checkbox]').removeAttr('disabled');
  66. break;
  67. case -1:
  68. $addInput.disable();
  69. $addButton.disable();
  70. $resourceDrop.disable();
  71. $ul.find('input[type=checkbox]').attr('disabled', true);
  72. break;
  73. }
  74. if (!changed(resource, used)) return;
  75. var delta = used.length - $ul.children().length;
  76. while (delta--) $ul.append('<li><label><input type="checkbox" /><span></span></label></li>');
  77. while (++delta) $ul.children().first().remove();
  78. used.forEach(function(name, index) {
  79. var $li = $ul.children().eq(index);
  80. var $label = $li.find('label');
  81. var $chk = $label.find('input');
  82. var $span = $label.find('span');
  83. $chk.data('resource', name);
  84. $chk.prop('checked', ~resource.indexOf(name));
  85. $span.text(name);
  86. var color = minder.getResourceColor(name);
  87. $li.css({
  88. color: color.dec('l', 60).toString(),
  89. backgroundColor: ~resource.indexOf(name) ? color : color.dec('a', 0.85).toRGBA()
  90. });
  91. });
  92. }
  93. minder.on('interactchange', update);
  94. return $resourcePanel;
  95. });