├── .gitignore ├── README.md ├── bower.json ├── css ├── next-componentized.css ├── next-componentized.min.css ├── next.css └── next.min.css ├── doc ├── api.js ├── assets │ ├── css │ │ ├── external-small.png │ │ ├── logo.png │ │ └── main.css │ ├── favicon.png │ ├── img │ │ └── spinner.gif │ ├── index.html │ ├── js │ │ ├── api-filter.js │ │ ├── api-list.js │ │ ├── api-search.js │ │ ├── apidocs.js │ │ └── yui-prettify.js │ └── vendor │ │ └── prettify │ │ ├── CHANGES.html │ │ ├── COPYING │ │ ├── README.html │ │ ├── prettify-min.css │ │ └── prettify-min.js ├── classes │ ├── index.html │ ├── nx.Iterable.html │ ├── nx.Object.html │ ├── nx.Observable.html │ ├── nx.data.Collection.html │ ├── nx.data.Convex.html │ ├── nx.data.Counter.html │ ├── nx.data.Dictionary.html │ ├── nx.data.Edge.html │ ├── nx.data.EdgeSet.html │ ├── nx.data.EdgeSetCollection.html │ ├── nx.data.Force.html │ ├── nx.data.ObservableCollection.html │ ├── nx.data.ObservableDictionary.html │ ├── nx.data.ObservableGraph.ForceProcessor.html │ ├── nx.data.ObservableGraph.html │ ├── nx.data.ObservableObject.html │ ├── nx.data.Query.html │ ├── nx.data.SortedMap.html │ ├── nx.data.Vertex.html │ ├── nx.data.VertexSet.html │ ├── nx.data.nx.Env.html │ ├── nx.data.nx.Util.html │ ├── nx.data.nx.dom.Document.html │ ├── nx.data.nx.dom.Element.html │ ├── nx.data.nx.dom.Fragment.html │ ├── nx.data.nx.dom.Node.html │ ├── nx.data.nx.dom.Text.html │ ├── nx.geometry.BezierCurve.html │ ├── nx.geometry.Line.html │ ├── nx.geometry.Math.html │ ├── nx.geometry.Matrix.html │ ├── nx.geometry.Vector.html │ ├── nx.graphic.Arc.html │ ├── nx.graphic.BezierCurves.html │ ├── nx.graphic.Circle.html │ ├── nx.graphic.Group.html │ ├── nx.graphic.Icon.html │ ├── nx.graphic.Icons.html │ ├── nx.graphic.Image.html │ ├── nx.graphic.Line.html │ ├── nx.graphic.LinkSetTooltipContent.html │ ├── nx.graphic.LinkTooltipContent.html │ ├── nx.graphic.NodeTooltipContent.html │ ├── nx.graphic.Path.html │ ├── nx.graphic.Polygon.html │ ├── nx.graphic.Rect.html │ ├── nx.graphic.Stage.html │ ├── nx.graphic.Text.html │ ├── nx.graphic.Topology.AbstractLink.html │ ├── nx.graphic.Topology.AbstractNode.html │ ├── nx.graphic.Topology.BasePath.html │ ├── nx.graphic.Topology.Categories.html │ ├── nx.graphic.Topology.CircleGroup.html │ ├── nx.graphic.Topology.Config.html │ ├── nx.graphic.Topology.DefaultScene.html │ ├── nx.graphic.Topology.Event.html │ ├── nx.graphic.Topology.Graph.html │ ├── nx.graphic.Topology.GroupItem.html │ ├── nx.graphic.Topology.GroupsLayer.html │ ├── nx.graphic.Topology.Layer.html │ ├── nx.graphic.Topology.LayoutMixin.html │ ├── nx.graphic.Topology.Link.html │ ├── nx.graphic.Topology.LinkMixin.html │ ├── nx.graphic.Topology.LinkSet.html │ ├── nx.graphic.Topology.LinksLayer.html │ ├── nx.graphic.Topology.NeXtForceLayout.html │ ├── nx.graphic.Topology.Node.html │ ├── nx.graphic.Topology.NodeMixin.html │ ├── nx.graphic.Topology.NodeSet.html │ ├── nx.graphic.Topology.NodeSetPath.html │ ├── nx.graphic.Topology.NodesLayer.html │ ├── nx.graphic.Topology.Path.html │ ├── nx.graphic.Topology.PathLayer.html │ ├── nx.graphic.Topology.PolygonGroup.html │ ├── nx.graphic.Topology.RectGroup.html │ ├── nx.graphic.Topology.Scene.html │ ├── nx.graphic.Topology.SceneMixin.html │ ├── nx.graphic.Topology.SelectionNodeScene.html │ ├── nx.graphic.Topology.SelectionScene.html │ ├── nx.graphic.Topology.StageMixin.html │ ├── nx.graphic.Topology.Tooltip.html │ ├── nx.graphic.Topology.TooltipManager.html │ ├── nx.graphic.Topology.TooltipMixin.html │ ├── nx.graphic.Topology.TooltipPolicy.html │ ├── nx.graphic.Topology.USMapLayout.html │ ├── nx.graphic.Topology.ZoomBySelection.html │ ├── nx.graphic.Topology.html │ ├── nx.graphic.Triangle.html │ ├── nx.html │ ├── nx.ui.Application.html │ ├── nx.ui.Collection.html │ ├── nx.ui.Component.html │ ├── nx.ui.CssClass.html │ ├── nx.ui.CssStyle.html │ ├── nx.ui.DOMComponent.html │ ├── nx.ui.Popover.html │ ├── nx.ui.Popup.html │ ├── nx.ui.PopupContainer.html │ ├── nx.ui.nx.graphic.Component.html │ ├── nx.ui.nx.graphic.DragManager.html │ ├── nx.ui.nx.widget.ZIndexManager.html │ └── nxex.toolkit.collection.CollectionRelation.html ├── data.json ├── files │ ├── index.html │ └── target_next_js_next.js.html ├── index.html └── modules │ ├── index.html │ ├── nx.data.html │ ├── nx.geometry.html │ ├── nx.graphic.Topology.Group.html │ ├── nx.graphic.Topology.html │ ├── nx.graphic.html │ └── nx.html ├── fonts ├── cisco │ ├── CiscoSansExtraLight.otf │ ├── CiscoSansRegular.otf │ ├── ciscosansextralight-webfont.eot │ ├── ciscosansextralight-webfont.svg │ ├── ciscosansextralight-webfont.ttf │ ├── ciscosansextralight-webfont.woff │ ├── ciscosansregular-webfont.eot │ ├── ciscosansregular-webfont.svg │ ├── ciscosansregular-webfont.ttf │ └── ciscosansregular-webfont.woff ├── next-font.eot ├── next-font.svg ├── next-font.ttf └── next-font.woff └── js ├── next.js └── next.min.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NeXt UI Framework 2 | 3 | NeXt UI toolkit is an HTML5/JavaScript based toolkit for network web application. It provides a network centric topology UI component featuring high performance and rich functionality. NeXt can display large complex network topologies, aggregated network nodes, traffic/path/tunnel/group visualizations and it includes different layout algorithms, map overlays, and preset user friendly interactions. NeXt can work together with DLUX to build ODL apps. 4 | 5 | Homepage : https://wiki.opendaylight.org/view/NeXt:Main 6 | 7 | UI Toolkit Quicklook : https://www.youtube.com/watch?v=gBsUDu8aucs 8 | 9 | Current version : 1.0.0 10 | 11 | ## Key Features 12 | 13 | * Large complex network topologies 14 | * Aggregated network nodes 15 | * Traffic/path/tunnel/group visualizations 16 | * Different layout algorithms 17 | * Map overlays 18 | * Preset user-friendly interactions 19 | 20 | ## File structure 21 | ``` 22 | next/ 23 | |- css/ 24 | | |- next.css // next stylesheet file 25 | | |- next.min.css // minimized stylesheet file 26 | | |- next-componentized.css 27 | | |- next-componentized.min.css 28 | |- js 29 | | |- next.js // next js library 30 | | |- next.min.js // minimized js library 31 | |- fonts/ // font resources foler 32 | | doc/ //APi manual 33 | |- README.md 34 | ``` 35 | 36 | ## Quick start 37 | 38 | 1) Create a HTML file. 39 | 40 | ```HTML 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 51 | 52 | 53 | ``` 54 | 55 | 2) Edit next code 56 | 57 | ```javascript 58 | // Initialize a topology component 59 | var topo = new nx.graphic.Topology({ 60 | }); 61 | 62 | // Create new app 63 | var app = new nx.ui.Application(); 64 | 65 | // Attach topo to app 66 | topo.attach(app); 67 | ``` 68 | 69 | 3) Open html file with Chrome 70 | 71 | ### Tutorials and Sample code 72 | 73 | Tutorials : https://wiki.opendaylight.org/view/NeXt:Main 74 | 75 | Opendaylight sample code intergrate DLUX with NeXt: https://github.com/CiscoDevNet/opendaylight-sample-apps 76 | 77 | BIERMAN : https://github.com/zverevalexei/bierman-gui 78 | 79 | ## Build instructions from source code 80 | 81 | Git : https://git.opendaylight.org/gerrit/p/next 82 | 83 | ### Environment requirements 84 | 85 | In order to build NeXt from sources, you must have [Node.js](https://nodejs.org/) installed. 86 | 87 | After that, make sure to have [Grunt](https://www.npmjs.com/package/grunt) installed. To do so, run: 88 | 89 | ``` 90 | npm install grunt 91 | ``` 92 | 93 | ### Build process 94 | * ```npm install``` to install npm modules 95 | * ```grunt``` to build from sources 96 | 97 | ### Authorized Devs Only: Bower Updates 98 | You should only update Bower if the build is stable, or a major issue has been fixed. 99 | 100 | To do so, type in the command line: 101 | 102 | ``` 103 | node update-bower.js -u {{GITHUB USERNAME}} -p {{GITHUB PASSWORD}} -v {{VERSION NUMBER}} 104 | ``` 105 | Make sure to turn ```{{GITHUB USERNAME}}```, ```{{GITHUB PASSWORD}}``` and ```{{NEW VERSION}}``` into appropriate values. 106 | 107 | Example: 108 | 109 | ``` 110 | node update-bower.js -u gituser -p 123456 -v 0.1.0 111 | ``` 112 | 113 | Leave the terminal window open until you see ```Done!``` message. 114 | 115 | ## Who's Using NeXt 116 | Here we feature a few customers who choose NeXt framework as their topology visualization tool and use it in their products. 117 | 118 | * [Cisco](https://cisco.com/) 119 | * [Verizon](https://www.verizonwireless.com) 120 | * [AT&T](https://att.com) 121 | * [HP Enterprise](https://hpe.com) 122 | * [NTS Netzwerk Telekom Service AG](http://www.nts.eu/en/) 123 | 124 | Are you *next*? 125 | 126 | ## Bugs 127 | 128 | [Open Bugs](https://bugs.opendaylight.org/buglist.cgi?bug_status=__open__&product=next) 129 | 130 | ## Team 131 | 132 | * Aikepaer Abuduweili (aaikepae@cisco.com) 133 | * Kang Li (lkang2@cisco.com) 134 | * Alexei Zverev (alzverev@cisco.com) 135 | * Xu Yangyang(yangyxu@cisco.com) 136 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-bower", 3 | "homepage": "http://next-ui.com", 4 | "authors": [ 5 | "Aikepaer Abuduweili " 6 | ], 7 | "description": "NeXt UI Toolkit bower and npm distribution.", 8 | "main": [ 9 | "js/next.js", 10 | "css/next.css" 11 | ], 12 | "moduleType": [], 13 | "keywords": [ 14 | "NeXt", 15 | "topology", 16 | "SDN" 17 | ], 18 | "ignore": [], 19 | "version": "1.0.1", 20 | "license": "EPL-1.0" 21 | } -------------------------------------------------------------------------------- /doc/api.js: -------------------------------------------------------------------------------- 1 | YUI.add("yuidoc-meta", function(Y) { 2 | Y.YUIDoc = { meta: { 3 | "classes": [ 4 | "nx", 5 | "nx.Iterable", 6 | "nx.Object", 7 | "nx.Observable", 8 | "nx.data.Collection", 9 | "nx.data.Convex", 10 | "nx.data.Counter", 11 | "nx.data.Dictionary", 12 | "nx.data.Edge", 13 | "nx.data.EdgeSet", 14 | "nx.data.EdgeSetCollection", 15 | "nx.data.Force", 16 | "nx.data.ObservableCollection", 17 | "nx.data.ObservableDictionary", 18 | "nx.data.ObservableGraph", 19 | "nx.data.ObservableGraph.ForceProcessor", 20 | "nx.data.ObservableObject", 21 | "nx.data.Query", 22 | "nx.data.SortedMap", 23 | "nx.data.Vertex", 24 | "nx.data.VertexSet", 25 | "nx.data.nx.Env", 26 | "nx.data.nx.Util", 27 | "nx.data.nx.dom.Document", 28 | "nx.data.nx.dom.Element", 29 | "nx.data.nx.dom.Fragment", 30 | "nx.data.nx.dom.Node", 31 | "nx.data.nx.dom.Text", 32 | "nx.geometry.BezierCurve", 33 | "nx.geometry.Line", 34 | "nx.geometry.Math", 35 | "nx.geometry.Matrix", 36 | "nx.geometry.Vector", 37 | "nx.graphic.Arc", 38 | "nx.graphic.BezierCurves", 39 | "nx.graphic.Circle", 40 | "nx.graphic.Group", 41 | "nx.graphic.Icon", 42 | "nx.graphic.Icons", 43 | "nx.graphic.Image", 44 | "nx.graphic.Line", 45 | "nx.graphic.LinkSetTooltipContent", 46 | "nx.graphic.LinkTooltipContent", 47 | "nx.graphic.NodeTooltipContent", 48 | "nx.graphic.Path", 49 | "nx.graphic.Polygon", 50 | "nx.graphic.Rect", 51 | "nx.graphic.Stage", 52 | "nx.graphic.Text", 53 | "nx.graphic.Topology", 54 | "nx.graphic.Topology.AbstractLink", 55 | "nx.graphic.Topology.AbstractNode", 56 | "nx.graphic.Topology.BasePath", 57 | "nx.graphic.Topology.Categories", 58 | "nx.graphic.Topology.CircleGroup", 59 | "nx.graphic.Topology.Config", 60 | "nx.graphic.Topology.DefaultScene", 61 | "nx.graphic.Topology.Event", 62 | "nx.graphic.Topology.Graph", 63 | "nx.graphic.Topology.GroupItem", 64 | "nx.graphic.Topology.GroupsLayer", 65 | "nx.graphic.Topology.Layer", 66 | "nx.graphic.Topology.LayoutMixin", 67 | "nx.graphic.Topology.Link", 68 | "nx.graphic.Topology.LinkMixin", 69 | "nx.graphic.Topology.LinkSet", 70 | "nx.graphic.Topology.LinksLayer", 71 | "nx.graphic.Topology.NeXtForceLayout", 72 | "nx.graphic.Topology.Node", 73 | "nx.graphic.Topology.NodeMixin", 74 | "nx.graphic.Topology.NodeSet", 75 | "nx.graphic.Topology.NodeSetPath", 76 | "nx.graphic.Topology.NodesLayer", 77 | "nx.graphic.Topology.Path", 78 | "nx.graphic.Topology.PathLayer", 79 | "nx.graphic.Topology.PolygonGroup", 80 | "nx.graphic.Topology.RectGroup", 81 | "nx.graphic.Topology.Scene", 82 | "nx.graphic.Topology.SceneMixin", 83 | "nx.graphic.Topology.SelectionNodeScene", 84 | "nx.graphic.Topology.SelectionScene", 85 | "nx.graphic.Topology.StageMixin", 86 | "nx.graphic.Topology.Tooltip", 87 | "nx.graphic.Topology.TooltipManager", 88 | "nx.graphic.Topology.TooltipMixin", 89 | "nx.graphic.Topology.TooltipPolicy", 90 | "nx.graphic.Topology.USMapLayout", 91 | "nx.graphic.Topology.ZoomBySelection", 92 | "nx.graphic.Triangle", 93 | "nx.ui.Application", 94 | "nx.ui.Collection", 95 | "nx.ui.Component", 96 | "nx.ui.CssClass", 97 | "nx.ui.CssStyle", 98 | "nx.ui.DOMComponent", 99 | "nx.ui.Popover", 100 | "nx.ui.Popup", 101 | "nx.ui.PopupContainer", 102 | "nx.ui.nx.graphic.Component", 103 | "nx.ui.nx.graphic.DragManager", 104 | "nx.ui.nx.widget.ZIndexManager", 105 | "nxex.toolkit.collection.CollectionRelation" 106 | ], 107 | "modules": [ 108 | "nx", 109 | "nx.data", 110 | "nx.geometry", 111 | "nx.graphic", 112 | "nx.graphic.Topology", 113 | "nx.graphic.Topology.Group" 114 | ], 115 | "allModules": [ 116 | { 117 | "displayName": "nx", 118 | "name": "nx" 119 | }, 120 | { 121 | "displayName": "nx.data", 122 | "name": "nx.data", 123 | "description": "Vertex class" 124 | }, 125 | { 126 | "displayName": "nx.geometry", 127 | "name": "nx.geometry", 128 | "description": "Mathematics Line class" 129 | }, 130 | { 131 | "displayName": "nx.graphic", 132 | "name": "nx.graphic", 133 | "description": "Base class of graphic component" 134 | }, 135 | { 136 | "displayName": "nx.graphic.Topology", 137 | "name": "nx.graphic.Topology", 138 | "description": "A topology path class\n Path's background colors : ['#b2e47f', '#e4e47f', '#bec2f9', '#b6def7', '#89f0de']" 139 | }, 140 | { 141 | "displayName": "nx.graphic.Topology.Group", 142 | "name": "nx.graphic.Topology.Group", 143 | "description": "Base group shape class" 144 | } 145 | ] 146 | } }; 147 | }); -------------------------------------------------------------------------------- /doc/assets/css/external-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/doc/assets/css/external-small.png -------------------------------------------------------------------------------- /doc/assets/css/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/doc/assets/css/logo.png -------------------------------------------------------------------------------- /doc/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/doc/assets/favicon.png -------------------------------------------------------------------------------- /doc/assets/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/doc/assets/img/spinner.gif -------------------------------------------------------------------------------- /doc/assets/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redirector 5 | 6 | 7 | 8 | Click here to redirect 9 | 10 | 11 | -------------------------------------------------------------------------------- /doc/assets/js/api-filter.js: -------------------------------------------------------------------------------- 1 | YUI.add('api-filter', function (Y) { 2 | 3 | Y.APIFilter = Y.Base.create('apiFilter', Y.Base, [Y.AutoCompleteBase], { 4 | // -- Initializer ---------------------------------------------------------- 5 | initializer: function () { 6 | this._bindUIACBase(); 7 | this._syncUIACBase(); 8 | }, 9 | getDisplayName: function(name) { 10 | 11 | Y.each(Y.YUIDoc.meta.allModules, function(i) { 12 | if (i.name === name && i.displayName) { 13 | name = i.displayName; 14 | } 15 | }); 16 | 17 | return name; 18 | } 19 | 20 | }, { 21 | // -- Attributes ----------------------------------------------------------- 22 | ATTRS: { 23 | resultHighlighter: { 24 | value: 'phraseMatch' 25 | }, 26 | 27 | // May be set to "classes" or "modules". 28 | queryType: { 29 | value: 'classes' 30 | }, 31 | 32 | source: { 33 | valueFn: function() { 34 | var self = this; 35 | return function(q) { 36 | var data = Y.YUIDoc.meta[self.get('queryType')], 37 | out = []; 38 | Y.each(data, function(v) { 39 | if (v.toLowerCase().indexOf(q.toLowerCase()) > -1) { 40 | out.push(v); 41 | } 42 | }); 43 | return out; 44 | }; 45 | } 46 | } 47 | } 48 | }); 49 | 50 | }, '3.4.0', {requires: [ 51 | 'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources' 52 | ]}); 53 | -------------------------------------------------------------------------------- /doc/assets/js/api-list.js: -------------------------------------------------------------------------------- 1 | YUI.add('api-list', function (Y) { 2 | 3 | var Lang = Y.Lang, 4 | YArray = Y.Array, 5 | 6 | APIList = Y.namespace('APIList'), 7 | 8 | classesNode = Y.one('#api-classes'), 9 | inputNode = Y.one('#api-filter'), 10 | modulesNode = Y.one('#api-modules'), 11 | tabviewNode = Y.one('#api-tabview'), 12 | 13 | tabs = APIList.tabs = {}, 14 | 15 | filter = APIList.filter = new Y.APIFilter({ 16 | inputNode : inputNode, 17 | maxResults: 1000, 18 | 19 | on: { 20 | results: onFilterResults 21 | } 22 | }), 23 | 24 | search = APIList.search = new Y.APISearch({ 25 | inputNode : inputNode, 26 | maxResults: 100, 27 | 28 | on: { 29 | clear : onSearchClear, 30 | results: onSearchResults 31 | } 32 | }), 33 | 34 | tabview = APIList.tabview = new Y.TabView({ 35 | srcNode : tabviewNode, 36 | panelNode: '#api-tabview-panel', 37 | render : true, 38 | 39 | on: { 40 | selectionChange: onTabSelectionChange 41 | } 42 | }), 43 | 44 | focusManager = APIList.focusManager = tabviewNode.plug(Y.Plugin.NodeFocusManager, { 45 | circular : true, 46 | descendants: '#api-filter, .yui3-tab-panel-selected .api-list-item a, .yui3-tab-panel-selected .result a', 47 | keys : {next: 'down:40', previous: 'down:38'} 48 | }).focusManager, 49 | 50 | LIST_ITEM_TEMPLATE = 51 | '
  • ' + 52 | '{displayName}' + 53 | '
  • '; 54 | 55 | // -- Init --------------------------------------------------------------------- 56 | 57 | // Duckpunch FocusManager's key event handling to prevent it from handling key 58 | // events when a modifier is pressed. 59 | Y.before(function (e, activeDescendant) { 60 | if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { 61 | return new Y.Do.Prevent(); 62 | } 63 | }, focusManager, '_focusPrevious', focusManager); 64 | 65 | Y.before(function (e, activeDescendant) { 66 | if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { 67 | return new Y.Do.Prevent(); 68 | } 69 | }, focusManager, '_focusNext', focusManager); 70 | 71 | // Create a mapping of tabs in the tabview so we can refer to them easily later. 72 | tabview.each(function (tab, index) { 73 | var name = tab.get('label').toLowerCase(); 74 | 75 | tabs[name] = { 76 | index: index, 77 | name : name, 78 | tab : tab 79 | }; 80 | }); 81 | 82 | // Switch tabs on Ctrl/Cmd-Left/Right arrows. 83 | tabviewNode.on('key', onTabSwitchKey, 'down:37,39'); 84 | 85 | // Focus the filter input when the `/` key is pressed. 86 | Y.one(Y.config.doc).on('key', onSearchKey, 'down:83'); 87 | 88 | // Keep the Focus Manager up to date. 89 | inputNode.on('focus', function () { 90 | focusManager.set('activeDescendant', inputNode); 91 | }); 92 | 93 | // Update all tabview links to resolved URLs. 94 | tabview.get('panelNode').all('a').each(function (link) { 95 | link.setAttribute('href', link.get('href')); 96 | }); 97 | 98 | // -- Private Functions -------------------------------------------------------- 99 | function getFilterResultNode() { 100 | return filter.get('queryType') === 'classes' ? classesNode : modulesNode; 101 | } 102 | 103 | // -- Event Handlers ----------------------------------------------------------- 104 | function onFilterResults(e) { 105 | var frag = Y.one(Y.config.doc.createDocumentFragment()), 106 | resultNode = getFilterResultNode(), 107 | typePlural = filter.get('queryType'), 108 | typeSingular = typePlural === 'classes' ? 'class' : 'module'; 109 | 110 | if (e.results.length) { 111 | YArray.each(e.results, function (result) { 112 | frag.append(Lang.sub(LIST_ITEM_TEMPLATE, { 113 | rootPath : APIList.rootPath, 114 | displayName : filter.getDisplayName(result.highlighted), 115 | name : result.text, 116 | typePlural : typePlural, 117 | typeSingular: typeSingular 118 | })); 119 | }); 120 | } else { 121 | frag.append( 122 | '
  • ' + 123 | 'No ' + typePlural + ' found.' + 124 | '
  • ' 125 | ); 126 | } 127 | 128 | resultNode.empty(true); 129 | resultNode.append(frag); 130 | 131 | focusManager.refresh(); 132 | } 133 | 134 | function onSearchClear(e) { 135 | 136 | focusManager.refresh(); 137 | } 138 | 139 | function onSearchKey(e) { 140 | var target = e.target; 141 | 142 | if (target.test('input,select,textarea') 143 | || target.get('isContentEditable')) { 144 | return; 145 | } 146 | 147 | e.preventDefault(); 148 | 149 | inputNode.focus(); 150 | focusManager.refresh(); 151 | } 152 | 153 | function onSearchResults(e) { 154 | var frag = Y.one(Y.config.doc.createDocumentFragment()); 155 | 156 | if (e.results.length) { 157 | YArray.each(e.results, function (result) { 158 | frag.append(result.display); 159 | }); 160 | } else { 161 | frag.append( 162 | '
  • ' + 163 | 'No results found. Maybe you\'ll have better luck with a ' + 164 | 'different query?' + 165 | '
  • ' 166 | ); 167 | } 168 | 169 | 170 | focusManager.refresh(); 171 | } 172 | 173 | function onTabSelectionChange(e) { 174 | var tab = e.newVal, 175 | name = tab.get('label').toLowerCase(); 176 | 177 | tabs.selected = { 178 | index: tab.get('index'), 179 | name : name, 180 | tab : tab 181 | }; 182 | 183 | switch (name) { 184 | case 'classes': // fallthru 185 | case 'modules': 186 | filter.setAttrs({ 187 | minQueryLength: 0, 188 | queryType : name 189 | }); 190 | 191 | search.set('minQueryLength', -1); 192 | 193 | // Only send a request if this isn't the initially-selected tab. 194 | if (e.prevVal) { 195 | filter.sendRequest(filter.get('value')); 196 | } 197 | break; 198 | 199 | case 'everything': 200 | filter.set('minQueryLength', -1); 201 | search.set('minQueryLength', 1); 202 | 203 | if (search.get('value')) { 204 | search.sendRequest(search.get('value')); 205 | } else { 206 | inputNode.focus(); 207 | } 208 | break; 209 | 210 | default: 211 | // WTF? We shouldn't be here! 212 | filter.set('minQueryLength', -1); 213 | search.set('minQueryLength', -1); 214 | } 215 | 216 | if (focusManager) { 217 | setTimeout(function () { 218 | focusManager.refresh(); 219 | }, 1); 220 | } 221 | } 222 | 223 | function onTabSwitchKey(e) { 224 | var currentTabIndex = tabs.selected.index; 225 | 226 | if (!(e.ctrlKey || e.metaKey)) { 227 | return; 228 | } 229 | 230 | e.preventDefault(); 231 | 232 | switch (e.keyCode) { 233 | case 37: // left arrow 234 | if (currentTabIndex > 0) { 235 | tabview.selectChild(currentTabIndex - 1); 236 | inputNode.focus(); 237 | } 238 | break; 239 | 240 | case 39: // right arrow 241 | if (currentTabIndex < (Y.Object.size(tabs) - 2)) { 242 | tabview.selectChild(currentTabIndex + 1); 243 | inputNode.focus(); 244 | } 245 | break; 246 | } 247 | } 248 | 249 | }, '3.4.0', {requires: [ 250 | 'api-filter', 'api-search', 'event-key', 'node-focusmanager', 'tabview' 251 | ]}); 252 | -------------------------------------------------------------------------------- /doc/assets/js/api-search.js: -------------------------------------------------------------------------------- 1 | YUI.add('api-search', function (Y) { 2 | 3 | var Lang = Y.Lang, 4 | Node = Y.Node, 5 | YArray = Y.Array; 6 | 7 | Y.APISearch = Y.Base.create('apiSearch', Y.Base, [Y.AutoCompleteBase], { 8 | // -- Public Properties ---------------------------------------------------- 9 | RESULT_TEMPLATE: 10 | '
  • ' + 11 | '' + 12 | '

    {name}

    ' + 13 | '{resultType}' + 14 | '
    {description}
    ' + 15 | '{class}' + 16 | '
    ' + 17 | '
  • ', 18 | 19 | // -- Initializer ---------------------------------------------------------- 20 | initializer: function () { 21 | this._bindUIACBase(); 22 | this._syncUIACBase(); 23 | }, 24 | 25 | // -- Protected Methods ---------------------------------------------------- 26 | _apiResultFilter: function (query, results) { 27 | // Filter components out of the results. 28 | return YArray.filter(results, function (result) { 29 | return result.raw.resultType === 'component' ? false : result; 30 | }); 31 | }, 32 | 33 | _apiResultFormatter: function (query, results) { 34 | return YArray.map(results, function (result) { 35 | var raw = Y.merge(result.raw), // create a copy 36 | desc = raw.description || ''; 37 | 38 | // Convert description to text and truncate it if necessary. 39 | desc = Node.create('
    ' + desc + '
    ').get('text'); 40 | 41 | if (desc.length > 65) { 42 | desc = Y.Escape.html(desc.substr(0, 65)) + ' …'; 43 | } else { 44 | desc = Y.Escape.html(desc); 45 | } 46 | 47 | raw['class'] || (raw['class'] = ''); 48 | raw.description = desc; 49 | 50 | // Use the highlighted result name. 51 | raw.name = result.highlighted; 52 | 53 | return Lang.sub(this.RESULT_TEMPLATE, raw); 54 | }, this); 55 | }, 56 | 57 | _apiTextLocator: function (result) { 58 | return result.displayName || result.name; 59 | } 60 | }, { 61 | // -- Attributes ----------------------------------------------------------- 62 | ATTRS: { 63 | resultFormatter: { 64 | valueFn: function () { 65 | return this._apiResultFormatter; 66 | } 67 | }, 68 | 69 | resultFilters: { 70 | valueFn: function () { 71 | return this._apiResultFilter; 72 | } 73 | }, 74 | 75 | resultHighlighter: { 76 | value: 'phraseMatch' 77 | }, 78 | 79 | resultListLocator: { 80 | value: 'data.results' 81 | }, 82 | 83 | resultTextLocator: { 84 | valueFn: function () { 85 | return this._apiTextLocator; 86 | } 87 | }, 88 | 89 | source: { 90 | value: '/api/v1/search?q={query}&count={maxResults}' 91 | } 92 | } 93 | }); 94 | 95 | }, '3.4.0', {requires: [ 96 | 'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources', 97 | 'escape' 98 | ]}); 99 | -------------------------------------------------------------------------------- /doc/assets/js/apidocs.js: -------------------------------------------------------------------------------- 1 | YUI().use( 2 | 'yuidoc-meta', 3 | 'api-list', 'history-hash', 'node-screen', 'node-style', 'pjax', 4 | function (Y) { 5 | 6 | var win = Y.config.win, 7 | localStorage = win.localStorage, 8 | 9 | bdNode = Y.one('#bd'), 10 | 11 | pjax, 12 | defaultRoute, 13 | 14 | classTabView, 15 | selectedTab; 16 | 17 | // Kill pjax functionality unless serving over HTTP. 18 | if (!Y.getLocation().protocol.match(/^https?\:/)) { 19 | Y.Router.html5 = false; 20 | } 21 | 22 | // Create the default route with middleware which enables syntax highlighting 23 | // on the loaded content. 24 | defaultRoute = Y.Pjax.defaultRoute.concat(function (req, res, next) { 25 | prettyPrint(); 26 | bdNode.removeClass('loading'); 27 | 28 | next(); 29 | }); 30 | 31 | pjax = new Y.Pjax({ 32 | container : '#docs-main', 33 | contentSelector: '#docs-main > .content', 34 | linkSelector : '#bd a', 35 | titleSelector : '#xhr-title', 36 | 37 | navigateOnHash: true, 38 | root : '/', 39 | routes : [ 40 | // -- / ---------------------------------------------------------------- 41 | { 42 | path : '/(index.html)?', 43 | callbacks: defaultRoute 44 | }, 45 | 46 | // -- /classes/* ------------------------------------------------------- 47 | { 48 | path : '/classes/:class.html*', 49 | callbacks: [defaultRoute, 'handleClasses'] 50 | }, 51 | 52 | // -- /files/* --------------------------------------------------------- 53 | { 54 | path : '/files/*file', 55 | callbacks: [defaultRoute, 'handleFiles'] 56 | }, 57 | 58 | // -- /modules/* ------------------------------------------------------- 59 | { 60 | path : '/modules/:module.html*', 61 | callbacks: defaultRoute 62 | } 63 | ] 64 | }); 65 | 66 | // -- Utility Functions -------------------------------------------------------- 67 | 68 | pjax.checkVisibility = function (tab) { 69 | tab || (tab = selectedTab); 70 | 71 | if (!tab) { return; } 72 | 73 | var panelNode = tab.get('panelNode'), 74 | visibleItems; 75 | 76 | // If no items are visible in the tab panel due to the current visibility 77 | // settings, display a message to that effect. 78 | visibleItems = panelNode.all('.item,.index-item').some(function (itemNode) { 79 | if (itemNode.getComputedStyle('display') !== 'none') { 80 | return true; 81 | } 82 | }); 83 | 84 | panelNode.all('.no-visible-items').remove(); 85 | 86 | if (!visibleItems) { 87 | if (Y.one('#index .index-item')) { 88 | panelNode.append( 89 | '
    ' + 90 | '

    ' + 91 | 'Some items are not shown due to the current visibility ' + 92 | 'settings. Use the checkboxes at the upper right of this ' + 93 | 'page to change the visibility settings.' + 94 | '

    ' + 95 | '
    ' 96 | ); 97 | } else { 98 | panelNode.append( 99 | '
    ' + 100 | '

    ' + 101 | 'This class doesn\'t provide any methods, properties, ' + 102 | 'attributes, or events.' + 103 | '

    ' + 104 | '
    ' 105 | ); 106 | } 107 | } 108 | 109 | // Hide index sections without any visible items. 110 | Y.all('.index-section').each(function (section) { 111 | var items = 0, 112 | visibleItems = 0; 113 | 114 | section.all('.index-item').each(function (itemNode) { 115 | items += 1; 116 | 117 | if (itemNode.getComputedStyle('display') !== 'none') { 118 | visibleItems += 1; 119 | } 120 | }); 121 | 122 | section.toggleClass('hidden', !visibleItems); 123 | section.toggleClass('no-columns', visibleItems < 4); 124 | }); 125 | }; 126 | 127 | pjax.initClassTabView = function () { 128 | if (!Y.all('#classdocs .api-class-tab').size()) { 129 | return; 130 | } 131 | 132 | if (classTabView) { 133 | classTabView.destroy(); 134 | selectedTab = null; 135 | } 136 | 137 | classTabView = new Y.TabView({ 138 | srcNode: '#classdocs', 139 | 140 | on: { 141 | selectionChange: pjax.onTabSelectionChange 142 | } 143 | }); 144 | 145 | pjax.updateTabState(); 146 | classTabView.render(); 147 | }; 148 | 149 | pjax.initLineNumbers = function () { 150 | var hash = win.location.hash.substring(1), 151 | container = pjax.get('container'), 152 | hasLines, node; 153 | 154 | // Add ids for each line number in the file source view. 155 | container.all('.linenums>li').each(function (lineNode, index) { 156 | lineNode.set('id', 'l' + (index + 1)); 157 | lineNode.addClass('file-line'); 158 | hasLines = true; 159 | }); 160 | 161 | // Scroll to the desired line. 162 | if (hasLines && /^l\d+$/.test(hash)) { 163 | if ((node = container.getById(hash))) { 164 | win.scroll(0, node.getY()); 165 | } 166 | } 167 | }; 168 | 169 | pjax.initRoot = function () { 170 | var terminators = /^(?:classes|files|modules)$/, 171 | parts = pjax._getPathRoot().split('/'), 172 | root = [], 173 | i, len, part; 174 | 175 | for (i = 0, len = parts.length; i < len; i += 1) { 176 | part = parts[i]; 177 | 178 | if (part.match(terminators)) { 179 | // Makes sure the path will end with a "/". 180 | root.push(''); 181 | break; 182 | } 183 | 184 | root.push(part); 185 | } 186 | 187 | pjax.set('root', root.join('/')); 188 | }; 189 | 190 | pjax.updateTabState = function (src) { 191 | var hash = win.location.hash.substring(1), 192 | defaultTab, node, tab, tabPanel; 193 | 194 | function scrollToNode() { 195 | if (node.hasClass('protected')) { 196 | Y.one('#api-show-protected').set('checked', true); 197 | pjax.updateVisibility(); 198 | } 199 | 200 | if (node.hasClass('private')) { 201 | Y.one('#api-show-private').set('checked', true); 202 | pjax.updateVisibility(); 203 | } 204 | 205 | setTimeout(function () { 206 | // For some reason, unless we re-get the node instance here, 207 | // getY() always returns 0. 208 | var node = Y.one('#classdocs').getById(hash); 209 | win.scrollTo(0, node.getY() - 70); 210 | }, 1); 211 | } 212 | 213 | if (!classTabView) { 214 | return; 215 | } 216 | 217 | if (src === 'hashchange' && !hash) { 218 | defaultTab = 'index'; 219 | } else { 220 | if (localStorage) { 221 | defaultTab = localStorage.getItem('tab_' + pjax.getPath()) || 222 | 'index'; 223 | } else { 224 | defaultTab = 'index'; 225 | } 226 | } 227 | 228 | if (hash && (node = Y.one('#classdocs').getById(hash))) { 229 | if ((tabPanel = node.ancestor('.api-class-tabpanel', true))) { 230 | if ((tab = Y.one('#classdocs .api-class-tab.' + tabPanel.get('id')))) { 231 | if (classTabView.get('rendered')) { 232 | Y.Widget.getByNode(tab).set('selected', 1); 233 | } else { 234 | tab.addClass('yui3-tab-selected'); 235 | } 236 | } 237 | } 238 | 239 | // Scroll to the desired element if this is a hash URL. 240 | if (node) { 241 | if (classTabView.get('rendered')) { 242 | scrollToNode(); 243 | } else { 244 | classTabView.once('renderedChange', scrollToNode); 245 | } 246 | } 247 | } else { 248 | tab = Y.one('#classdocs .api-class-tab.' + defaultTab); 249 | 250 | // When the `defaultTab` node isn't found, `localStorage` is stale. 251 | if (!tab && defaultTab !== 'index') { 252 | tab = Y.one('#classdocs .api-class-tab.index'); 253 | } 254 | 255 | if (classTabView.get('rendered')) { 256 | Y.Widget.getByNode(tab).set('selected', 1); 257 | } else { 258 | tab.addClass('yui3-tab-selected'); 259 | } 260 | } 261 | }; 262 | 263 | pjax.updateVisibility = function () { 264 | var container = pjax.get('container'); 265 | 266 | container.toggleClass('hide-inherited', 267 | !Y.one('#api-show-inherited').get('checked')); 268 | 269 | container.toggleClass('show-deprecated', 270 | Y.one('#api-show-deprecated').get('checked')); 271 | 272 | container.toggleClass('show-protected', 273 | Y.one('#api-show-protected').get('checked')); 274 | 275 | container.toggleClass('show-private', 276 | Y.one('#api-show-private').get('checked')); 277 | 278 | pjax.checkVisibility(); 279 | }; 280 | 281 | // -- Route Handlers ----------------------------------------------------------- 282 | 283 | pjax.handleClasses = function (req, res, next) { 284 | var status = res.ioResponse.status; 285 | 286 | // Handles success and local filesystem XHRs. 287 | if (res.ioResponse.readyState === 4 && (!status || (status >= 200 && status < 300))) { 288 | pjax.initClassTabView(); 289 | } 290 | 291 | next(); 292 | }; 293 | 294 | pjax.handleFiles = function (req, res, next) { 295 | var status = res.ioResponse.status; 296 | 297 | // Handles success and local filesystem XHRs. 298 | if (res.ioResponse.readyState === 4 && (!status || (status >= 200 && status < 300))) { 299 | pjax.initLineNumbers(); 300 | } 301 | 302 | next(); 303 | }; 304 | 305 | // -- Event Handlers ----------------------------------------------------------- 306 | 307 | pjax.onNavigate = function (e) { 308 | var hash = e.hash, 309 | originTarget = e.originEvent && e.originEvent.target, 310 | tab; 311 | 312 | if (hash) { 313 | tab = originTarget && originTarget.ancestor('.yui3-tab', true); 314 | 315 | if (hash === win.location.hash) { 316 | pjax.updateTabState('hashchange'); 317 | } else if (!tab) { 318 | win.location.hash = hash; 319 | } 320 | 321 | e.preventDefault(); 322 | return; 323 | } 324 | 325 | // Only scroll to the top of the page when the URL doesn't have a hash. 326 | this.set('scrollToTop', !e.url.match(/#.+$/)); 327 | 328 | bdNode.addClass('loading'); 329 | }; 330 | 331 | pjax.onOptionClick = function (e) { 332 | pjax.updateVisibility(); 333 | }; 334 | 335 | pjax.onTabSelectionChange = function (e) { 336 | var tab = e.newVal, 337 | tabId = tab.get('contentBox').getAttribute('href').substring(1); 338 | 339 | selectedTab = tab; 340 | 341 | // If switching from a previous tab (i.e., this is not the default tab), 342 | // replace the history entry with a hash URL that will cause this tab to 343 | // be selected if the user navigates away and then returns using the back 344 | // or forward buttons. 345 | if (e.prevVal && localStorage) { 346 | localStorage.setItem('tab_' + pjax.getPath(), tabId); 347 | } 348 | 349 | pjax.checkVisibility(tab); 350 | }; 351 | 352 | // -- Init --------------------------------------------------------------------- 353 | 354 | pjax.on('navigate', pjax.onNavigate); 355 | 356 | pjax.initRoot(); 357 | pjax.upgrade(); 358 | pjax.initClassTabView(); 359 | pjax.initLineNumbers(); 360 | pjax.updateVisibility(); 361 | 362 | Y.APIList.rootPath = pjax.get('root'); 363 | 364 | Y.one('#api-options').delegate('click', pjax.onOptionClick, 'input'); 365 | 366 | Y.on('hashchange', function (e) { 367 | pjax.updateTabState('hashchange'); 368 | }, win); 369 | 370 | }); 371 | -------------------------------------------------------------------------------- /doc/assets/js/yui-prettify.js: -------------------------------------------------------------------------------- 1 | YUI().use('node', function(Y) { 2 | var code = Y.all('.prettyprint.linenums'); 3 | if (code.size()) { 4 | code.each(function(c) { 5 | var lis = c.all('ol li'), 6 | l = 1; 7 | lis.each(function(n) { 8 | n.prepend(''); 9 | l++; 10 | }); 11 | }); 12 | var h = location.hash; 13 | location.hash = ''; 14 | h = h.replace('LINE_', 'LINENUM_'); 15 | location.hash = h; 16 | } 17 | }); 18 | -------------------------------------------------------------------------------- /doc/assets/vendor/prettify/CHANGES.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Change Log 5 | 6 | 7 | README 8 | 9 |

    Known Issues

    10 | 22 | 23 |

    Change Log

    24 |

    29 March 2007

    25 | 56 |

    4 Jul 2008

    57 | 63 |

    5 Jul 2008

    64 | 67 |

    14 Jul 2008

    68 | 76 |

    6 Jan 2009

    77 | 93 |

    21 May 2009

    94 | 101 |

    14 August 2009

    102 | 105 |

    3 October 2009

    106 | 109 |

    19 July 2010

    110 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /doc/assets/vendor/prettify/COPYING: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /doc/assets/vendor/prettify/README.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | Javascript code prettifier 7 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 18 | 19 | Languages : CH 20 |

    Javascript code prettifier

    21 | 22 |

    Setup

    23 |
      24 |
    1. Download a distribution 25 |
    2. Include the script and stylesheets in your document 26 | (you will need to make sure the css and js file are on your server, and 27 | adjust the paths in the script and link tag) 28 |
       29 | <link href="prettify.css" type="text/css" rel="stylesheet" />
       30 | <script type="text/javascript" src="prettify.js"></script>
      31 |
    3. Add onload="prettyPrint()" to your 32 | document's body tag. 33 |
    4. Modify the stylesheet to get the coloring you prefer
    5. 34 |
    35 | 36 |

    Usage

    37 |

    Put code snippets in 38 | <pre class="prettyprint">...</pre> 39 | or <code class="prettyprint">...</code> 40 | and it will automatically be pretty printed. 41 | 42 | 43 | 44 | 47 |
    The original 45 | Prettier 46 |
    class Voila {
     49 | public:
     50 |   // Voila
     51 |   static const string VOILA = "Voila";
     52 | 
     53 |   // will not interfere with embedded tags.
     54 | }
    55 | 56 |
    class Voila {
     57 | public:
     58 |   // Voila
     59 |   static const string VOILA = "Voila";
     60 | 
     61 |   // will not interfere with embedded tags.
     62 | }
    63 |
    64 | 65 |

    FAQ

    66 |

    Which languages does it work for?

    67 |

    The comments in prettify.js are authoritative but the lexer 68 | should work on a number of languages including C and friends, 69 | Java, Python, Bash, SQL, HTML, XML, CSS, Javascript, and Makefiles. 70 | It works passably on Ruby, PHP, VB, and Awk and a decent subset of Perl 71 | and Ruby, but, because of commenting conventions, doesn't work on 72 | Smalltalk, or CAML-like languages.

    73 | 74 |

    LISPy languages are supported via an extension: 75 | lang-lisp.js.

    77 |

    And similarly for 78 | CSS, 80 | Haskell, 82 | Lua, 84 | OCAML, SML, F#, 86 | Visual Basic, 88 | SQL, 90 | Protocol Buffers, and 92 | WikiText.. 94 | 95 |

    If you'd like to add an extension for your favorite language, please 96 | look at src/lang-lisp.js and file an 97 | issue including your language extension, and a testcase.

    99 | 100 |

    How do I specify which language my code is in?

    101 |

    You don't need to specify the language since prettyprint() 102 | will guess. You can specify a language by specifying the language extension 103 | along with the prettyprint class like so:

    104 |
    <pre class="prettyprint lang-html">
    106 |   The lang-* class specifies the language file extensions.
    107 |   File extensions supported by default include
    108 |     "bsh", "c", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html",
    109 |     "java", "js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh",
    110 |     "xhtml", "xml", "xsl".
    111 | </pre>
    112 | 113 |

    It doesn't work on <obfuscated code sample>?

    114 |

    Yes. Prettifying obfuscated code is like putting lipstick on a pig 115 | — i.e. outside the scope of this tool.

    116 | 117 |

    Which browsers does it work with?

    118 |

    It's been tested with IE 6, Firefox 1.5 & 2, and Safari 2.0.4. 119 | Look at the test page to see if it 120 | works in your browser.

    121 | 122 |

    What's changed?

    123 |

    See the change log

    124 | 125 |

    Why doesn't Prettyprinting of strings work on WordPress?

    126 |

    Apparently wordpress does "smart quoting" which changes close quotes. 127 | This causes end quotes to not match up with open quotes. 128 |

    This breaks prettifying as well as copying and pasting of code samples. 129 | See 130 | WordPress's help center for info on how to stop smart quoting of code 132 | snippets.

    133 | 134 |

    How do I put line numbers in my code?

    135 |

    You can use the linenums class to turn on line 136 | numbering. If your code doesn't start at line number 1, you can 137 | add a colon and a line number to the end of that class as in 138 | linenums:52. 139 | 140 |

    For example 141 |

    <pre class="prettyprint linenums:4"
    142 | >// This is line 4.
    143 | foo();
    144 | bar();
    145 | baz();
    146 | boo();
    147 | far();
    148 | faz();
    149 | <pre>
    150 | produces 151 |
    // This is line 4.
    153 | foo();
    154 | bar();
    155 | baz();
    156 | boo();
    157 | far();
    158 | faz();
    159 | 
    160 | 161 |

    How do I prevent a portion of markup from being marked as code?

    162 |

    You can use the nocode class to identify a span of markup 163 | that is not code. 164 |

    <pre class=prettyprint>
    165 | int x = foo();  /* This is a comment  <span class="nocode">This is not code</span>
    166 |   Continuation of comment */
    167 | int y = bar();
    168 | </pre>
    169 | produces 170 |
    171 | int x = foo();  /* This is a comment  This is not code
    172 |   Continuation of comment */
    173 | int y = bar();
    174 | 
    175 | 176 |

    For a more complete example see the issue22 177 | testcase.

    178 | 179 |

    I get an error message "a is not a function" or "opt_whenDone is not a function"

    180 |

    If you are calling prettyPrint via an event handler, wrap it in a function. 181 | Instead of doing 182 |

    183 | addEventListener('load', prettyPrint, false); 185 |
    186 | wrap it in a closure like 187 |
    188 | addEventListener('load', function (event) { prettyPrint() }, false); 190 |
    191 | so that the browser does not pass an event object to prettyPrint which 192 | will confuse it. 193 | 194 |


    195 | 196 | 202 | 203 | 204 | -------------------------------------------------------------------------------- /doc/assets/vendor/prettify/prettify-min.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} -------------------------------------------------------------------------------- /doc/assets/vendor/prettify/prettify-min.js: -------------------------------------------------------------------------------- 1 | window.PR_SHOULD_USE_CONTINUATION=true;var prettyPrintOne;var prettyPrint;(function(){var O=window;var j=["break,continue,do,else,for,if,return,while"];var v=[j,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var q=[v,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var m=[q,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var y=[q,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var T=[y,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"];var s="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes";var x=[q,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var t="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var J=[j,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var g=[j,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var I=[j,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var B=[m,T,x,t+J,g,I];var f=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/;var D="str";var A="kwd";var k="com";var Q="typ";var H="lit";var M="pun";var G="pln";var n="tag";var F="dec";var K="src";var R="atn";var o="atv";var P="nocode";var N="(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function l(ab){var af=0;var U=false;var ae=false;for(var X=0,W=ab.length;X122)){if(!(am<65||ai>90)){ah.push([Math.max(65,ai)|32,Math.min(am,90)|32])}if(!(am<97||ai>122)){ah.push([Math.max(97,ai)&~32,Math.min(am,122)&~32])}}}}ah.sort(function(aw,av){return(aw[0]-av[0])||(av[1]-aw[1])});var ak=[];var aq=[];for(var at=0;atau[0]){if(au[1]+1>au[0]){ao.push("-")}ao.push(V(au[1]))}}ao.push("]");return ao.join("")}function Y(an){var al=an.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var aj=al.length;var ap=[];for(var am=0,ao=0;am=2&&ak==="["){al[am]=Z(ai)}else{if(ak!=="\\"){al[am]=ai.replace(/[a-zA-Z]/g,function(aq){var ar=aq.charCodeAt(0);return"["+String.fromCharCode(ar&~32,ar|32)+"]"})}}}}return al.join("")}var ac=[];for(var X=0,W=ab.length;X=0;){U[ae.charAt(ag)]=aa}}var ah=aa[1];var ac=""+ah;if(!ai.hasOwnProperty(ac)){aj.push(ah);ai[ac]=null}}aj.push(/[\0-\uffff]/);X=l(aj)})();var Z=V.length;var Y=function(aj){var ab=aj.sourceCode,aa=aj.basePos;var af=[aa,G];var ah=0;var ap=ab.match(X)||[];var al={};for(var ag=0,at=ap.length;ag=5&&"lang-"===ar.substring(0,5);if(ao&&!(ak&&typeof ak[1]==="string")){ao=false;ar=K}if(!ao){al[ai]=ar}}var ad=ah;ah+=ai.length;if(!ao){af.push(aa+ad,ar)}else{var an=ak[1];var am=ai.indexOf(an);var ae=am+an.length;if(ak[2]){ae=ai.length-ak[2].length;am=ae-an.length}var au=ar.substring(5);C(aa+ad,ai.substring(0,am),Y,af);C(aa+ad+am,an,r(au,an),af);C(aa+ad+ae,ai.substring(ae),Y,af)}}aj.decorations=af};return Y}function i(V){var Y=[],U=[];if(V.tripleQuotedStrings){Y.push([D,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(V.multiLineStrings){Y.push([D,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{Y.push([D,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(V.verbatimStrings){U.push([D,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var ab=V.hashComments;if(ab){if(V.cStyleComments){if(ab>1){Y.push([k,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{Y.push([k,/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}U.push([D,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,null])}else{Y.push([k,/^#[^\r\n]*/,null,"#"])}}if(V.cStyleComments){U.push([k,/^\/\/[^\r\n]*/,null]);U.push([k,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(V.regexLiterals){var aa=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");U.push(["lang-regex",new RegExp("^"+N+"("+aa+")")])}var X=V.types;if(X){U.push([Q,X])}var W=(""+V.keywords).replace(/^ | $/g,"");if(W.length){U.push([A,new RegExp("^(?:"+W.replace(/[\s,]+/g,"|")+")\\b"),null])}Y.push([G,/^\s+/,null," \r\n\t\xA0"]);var Z=/^.[^\s\w\.$@\'\"\`\/\\]*/;U.push([H,/^@[a-z_$][a-z_$@0-9]*/i,null],[Q,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[G,/^[a-z_$][a-z_$@0-9]*/i,null],[H,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[G,/^\\[\s\S]?/,null],[M,Z,null]);return h(Y,U)}var L=i({keywords:B,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function S(W,ah,aa){var V=/(?:^|\s)nocode(?:\s|$)/;var ac=/\r\n?|\n/;var ad=W.ownerDocument;var ag=ad.createElement("li");while(W.firstChild){ag.appendChild(W.firstChild)}var X=[ag];function af(am){switch(am.nodeType){case 1:if(V.test(am.className)){break}if("br"===am.nodeName){ae(am);if(am.parentNode){am.parentNode.removeChild(am)}}else{for(var ao=am.firstChild;ao;ao=ao.nextSibling){af(ao)}}break;case 3:case 4:if(aa){var an=am.nodeValue;var ak=an.match(ac);if(ak){var aj=an.substring(0,ak.index);am.nodeValue=aj;var ai=an.substring(ak.index+ak[0].length);if(ai){var al=am.parentNode;al.insertBefore(ad.createTextNode(ai),am.nextSibling)}ae(am);if(!aj){am.parentNode.removeChild(am)}}}break}}function ae(al){while(!al.nextSibling){al=al.parentNode;if(!al){return}}function aj(am,at){var ar=at?am.cloneNode(false):am;var ap=am.parentNode;if(ap){var aq=aj(ap,1);var ao=am.nextSibling;aq.appendChild(ar);for(var an=ao;an;an=ao){ao=an.nextSibling;aq.appendChild(an)}}return ar}var ai=aj(al.nextSibling,0);for(var ak;(ak=ai.parentNode)&&ak.nodeType===1;){ai=ak}X.push(ai)}for(var Z=0;Z=U){aj+=2}if(Y>=ar){ac+=2}}}finally{if(au){au.style.display=ak}}}var u={};function d(W,X){for(var U=X.length;--U>=0;){var V=X[U];if(!u.hasOwnProperty(V)){u[V]=W}else{if(O.console){console.warn("cannot override language handler %s",V)}}}}function r(V,U){if(!(V&&u.hasOwnProperty(V))){V=/^\s*]*(?:>|$)/],[k,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[M,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);d(h([[G,/^[\s]+/,null," \t\r\n"],[o,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[n,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[R,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[M,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);d(h([],[[o,/^[\s\S]+/]]),["uq.val"]);d(i({keywords:m,hashComments:true,cStyleComments:true,types:f}),["c","cc","cpp","cxx","cyc","m"]);d(i({keywords:"null,true,false"}),["json"]);d(i({keywords:T,hashComments:true,cStyleComments:true,verbatimStrings:true,types:f}),["cs"]);d(i({keywords:y,cStyleComments:true}),["java"]);d(i({keywords:I,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);d(i({keywords:J,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);d(i({keywords:t,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);d(i({keywords:g,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);d(i({keywords:x,cStyleComments:true,regexLiterals:true}),["js"]);d(i({keywords:s,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);d(h([],[[D,/^[\s\S]+/]]),["regex"]);function e(X){var W=X.langExtension;try{var U=b(X.sourceNode,X.pre);var V=U.sourceCode;X.sourceCode=V;X.spans=U.spans;X.basePos=0;r(W,V)(X);E(X)}catch(Y){if(O.console){console.log(Y&&Y.stack?Y.stack:Y)}}}function z(Y,X,W){var U=document.createElement("pre");U.innerHTML=Y;if(W){S(U,W,true)}var V={langExtension:X,numberLines:W,sourceNode:U,pre:1};e(V);return U.innerHTML}function c(aj){function ab(al){return document.getElementsByTagName(al)}var ah=[ab("pre"),ab("code"),ab("xmp")];var V=[];for(var ae=0;ae]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); -------------------------------------------------------------------------------- /doc/classes/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redirector 5 | 6 | 7 | 8 | Click here to redirect 9 | 10 | 11 | -------------------------------------------------------------------------------- /doc/classes/nx.geometry.Math.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | nx.geometry.Math - Next UI Toolkit 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 |
    17 | 18 |

    19 | 20 |
    21 |
    22 | API Docs for: 1.0.0 23 |
    24 |
    25 |
    26 | 27 |
    28 | 270 |
    271 |
    272 |
    273 | Show: 274 | 278 | 279 | 283 | 284 | 288 | 292 | 293 |
    294 | 295 | 296 |
    297 |
    298 |
    299 |

    nx.geometry.Math Class

    300 |
    301 | 302 | 303 | 304 | 305 | 306 |
    307 | Defined in: target/next/js/next.js:11129 308 |
    309 | 310 | 311 | 312 | 313 | Module: nx.graphic 314 | 315 | 316 | 317 | 318 |
    319 | 320 | 321 | 322 |
    323 | 324 |
    325 | 326 | 327 | 328 |
    329 |
      330 |
    • Index
    • 331 | 332 | 333 | 334 | 335 | 336 |
    337 | 338 |
    339 |
    340 |

    Item Index

    341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 |
    350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 |
    359 |
    360 | 361 |
    362 |
    363 |
    364 |
    365 |
    366 |
    367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | -------------------------------------------------------------------------------- /doc/classes/nx.geometry.Matrix.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | nx.geometry.Matrix - Next UI Toolkit 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 |
    17 | 18 |

    19 | 20 |
    21 |
    22 | API Docs for: 1.0.0 23 |
    24 |
    25 |
    26 | 27 |
    28 | 270 |
    271 |
    272 |
    273 | Show: 274 | 278 | 279 | 283 | 284 | 288 | 292 | 293 |
    294 | 295 | 296 |
    297 |
    298 |
    299 |

    nx.geometry.Matrix Class

    300 |
    301 | 302 | 303 | 304 | 305 | 306 |
    307 | Defined in: target/next/js/next.js:11016 308 |
    309 | 310 | 311 | 312 | 313 | Module: nx.graphic 314 | 315 | 316 | 317 | 318 |
    319 | 320 | 321 | 322 |
    323 | 324 |
    325 | 326 | 327 | 328 |
    329 |
      330 |
    • Index
    • 331 | 332 | 333 | 334 | 335 | 336 |
    337 | 338 |
    339 |
    340 |

    Item Index

    341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 |
    350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 |
    359 |
    360 | 361 |
    362 |
    363 |
    364 |
    365 |
    366 |
    367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | -------------------------------------------------------------------------------- /doc/classes/nx.graphic.Topology.NeXtForceLayout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | nx.graphic.Topology.NeXtForceLayout - Next UI Toolkit 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 |
    17 | 18 |

    19 | 20 |
    21 |
    22 | API Docs for: 1.0.0 23 |
    24 |
    25 |
    26 | 27 |
    28 | 270 |
    271 |
    272 |
    273 | Show: 274 | 278 | 279 | 283 | 284 | 288 | 292 | 293 |
    294 | 295 | 296 |
    297 |
    298 |
    299 |

    nx.graphic.Topology.NeXtForceLayout Class

    300 |
    301 | 302 | 303 | 304 | 305 | 306 |
    307 | Defined in: target/next/js/next.js:22427 308 |
    309 | 310 | 311 | 312 | 313 | Module: nx.graphic.Topology 314 | 315 | 316 | 317 | 318 |
    319 | 320 | 321 | 322 |
    323 |

    Topology force layout

    324 | 325 |
    326 | 327 | 328 | 329 |
    330 |
      331 |
    • Index
    • 332 | 333 | 334 | 335 | 336 | 337 |
    338 | 339 |
    340 |
    341 |

    Item Index

    342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 |
    351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 |
    360 |
    361 | 362 |
    363 |
    364 |
    365 |
    366 |
    367 |
    368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | -------------------------------------------------------------------------------- /doc/classes/nx.graphic.Topology.TooltipPolicy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | nx.graphic.Topology.TooltipPolicy - Next UI Toolkit 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 |
    17 | 18 |

    19 | 20 |
    21 |
    22 | API Docs for: 1.0.0 23 |
    24 |
    25 |
    26 | 27 |
    28 | 270 |
    271 |
    272 |
    273 | Show: 274 | 278 | 279 | 283 | 284 | 288 | 292 | 293 |
    294 | 295 | 296 |
    297 |
    298 |
    299 |

    nx.graphic.Topology.TooltipPolicy Class

    300 |
    301 | 302 | 303 | 304 | 305 | 306 |
    307 | Defined in: target/next/js/next.js:22708 308 |
    309 | 310 | 311 | 312 | 313 | Module: nx.graphic.Topology 314 | 315 | 316 | 317 | 318 |
    319 | 320 | 321 | 322 |
    323 |

    Topology tooltip policy

    324 | 325 |
    326 | 327 | 328 | 329 |
    330 |
      331 |
    • Index
    • 332 | 333 | 334 | 335 | 336 | 337 |
    338 | 339 |
    340 |
    341 |

    Item Index

    342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 |
    351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 |
    360 |
    361 | 362 |
    363 |
    364 |
    365 |
    366 |
    367 |
    368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | -------------------------------------------------------------------------------- /doc/classes/nx.ui.Component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | nx.ui.Component - Next UI Toolkit 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 |
    17 | 18 |

    19 | 20 |
    21 |
    22 | API Docs for: 1.0.0 23 |
    24 |
    25 |
    26 | 27 |
    28 | 270 |
    271 |
    272 |
    273 | Show: 274 | 278 | 279 | 283 | 284 | 288 | 292 | 293 |
    294 | 295 | 296 |
    297 |
    298 |
    299 |

    nx.ui.Component Class

    300 |
    301 | 302 | 303 | 304 |
    305 | Extends nx.ui.AbstractComponent 306 |
    307 | 308 | 309 | 310 |
    311 | Defined in: target/next/js/next.js:7508 312 |
    313 | 314 | 315 | 316 | 317 | Module: nx 318 | 319 | 320 | 321 | 322 |
    323 | 324 | 325 | 326 |
    327 | 328 |
    329 | 330 | 331 | 332 |
    333 |
      334 |
    • Index
    • 335 | 336 | 337 | 338 | 339 | 340 |
    341 | 342 |
    343 |
    344 |

    Item Index

    345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 |
    354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 |
    363 |
    364 | 365 |
    366 |
    367 |
    368 |
    369 |
    370 |
    371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | -------------------------------------------------------------------------------- /doc/classes/nx.ui.PopupContainer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | nx.ui.PopupContainer - Next UI Toolkit 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 |
    17 | 18 |

    19 | 20 |
    21 |
    22 | API Docs for: 1.0.0 23 |
    24 |
    25 |
    26 | 27 |
    28 | 270 |
    271 |
    272 |
    273 | Show: 274 | 278 | 279 | 283 | 284 | 288 | 292 | 293 |
    294 | 295 | 296 |
    297 |
    298 |
    299 |

    nx.ui.PopupContainer Class

    300 |
    301 | 302 | 303 | 304 | 305 | 306 |
    307 | Defined in: target/next/js/next.js:8218 308 |
    309 | 310 | 311 | 312 | 313 | Module: nx 314 | 315 | 316 | 317 | 318 |
    319 | 320 | 321 | 322 |
    323 |

    Popup container

    324 | 325 |
    326 | 327 | 328 | 329 |
    330 |
      331 |
    • Index
    • 332 | 333 | 334 | 335 | 336 | 337 |
    338 | 339 |
    340 |
    341 |

    Item Index

    342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 |
    351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 |
    360 |
    361 | 362 |
    363 |
    364 |
    365 |
    366 |
    367 |
    368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | -------------------------------------------------------------------------------- /doc/classes/nx.ui.nx.widget.ZIndexManager.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | nx.ui.nx.widget.ZIndexManager - Next UI Toolkit 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 |
    17 | 18 |

    19 | 20 |
    21 |
    22 | API Docs for: 1.0.0 23 |
    24 |
    25 |
    26 | 27 |
    28 | 270 |
    271 |
    272 |
    273 | Show: 274 | 278 | 279 | 283 | 284 | 288 | 292 | 293 |
    294 | 295 | 296 |
    297 |
    298 |
    299 |

    nx.ui.nx.widget.ZIndexManager Class

    300 |
    301 | 302 | 303 | 304 | 305 | 306 |
    307 | Defined in: target/next/js/next.js:8186 308 |
    309 | 310 | 311 | 312 | 313 | Module: nx 314 | 315 | 316 | 317 | 318 |
    319 | 320 | 321 | 322 |
    323 |

    Popup z-index mamager

    324 | 325 |
    326 | 327 | 328 | 329 |
    330 |
      331 |
    • Index
    • 332 | 333 | 334 | 335 | 336 | 337 |
    338 | 339 |
    340 |
    341 |

    Item Index

    342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 |
    351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 |
    360 |
    361 | 362 |
    363 |
    364 |
    365 |
    366 |
    367 |
    368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | -------------------------------------------------------------------------------- /doc/files/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redirector 5 | 6 | 7 | 8 | Click here to redirect 9 | 10 | 11 | -------------------------------------------------------------------------------- /doc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Next UI Toolkit 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 |
    17 | 18 |

    19 | 20 |
    21 |
    22 | API Docs for: 1.0.0 23 |
    24 |
    25 |
    26 | 27 |
    28 | 270 |
    271 |
    272 |
    273 | Show: 274 | 278 | 279 | 283 | 284 | 288 | 292 | 293 |
    294 | 295 | 296 |
    297 |
    298 |
    299 |
    300 |
    301 |

    302 | Browse to a module or class using the sidebar to view its API documentation. 303 |

    304 | 305 |

    Keyboard Shortcuts

    306 | 307 |
      308 |
    • Press s to focus the API search box.

    • 309 | 310 |
    • Use Up and Down to select classes, modules, and search results.

    • 311 | 312 |
    • With the API search box or sidebar focused, use -Left or -Right to switch sidebar tabs.

    • 313 | 314 |
    • With the API search box or sidebar focused, use Ctrl+Left and Ctrl+Right to switch sidebar tabs.

    • 315 |
    316 |
    317 |
    318 | 319 | 320 | 321 |
    322 |
    323 |
    324 |
    325 |
    326 |
    327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | -------------------------------------------------------------------------------- /doc/modules/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redirector 5 | 6 | 7 | 8 | Click here to redirect 9 | 10 | 11 | -------------------------------------------------------------------------------- /fonts/cisco/CiscoSansExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/cisco/CiscoSansExtraLight.otf -------------------------------------------------------------------------------- /fonts/cisco/CiscoSansRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/cisco/CiscoSansRegular.otf -------------------------------------------------------------------------------- /fonts/cisco/ciscosansextralight-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/cisco/ciscosansextralight-webfont.eot -------------------------------------------------------------------------------- /fonts/cisco/ciscosansextralight-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/cisco/ciscosansextralight-webfont.ttf -------------------------------------------------------------------------------- /fonts/cisco/ciscosansextralight-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/cisco/ciscosansextralight-webfont.woff -------------------------------------------------------------------------------- /fonts/cisco/ciscosansregular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/cisco/ciscosansregular-webfont.eot -------------------------------------------------------------------------------- /fonts/cisco/ciscosansregular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/cisco/ciscosansregular-webfont.ttf -------------------------------------------------------------------------------- /fonts/cisco/ciscosansregular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/cisco/ciscosansregular-webfont.woff -------------------------------------------------------------------------------- /fonts/next-font.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/next-font.eot -------------------------------------------------------------------------------- /fonts/next-font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/next-font.ttf -------------------------------------------------------------------------------- /fonts/next-font.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NeXt-UI/next-bower/ef4a23267d0e4d5cac86260e7f5fcec5ef677403/fonts/next-font.woff --------------------------------------------------------------------------------