Tabs.hx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package hide.comp;
  2. class Tabs extends Component {
  3. public var currentTab(default, set) : Element;
  4. var header : Element;
  5. public function new(?parent,?el) {
  6. super(parent,el);
  7. element.addClass("hide-tabs");
  8. header = new Element("<div>").addClass("tabs-header").prependTo(element);
  9. syncTabs();
  10. var t = getTabs()[0];
  11. if( t != null ) currentTab = new Element(t);
  12. }
  13. public function createTab( title : String, ?icon : String ) {
  14. var e = new Element('<div class="tab" name="$title">');
  15. if( icon != null ) e.attr("icon",icon);
  16. e.appendTo(element);
  17. syncTabs();
  18. if( currentTab == null )
  19. currentTab = e;
  20. return e;
  21. }
  22. function set_currentTab( e : Element ) {
  23. var index = Std.parseInt(e.attr("index"));
  24. getTabs().hide();
  25. header.children().removeClass("active").filter("[index=" + index + "]").addClass("active");
  26. currentTab = e;
  27. onTabChange(index);
  28. e.show();
  29. return e;
  30. }
  31. public function getTabs() : Element {
  32. return element.children(".tab");
  33. }
  34. public dynamic function onTabChange( index : Int ) {
  35. }
  36. function syncTabs() {
  37. header.html("");
  38. var index = 0;
  39. for( t in getTabs().elements() ) {
  40. var icon = t.attr("icon");
  41. var name = t.attr("name");
  42. var index = index++;
  43. var tab = new Element("<div>").html( (icon != null ? '<div class="fa fa-$icon"></div> ' : '') + (name != null ? name : '') );
  44. t.attr("index", index);
  45. tab.attr("index", index);
  46. tab.appendTo(header);
  47. tab.click(function(_) currentTab = t);
  48. }
  49. if( currentTab != null )
  50. this.currentTab = currentTab;
  51. }
  52. }