📄 main.js
字号:
var app;function Classbrowser(){ app = this; this.loadData(); this.initializeGui(); this.attachEvents();};Classbrowser.main = function() { new this; };Classbrowser.IMAGE_PATH = application.getAdfPath() + "resources/images/";Classbrowser.FOLDER_OPEN = Classbrowser.IMAGE_PATH + "folder_open.gif";Classbrowser.FOLDER_CLOSED = Classbrowser.IMAGE_PATH + "folder_closed.gif";Classbrowser.CLASS_IMAGE = Classbrowser.IMAGE_PATH + "class.gif";Classbrowser.PROPERTY_IMAGE = Classbrowser.IMAGE_PATH + "property.gif";Classbrowser.FIELD_IMAGE = Classbrowser.IMAGE_PATH + "field.gif";Classbrowser.PUBLIC_METHOD_IMAGE = Classbrowser.IMAGE_PATH + "public_method.gif";Classbrowser.PUBLIC_STATIC_METHOD_IMAGE = Classbrowser.IMAGE_PATH + "public_static_method.gif";Classbrowser.PRIVATE_STATIC_METHOD_IMAGE = Classbrowser.IMAGE_PATH + "private_static_method.gif";Classbrowser.PRIVATE_METHOD_IMAGE = Classbrowser.IMAGE_PATH + "private_method.gif";Classbrowser.PUBLIC_CONSTANT_IMAGE = Classbrowser.IMAGE_PATH + "public_constant.gif";Classbrowser.PRIVATE_CONSTANT_IMAGE = Classbrowser.IMAGE_PATH + "private_constant.gif";Classbrowser.EVENT_IMAGE = Classbrowser.IMAGE_PATH + "event.gif";Classbrowser.CLASS_BIIMAGE = new BiImage(Classbrowser.CLASS_IMAGE);Classbrowser.BLACK_BORDER = new BiBorder(1, "solid", "black");Classbrowser.VERSION = "0.5.3";Classbrowser.AUTHORS = ["Abhinav Pobbati"];Classbrowser.CONTACTS = ["apobbati@gmail.com"];Classbrowser.API_PATH = application.getAdfPath() + "../../docs/apixml/";Classbrowser.API_XML_FILE = Classbrowser.API_PATH + "classtree.xml";Classbrowser.RELEASE_DATE = "1/30/2005";Classbrowser.UPDATE_URL = "http://www.geocities.com/abhinav_coolab/updates.xml";Classbrowser.METHOD = "method";Classbrowser.FIELD = "field";Classbrowser.CONSTANT = "constant";Classbrowser.PROPERTY = "property";Classbrowser.UNIQUE = "unique";Classbrowser.PRIVATE = "private";Classbrowser.PUBLIC = "public";Classbrowser.STATIC = "static";Classbrowser.JSFUNCTION = "function";Classbrowser.SETTER = "set";Classbrowser.GETTER = "get";Classbrowser.BASE_CLASS = "Object";Classbrowser.SELECTED_ROW = "font-weight:bold;";Classbrowser.JSOBJECT = "object";_p = Classbrowser.prototype;_p.ClassListLoaded = false;_p.ClassSearchListLoaded = false;_p.SearchResultsTreeLoaded = false;_p.Classes = {};_p.Dialogs = {};_p.ClassesToSearch = [];_p.ClassNodes = null;_p.XmlDoc = null;_p.SearchTimer = null;_p.CurrentSearchClass = null;_p.SearchClassIndex = 0;// Loads XML////////////////_p.loadData = function(){ BiComponent.prototype._children = BiComponent.prototype._style = BiComponent.prototype._htmlProperties = BiComponent.prototype._htmlAttributes = BiObject.prototype._hashCode = BiObject.prototype._className = BiEventTarget.prototype._listeners = null; this.loadXml(); this.loadClasses();}// Window Events /////////////////////////////////////////////////////////////////////////////////_p.attachEvents = function(){ if(BiBrowserCheck.ie) { document.body.attachEvent("onkeydown", function(e) { switch(event.keyCode) { case 116: event.returnValue = false; } }); window.attachEvent("onbeforeunload", function() { app.unload(); }); } cList.addEventListener("action", function(e) { app.openNewWindow(this.getSelectedItem().getText()); }); searchText.addEventListener("keyup", function(e) { if(e.getKeyCode() == BiKeyboardEvent.ENTER && initSearchButton.getEnabled()) this.search(); }, this); searchText.addEventListener("keyup", function(e) { initSearchButton.setEnabled(this.getText().trim().length > 0); });}// GUI Methods /////////////////////////////////////////////////////////////////////////////////////////_p.initializeGui = function(){ this.initializeTaskbar(); this.initializeList(); this.initializeSearchResultsTree();}// Builds the class list_p.initializeList = function(){ if(this.ClassListLoaded) return; cList.setIconUri(Classbrowser.CLASS_IMAGE); cList.setShowIcon(true); cList.setMultipleSelection(false); cList.setOverflowY("scroll"); cList.addItems(this.getClassListItems()); this.ClassListLoaded = true;};// Builds the search results tree_p.initializeSearchResultsTree = function(){ if(this.SearchResultsTreeLoaded) return; searchResults.setColumnCount(1); searchResults.setColumnNames(["Results"]); searchResults.setOverflowX("hidden"); searchResults.setShowRowHeaders(false); searchResults.setShowHeaders(false); searchResults.setShowGridLines(false); searchResults.getSelectionModel().setMultipleSelection(false); searchResults.getViewManager().getColumnWidth = function(x){return this.getTreeView().getClientWidth();}; searchResults.getDataModel().getHasIcon = function(x,y){return x == 0;}; searchResults.getDataModel().getIconStyle = function() { return "" }; searchResults.getDataModel().getIcon = function(x,y) { var n = this.getNodeAt(y); if(n.getRows().length > 0) return Classbrowser.CLASS_IMAGE; else return app.getIconForProperty(n.memberInfo); } searchResults.getDataModel().getCellText = function(x,y) { var node = this.getNodeAt(y); var memberInfo = node.memberInfo; if(!memberInfo) return node.getData(0); else { if(memberInfo.memberType == Classbrowser.METHOD) return app.getMethodString(node.getParent().getData(0), memberInfo); else return memberInfo.name; } } this.SearchResultsTreeLoaded = true;}_p.getIconForProperty = function(oProp){ if(oProp.memberType == Classbrowser.PROPERTY) return Classbrowser.PROPERTY_IMAGE; if(oProp.memberType == Classbrowser.FIELD) return Classbrowser.FIELD_IMAGE; if(oProp.memberType == Classbrowser.METHOD) { if(oProp.protection == Classbrowser.PUBLIC) return oProp.inheritance == Classbrowser.STATIC ? Classbrowser.PUBLIC_STATIC_METHOD_IMAGE : Classbrowser.PUBLIC_METHOD_IMAGE; else return oProp.inheritance == Classbrowser.STATIC ? Classbrowser.PRIVATE_STATIC_METHOD_IMAGE : Classbrowser.PRIVATE_METHOD_IMAGE; } if(oProp.memberType == Classbrowser.CONSTANT) return oProp.protection == Classbrowser.PUBLIC ? Classbrowser.PUBLIC_CONSTANT_IMAGE : Classbrowser.PRIVATE_CONSTANT_IMAGE;}// Builds the list that allows the user to select custom classes to search_p.initializeSearchClassList = function(){ if(this.ClassSearchListLoaded) return; searchClassList.setShowIcon(true); searchClassList.setIconUri(Classbrowser.CLASS_IMAGE); searchClassList.addItems(this.getClassListItems()); searchClassList.setMultipleSelection(true); searchClassList.getDataModel().getRowStyle = function(y){return app.ClassesToSearch.contains(this.getCellText(0, y)) ? Classbrowser.SELECTED_ROW : "";}; this.ClassSearchListLoaded = true;}// Builds the taskbar_p.initializeTaskbar = function(){ var m = desktopPane.getWindowManager().getWindowsMenu(); var n = new BiMenuItem("Close"); m.add(n, m.getChildren()[3]); n.addEventListener("action", function(e){app.closeActiveWindow();}); taskbar.setContextMenu(desktopPane.getWindowManager().getWindowsMenu()); taskbar.addEventListener("change", this.updateWindowFocus, this); taskbarGroup.addEventListener("change", function(e){try{this.setActiveWindow(taskbar.getSelected().getNextSibling().apiWindow);}catch(ex) {}; },this);}// Returns a BiWindow that holds all the properties of "sClass"_p.openNewWindow = function(sClass){ // Check whether properties for the class can be retrieved if(!this.getClassNode(sClass)) return alert("No information found for " + sClass + "."); // If the window is already created/open, then use it instead of creating a new window var old = this.Classes[sClass] ? this.Classes[sClass].window : null; if(old) { if(!old.getParent()) { taskbar.add(old.tabButton); desktopPane.add(old); } old.tabButton.setChecked(true); desktopPane.getWindowManager().setActiveWindow(old); return old; } // Build the window var w = new BiWindow(sClass); var b = new BiTabButton(sClass, Classbrowser.CLASS_BIIMAGE); var tv = new BiTreeView(); var description = new BiLabel(); var sp = new BiSplitPane("vertical", tv, description); b.apiWindow = w; b.setGroup(taskbarGroup); b.addEventListener("mousedown", this.functions.tabButtonFocusin, b); taskbar.add(b); taskbar.setSelected(b); description.setBorder(Classbrowser.BLACK_BORDER); description.setBackColor("#FFFFFF"); description.setPadding(5); description.setOverflowX("scroll"); description.setOverflowY("scroll"); description.setWrap(true); sp.setLocation(0,0); sp.setRight(0); sp.setBottom(0); sp.setDividerLocation(200); sp.setContinuousLayout(false); tv.setBorder(Classbrowser.BLACK_BORDER); tv.getViewManager().setHighlightSortColumn(false); tv.getViewManager().setIndentColumn(0); tv.getViewManager().setShowRowHeaders(false); tv.getViewManager().setShowHeaders(false); tv.getViewManager().setShowGridLines(false); tv.getViewManager().getColumnWidth = function(x){return this.getTreeView().getClientWidth();}; tv.getSelectionModel().setMultipleSelection(false); tv.getSelectionModel().addEventListener("change", this.apiTreeViewChange); tv.addEventListener("dblclick", this.apiTreeViewAction); tv.getSelectionModel()._treeView = tv; tv.getSelectionModel().getTreeView = function() { return this._treeView; }; tv.memberDescription = description; tv.mainWin = w; tv.showingClass = sClass; this.loadMemberDataIntoGrid(sClass, tv); w.tabButton = b; w.memberData = tv; w.memberDescription = description; w.close = this.functions.apiWinClose; w.setSize(500, 400); w.setIcon(Classbrowser.CLASS_BIIMAGE); w.addEventListener("close", this.listeners.apiWinClose, w); w.addEventListener("activated", this.listeners.apiWinActivated, w); w.setShowMinimize(false); desktopPane.add(w); w.getContentPane().add(sp); w.setFocused(true); this.Classes[sClass].window = w; this.Classes[sClass].window.isOpen = true; return this.Classes[sClass].window;}_p.apiTreeViewAction = function(e){ var i = this.getSelectionModel().getSelectedItems()[0]; var row = i ? i.getRow() : -1; if(row == -1) return; else { var n = this.getDataModel().getNodeAt(row); var pr = n.getParent(); if(pr && pr.getData()[0] == "Direct Subclasses") app.openNewWindow(n.getData()[0]); }}_p.apiTreeViewChange = function(e){ var row = this.getSelectedItems()[0].getRow(); var cl = this.getTreeView().getDataModel().getCellText(0,0); var node = this.getTreeView().getDataModel().getNodeAt(row); var parent = node.getParent(); var text = node.getData()[0]; var mem = node.memberInfo; var html = ""; if(parent && parent.getData()[0] == "Events") { html += "<span class=\"infoHeader\">" + app.getHtmlLink(app.getEventInfo(cl, text, "type")) + " " + text + ";</span>"; html += "<br> Member of " + cl + "<br><br>"; html += "<b>Summary:</b><br>"; html += app.getEventInfo(cl, text, "description"); } else if(node.identification == "Class") { html += "<span class=\"infoHeader\">public class " + text + " extends " + app.getHtmlLink(app.getParentClass(text)) + ";</span>"; var sum = app.getClassDescription(text); var clArgs = app.Classes[cl].documentation.selectSingleNode("class/arguments"); var argCn = clArgs ? clArgs.childNodes : null; html += "<br><br><b>Constructor:</b><br>"; html += "new " + cl; if(!argCn) html += "()"; else { html += "("; var str = "", type, name; for(var i = 0; i < argCn.length; i++) { type = app.getHtmlLink(argCn[i].getAttribute("type") || BiLabel.htmlToText(argCn[i].selectSingleNode("type").text)) + " "; name = argCn[i].getAttribute("name"); html += type; html += name + (i < argCn.length - 1 ? ", " : ""); str += "<i>" + name + "</i>: "; str += argCn[i].getAttribute("description") || argCn[i].selectSingleNode("description").text; str += (i < argCn.length - 1 ? "<br>" : ""); } html += ")"; if(argCn.length > 0) { html += "<br><br><b>Parameters:</b><br>"; html += str; } } if(sum.length > 0) { html += "<br><br>"; html += "<b>Summary:</b><br>"; html += sum; } var rem = app.getClassRemarks(text); if(rem.length > 0) { html += "<br><br>"; html += "<b>Remarks:</b><br>"; html += rem; } } else if(mem) { var n = app.getDocumentationNode(cl, mem.name, mem.memberType == Classbrowser.METHOD, mem.inheritance == Classbrowser.STATIC); if(mem.memberType == Classbrowser.METHOD) { var sText = this.getTreeView().getDataModel().getCellText(0, row); var i = sText.indexOf("("); html += "<span class=\"infoHeader\">"; html += mem.protection + " "; html += (mem.inheritance == Classbrowser.STATIC ? Classbrowser.STATIC : "") + " "; html += app.getHtmlLink(app.getReturnType(cl, mem.name, mem.inheritance == Classbrowser.STATIC)) + " "; html += "<b>" + sText.substring(0, i) + "</b>" + sText.substring(i) + " "; html += mem.inheritance != Classbrowser.STATIC && app.getMethodIsOverriden(cl, mem.name) ? "[Overriden]" : ""; html += "</span>"; } else if(mem.memberType == Classbrowser.PROPERTY) { html += "<span class=\"infoHeader\">"; html += Classbrowser.PUBLIC + " "; html += app.getHtmlLink((app.getObjectType(cl, mem.name, mem.inheritance == Classbrowser.STATIC) || mem.objectType)) + " "; html += "<b>" + mem.name + "</b> "; if(mem.getter && mem.setter) html += "[get, set]"; if(mem.getter && !mem.setter) html += "[get]"; if(!mem.getter && mem.setter) html += "[set]"; html += "</span>"; } else if(mem.memberType == Classbrowser.FIELD) { var type; html += "<span class=\"infoHeader\">"; html += Classbrowser.PRIVATE + " "; type = (mem.objectType == "Undefined" ? "<Unknown>" : mem.objectType); html += (type != "<Unknown>" ? app.getHtmlLink(type) : type) + " "; html += "<b>" + mem.name + "</b>"; html += "</span>"; } else if(mem.memberType == Classbrowser.CONSTANT) { html += "<span class=\"infoHeader\">"; html += mem.protection + " "; html += mem.inheritance + " "; html += app.getHtmlLink((app.getObjectType(cl, mem.name, true) || (mem.objectType == "Undefined" ? "<Unknown>" : mem.objectType))) + " "; html += "<b>" + mem.name + "</b>"; html += "</span>"; } html += "<br> Member of " + cl; var dp, dpStr; if(n) dp = n.selectSingleNode("description"); dpStr = dp ? dp.text : (n ? n.getAttribute("description") : null); if(dpStr) { html += "<br><br><b>Summary:</b><br>"; html += dpStr; } if(mem.memberType == Classbrowser.METHOD && n) { var args = app.getMethodArguments(cl, mem.name, mem.inheritance == Classbrowser.STATIC); var str = ""; if(args && args.childNodes.length > 0) { html += "<br><br><b>Parameters:</b><br>"; var cn = args.childNodes, d; for(var i = 0; i < cn.length; i++) { if(cn[i].nodeType != 1) continue; html += app.getHtmlLink(cn[i].getAttribute("type") || BiLabel.htmlToText(cn[i].selectSingleNode("type").text)) + " "; html += "<i>" + cn[i].getAttribute("name") + "</i>: "; d = cn[i].selectSingleNode("description"); html += cn[i].getAttribute("description") || BiLabel.htmlToText(d ? d.text : ""); html += "<br>"; } } } } this.getTreeView().memberDescription.setHtml(html);}_p.loadMemberDataIntoGrid = function(sClass, oGrid){ this.loadClassMembers(sClass); oGrid.setDataModel(new ApiTreeDataModel(sClass)); oGrid.updateContentSize(); oGrid.update(); try { var start = 2, end = 7; if(oGrid.getDataModel().getNodeAt(1).getData()[0] == "Direct Subclasses") { oGrid.getDataModel().setExpanded(1, false); start = 3; } for(var i = start; i <= end; i++) oGrid.getDataModel().setExpanded(i, false); } catch(ex) {}}// Search Methods ////////////////////////////////////////////////////////////////////////////_p.search = function(){ this.setEnableSearchGui(false); if(!this.SearchTimer) this.SearchTimer = new BiTimer(1); searchResults.removeAll(); this.CurrentSearchClass = null; this.SearchClassIndex = 0; this.SearchTimer.addEventListener("tick", this.onSearchTimerTick, this); this.SearchTimer.start();}_p.SearchButtonAction = function(){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -