diff --git a/Documentation/Books/AQL/Examples/Join.md b/Documentation/Books/AQL/Examples/Join.md index a4cd13da29..668b3914c8 100644 --- a/Documentation/Books/AQL/Examples/Join.md +++ b/Documentation/Books/AQL/Examples/Join.md @@ -15,54 +15,24 @@ Relationships are established by using the *friendOf* and *thisUser* attributes We'll start with a SQL-ish result set and return each tuple (user name, friends userId) separately. The AQL query to generate such result is: -```js -FOR u IN users - FILTER u.active == true - LIMIT 0, 4 - FOR f IN relations - FILTER f.type == "friend" && f.friendOf == u.userId - RETURN { - "user" : u.name, - "friendId" : f.thisUser - } -``` -```json -[ - { - "user" : "Abigail", - "friendId" : 108 - }, - { - "user" : "Abigail", - "friendId" : 102 - }, - { - "user" : "Abigail", - "friendId" : 106 - }, - { - "user" : "Fred", - "friendId" : 209 - }, - { - "user" : "Mary", - "friendId" : 207 - }, - { - "user" : "Mary", - "friendId" : 104 - }, - { - "user" : "Mariah", - "friendId" : 203 - }, - { - "user" : "Mariah", - "friendId" : 205 - } -] -``` + @startDocuBlockInline joinTuples + @EXAMPLE_AQL{joinTuples} + @DATASET{joinSampleDataset} + FOR u IN users + FILTER u.active == true + LIMIT 0, 4 + FOR f IN relations + FILTER f.type == @friend && f.friendOf == u.userId + RETURN { + "user" : u.name, + "friendId" : f.thisUser + } + @BV { + friend: "friend" + } + @END_EXAMPLE_AQL + @endDocuBlock joinTuples We iterate over the collection users. Only the 'active' users will be examined. For each of these users we will search for up to 4 friends. We locate friends diff --git a/Documentation/Books/AQL/Graphs/Traversals.md b/Documentation/Books/AQL/Graphs/Traversals.md index 125a599b7f..67bfca5211 100644 --- a/Documentation/Books/AQL/Graphs/Traversals.md +++ b/Documentation/Books/AQL/Graphs/Traversals.md @@ -350,12 +350,27 @@ Now let's have a look what the optimizer does behind the curtain and inspect traversal queries using [the explainer](../ExecutionAndPerformance/Optimizer.md): @startDocuBlockInline GRAPHTRAV_07_traverse_7 - @EXAMPLE_ARANGOSH_OUTPUT{GRAPHTRAV_07_traverse_7} - db._explain("FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' LET localScopeVar = RAND() > 0.5 FILTER p.edges[0].theTruth != localScopeVar RETURN v._key", {}, {colors: false}); - db._explain("FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' FILTER p.edges[0].label == 'right_foo' RETURN v._key", {}, {colors: false}); - @END_EXAMPLE_ARANGOSH_OUTPUT + @EXAMPLE_AQL{GRAPHTRAV_07_traverse_7} + @DATASET{traversalGraph} + @EXPLAIN{TRUE} + FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' + LET localScopeVar = RAND() > 0.5 + FILTER p.edges[0].theTruth != localScopeVar + RETURN v._key + @END_EXAMPLE_AQL @endDocuBlock GRAPHTRAV_07_traverse_7 + + @startDocuBlockInline GRAPHTRAV_07_traverse_8 + @EXAMPLE_AQL{GRAPHTRAV_07_traverse_8} + @DATASET{traversalGraph} + @EXPLAIN{TRUE} + FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' + FILTER p.edges[0].label == 'right_foo' + RETURN v._key + @END_EXAMPLE_AQL + @endDocuBlock GRAPHTRAV_07_traverse_8 + We now see two queries: In one we add a variable *localScopeVar*, which is outside the scope of the traversal itself - it is not known inside of the traverser. Therefore, this filter can only be executed after the traversal, which may be diff --git a/Documentation/Examples/AQLEXP_11_explainjs.generated b/Documentation/Examples/AQLEXP_11_explainjs.generated index 9e3e4e2750..c6af862777 100644 --- a/Documentation/Examples/AQLEXP_11_explainjs.generated +++ b/Documentation/Examples/AQLEXP_11_explainjs.generated @@ -8,9 +8,9 @@ Execution plan: 1 SingletonNode 1 * ROOT 2 CalculationNode 1 - LET #5 = 1 .. 10 /* range */ /* simple expression */ 3 EnumerateListNode 10 - FOR x IN #5 /* list iteration */ - 4 CalculationNode 10 - LET then = DATE_NOW() /* v8 expression */ + 4 CalculationNode 10 - LET then = DATE_NOW() /* simple expression */ 6 EnumerateListNode 100 - FOR y IN #5 /* list iteration */ - 7 CalculationNode 100 - LET now = DATE_NOW() /* v8 expression */ + 7 CalculationNode 100 - LET now = DATE_NOW() /* simple expression */ 8 CalculationNode 100 - LET nowstr = CONCAT(now, x, y, then) /* simple expression */ 9 ReturnNode 100 - RETURN nowstr @@ -32,7 +32,7 @@ Execution plan: Id NodeType Est. Comment 1 SingletonNode 1 * ROOT 3 CalculationNode 1 - LET #4 = 1 .. 10 /* range */ /* simple expression */ - 2 CalculationNode 1 - LET now = DATE_NOW() /* v8 expression */ + 2 CalculationNode 1 - LET now = DATE_NOW() /* simple expression */ 4 EnumerateListNode 10 - FOR x IN #4 /* list iteration */ 6 EnumerateListNode 100 - FOR y IN #4 /* list iteration */ 7 CalculationNode 100 - LET nowstr = CONCAT(now, x, y, now) /* simple expression */ diff --git a/Documentation/Examples/GRAPHTRAV_07_traverse_7.generated b/Documentation/Examples/GRAPHTRAV_07_traverse_7.generated index e1943250e3..e48fc47fc3 100644 --- a/Documentation/Examples/GRAPHTRAV_07_traverse_7.generated +++ b/Documentation/Examples/GRAPHTRAV_07_traverse_7.generated @@ -1,63 +1,38 @@ -arangosh> db._explain("FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' LET localScopeVar = RAND() > 0.5 FILTER p.edges[0].theTruth != localScopeVar RETURN v._key", {}, {colors: false}); -Query string: - FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' LET localScopeVar = RAND() > 0.5 - FILTER p.edges[0].theTruth != localScopeVar RETURN v._key +@Q: + FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' + LET localScopeVar = RAND() > 0.5 + FILTER p.edges[0].theTruth != localScopeVar + RETURN v._key -Execution plan: - Id NodeType Est. Comment - 1 SingletonNode 1 * ROOT - 2 TraversalNode 1 - FOR v /* vertex */, p /* paths */ IN 1..3 /* min..maxPathDepth */ OUTBOUND 'circles/A' /* startnode */ GRAPH 'traversalGraph' - 3 CalculationNode 1 - LET localScopeVar = (RAND() > 0.5) /* simple expression */ - 4 CalculationNode 1 - LET #6 = (p.`edges`[0].`theTruth` != localScopeVar) /* simple expression */ - 5 FilterNode 1 - FILTER #6 - 6 CalculationNode 1 - LET #8 = v.`_key` /* attribute expression */ - 7 ReturnNode 1 - RETURN #8 +@R +Query string: + FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' + LET localScopeVar = RAND() > 0.5 + FILTER p.edges[0].theTruth != localScopeVar + RETURN v._key + -Indexes used: - By Type Collection Unique Sparse Selectivity Fields Ranges - 2 edge edges false false 85.00 % [ `_from`, `_to` ] base OUTBOUND +Execution plan: + Id NodeType Est. Comment + 1 SingletonNode 1 * ROOT + 2 TraversalNode 1 - FOR v /* vertex */, p /* paths */ IN 1..3 /* min..maxPathDepth */ OUTBOUND 'circles/A' /* startnode */ GRAPH 'traversalGraph' + 3 CalculationNode 1 - LET localScopeVar = (RAND() > 0.5) /* simple expression */ + 4 CalculationNode 1 - LET #6 = (p.`edges`[0].`theTruth` != localScopeVar) /* simple expression */ + 5 FilterNode 1 - FILTER #6 + 6 CalculationNode 1 - LET #8 = v.`_key` /* attribute expression */ + 7 ReturnNode 1 - RETURN #8 -Traversals on graphs: - Id Depth Vertex collections Edge collections Options Filter conditions - 2 1..3 circles edges uniqueVertices: none, uniqueEdges: path +Indexes used: + By Type Collection Unique Sparse Selectivity Fields Ranges + 2 edge edges false false 85.00 % [ `_from`, `_to` ] base OUTBOUND -Optimization rules applied: - Id RuleName - 1 move-calculations-up - 2 optimize-traversals - 3 move-calculations-down - - -arangosh> db._explain("FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' FILTER p.edges[0].label == 'right_foo' RETURN v._key", {}, {colors: false}); -Query string: - FOR v,e,p IN 1..3 OUTBOUND 'circles/A' GRAPH 'traversalGraph' FILTER p.edges[0].label == 'right_foo' - RETURN v._key - -Execution plan: - Id NodeType Est. Comment - 1 SingletonNode 1 * ROOT - 2 TraversalNode 1 - FOR v /* vertex */ IN 1..3 /* min..maxPathDepth */ OUTBOUND 'circles/A' /* startnode */ GRAPH 'traversalGraph' - 5 CalculationNode 1 - LET #7 = v.`_key` /* attribute expression */ - 6 ReturnNode 1 - RETURN #7 - -Indexes used: - By Type Collection Unique Sparse Selectivity Fields Ranges - 2 edge edges false false 85.00 % [ `_from`, `_to` ] base OUTBOUND - 2 edge edges false false 85.00 % [ `_from`, `_to` ] level 0 OUTBOUND - -Traversals on graphs: - Id Depth Vertex collections Edge collections Options Filter conditions - 2 1..3 circles edges uniqueVertices: none, uniqueEdges: path (p.`edges`[0].`label` == "right_foo") - -Optimization rules applied: - Id RuleName - 1 move-calculations-up - 2 move-filters-up - 3 move-calculations-up-2 - 4 move-filters-up-2 - 5 optimize-traversals - 6 remove-filter-covered-by-traversal - 7 remove-unnecessary-calculations-2 - 8 remove-redundant-path-var +Traversals on graphs: + Id Depth Vertex collections Edge collections Options Filter conditions + 2 1..3 circles edges uniqueVertices: none, uniqueEdges: path +Optimization rules applied: + Id RuleName + 1 move-calculations-up + 2 optimize-traversals + 3 move-calculations-down diff --git a/Documentation/Examples/MOD_06b_routingCurlRedirect.generated b/Documentation/Examples/MOD_06b_routingCurlRedirect.generated index deb24457e0..c42e03a550 100644 --- a/Documentation/Examples/MOD_06b_routingCurlRedirect.generated +++ b/Documentation/Examples/MOD_06b_routingCurlRedirect.generated @@ -1,8 +1,8 @@ shell> curl --dump - http://localhost:8529/redirectMe HTTP/1.1 301 Moved Permanently -x-content-type-options: nosniff content-type: text/html +x-content-type-options: nosniff location: /somewhere.else/ "<html><head><title>Moved</title></head><body><h1>Moved</h1><p>This page has moved to <a href=\"/somewhere.else/\">/somewhere.else/</a>.</p></body></html>" diff --git a/Documentation/Examples/RestReplicationDumpEmpty.generated b/Documentation/Examples/RestReplicationDumpEmpty.generated index 5d5632de37..0f6a205e5c 100644 --- a/Documentation/Examples/RestReplicationDumpEmpty.generated +++ b/Documentation/Examples/RestReplicationDumpEmpty.generated @@ -1,8 +1,8 @@ shell> curl --dump - http://localhost:8529/_api/replication/dump?collection=testCollection HTTP/1.1 204 No Content -x-content-type-options: nosniff content-type: application/x-arango-dump; charset=utf-8 -x-arango-replication-checkmore: false +x-content-type-options: nosniff x-arango-replication-lastincluded: 0 +x-arango-replication-checkmore: false diff --git a/Documentation/Examples/RestViewDeleteViewIdentifier.generated b/Documentation/Examples/RestViewDeleteViewIdentifier.generated new file mode 100644 index 0000000000..c14ecdc18b --- /dev/null +++ b/Documentation/Examples/RestViewDeleteViewIdentifier.generated @@ -0,0 +1,11 @@ +shell> curl -X DELETE --dump - http://localhost:8529/_api/view/15056 + +HTTP/1.1 200 OK +content-type: application/json; charset=utf-8 +x-content-type-options: nosniff + +{ + "error" : false, + "code" : 200, + "result" : true +} diff --git a/Documentation/Examples/RestViewGetViewPropertiesIdentifier.generated b/Documentation/Examples/RestViewGetViewPropertiesIdentifier.generated new file mode 100644 index 0000000000..8c98b175a0 --- /dev/null +++ b/Documentation/Examples/RestViewGetViewPropertiesIdentifier.generated @@ -0,0 +1,37 @@ +shell> curl --dump - http://localhost:8529/_api/view/15071/properties + +HTTP/1.1 200 OK +content-type: application/json; charset=utf-8 +x-content-type-options: nosniff + +{ + "collections" : [ ], + "commit" : { + "cleanupIntervalStep" : 10, + "commitIntervalMsec" : 60000, + "commitTimeoutMsec" : 5000, + "consolidate" : { + "bytes" : { + "segmentThreshold" : 300, + "threshold" : 0.8500000238418579 + }, + "bytes_accum" : { + "segmentThreshold" : 300, + "threshold" : 0.8500000238418579 + }, + "count" : { + "segmentThreshold" : 300, + "threshold" : 0.8500000238418579 + }, + "fill" : { + "segmentThreshold" : 300, + "threshold" : 0.8500000238418579 + } + } + }, + "locale" : "c.UTF-8", + "threadsMaxIdle" : 5, + "threadsMaxTotal" : 5, + "links" : { + } +} diff --git a/Documentation/Examples/RestViewPostView.generated b/Documentation/Examples/RestViewPostView.generated new file mode 100644 index 0000000000..a121b4bccf --- /dev/null +++ b/Documentation/Examples/RestViewPostView.generated @@ -0,0 +1,18 @@ +shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/view <<EOF +{ + "name" : "testViewBasics", + "type" : "arangosearch", + "properties" : { + } +} +EOF + +HTTP/1.1 201 Created +content-type: application/json; charset=utf-8 +x-content-type-options: nosniff + +{ + "id" : "15079", + "name" : "testViewBasics", + "type" : "arangosearch" +} diff --git a/Documentation/Examples/RestViewPutViewRename.generated b/Documentation/Examples/RestViewPutViewRename.generated new file mode 100644 index 0000000000..ceaacfa434 --- /dev/null +++ b/Documentation/Examples/RestViewPutViewRename.generated @@ -0,0 +1,46 @@ +shell> curl -X PUT --data-binary @- --dump - http://localhost:8529/_api/view/products1/rename <<EOF +{ + "name" : "viewNewName" +} +EOF + +HTTP/1.1 200 OK +content-type: application/json; charset=utf-8 +x-content-type-options: nosniff + +{ + "id" : "15081", + "name" : "viewNewName", + "type" : "arangosearch", + "properties" : { + "collections" : [ ], + "commit" : { + "cleanupIntervalStep" : 10, + "commitIntervalMsec" : 60000, + "commitTimeoutMsec" : 5000, + "consolidate" : { + "bytes" : { + "segmentThreshold" : 300, + "threshold" : 0.8500000238418579 + }, + "bytes_accum" : { + "segmentThreshold" : 300, + "threshold" : 0.8500000238418579 + }, + "count" : { + "segmentThreshold" : 300, + "threshold" : 0.8500000238418579 + }, + "fill" : { + "segmentThreshold" : 300, + "threshold" : 0.8500000238418579 + } + } + }, + "locale" : "C", + "threadsMaxIdle" : 5, + "threadsMaxTotal" : 5, + "links" : { + } + } +} diff --git a/Documentation/Examples/collectionDatabaseName.generated b/Documentation/Examples/collectionDatabaseName.generated index edb261b6ef..b9dd6250ae 100644 --- a/Documentation/Examples/collectionDatabaseName.generated +++ b/Documentation/Examples/collectionDatabaseName.generated @@ -1,2 +1,2 @@ arangosh> db._collection("demo"); -[ArangoCollection 92, "demo" (type document, status loaded)] +[ArangoCollection 88, "demo" (type document, status loaded)] diff --git a/Documentation/Examples/collectionDatabaseNameKnown.generated b/Documentation/Examples/collectionDatabaseNameKnown.generated index edb261b6ef..b9dd6250ae 100644 --- a/Documentation/Examples/collectionDatabaseNameKnown.generated +++ b/Documentation/Examples/collectionDatabaseNameKnown.generated @@ -1,2 +1,2 @@ arangosh> db._collection("demo"); -[ArangoCollection 92, "demo" (type document, status loaded)] +[ArangoCollection 88, "demo" (type document, status loaded)] diff --git a/Documentation/Examples/cursorCountLimit.generated b/Documentation/Examples/cursorCountLimit.generated index b890ec44ee..825b8f222b 100644 --- a/Documentation/Examples/cursorCountLimit.generated +++ b/Documentation/Examples/cursorCountLimit.generated @@ -1,2 +1,2 @@ arangosh> db.five.all().limit(2).count(true); -2 +null diff --git a/Documentation/Examples/generalGraphModuleCommonNeighbors1.generated b/Documentation/Examples/generalGraphModuleCommonNeighbors1.generated index 44890bf2c4..078d134b2a 100644 --- a/Documentation/Examples/generalGraphModuleCommonNeighbors1.generated +++ b/Documentation/Examples/generalGraphModuleCommonNeighbors1.generated @@ -7,17 +7,17 @@ arangosh> graph._commonNeighbors({isCapital : "right" : "frenchCity/Paris", "neighbors" : [ "frenchCity/Lyon", - "germanCity/Cologne", - "germanCity/Hamburg" + "germanCity/Hamburg", + "germanCity/Cologne" ] }, { "left" : "frenchCity/Paris", "right" : "germanCity/Berlin", "neighbors" : [ - "germanCity/Cologne", + "germanCity/Hamburg", "frenchCity/Lyon", - "germanCity/Hamburg" + "germanCity/Cologne" ] } ] diff --git a/Documentation/Examples/generalGraphModuleCommonNeighbors2.generated b/Documentation/Examples/generalGraphModuleCommonNeighbors2.generated index 8d4e2a3092..d01d61023e 100644 --- a/Documentation/Examples/generalGraphModuleCommonNeighbors2.generated +++ b/Documentation/Examples/generalGraphModuleCommonNeighbors2.generated @@ -10,16 +10,16 @@ arangosh> graph._commonNeighbors( "left" : "germanCity/Hamburg", "right" : "germanCity/Cologne", "neighbors" : [ - "frenchCity/Lyon", - "frenchCity/Paris" + "frenchCity/Paris", + "frenchCity/Lyon" ] }, { "left" : "germanCity/Hamburg", "right" : "germanCity/Berlin", "neighbors" : [ - "frenchCity/Lyon", "frenchCity/Paris", + "frenchCity/Lyon", "germanCity/Cologne" ] }, diff --git a/Documentation/Examples/job_getStatusById_02.generated b/Documentation/Examples/job_getStatusById_02.generated new file mode 100644 index 0000000000..4e4539a0f0 --- /dev/null +++ b/Documentation/Examples/job_getStatusById_02.generated @@ -0,0 +1,22 @@ +shell> curl -X POST --header 'x-arango-async: store' --data-binary @- --dump - http://localhost:8529/_api/transaction <<EOF +{ + "collections" : { + "read" : [ + "_frontend" + ] + }, + "action" : "function () {require('internal').sleep(15.0);}" +} +EOF + +HTTP/1.1 202 Accepted +content-type: text/plain; charset=utf-8 +x-content-type-options: nosniff +x-arango-async-id: 152098435649405 + +shell> curl --dump - http://localhost:8529/_api/job/152098435649405 + +HTTP/1.1 204 No Content +content-type: text/plain; charset=utf-8 +x-content-type-options: nosniff + diff --git a/Documentation/Examples/joinTuples.generated b/Documentation/Examples/joinTuples.generated new file mode 100644 index 0000000000..92fd4e5f66 --- /dev/null +++ b/Documentation/Examples/joinTuples.generated @@ -0,0 +1,53 @@ +@Q: + FOR u IN users + FILTER u.active == true + LIMIT 0, 4 + FOR f IN relations + FILTER f.type == @friend && f.friendOf == u.userId + RETURN { + "user" : u.name, + "friendId" : f.thisUser + } +@B +{ + "friend": "friend" +} +@R +[ + { + "user": "Abigail", + "friendId": 2 + }, + { + "user": "Abigail", + "friendId": 3 + }, + { + "user": "Abigail", + "friendId": 4 + }, + { + "user": "Mary", + "friendId": 1 + }, + { + "user": "Mary", + "friendId": 4 + }, + { + "user": "Mariah", + "friendId": 1 + }, + { + "user": "Mariah", + "friendId": 2 + }, + { + "user": "Fred", + "friendId": 5 + }, + { + "user": "Fred", + "friendId": 2 + } +] \ No newline at end of file diff --git a/LICENSES-OTHER-COMPONENTS.md b/LICENSES-OTHER-COMPONENTS.md index 62dec9c45d..889f95ee97 100644 --- a/LICENSES-OTHER-COMPONENTS.md +++ b/LICENSES-OTHER-COMPONENTS.md @@ -1,3 +1,12 @@ +- [Other Licenses](#other-licenses) + * [C/C++ Libraries](#cc-libraries) + * [Programs](#programs) + * [Javascript](#javascript) + + [Node core modules](#node-core-modules) + + [Bundled NPM modules](#bundled-npm-modules) + + [Backend libraries](#backend-libraries) + + [Frontend libraries](#frontend-libraries) + # Other Licenses ## C/C++ Libraries @@ -176,10 +185,10 @@ exception from the GPL license: * Project Home: https://github.com/chalk/ansi-styles#readme * License: [MIT License](https://github.com/arangodb/arangodb/blob/devel/js/node/node_modules/chalk/node_modules/ansi-styles/package.json) -#### ansi-styles +#### ansi_up -* Project Home: https://github.com/chalk/ansi-styles#readme -* License: [MIT License](https://github.com/arangodb/arangodb/blob/devel/js/node/node_modules/eslint/node_modules/ansi-styles/package.json) +* Project Home: https://github.com/drudru/ansi_up +* License: [MIT License](https://github.com/drudru/ansi_up#license) #### aqb diff --git a/README_maintainers.md b/README_maintainers.md index c5c27656e0..7c486575be 100644 --- a/README_maintainers.md +++ b/README_maintainers.md @@ -655,8 +655,8 @@ Here is how its details work: - all code in between is executed as javascript in the **arangosh** while talking to a valid **arangod**. You may inspect the generated js code in `/tmp/arangosh.examples.js` -OUTPUT and RUN specifics ---------------------------- +OUTPUT, RUN and AQL specifics +----------------------------- By default, Examples should be self contained and thus not depend on each other. They should clean up the collections they create. Building will fail if resources aren't cleaned. However, if you intend a set of OUTPUT and RUN to demonstrate interactively and share generated *ids*, you have to use an alphabetical @@ -694,6 +694,14 @@ sortable naming scheme so they're executed in sequence. Using `_ ansi_up.js + mv ./dist/ansi_up.js ./dist/ansi_up.js.include + +test: + @NODE_ENV=test ./node_modules/.bin/mocha \ + --require should \ + --reporter $(REPORTER) \ + $(TESTS) + +test_verbose: + @NODE_ENV=test ./node_modules/.bin/mocha \ + --require should \ + --reporter spec \ + $(TESTS) + +clean: + rm -rf ./node_modules ansi_up.js + +.PHONY: test diff --git a/js/node/node_modules/ansi_up/Readme.md b/js/node/node_modules/ansi_up/Readme.md new file mode 100644 index 0000000000..d176266ad0 --- /dev/null +++ b/js/node/node_modules/ansi_up/Readme.md @@ -0,0 +1,220 @@ +# ansi_up.js + +__ansi_up__ is a simple, easy to use library that provides a streaming API to +transform text containing +[ANSI color escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) into proper HTML. +It can also transform any text that looks like a URL into an HTML anchor tag. + +This module is a single Javascript file with no dependencies. It is a UMD style module so it +can be utilized in a browser, in node.js (CommonJS), or with AMD (require.js). The source code +was compiled from TypeScript and its type description ships with the NPM. This code has been used in production since 2011 and is actively maintained. + +For example, turn this terminal output: + + ESC[1;Foreground +  30  30  30  30  30  30  30  30  +  31  31  31  31  31  31  31  31  +  32  32  32  32  32  32  32  32  + ... + +...into this browser output: + +![](https://raw.github.com/drudru/ansi_up/master/sample.png) + + +## Browser Example + +```HTML + + +``` + +## Node Example + +```JavaScript + var AU = require('ansi_up'); + var ansi_up = new AU.default; + + var txt = "\n\n\033[1;33;40m 33;40 \033[1;33;41m 33;41 \033[1;33;42m 33;42 \033[1;33;43m 33;43 \033[1;33;44m 33;44 \033[1;33;45m 33;45 \033[1;33;46m 33;46 \033[1m\033[0\n\n\033[1;33;42m >> Tests OK\n\n" + + var html = ansi_up.ansi_to_html(txt); +``` + +More examples are in the 'examples' directory in the repo. + +## Installation + + $ npm install ansi_up + +## Versions + +Version 2.x is the latest stateful, streaming version of the API. It is simpler and more correct. +Version 1.3.0 was the last of the older, deprecated API. + +## Quick Start + +1. Use whatever module system to import the _ansi_up_ module. +2. Instantiate the object. +3. For every piece of input that arrives, call **ansi_to_html**. +4. Append the emitted HTML to the previous HTML already emitted. + + +## API Methods + +In order to use _ansi_up_, you must Instantiate an object using your given module +system. + +#### ansi_to_html (txt) + +This replaces ANSI terminal escape codes with SPAN tags that wrap the content. See the example output above. + +This function only interprets ANSI SGR (Select Graphic Rendition) codes that can be represented in HTML. For example, cursor movement codes are ignored and hidden from output. + +The default style uses colors that are very close to the prescribed standard. The standard assumes that the text will have a black background. These colors are set as inline styles on the SPAN tags. Another option is to set 'use_classes: true' in the options argument. This will instead set classes on the spans so the colors can be set via CSS. The class names used are of the format ````ansi-*-fg/bg```` and ````ansi-bright-*-fg/bg```` where * is the colour name, i.e black/red/green/yellow/blue/magenta/cyan/white. See the examples directory for a complete CSS theme for these classes. + +#### ansi_to_text (txt) + +This simply removes the ANSI escape codes from the stream. +No escaping is done. + +#### linkify(txt) + +This replaces any links in the text with anchor tags that display the link. +Only strings starting with 'http' or 'https', and surrounded by whitespace are +considered valid patterns. +You should only call this method if you can guarantee that the full URL +will be passed into ansi_to_html(). If the URL is split along a buffer +boundary, then the wrong URL will be 'linkified'. + +## Properties + +#### escape_for_html +(default: true) + +This does the minimum escaping of text to make it compliant with HTML. +In particular, the '&','<', and '>' characters are escaped. + + +#### use_classes +(default: false) + +This causes the SPAN tags to use class names for the color style instead +of specified RGB values. + +## API Overview + +On a high level, _ansi_up_ takes a stream of text and transforms it proper HTML with colors. +It does this by buffering the data and performing multiple passes over the +stream. Each time it consumes data, it may or may not emit HTML. This HTML will always be +proper HTML. + +Because this process requires buffering (ie. stateful), you must insantiate an _ansi_up_ object +in order to begin. Also, text may be received later that is styled by a previous. + +The first pass converts characters that are unsafe for HTML into their equivalents. It will only +convert '&', '<', and '>' characters. This pass is optional, and is on by default. + +The second pass converts any ANSI color sequences to HTML spans. It does this by recognizing +what is termed as ANSI **SGR** codes. All ANSI sequences (SGR and non-SGR) are removed from the +output stream. The SGR codes create HTML **SPAN** tags to surround text that is styled by those +codes. If the ANSI sequence is incomplete, it will be held in _ansi_up_'s internal buffer +until new data is received to complete it. + +The third and final pass transforms URLs to HTML anchors. This will also buffer output until a non URL +character is received. This pass is optional, and is off by default. + + +### Recommended Style of Use + +There are two ways to stream this data to a web page. A push model or a pull model. + +I have personally used a pull model to 'tail' a file. + +In my 'pull' model, I had a process generating a log file on a remote machine. +I had a web server running on the same machine. I developed a simple page +that used AJAX to poll the web server periodically. Specifically I used an +HTTP/1.1 GET request with RFC 7233 Range query. The server would return +either range response. + +I would then process each chunk received with _ansi_up_, and append the new +spans to the innerHTML of a PRE tag. + + +### UTF8 note + +One last important note, _ansi_up_ takes its input in the form of a Javascript string. +These strings are UTF8. When you take the output of some program and send it to +Javascript, there will be buffering. Be sure to not send incomplete UTF8 sequences or +Javascript will ignore or drop the sequence from the stream when it converts it to a +string. + + +_ansi_up_ should be called via the functions defined on the module. It is recommended that the HTML is rendered with a monospace font and black background. See the examples, for a basic theme as a CSS definition. +At the same, it also properly escapes HTML unsafe characters (&,<,>,etc.) into their proper HTML representation. + + +## Building + +To build, a simple Makefile handles it all. + +```shell + $ make +``` + +## Running tests + +To run the tests for _ansi_up_, run `npm install` to install dev dependencies. Then: + +```shell + $ make test +``` + +## Credits + +This code was developed by Dru Nelson (). + +Thanks goes to the following contributors for their patches: + +- AIZAWA Hina () +- James R. White () +- Aaron Stone () +- Maximilian Antoni () +- Jim Bauwens () +- Jacek Jędrzejewski () + +## License + +(The MIT License) + +Copyright (c) 2011 Dru Nelson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/js/node/node_modules/ansi_up/ansi_up.js b/js/node/node_modules/ansi_up/ansi_up.js new file mode 100644 index 0000000000..8a41ec1013 --- /dev/null +++ b/js/node/node_modules/ansi_up/ansi_up.js @@ -0,0 +1,334 @@ +/* ansi_up.js + * author : Dru Nelson + * license : MIT + * http://github.com/drudru/ansi_up + */ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports'], factory); + } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { + // CommonJS + factory(exports); + } else { + // Browser globals + var exp = {}; + factory(exp); + root.AnsiUp = exp.default; + } +}(this, function (exports) { +"use strict"; +function rgx(tmplObj) { + var subst = []; + for (var _i = 1; _i < arguments.length; _i++) { + subst[_i - 1] = arguments[_i]; + } + var regexText = tmplObj.raw[0]; + var wsrgx = /^\s+|\s+\n|\s+#[\s\S]+?\n/gm; + var txt2 = regexText.replace(wsrgx, ''); + return new RegExp(txt2, 'm'); +} +var AnsiUp = (function () { + function AnsiUp() { + this.VERSION = "2.0.2"; + this.ansi_colors = [ + [ + { rgb: [0, 0, 0], class_name: "ansi-black" }, + { rgb: [187, 0, 0], class_name: "ansi-red" }, + { rgb: [0, 187, 0], class_name: "ansi-green" }, + { rgb: [187, 187, 0], class_name: "ansi-yellow" }, + { rgb: [0, 0, 187], class_name: "ansi-blue" }, + { rgb: [187, 0, 187], class_name: "ansi-magenta" }, + { rgb: [0, 187, 187], class_name: "ansi-cyan" }, + { rgb: [255, 255, 255], class_name: "ansi-white" } + ], + [ + { rgb: [85, 85, 85], class_name: "ansi-bright-black" }, + { rgb: [255, 85, 85], class_name: "ansi-bright-red" }, + { rgb: [0, 255, 0], class_name: "ansi-bright-green" }, + { rgb: [255, 255, 85], class_name: "ansi-bright-yellow" }, + { rgb: [85, 85, 255], class_name: "ansi-bright-blue" }, + { rgb: [255, 85, 255], class_name: "ansi-bright-magenta" }, + { rgb: [85, 255, 255], class_name: "ansi-bright-cyan" }, + { rgb: [255, 255, 255], class_name: "ansi-bright-white" } + ] + ]; + this.htmlFormatter = { + transform: function (fragment, instance) { + var txt = fragment.text; + if (txt.length === 0) + return txt; + if (instance._escape_for_html) + txt = instance.old_escape_for_html(txt); + if (!fragment.bright && fragment.fg === null && fragment.bg === null) + return txt; + var styles = []; + var classes = []; + var fg = fragment.fg; + var bg = fragment.bg; + if (fg === null && fragment.bright) + fg = instance.ansi_colors[1][7]; + if (!instance._use_classes) { + if (fg) + styles.push("color:rgb(" + fg.rgb.join(',') + ")"); + if (bg) + styles.push("background-color:rgb(" + bg.rgb + ")"); + } + else { + if (fg) { + if (fg.class_name !== 'truecolor') { + classes.push(fg.class_name + "-fg"); + } + else { + styles.push("color:rgb(" + fg.rgb.join(',') + ")"); + } + } + if (bg) { + if (bg.class_name !== 'truecolor') { + classes.push(bg.class_name + "-bg"); + } + else { + styles.push("background-color:rgb(" + bg.rgb.join(',') + ")"); + } + } + } + var class_string = ''; + var style_string = ''; + if (classes.length) + class_string = " class=\"" + classes.join(' ') + "\""; + if (styles.length) + style_string = " style=\"" + styles.join(';') + "\""; + return "" + txt + ""; + }, + compose: function (segments, instance) { + return segments.join(""); + } + }; + this.textFormatter = { + transform: function (fragment, instance) { + return fragment.text; + }, + compose: function (segments, instance) { + return segments.join(""); + } + }; + this.setup_256_palette(); + this._use_classes = false; + this._escape_for_html = true; + this.bright = false; + this.fg = this.bg = null; + this._buffer = ''; + } + Object.defineProperty(AnsiUp.prototype, "use_classes", { + get: function () { + return this._use_classes; + }, + set: function (arg) { + this._use_classes = arg; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnsiUp.prototype, "escape_for_html", { + get: function () { + return this._escape_for_html; + }, + set: function (arg) { + this._escape_for_html = arg; + }, + enumerable: true, + configurable: true + }); + AnsiUp.prototype.setup_256_palette = function () { + var _this = this; + this.palette_256 = []; + this.ansi_colors.forEach(function (palette) { + palette.forEach(function (rec) { + _this.palette_256.push(rec); + }); + }); + var levels = [0, 95, 135, 175, 215, 255]; + for (var r = 0; r < 6; ++r) { + for (var g = 0; g < 6; ++g) { + for (var b = 0; b < 6; ++b) { + var col = { rgb: [levels[r], levels[g], levels[b]], class_name: 'truecolor' }; + this.palette_256.push(col); + } + } + } + var grey_level = 8; + for (var i = 0; i < 24; ++i, grey_level += 10) { + var gry = { rgb: [grey_level, grey_level, grey_level], class_name: 'truecolor' }; + this.palette_256.push(gry); + } + }; + AnsiUp.prototype.old_escape_for_html = function (txt) { + return txt.replace(/[&<>]/gm, function (str) { + if (str === "&") + return "&"; + if (str === "<") + return "<"; + if (str === ">") + return ">"; + }); + }; + AnsiUp.prototype.old_linkify = function (txt) { + return txt.replace(/(https?:\/\/[^\s]+)/gm, function (str) { + return "" + str + ""; + }); + }; + AnsiUp.prototype.detect_incomplete_ansi = function (txt) { + return !(/.*?[\x40-\x7e]/.test(txt)); + }; + AnsiUp.prototype.detect_incomplete_link = function (txt) { + var found = false; + for (var i = txt.length - 1; i > 0; i--) { + if (/\s|\x1B/.test(txt[i])) { + found = true; + break; + } + } + if (!found) { + if (/(https?:\/\/[^\s]+)/.test(txt)) + return 0; + else + return -1; + } + var prefix = txt.substr(i + 1, 4); + if (prefix.length === 0) + return -1; + if ("http".indexOf(prefix) === 0) + return (i + 1); + }; + AnsiUp.prototype.ansi_to = function (txt, formatter) { + var pkt = this._buffer + txt; + this._buffer = ''; + var raw_text_pkts = pkt.split(/\x1B\[/); + if (raw_text_pkts.length === 1) + raw_text_pkts.push(''); + this.handle_incomplete_sequences(raw_text_pkts); + var first_chunk = this.with_state(raw_text_pkts.shift()); + var blocks = new Array(raw_text_pkts.length); + for (var i = 0, len = raw_text_pkts.length; i < len; ++i) { + blocks[i] = (formatter.transform(this.process_ansi(raw_text_pkts[i]), this)); + } + if (first_chunk.text.length > 0) + blocks.unshift(formatter.transform(first_chunk, this)); + return formatter.compose(blocks, this); + }; + AnsiUp.prototype.ansi_to_html = function (txt) { + return this.ansi_to(txt, this.htmlFormatter); + }; + AnsiUp.prototype.ansi_to_text = function (txt) { + return this.ansi_to(txt, this.textFormatter); + }; + AnsiUp.prototype.with_state = function (text) { + return { bright: this.bright, fg: this.fg, bg: this.bg, text: text }; + }; + AnsiUp.prototype.handle_incomplete_sequences = function (chunks) { + var last_chunk = chunks[chunks.length - 1]; + if ((last_chunk.length > 0) && this.detect_incomplete_ansi(last_chunk)) { + this._buffer = "\x1B[" + last_chunk; + chunks.pop(); + chunks.push(''); + } + else { + if (last_chunk.slice(-1) === "\x1B") { + this._buffer = "\x1B"; + console.log("raw", chunks); + chunks.pop(); + chunks.push(last_chunk.substr(0, last_chunk.length - 1)); + console.log(chunks); + console.log(last_chunk); + } + if (chunks.length === 2 && + chunks[1] === "" && + chunks[0].slice(-1) === "\x1B") { + this._buffer = "\x1B"; + last_chunk = chunks.shift(); + chunks.unshift(last_chunk.substr(0, last_chunk.length - 1)); + } + } + }; + AnsiUp.prototype.process_ansi = function (block) { + if (!this._sgr_regex) { + this._sgr_regex = (_a = ["\n ^ # beginning of line\n ([!<-?]?) # a private-mode char (!, <, =, >, ?)\n ([d;]*) # any digits or semicolons\n ([ -/]? # an intermediate modifier\n [@-~]) # the command\n ([sS]*) # any text following this CSI sequence\n "], _a.raw = ["\n ^ # beginning of line\n ([!\\x3c-\\x3f]?) # a private-mode char (!, <, =, >, ?)\n ([\\d;]*) # any digits or semicolons\n ([\\x20-\\x2f]? # an intermediate modifier\n [\\x40-\\x7e]) # the command\n ([\\s\\S]*) # any text following this CSI sequence\n "], rgx(_a)); + } + var matches = block.match(this._sgr_regex); + if (!matches) { + return this.with_state(block); + } + var orig_txt = matches[4]; + if (matches[1] !== '' || matches[3] !== 'm') { + return this.with_state(orig_txt); + } + var sgr_cmds = matches[2].split(';'); + while (sgr_cmds.length > 0) { + var sgr_cmd_str = sgr_cmds.shift(); + var num = parseInt(sgr_cmd_str, 10); + if (isNaN(num) || num === 0) { + this.fg = this.bg = null; + this.bright = false; + } + else if (num === 1) { + this.bright = true; + } + else if (num === 22) { + this.bright = false; + } + else if (num === 39) { + this.fg = null; + } + else if (num === 49) { + this.bg = null; + } + else if ((num >= 30) && (num < 38)) { + var bidx = this.bright ? 1 : 0; + this.fg = this.ansi_colors[bidx][(num - 30)]; + } + else if ((num >= 90) && (num < 98)) { + this.fg = this.ansi_colors[1][(num - 90)]; + } + else if ((num >= 40) && (num < 48)) { + this.bg = this.ansi_colors[0][(num - 40)]; + } + else if ((num >= 100) && (num < 108)) { + this.bg = this.ansi_colors[1][(num - 100)]; + } + else if (num === 38 || num === 48) { + if (sgr_cmds.length > 0) { + var is_foreground = (num === 38); + var mode_cmd = sgr_cmds.shift(); + if (mode_cmd === '5' && sgr_cmds.length > 0) { + var palette_index = parseInt(sgr_cmds.shift(), 10); + if (palette_index >= 0 && palette_index <= 255) { + if (is_foreground) + this.fg = this.palette_256[palette_index]; + else + this.bg = this.palette_256[palette_index]; + } + } + if (mode_cmd === '2' && sgr_cmds.length > 2) { + var r = parseInt(sgr_cmds.shift(), 10); + var g = parseInt(sgr_cmds.shift(), 10); + var b = parseInt(sgr_cmds.shift(), 10); + if ((r >= 0 && r <= 255) && (g >= 0 && g <= 255) && (b >= 0 && b <= 255)) { + var c = { rgb: [r, g, b], class_name: 'truecolor' }; + if (is_foreground) + this.fg = c; + else + this.bg = c; + } + } + } + } + } + return this.with_state(orig_txt); + var _a; + }; + return AnsiUp; +}()); +//# sourceMappingURL=ansi_up.js.map + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = AnsiUp; +})); diff --git a/js/node/node_modules/ansi_up/ansi_up.ts b/js/node/node_modules/ansi_up/ansi_up.ts new file mode 100644 index 0000000000..c55617a31e --- /dev/null +++ b/js/node/node_modules/ansi_up/ansi_up.ts @@ -0,0 +1,487 @@ +/* ansi_up.js + * author : Dru Nelson + * license : MIT + * http://github.com/drudru/ansi_up + */ + +"use strict"; + +interface AU_Color +{ + rgb:number[]; + class_name:string; +} + +// Represents the output of process_ansi(): a snapshot of the AnsiUp state machine +// at a given point in time, which wraps a fragment of text. This wouuld allow deferred +// processing of text fragments and colors, if ever needed. +interface TextWithData { + fg:AU_Color; + bg:AU_Color; + bright:boolean; + text:string; +} + +// Represents an object that is responsible for generating output from parsed ANSI color +// metadata and text content. +interface Formatter { + // Invoked for each generated TextWithData fragment outputted by process_ansi(). + // this function is responsible for generating output for a single TextWithData + // fragment. The result of transform() will be collected into an array that will + // be provided to compose(). + transform(fragment:TextWithData, instance:AnsiUp):any; + + // Invoked on the set of outputs from transform; the return value of this function + // will be the final output of ANSI processing. + compose(segments:any[], instance:AnsiUp):any; +} + +// ES5 template string transformer +// NOTE: default is multiline (workaround for now til I can +// determine flags inline) +function rgx(tmplObj, ...subst) { + // Use the 'raw' value so we don't have to double backslash in a template string + let regexText:string = tmplObj.raw[0]; + + // Remove white-space and comments + let wsrgx = /^\s+|\s+\n|\s+#[\s\S]+?\n/gm; + let txt2 = regexText.replace(wsrgx, ''); + return new RegExp(txt2, 'm'); +} + +class AnsiUp +{ + VERSION = "2.0.2"; + + ansi_colors = + [ + // Normal colors + [ + { rgb: [ 0, 0, 0], class_name: "ansi-black" }, + { rgb: [187, 0, 0], class_name: "ansi-red" }, + { rgb: [ 0, 187, 0], class_name: "ansi-green" }, + { rgb: [187, 187, 0], class_name: "ansi-yellow" }, + { rgb: [ 0, 0, 187], class_name: "ansi-blue" }, + { rgb: [187, 0, 187], class_name: "ansi-magenta" }, + { rgb: [ 0, 187, 187], class_name: "ansi-cyan" }, + { rgb: [255, 255, 255], class_name: "ansi-white" } + ], + + // Bright colors + [ + { rgb: [ 85, 85, 85], class_name: "ansi-bright-black" }, + { rgb: [255, 85, 85], class_name: "ansi-bright-red" }, + { rgb: [ 0, 255, 0], class_name: "ansi-bright-green" }, + { rgb: [255, 255, 85], class_name: "ansi-bright-yellow" }, + { rgb: [ 85, 85, 255], class_name: "ansi-bright-blue" }, + { rgb: [255, 85, 255], class_name: "ansi-bright-magenta" }, + { rgb: [ 85, 255, 255], class_name: "ansi-bright-cyan" }, + { rgb: [255, 255, 255], class_name: "ansi-bright-white" } + ] + ]; + + htmlFormatter:Formatter = { + transform(fragment:TextWithData, instance:AnsiUp):string { + let txt = fragment.text; + + if (txt.length === 0) + return txt; + + if (instance._escape_for_html) + txt = instance.old_escape_for_html(txt); + + // If colors not set, default style is used + if (!fragment.bright && fragment.fg === null && fragment.bg === null) + return txt; + + let styles:string[] = []; + let classes:string[] = []; + + let fg = fragment.fg; + let bg = fragment.bg; + + // Handle the case where we are told to be bright, but without a color + if (fg === null && fragment.bright) + fg = instance.ansi_colors[1][7]; + + if (!instance._use_classes) { + // USE INLINE STYLES + if (fg) + styles.push(`color:rgb(${fg.rgb.join(',')})`); + if (bg) + styles.push(`background-color:rgb(${bg.rgb})`); + } else { + // USE CLASSES + if (fg) { + if (fg.class_name !== 'truecolor') { + classes.push(`${fg.class_name}-fg`); + } else { + styles.push(`color:rgb(${fg.rgb.join(',')})`); + } + } + if (bg) { + if (bg.class_name !== 'truecolor') { + classes.push(`${bg.class_name}-bg`); + } else { + styles.push(`background-color:rgb(${bg.rgb.join(',')})`); + } + } + } + + let class_string = ''; + let style_string = ''; + + if (classes.length) + class_string = ` class="${classes.join(' ')}"`; + + if (styles.length) + style_string = ` style="${styles.join(';')}"`; + + return `${txt}`; + }, + + compose(segments:string[], instance:AnsiUp):string { + return segments.join(""); + } + }; + + textFormatter:Formatter = { + transform(fragment:TextWithData, instance:AnsiUp):string { + return fragment.text; + }, + + compose(segments:string[], instance:AnsiUp):string { + return segments.join(""); + } + }; + + // 256 Colors Palette + // CSS RGB strings - ex. "255, 255, 255" + private palette_256:AU_Color[]; + + private fg:AU_Color; + private bg:AU_Color; + private bright:boolean; + + private _use_classes:boolean; + private _escape_for_html; + private _sgr_regex:RegExp; + + private _buffer:string; + + constructor() + { + this.setup_256_palette(); + this._use_classes = false; + this._escape_for_html = true; + + this.bright = false; + this.fg = this.bg = null; + + this._buffer = ''; + } + + set use_classes(arg:boolean) + { + this._use_classes = arg; + } + + get use_classes():boolean + { + return this._use_classes; + } + + set escape_for_html(arg:boolean) + { + this._escape_for_html = arg; + } + + get escape_for_html():boolean + { + return this._escape_for_html; + } + + private setup_256_palette():void + { + this.palette_256 = []; + + // Index 0..15 : Ansi-Colors + this.ansi_colors.forEach( palette => { + palette.forEach( rec => { + this.palette_256.push(rec); + }); + }); + + // Index 16..231 : RGB 6x6x6 + // https://gist.github.com/jasonm23/2868981#file-xterm-256color-yaml + let levels = [0, 95, 135, 175, 215, 255]; + for (let r = 0; r < 6; ++r) { + for (let g = 0; g < 6; ++g) { + for (let b = 0; b < 6; ++b) { + let col = {rgb:[levels[r], levels[g], levels[b]], class_name:'truecolor'}; + this.palette_256.push(col); + } + } + } + + // Index 232..255 : Grayscale + let grey_level = 8; + for (let i = 0; i < 24; ++i, grey_level += 10) { + let gry = {rgb:[grey_level, grey_level, grey_level], class_name:'truecolor'}; + this.palette_256.push(gry); + } + } + + private old_escape_for_html(txt:string):string + { + return txt.replace(/[&<>]/gm, (str) => { + if (str === "&") return "&"; + if (str === "<") return "<"; + if (str === ">") return ">"; + }); + } + + private old_linkify(txt:string):string + { + return txt.replace(/(https?:\/\/[^\s]+)/gm, (str) => { + return `${str}`; + }); + } + + private detect_incomplete_ansi(txt:string) + { + // Scan forwards for a potential command character + // If one exists, we must assume we are good + // [\x40-\x7e]) # the command + + return !(/.*?[\x40-\x7e]/.test(txt)); + } + + private detect_incomplete_link(txt:string) + { + // It would be nice if Javascript RegExp supported + // a hitEnd() method + + // Scan backwards for first whitespace + var found = false; + for (var i = txt.length - 1; i > 0; i--) { + if (/\s|\x1B/.test(txt[i])) { + found = true; + break; + } + } + + if (!found) { + // Handle one other case + // Maybe the whole string is a URL? + if (/(https?:\/\/[^\s]+)/.test(txt)) + return 0; + else + return -1; + } + + // Test if possible prefix + var prefix = txt.substr(i + 1, 4); + + if (prefix.length === 0) return -1; + + if ("http".indexOf(prefix) === 0) + return (i + 1); + } + + ansi_to(txt:string, formatter:Formatter):any { + var pkt = this._buffer + txt; + this._buffer = ''; + + var raw_text_pkts = pkt.split(/\x1B\[/); + + if (raw_text_pkts.length === 1) + raw_text_pkts.push(''); + + this.handle_incomplete_sequences(raw_text_pkts); + + let first_chunk = this.with_state(raw_text_pkts.shift()); // the first pkt is not the result of the split + + let blocks = new Array(raw_text_pkts.length); + for (let i = 0, len = raw_text_pkts.length; i < len; ++i) { + blocks[i] = (formatter.transform(this.process_ansi(raw_text_pkts[i]), this)); + } + + if (first_chunk.text.length > 0) + blocks.unshift(formatter.transform(first_chunk, this)); + + return formatter.compose(blocks, this); + } + + ansi_to_html(txt:string):string + { + return this.ansi_to(txt, this.htmlFormatter); + } + + ansi_to_text(txt:string):string + { + return this.ansi_to(txt, this.textFormatter); + } + + private with_state(text:string):TextWithData { + return { bright: this.bright, fg: this.fg, bg: this.bg, text: text }; + } + + private handle_incomplete_sequences(chunks:string[]):void { + // COMPLEX - BEGIN + + // Validate the last chunks for: + // - incomplete ANSI sequence + // - incomplete ESC + // If any of these occur, we may have to buffer + var last_chunk = chunks[chunks.length - 1]; + + // - incomplete ANSI sequence + if ((last_chunk.length > 0) && this.detect_incomplete_ansi(last_chunk)) { + this._buffer = "\x1B[" + last_chunk; + chunks.pop(); + chunks.push(''); + } else { + // - incomplete ESC + if (last_chunk.slice(-1) === "\x1B") { + this._buffer = "\x1B"; + console.log("raw", chunks); + chunks.pop(); + chunks.push(last_chunk.substr(0, last_chunk.length - 1)); + console.log(chunks); + console.log(last_chunk); + } + // - Incomplete ESC, only one packet + if (chunks.length === 2 && + chunks[1] === "" && + chunks[0].slice(-1) === "\x1B") { + this._buffer = "\x1B"; + last_chunk = chunks.shift(); + chunks.unshift(last_chunk.substr(0, last_chunk.length - 1)); + } + } + + // COMPLEX - END + } + + private process_ansi(block:string):TextWithData + { + // This must only be called with a string that started with a CSI (the string split above) + // The CSI must not be in the string. We consider this string to be a 'block'. + // It has an ANSI command at the front that affects the text that follows it. + // + // All ansi codes are typically in the following format. We parse it and focus + // specifically on the graphics commands (SGR) + // + // CONTROL-SEQUENCE-INTRODUCER CSI (ESC, '[') + // PRIVATE-MODE-CHAR (!, <, >, ?) + // Numeric parameters separated by semicolons ('0' - '9', ';') + // Intermediate-modifiers (0x20 - 0x2f) + // COMMAND-CHAR (0x40 - 0x7e) + // + // We use a regex to parse into capture groups the PRIVATE-MODE-CHAR to the COMMAND + // and the following text + + if (!this._sgr_regex) { + // This regex is designed to parse an ANSI terminal CSI command. To be more specific, + // we follow the XTERM conventions vs. the various other "standards". + // http://invisible-island.net/xterm/ctlseqs/ctlseqs.html + // + this._sgr_regex = rgx` + ^ # beginning of line + ([!\x3c-\x3f]?) # a private-mode char (!, <, =, >, ?) + ([\d;]*) # any digits or semicolons + ([\x20-\x2f]? # an intermediate modifier + [\x40-\x7e]) # the command + ([\s\S]*) # any text following this CSI sequence + `; + } + + let matches = block.match(this._sgr_regex); + + // The regex should have handled all cases! + if (!matches) { + return this.with_state(block); + } + + let orig_txt = matches[4]; + + if (matches[1] !== '' || matches[3] !== 'm') { + return this.with_state(orig_txt); + } + + // Ok - we have a valid "SGR" (Select Graphic Rendition) + + let sgr_cmds = matches[2].split(';'); + + // Each of these params affects the SGR state + + // Why do we shift through the array instead of a forEach?? + // ... because some commands consume the params that follow ! + while (sgr_cmds.length > 0) { + let sgr_cmd_str = sgr_cmds.shift(); + let num = parseInt(sgr_cmd_str, 10); + + if (isNaN(num) || num === 0) { + this.fg = this.bg = null; + this.bright = false; + } else if (num === 1) { + this.bright = true; + } else if (num === 22) { + this.bright = false; + } else if (num === 39) { + this.fg = null; + } else if (num === 49) { + this.bg = null; + } else if ((num >= 30) && (num < 38)) { + let bidx = this.bright ? 1 : 0; + this.fg = this.ansi_colors[bidx][(num - 30)]; + } else if ((num >= 90) && (num < 98)) { + this.fg = this.ansi_colors[1][(num - 90)]; + } else if ((num >= 40) && (num < 48)) { + this.bg = this.ansi_colors[0][(num - 40)]; + } else if ((num >= 100) && (num < 108)) { + this.bg = this.ansi_colors[1][(num - 100)]; + } else if (num === 38 || num === 48) { + + // extended set foreground/background color + + // validate that param exists + if (sgr_cmds.length > 0) { + // extend color (38=fg, 48=bg) + let is_foreground = (num === 38); + + let mode_cmd = sgr_cmds.shift(); + + // MODE '5' - 256 color palette + if (mode_cmd === '5' && sgr_cmds.length > 0) { + let palette_index = parseInt(sgr_cmds.shift(), 10); + if (palette_index >= 0 && palette_index <= 255) { + if (is_foreground) + this.fg = this.palette_256[palette_index]; + else + this.bg = this.palette_256[palette_index]; + } + } + + // MODE '2' - True Color + if (mode_cmd === '2' && sgr_cmds.length > 2) { + let r = parseInt(sgr_cmds.shift(), 10); + let g = parseInt(sgr_cmds.shift(), 10); + let b = parseInt(sgr_cmds.shift(), 10); + + if ((r >= 0 && r <= 255) && (g >= 0 && g <= 255) && (b >= 0 && b <= 255)) { + let c = { rgb: [r,g,b], class_name: 'truecolor'}; + if (is_foreground) + this.fg = c; + else + this.bg = c; + } + } + } + } + } + + return this.with_state(orig_txt); + } +} diff --git a/js/node/node_modules/ansi_up/dist/ansi_up.d.ts b/js/node/node_modules/ansi_up/dist/ansi_up.d.ts new file mode 100644 index 0000000000..c284f5474a --- /dev/null +++ b/js/node/node_modules/ansi_up/dist/ansi_up.d.ts @@ -0,0 +1,46 @@ +interface AU_Color { + rgb: number[]; + class_name: string; +} +interface TextWithData { + fg: AU_Color; + bg: AU_Color; + bright: boolean; + text: string; +} +interface Formatter { + transform(fragment: TextWithData, instance: AnsiUp): any; + compose(segments: any[], instance: AnsiUp): any; +} +declare function rgx(tmplObj: any, ...subst: any[]): RegExp; +declare class AnsiUp { + VERSION: string; + ansi_colors: { + rgb: number[]; + class_name: string; + }[][]; + htmlFormatter: Formatter; + textFormatter: Formatter; + private palette_256; + private fg; + private bg; + private bright; + private _use_classes; + private _escape_for_html; + private _sgr_regex; + private _buffer; + constructor(); + use_classes: boolean; + escape_for_html: boolean; + private setup_256_palette(); + private old_escape_for_html(txt); + private old_linkify(txt); + private detect_incomplete_ansi(txt); + private detect_incomplete_link(txt); + ansi_to(txt: string, formatter: Formatter): any; + ansi_to_html(txt: string): string; + ansi_to_text(txt: string): string; + private with_state(text); + private handle_incomplete_sequences(chunks); + private process_ansi(block); +} diff --git a/js/node/node_modules/ansi_up/dist/ansi_up.js.include b/js/node/node_modules/ansi_up/dist/ansi_up.js.include new file mode 100644 index 0000000000..f0d4324da4 --- /dev/null +++ b/js/node/node_modules/ansi_up/dist/ansi_up.js.include @@ -0,0 +1,312 @@ +"use strict"; +function rgx(tmplObj) { + var subst = []; + for (var _i = 1; _i < arguments.length; _i++) { + subst[_i - 1] = arguments[_i]; + } + var regexText = tmplObj.raw[0]; + var wsrgx = /^\s+|\s+\n|\s+#[\s\S]+?\n/gm; + var txt2 = regexText.replace(wsrgx, ''); + return new RegExp(txt2, 'm'); +} +var AnsiUp = (function () { + function AnsiUp() { + this.VERSION = "2.0.1"; + this.ansi_colors = [ + [ + { rgb: [0, 0, 0], class_name: "ansi-black" }, + { rgb: [187, 0, 0], class_name: "ansi-red" }, + { rgb: [0, 187, 0], class_name: "ansi-green" }, + { rgb: [187, 187, 0], class_name: "ansi-yellow" }, + { rgb: [0, 0, 187], class_name: "ansi-blue" }, + { rgb: [187, 0, 187], class_name: "ansi-magenta" }, + { rgb: [0, 187, 187], class_name: "ansi-cyan" }, + { rgb: [255, 255, 255], class_name: "ansi-white" } + ], + [ + { rgb: [85, 85, 85], class_name: "ansi-bright-black" }, + { rgb: [255, 85, 85], class_name: "ansi-bright-red" }, + { rgb: [0, 255, 0], class_name: "ansi-bright-green" }, + { rgb: [255, 255, 85], class_name: "ansi-bright-yellow" }, + { rgb: [85, 85, 255], class_name: "ansi-bright-blue" }, + { rgb: [255, 85, 255], class_name: "ansi-bright-magenta" }, + { rgb: [85, 255, 255], class_name: "ansi-bright-cyan" }, + { rgb: [255, 255, 255], class_name: "ansi-bright-white" } + ] + ]; + this.htmlFormatter = { + transform: function (fragment, instance) { + var txt = fragment.text; + if (txt.length === 0) + return txt; + if (instance._escape_for_html) + txt = instance.old_escape_for_html(txt); + if (!fragment.bright && fragment.fg === null && fragment.bg === null) + return txt; + var styles = []; + var classes = []; + var fg = fragment.fg; + var bg = fragment.bg; + if (fg === null && fragment.bright) + fg = instance.ansi_colors[1][7]; + if (!instance._use_classes) { + if (fg) + styles.push("color:rgb(" + fg.rgb.join(',') + ")"); + if (bg) + styles.push("background-color:rgb(" + bg.rgb + ")"); + } + else { + if (fg) { + if (fg.class_name !== 'truecolor') { + classes.push(fg.class_name + "-fg"); + } + else { + styles.push("color:rgb(" + fg.rgb.join(',') + ")"); + } + } + if (bg) { + if (bg.class_name !== 'truecolor') { + classes.push(bg.class_name + "-bg"); + } + else { + styles.push("background-color:rgb(" + bg.rgb.join(',') + ")"); + } + } + } + var class_string = ''; + var style_string = ''; + if (classes.length) + class_string = " class=\"" + classes.join(' ') + "\""; + if (styles.length) + style_string = " style=\"" + styles.join(';') + "\""; + return "" + txt + ""; + }, + compose: function (segments, instance) { + return segments.join(""); + } + }; + this.textFormatter = { + transform: function (fragment, instance) { + return fragment.text; + }, + compose: function (segments, instance) { + return segments.join(""); + } + }; + this.setup_256_palette(); + this._use_classes = false; + this._escape_for_html = true; + this.bright = false; + this.fg = this.bg = null; + this._buffer = ''; + } + Object.defineProperty(AnsiUp.prototype, "use_classes", { + get: function () { + return this._use_classes; + }, + set: function (arg) { + this._use_classes = arg; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AnsiUp.prototype, "escape_for_html", { + get: function () { + return this._escape_for_html; + }, + set: function (arg) { + this._escape_for_html = arg; + }, + enumerable: true, + configurable: true + }); + AnsiUp.prototype.setup_256_palette = function () { + var _this = this; + this.palette_256 = []; + this.ansi_colors.forEach(function (palette) { + palette.forEach(function (rec) { + _this.palette_256.push(rec); + }); + }); + var levels = [0, 95, 135, 175, 215, 255]; + for (var r = 0; r < 6; ++r) { + for (var g = 0; g < 6; ++g) { + for (var b = 0; b < 6; ++b) { + var col = { rgb: [levels[r], levels[g], levels[b]], class_name: 'truecolor' }; + this.palette_256.push(col); + } + } + } + var grey_level = 8; + for (var i = 0; i < 24; ++i, grey_level += 10) { + var gry = { rgb: [grey_level, grey_level, grey_level], class_name: 'truecolor' }; + this.palette_256.push(gry); + } + }; + AnsiUp.prototype.old_escape_for_html = function (txt) { + return txt.replace(/[&<>]/gm, function (str) { + if (str === "&") + return "&"; + if (str === "<") + return "<"; + if (str === ">") + return ">"; + }); + }; + AnsiUp.prototype.old_linkify = function (txt) { + return txt.replace(/(https?:\/\/[^\s]+)/gm, function (str) { + return "" + str + ""; + }); + }; + AnsiUp.prototype.detect_incomplete_ansi = function (txt) { + return !(/.*?[\x40-\x7e]/.test(txt)); + }; + AnsiUp.prototype.detect_incomplete_link = function (txt) { + var found = false; + for (var i = txt.length - 1; i > 0; i--) { + if (/\s|\x1B/.test(txt[i])) { + found = true; + break; + } + } + if (!found) { + if (/(https?:\/\/[^\s]+)/.test(txt)) + return 0; + else + return -1; + } + var prefix = txt.substr(i + 1, 4); + if (prefix.length === 0) + return -1; + if ("http".indexOf(prefix) === 0) + return (i + 1); + }; + AnsiUp.prototype.ansi_to = function (txt, formatter) { + var pkt = this._buffer + txt; + this._buffer = ''; + var raw_text_pkts = pkt.split(/\x1B\[/); + if (raw_text_pkts.length === 1) + raw_text_pkts.push(''); + this.handle_incomplete_sequences(raw_text_pkts); + var first_chunk = this.with_state(raw_text_pkts.shift()); + var blocks = new Array(raw_text_pkts.length); + for (var i = 0, len = raw_text_pkts.length; i < len; ++i) { + blocks[i] = (formatter.transform(this.process_ansi(raw_text_pkts[i]), this)); + } + if (first_chunk.text.length > 0) + blocks.unshift(formatter.transform(first_chunk, this)); + return formatter.compose(blocks, this); + }; + AnsiUp.prototype.ansi_to_html = function (txt) { + return this.ansi_to(txt, this.htmlFormatter); + }; + AnsiUp.prototype.ansi_to_text = function (txt) { + return this.ansi_to(txt, this.textFormatter); + }; + AnsiUp.prototype.with_state = function (text) { + return { bright: this.bright, fg: this.fg, bg: this.bg, text: text }; + }; + AnsiUp.prototype.handle_incomplete_sequences = function (chunks) { + var last_chunk = chunks[chunks.length - 1]; + if ((last_chunk.length > 0) && this.detect_incomplete_ansi(last_chunk)) { + this._buffer = "\x1B[" + last_chunk; + chunks.pop(); + chunks.push(''); + } + else { + if (last_chunk.slice(-1) === "\x1B") { + this._buffer = "\x1B"; + console.log("raw", chunks); + chunks.pop(); + chunks.push(last_chunk.substr(0, last_chunk.length - 1)); + console.log(chunks); + console.log(last_chunk); + } + if (chunks.length === 2 && + chunks[1] === "" && + chunks[0].slice(-1) === "\x1B") { + this._buffer = "\x1B"; + last_chunk = chunks.shift(); + chunks.unshift(last_chunk.substr(0, last_chunk.length - 1)); + } + } + }; + AnsiUp.prototype.process_ansi = function (block) { + if (!this._sgr_regex) { + this._sgr_regex = (_a = ["\n ^ # beginning of line\n ([!<-?]?) # a private-mode char (!, <, =, >, ?)\n ([d;]*) # any digits or semicolons\n ([ -/]? # an intermediate modifier\n [@-~]) # the command\n ([sS]*) # any text following this CSI sequence\n "], _a.raw = ["\n ^ # beginning of line\n ([!\\x3c-\\x3f]?) # a private-mode char (!, <, =, >, ?)\n ([\\d;]*) # any digits or semicolons\n ([\\x20-\\x2f]? # an intermediate modifier\n [\\x40-\\x7e]) # the command\n ([\\s\\S]*) # any text following this CSI sequence\n "], rgx(_a)); + } + var matches = block.match(this._sgr_regex); + if (!matches) { + return this.with_state(block); + } + var orig_txt = matches[4]; + if (matches[1] !== '' || matches[3] !== 'm') { + return this.with_state(orig_txt); + } + var sgr_cmds = matches[2].split(';'); + while (sgr_cmds.length > 0) { + var sgr_cmd_str = sgr_cmds.shift(); + var num = parseInt(sgr_cmd_str, 10); + if (isNaN(num) || num === 0) { + this.fg = this.bg = null; + this.bright = false; + } + else if (num === 1) { + this.bright = true; + } + else if (num === 22) { + this.bright = false; + } + else if (num === 39) { + this.fg = null; + } + else if (num === 49) { + this.bg = null; + } + else if ((num >= 30) && (num < 38)) { + var bidx = this.bright ? 1 : 0; + this.fg = this.ansi_colors[bidx][(num - 30)]; + } + else if ((num >= 90) && (num < 98)) { + this.fg = this.ansi_colors[1][(num - 90)]; + } + else if ((num >= 40) && (num < 48)) { + this.bg = this.ansi_colors[0][(num - 40)]; + } + else if ((num >= 100) && (num < 108)) { + this.bg = this.ansi_colors[1][(num - 100)]; + } + else if (num === 38 || num === 48) { + if (sgr_cmds.length > 0) { + var is_foreground = (num === 38); + var mode_cmd = sgr_cmds.shift(); + if (mode_cmd === '5' && sgr_cmds.length > 0) { + var palette_index = parseInt(sgr_cmds.shift(), 10); + if (palette_index >= 0 && palette_index <= 255) { + if (is_foreground) + this.fg = this.palette_256[palette_index]; + else + this.bg = this.palette_256[palette_index]; + } + } + if (mode_cmd === '2' && sgr_cmds.length > 2) { + var r = parseInt(sgr_cmds.shift(), 10); + var g = parseInt(sgr_cmds.shift(), 10); + var b = parseInt(sgr_cmds.shift(), 10); + if ((r >= 0 && r <= 255) && (g >= 0 && g <= 255) && (b >= 0 && b <= 255)) { + var c = { rgb: [r, g, b], class_name: 'truecolor' }; + if (is_foreground) + this.fg = c; + else + this.bg = c; + } + } + } + } + } + return this.with_state(orig_txt); + var _a; + }; + return AnsiUp; +}()); +//# sourceMappingURL=ansi_up.js.map \ No newline at end of file diff --git a/js/node/node_modules/ansi_up/dist/ansi_up.js.map b/js/node/node_modules/ansi_up/dist/ansi_up.js.map new file mode 100644 index 0000000000..3d561a8b2e --- /dev/null +++ b/js/node/node_modules/ansi_up/dist/ansi_up.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ansi_up.js","sourceRoot":"","sources":["../ansi_up.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/js/node/node_modules/ansi_up/examples/browser.html b/js/node/node_modules/ansi_up/examples/browser.html new file mode 100644 index 0000000000..c59d3941ff --- /dev/null +++ b/js/node/node_modules/ansi_up/examples/browser.html @@ -0,0 +1,28 @@ + + + + + +

+
+
+
+
diff --git a/js/node/node_modules/ansi_up/examples/browser_amd.html b/js/node/node_modules/ansi_up/examples/browser_amd.html
new file mode 100644
index 0000000000..ddd981d9bb
--- /dev/null
+++ b/js/node/node_modules/ansi_up/examples/browser_amd.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+  

+
+
diff --git a/js/node/node_modules/ansi_up/examples/jquery-1.7.2.min.js b/js/node/node_modules/ansi_up/examples/jquery-1.7.2.min.js
new file mode 100644
index 0000000000..16ad06c5ac
--- /dev/null
+++ b/js/node/node_modules/ansi_up/examples/jquery-1.7.2.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.2 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
"+""+"
",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
t
",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/js/node/node_modules/ansi_up/examples/main.js b/js/node/node_modules/ansi_up/examples/main.js new file mode 100644 index 0000000000..a6a9f28364 --- /dev/null +++ b/js/node/node_modules/ansi_up/examples/main.js @@ -0,0 +1,14 @@ +// For browser_amd.html +require(['ansi_up',"jquery-1.7.2.min.js"], function(au) { + + var a2h = new au.default; + + var txt = "\n\n\033[1;33;40m 33;40 \033[1;33;41m 33;41 \033[1;33;42m 33;42 \033[1;33;43m 33;43 \033[1;33;44m 33;44 \033[1;33;45m 33;45 \033[1;33;46m 33;46 \033[1m\033[0\n\n\033[1;33;42m >> Tests OK\n\n" + + $(function () { + + $("#console").html( a2h.ansi_to_html(txt) ); + + }); + +}); diff --git a/js/node/node_modules/ansi_up/examples/require.js b/js/node/node_modules/ansi_up/examples/require.js new file mode 100644 index 0000000000..ba19fefece --- /dev/null +++ b/js/node/node_modules/ansi_up/examples/require.js @@ -0,0 +1,34 @@ +/* + RequireJS 2.1.0 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. + Available via the MIT or new BSD license. + see: http://github.com/jrburke/requirejs for details +*/ +var requirejs,require,define; +(function(U){function D(b){return M.call(b)==="[object Function]"}function E(b){return M.call(b)==="[object Array]"}function s(b,c){if(b){var d;for(d=0;d-1;d-=1)if(b[d]&&c(b[d],d,b))break}}function F(b,c){for(var d in b)if(b.hasOwnProperty(d)&&c(b[d],d))break}function J(b,c,d,h){c&&F(c,function(c,j){if(d||!G.call(b,j))h&&typeof c!=="string"?(b[j]||(b[j]={}),J(b[j],c,d,h)):b[j]=c});return b}function q(b,c){return function(){return c.apply(b, +arguments)}}function V(b){if(!b)return b;var c=U;s(b.split("."),function(b){c=c[b]});return c}function H(b,c,d,h){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=h;if(d)c.originalError=d;return c}function aa(){if(I&&I.readyState==="interactive")return I;N(document.getElementsByTagName("script"),function(b){if(b.readyState==="interactive")return I=b});return I}var h,r,u,y,p,A,I,B,W,X,ba=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ca=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, +Y=/\.js$/,da=/^\.\//;r=Object.prototype;var M=r.toString,G=r.hasOwnProperty,ea=Array.prototype.splice,v=!!(typeof window!=="undefined"&&navigator&&document),Z=!v&&typeof importScripts!=="undefined",fa=v&&navigator.platform==="PLAYSTATION 3"?/^complete$/:/^(complete|loaded)$/,Q=typeof opera!=="undefined"&&opera.toString()==="[object Opera]",w={},n={},O=[],K=!1;if(typeof define==="undefined"){if(typeof requirejs!=="undefined"){if(D(requirejs))return;n=requirejs;requirejs=void 0}typeof require!=="undefined"&& +!D(require)&&(n=require,require=void 0);h=requirejs=function(b,c,d,t){var g,j="_";!E(b)&&typeof b!=="string"&&(g=b,E(c)?(b=c,c=d,d=t):b=[]);if(g&&g.context)j=g.context;(t=w[j])||(t=w[j]=h.s.newContext(j));g&&t.configure(g);return t.require(b,c,d)};h.config=function(b){return h(b)};h.nextTick=typeof setTimeout!=="undefined"?function(b){setTimeout(b,4)}:function(b){b()};require||(require=h);h.version="2.1.0";h.jsExtRegExp=/^\/|:|\?|\.js$/;h.isBrowser=v;r=h.s={contexts:w,newContext:function(b){function c(a, +f,x){var e,b,k,c,d,i,g,h=f&&f.split("/");e=h;var j=m.map,l=j&&j["*"];if(a&&a.charAt(0)===".")if(f){e=m.pkgs[f]?h=[f]:h.slice(0,h.length-1);f=a=e.concat(a.split("/"));for(e=0;f[e];e+=1)if(b=f[e],b===".")f.splice(e,1),e-=1;else if(b==="..")if(e===1&&(f[2]===".."||f[0]===".."))break;else e>0&&(f.splice(e-1,2),e-=2);e=m.pkgs[f=a[0]];a=a.join("/");e&&a===f+"/"+e.main&&(a=f)}else a.indexOf("./")===0&&(a=a.substring(2));if(x&&(h||l)&&j){f=a.split("/");for(e=f.length;e>0;e-=1){k=f.slice(0,e).join("/");if(h)for(b= +h.length;b>0;b-=1)if(x=j[h.slice(0,b).join("/")])if(x=x[k]){c=x;d=e;break}if(c)break;!i&&l&&l[k]&&(i=l[k],g=e)}!c&&i&&(c=i,d=g);c&&(f.splice(0,d,c),a=f.join("/"))}return a}function d(a){v&&s(document.getElementsByTagName("script"),function(f){if(f.getAttribute("data-requiremodule")===a&&f.getAttribute("data-requirecontext")===i.contextName)return f.parentNode.removeChild(f),!0})}function t(a){var f=m.paths[a];if(f&&E(f)&&f.length>1)return d(a),f.shift(),i.require.undef(a),i.require([a]),!0}function g(a){var f, +b=a?a.indexOf("!"):-1;b>-1&&(f=a.substring(0,b),a=a.substring(b+1,a.length));return[f,a]}function j(a,f,b,e){var $,k,d=null,h=f?f.name:null,j=a,m=!0,l="";a||(m=!1,a="_@r"+(M+=1));a=g(a);d=a[0];a=a[1];d&&(d=c(d,h,e),k=o[d]);a&&(d?l=k&&k.normalize?k.normalize(a,function(a){return c(a,h,e)}):c(a,h,e):(l=c(a,h,e),a=g(l),d=a[0],l=a[1],b=!0,$=i.nameToUrl(l)));b=d&&!k&&!b?"_unnormalized"+(N+=1):"";return{prefix:d,name:l,parentMap:f,unnormalized:!!b,url:$,originalName:j,isDefine:m,id:(d?d+"!"+l:l)+b}}function n(a){var f= +a.id,b=l[f];b||(b=l[f]=new i.Module(a));return b}function p(a,f,b){var e=a.id,c=l[e];if(G.call(o,e)&&(!c||c.defineEmitComplete))f==="defined"&&b(o[e]);else n(a).on(f,b)}function z(a,f){var b=a.requireModules,e=!1;if(f)f(a);else if(s(b,function(f){if(f=l[f])f.error=a,f.events.error&&(e=!0,f.emit("error",a))}),!e)h.onError(a)}function r(){O.length&&(ea.apply(C,[C.length-1,0].concat(O)),O=[])}function u(a,f,b){var e=a.map.id;a.error?a.emit("error",a.error):(f[e]=!0,s(a.depMaps,function(e,k){var c=e.id, +d=l[c];d&&!a.depMatched[k]&&!b[c]&&(f[c]?(a.defineDep(k,o[c]),a.check()):u(d,f,b))}),b[e]=!0)}function w(){var a,f,b,e,c=(b=m.waitSeconds*1E3)&&i.startTime+b<(new Date).getTime(),k=[],h=[],g=!1,j=!0;if(!B){B=!0;F(l,function(b){a=b.map;f=a.id;if(b.enabled&&(a.isDefine||h.push(b),!b.error))if(!b.inited&&c)t(f)?g=e=!0:(k.push(f),d(f));else if(!b.inited&&b.fetched&&a.isDefine&&(g=!0,!a.prefix))return j=!1});if(c&&k.length)return b=H("timeout","Load timeout for modules: "+k,null,k),b.contextName=i.contextName, +z(b);j&&s(h,function(a){u(a,{},{})});if((!c||e)&&g)if((v||Z)&&!R)R=setTimeout(function(){R=0;w()},50);B=!1}}function y(a){n(j(a[0],null,!0)).init(a[1],a[2])}function A(a){var a=a.currentTarget||a.srcElement,b=i.onScriptLoad;a.detachEvent&&!Q?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=i.onScriptError;a.detachEvent&&!Q||a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}var B,S,i,L,R,m={waitSeconds:7,baseUrl:"./",paths:{},pkgs:{}, +shim:{}},l={},T={},C=[],o={},P={},M=1,N=1;L={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?a.exports:a.exports=o[a.map.id]={}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return m.config&&m.config[a.map.id]||{}},exports:o[a.map.id]}}};S=function(a){this.events=T[a.id]||{};this.map=a;this.shim=m.shim[a.id];this.depExports=[];this.depMaps=[]; +this.depMatched=[];this.pluginMaps={};this.depCount=0};S.prototype={init:function(a,b,c,e){e=e||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=q(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=c;this.inited=!0;this.ignore=e.ignore;e.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched= +!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],q(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=this.map.url;P[a]||(P[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var e=this.exports,d=this.factory;if(this.inited)if(this.error)this.emit("error",this.error); +else{if(!this.defining){this.defining=!0;if(this.depCount<1&&!this.defined){if(D(d)){if(this.events.error)try{e=i.execCb(c,d,b,e)}catch(k){a=k}else e=i.execCb(c,d,b,e);if(this.map.isDefine)if((b=this.module)&&b.exports!==void 0&&b.exports!==this.exports)e=b.exports;else if(e===void 0&&this.usingExports)e=this.exports;if(a)return a.requireMap=this.map,a.requireModules=[this.map.id],a.requireType="define",z(this.error=a)}else e=d;this.exports=e;if(this.map.isDefine&&!this.ignore&&(o[c]=e,h.onResourceLoad))h.onResourceLoad(i, +this.map,this.depMaps);delete l[c];this.defined=!0}this.defining=!1;if(this.defined&&!this.defineEmitted)this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=j(a.prefix);this.depMaps.push(d);p(d,"defined",q(this,function(e){var d,k;k=this.map.name;var x=this.map.parentMap?this.map.parentMap.name:null,g=i.makeRequire(a.parentMap,{enableBuildCallback:!0,skipMap:!0});if(this.map.unnormalized){if(e.normalize&& +(k=e.normalize(k,function(a){return c(a,x,!0)})||""),e=j(a.prefix+"!"+k,this.map.parentMap),p(e,"defined",q(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),k=l[e.id]){this.depMaps.push(e);if(this.events.error)k.on("error",q(this,function(a){this.emit("error",a)}));k.enable()}}else d=q(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),d.error=q(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];F(l,function(a){a.map.id.indexOf(b+ +"_unnormalized")===0&&delete l[a.map.id]});z(a)}),d.fromText=q(this,function(b,e){var f=a.name,c=j(f),k=K;e&&(b=e);k&&(K=!1);n(c);try{h.exec(b)}catch(x){throw Error("fromText eval for "+f+" failed: "+x);}k&&(K=!0);this.depMaps.push(c);i.completeLoad(f);g([f],d)}),e.load(a.name,g,d,m)}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){this.enabling=this.enabled=!0;s(this.depMaps,q(this,function(a,b){var c,e;if(typeof a==="string"){a=j(a,this.map.isDefine?this.map:this.map.parentMap,!1, +!this.skipMap);this.depMaps[b]=a;if(c=L[a.id]){this.depExports[b]=c(this);return}this.depCount+=1;p(a,"defined",q(this,function(a){this.defineDep(b,a);this.check()}));this.errback&&p(a,"error",this.errback)}c=a.id;e=l[c];!L[c]&&e&&!e.enabled&&i.enable(a,this)}));F(this.pluginMaps,q(this,function(a){var b=l[a.id];b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){s(this.events[a],function(a){a(b)}); +a==="error"&&delete this.events[a]}};i={config:m,contextName:b,registry:l,defined:o,urlFetched:P,defQueue:C,Module:S,makeModuleMap:j,nextTick:h.nextTick,configure:function(a){a.baseUrl&&a.baseUrl.charAt(a.baseUrl.length-1)!=="/"&&(a.baseUrl+="/");var b=m.pkgs,c=m.shim,e=m.paths,d=m.map;J(m,a,!0);m.paths=J(e,a.paths,!0);if(a.map)m.map=J(d||{},a.map,!0,!0);if(a.shim)F(a.shim,function(a,b){E(a)&&(a={deps:a});if(a.exports&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);c[b]=a}),m.shim=c;if(a.packages)s(a.packages, +function(a){a=typeof a==="string"?{name:a}:a;b[a.name]={name:a.name,location:a.location||a.name,main:(a.main||"main").replace(da,"").replace(Y,"")}}),m.pkgs=b;F(l,function(a,b){if(!a.inited&&!a.map.unnormalized)a.map=j(b)});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(U,arguments));return b||V(a.exports)}},makeRequire:function(a,f){function d(e,c,k){var g,m;if(f.enableBuildCallback&&c&&D(c))c.__requireJsBuild=!0; +if(typeof e==="string"){if(D(c))return z(H("requireargs","Invalid require call"),k);if(a&&L[e])return L[e](l[a.id]);if(h.get)return h.get(i,e,a);g=j(e,a,!1,!0);g=g.id;return!G.call(o,g)?z(H("notloaded",'Module name "'+g+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):o[g]}for(r();C.length;)if(g=C.shift(),g[0]===null)return z(H("mismatch","Mismatched anonymous define() module: "+g[g.length-1]));else y(g);i.nextTick(function(){m=n(j(null,a));m.skipMap=f.skipMap;m.init(e,c,k, +{enabled:!0});w()});return d}f=f||{};J(d,{isBrowser:v,toUrl:function(b){var f=b.lastIndexOf("."),d=null;f!==-1&&(d=b.substring(f,b.length),b=b.substring(0,f));return i.nameToUrl(c(b,a&&a.id,!0),d)},defined:function(b){b=j(b,a,!1,!0).id;return G.call(o,b)},specified:function(b){b=j(b,a,!1,!0).id;return G.call(o,b)||G.call(l,b)}});if(!a)d.undef=function(b){r();var c=j(b,a,!0),f=l[b];delete o[b];delete P[c.url];delete T[b];if(f){if(f.events.defined)T[b]=f.events;delete l[b]}};return d},enable:function(a){l[a.id]&& +n(a).enable()},completeLoad:function(a){var b,c,e=m.shim[a]||{},d=e.exports;for(r();C.length;){c=C.shift();if(c[0]===null){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);y(c)}c=l[a];if(!b&&!o[a]&&c&&!c.inited)if(m.enforceDefine&&(!d||!V(d)))if(t(a))return;else return z(H("nodefine","No define call for "+a,null,[a]));else y([a,e.deps||[],e.exportsFn]);w()},nameToUrl:function(a,b){var c,e,d,g,i,j;if(h.jsExtRegExp.test(a))g=a+(b||"");else{c=m.paths;e=m.pkgs;g=a.split("/");for(i=g.length;i>0;i-=1)if(j= +g.slice(0,i).join("/"),d=e[j],j=c[j]){E(j)&&(j=j[0]);g.splice(0,i,j);break}else if(d){c=a===d.name?d.location+"/"+d.main:d.location;g.splice(0,i,c);break}g=g.join("/");g+=b||(/\?/.test(g)?"":".js");g=(g.charAt(0)==="/"||g.match(/^[\w\+\.\-]+:/)?"":m.baseUrl)+g}return m.urlArgs?g+((g.indexOf("?")===-1?"?":"&")+m.urlArgs):g},load:function(a,b){h.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if(a.type==="load"||fa.test((a.currentTarget||a.srcElement).readyState))I= +null,a=A(a),i.completeLoad(a.id)},onScriptError:function(a){var b=A(a);if(!t(b.id))return z(H("scripterror","Script error",a,[b.id]))}};i.require=i.makeRequire();return i}};h({});s(["toUrl","undef","defined","specified"],function(b){h[b]=function(){var c=w._;return c.require[b].apply(c,arguments)}});if(v&&(u=r.head=document.getElementsByTagName("head")[0],y=document.getElementsByTagName("base")[0]))u=r.head=y.parentNode;h.onError=function(b){throw b;};h.load=function(b,c,d){var h=b&&b.config||{}, +g;if(v)return g=h.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script"),g.type=h.scriptType||"text/javascript",g.charset="utf-8",g.async=!0,g.setAttribute("data-requirecontext",b.contextName),g.setAttribute("data-requiremodule",c),g.attachEvent&&!(g.attachEvent.toString&&g.attachEvent.toString().indexOf("[native code")<0)&&!Q?(K=!0,g.attachEvent("onreadystatechange",b.onScriptLoad)):(g.addEventListener("load",b.onScriptLoad,!1),g.addEventListener("error", +b.onScriptError,!1)),g.src=d,B=g,y?u.insertBefore(g,y):u.appendChild(g),B=null,g;else Z&&(importScripts(d),b.completeLoad(c))};v&&N(document.getElementsByTagName("script"),function(b){if(!u)u=b.parentNode;if(p=b.getAttribute("data-main")){if(!n.baseUrl)A=p.split("/"),W=A.pop(),X=A.length?A.join("/")+"/":"./",n.baseUrl=X,p=W;p=p.replace(Y,"");n.deps=n.deps?n.deps.concat(p):[p];return!0}});define=function(b,c,d){var h,g;typeof b!=="string"&&(d=c,c=b,b=null);E(c)||(d=c,c=[]);!c.length&&D(d)&&d.length&& +(d.toString().replace(ba,"").replace(ca,function(b,d){c.push(d)}),c=(d.length===1?["require"]:["require","exports","module"]).concat(c));if(K&&(h=B||aa()))b||(b=h.getAttribute("data-requiremodule")),g=w[h.getAttribute("data-requirecontext")];(g?g.defQueue:O).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)};h(n)}})(this); diff --git a/js/node/node_modules/ansi_up/examples/theme.css b/js/node/node_modules/ansi_up/examples/theme.css new file mode 100644 index 0000000000..5837e1dc87 --- /dev/null +++ b/js/node/node_modules/ansi_up/examples/theme.css @@ -0,0 +1,34 @@ +// Tomorrow Night Ansi Colour Scheme +.tomorrow-night-eighties-ansi-theme.ansi-black-fg { color: #3A3A3A; } +.tomorrow-night-eighties-ansi-theme.ansi-red-fg { color: #DD948E; } +.tomorrow-night-eighties-ansi-theme.ansi-green-fg { color: #B6D1AA; } +.tomorrow-night-eighties-ansi-theme.ansi-yellow-fg { color: #F3D57C; } +.tomorrow-night-eighties-ansi-theme.ansi-blue-fg { color: #8AA9D5; } +.tomorrow-night-eighties-ansi-theme.ansi-magenta-fg { color: #CBAFD5; } +.tomorrow-night-eighties-ansi-theme.ansi-cyan-fg { color: #9AD1D4; } +.tomorrow-night-eighties-ansi-theme.ansi-white-fg { color: #EFEFEF; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-black-fg { color: #5E5D5E; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-red-fg { color: #E69B94; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-green-fg { color: #D1F0C3; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-yellow-fg { color: #F4D799; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-blue-fg { color: #A6CBFE; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-magenta-fg { color: #E7C7F2; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-cyan-fg { color: #B0F0F5; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-white-fg { color: #FFF; } + +.tomorrow-night-eighties-ansi-theme.ansi-black-bg { background-color: #3A3A3A; } +.tomorrow-night-eighties-ansi-theme.ansi-red-bg { background-color: #DD948E; } +.tomorrow-night-eighties-ansi-theme.ansi-green-bg { background-color: #B6D1AA; } +.tomorrow-night-eighties-ansi-theme.ansi-yellow-bg { background-color: #F3D57C; } +.tomorrow-night-eighties-ansi-theme.ansi-blue-bg { background-color: #8AA9D5; } +.tomorrow-night-eighties-ansi-theme.ansi-magenta-bg { background-color: #CBAFD5; } +.tomorrow-night-eighties-ansi-theme.ansi-cyan-bg { background-color: #9AD1D4; } +.tomorrow-night-eighties-ansi-theme.ansi-white-bg { background-color: #EFEFEF; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-black-bg { background-color: #5E5D5E; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-red-bg { background-color: #E69B94; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-green-bg { background-color: #D1F0C3; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-yellow-bg { background-color: #F4D799; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-blue-bg { background-color: #A6CBFE; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-magenta-bg { background-color: #E7C7F2; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-cyan-bg { background-color: #B0F0F5; } +.tomorrow-night-eighties-ansi-theme.ansi-bright-white-bg { background-color: #FFF; } diff --git a/js/node/node_modules/ansi_up/examples/theme.scss b/js/node/node_modules/ansi_up/examples/theme.scss new file mode 100644 index 0000000000..e21a4d8769 --- /dev/null +++ b/js/node/node_modules/ansi_up/examples/theme.scss @@ -0,0 +1,132 @@ +// Tomorrow Night Ansi Colour Scheme + +.tomorrow-night-eighties-ansi-theme { + + .ansi-black-fg { + color: #3A3A3A; + } + + .ansi-red-fg { + color: #DD948E; + } + + .ansi-green-fg { + color: #B6D1AA; + } + + .ansi-yellow-fg { + color: #F3D57C; + } + + .ansi-blue-fg { + color: #8AA9D5; + } + + .ansi-magenta-fg { + color: #CBAFD5; + } + + .ansi-cyan-fg { + color: #9AD1D4; + } + + .ansi-white-fg { + color: #EFEFEF; + } + + .ansi-bright-black-fg { + color: #5E5D5E; + } + + .ansi-bright-red-fg { + color: #E69B94; + } + + .ansi-bright-green-fg { + color: #D1F0C3; + } + + .ansi-bright-yellow-fg { + color: #F4D799; + } + + .ansi-bright-blue-fg { + color: #A6CBFE; + } + + .ansi-bright-magenta-fg { + color: #E7C7F2; + } + + .ansi-bright-cyan-fg { + color: #B0F0F5; + } + + .ansi-bright-white-fg { + color: #FFF; + } + + .ansi-black-bg { + background-color: #3A3A3A; + } + + .ansi-red-bg { + background-color: #DD948E; + } + + .ansi-green-bg { + background-color: #B6D1AA; + } + + .ansi-yellow-bg { + background-color: #F3D57C; + } + + .ansi-blue-bg { + background-color: #8AA9D5; + } + + .ansi-magenta-bg { + background-color: #CBAFD5; + } + + .ansi-cyan-bg { + background-color: #9AD1D4; + } + + .ansi-white-bg { + background-color: #EFEFEF; + } + + .ansi-bright-black-bg { + background-color: #5E5D5E; + } + + .ansi-bright-red-bg { + background-color: #E69B94; + } + + .ansi-bright-green-bg { + background-color: #D1F0C3; + } + + .ansi-bright-yellow-bg { + background-color: #F4D799; + } + + .ansi-bright-blue-bg { + background-color: #A6CBFE; + } + + .ansi-bright-magenta-bg { + background-color: #E7C7F2; + } + + .ansi-bright-cyan-bg { + background-color: #B0F0F5; + } + + .ansi-bright-white-bg { + background-color: #FFF; + } +} diff --git a/js/node/node_modules/ansi_up/package.json b/js/node/node_modules/ansi_up/package.json new file mode 100644 index 0000000000..edb608cfea --- /dev/null +++ b/js/node/node_modules/ansi_up/package.json @@ -0,0 +1,61 @@ +{ + "_from": "ansi_up", + "_id": "ansi_up@2.0.2", + "_inBundle": false, + "_integrity": "sha1-m1TeUIxcV59baWjmXBuGPgaAq5I=", + "_location": "/ansi_up", + "_phantomChildren": {}, + "_requested": { + "type": "tag", + "registry": true, + "raw": "ansi_up", + "name": "ansi_up", + "escapedName": "ansi_up", + "rawSpec": "", + "saveSpec": null, + "fetchSpec": "latest" + }, + "_requiredBy": [ + "#USER", + "/" + ], + "_resolved": "https://registry.npmjs.org/ansi_up/-/ansi_up-2.0.2.tgz", + "_shasum": "9b54de508c5c579f5b6968e65c1b863e0680ab92", + "_spec": "ansi_up", + "_where": "/Users/manu/arangodb-devel/tmp", + "author": { + "name": "drudru", + "email": "drudru@gmail.com" + }, + "bugs": { + "url": "http://github.com/drudru/ansi_up/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Convert ansi sequences in strings to colorful HTML", + "devDependencies": { + "mocha": "*", + "should": "*", + "typescript": "^2.1" + }, + "engines": { + "node": "*" + }, + "homepage": "https://github.com/drudru/ansi_up#readme", + "keywords": [ + "ansi", + "html" + ], + "license": "MIT", + "main": "./ansi_up.js", + "name": "ansi_up", + "repository": { + "type": "git", + "url": "git://github.com/drudru/ansi_up.git" + }, + "scripts": { + "build": "make typescript", + "test": "make test" + }, + "version": "2.0.2" +} diff --git a/js/node/node_modules/ansi_up/sample.png b/js/node/node_modules/ansi_up/sample.png new file mode 100644 index 0000000000..507b2d212a Binary files /dev/null and b/js/node/node_modules/ansi_up/sample.png differ diff --git a/js/node/node_modules/ansi_up/test/ansi_up-test.js b/js/node/node_modules/ansi_up/test/ansi_up-test.js new file mode 100644 index 0000000000..708baa2116 --- /dev/null +++ b/js/node/node_modules/ansi_up/test/ansi_up-test.js @@ -0,0 +1,858 @@ +var AU = require('../ansi_up'); +var AnsiUp = AU.default; + +var should = require('should'); + +describe('ansi_up', function () { + + describe('escape_for_html on', function () { + + describe('ampersands', function () { + + it('should escape a single ampersand', function () { + var start = "&"; + var expected = "&"; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should escape some text with ampersands', function () { + var start = "abcd&efgh"; + var expected = "abcd&efgh"; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should escape multiple ampersands', function () { + var start = " & & "; + var expected = " & & "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should escape an already escaped ampersand', function () { + var start = " & "; + var expected = " &amp; "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + }); + + describe('less-than', function () { + + it('should escape a single less-than', function () { + var start = "<"; + var expected = "<"; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should escape some text with less-thans', function () { + var start = "abcdhttp://link.to/me "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should linkify a url split into two chunks', function () { + var start1 = " https://link.to/m"; + var start2 = "e "; + var expected = "https://link.to/me "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start1); + l.should.eql(""); + l = au.ansi_to_html(start2); + l.should.eql(expected); + }); + + it('should linkify a url split into two chunks with color state', function () { + var start1 = "\033[32mhttps://link.to/m"; + var start2 = "e "; + var expected = "https://link.to/me "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start1); + l.should.eql(""); + l = au.ansi_to_html(start2); + l.should.eql(expected); + }); + + }); + */ + + describe("ansi_to()", function() { + + // Prove that interaction between AnsiUp and the formatter is correct and that formatters + // can be completely isolated code. + it("accepts an arbitrary formatter and provides ANSI information related to text segments", function() { + var attr = 1; // bright + var fg = 32; // green fg + var bg = 41; // red bg + var lines = [ + "should have no color", + "\033[" + attr + ";" + fg + "m " + "should be bright green foreground" + "\033[0m", + "\033[" + attr + ";" + bg + ";" + fg + "m " + "should have bright red background with bright green foreground" + "\033[0m" + ]; + + var stats = {}; + + // A silly formatter that collects statistics about the text it receives. + var statsFormatter = { + transform: function(data) { + var text = data.text.replace(/^\s+|\s+$/, ""); + + if (text.length) { + if (!stats[text]) { + stats[text] = []; + } + + if (data.fg) stats[text].push(data.fg.class_name); + if (data.bg) stats[text].push(data.bg.class_name); + } + + return text; + }, + + compose: function(segments) { + return "processed: " + segments.filter(function (s) { return s.length; }).join(", "); + } + }; + + var au = new AnsiUp(); + au.use_classes = true; + + var plainText = au.ansi_to(lines.join(""), statsFormatter); + + plainText.should.eql("processed: should have no color, should be bright green foreground, should have bright red background with bright green foreground"); + + stats.should.eql({ + "should have no color": [], + "should be bright green foreground": ["ansi-bright-green"], + "should have bright red background with bright green foreground": ["ansi-bright-green", "ansi-red"] + }); + }); + }); + + describe('ansi to html', function () { + + describe('default colors', function () { + it('should transform a foreground to html', function () { + var attr = 0; + var fg = 32; + var start = "\033[" + fg + "m " + fg + " \033[0m"; + + var expected = " " + fg + " "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + + it('should transform a attr;foreground to html', function () { + var attr = 0; + var fg = 32; + var start = "\033[" + attr + ";" + fg + "m " + fg + " \033[0m"; + + var expected = " " + fg + " "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform an empty code to a normal/reset html', function () { + var attr = 0; + var fg = 32; + var start = "\033[" + attr + ";" + fg + "m " + fg + " \033[m x"; + + var expected = " " + fg + " x"; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a bold attr;foreground to html', function () { + var attr = 1; + var fg = 32; + var start = "\033[" + attr + ";" + fg + "m " + attr + ";" + fg + " \033[0m"; + + var expected = " " + attr + ";" + fg + " "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a bold-foreground to html', function () { + var fg = 92; + var start = "\033[" + fg + "m " + fg + " \033[0m"; + + var expected = " " + fg + " "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a bold attr;background;foreground to html', function () { + var attr = 1; + var fg = 33; + var bg = 42; + var start = "\033[" + attr + ";" + bg + ";" + fg + "m " + attr + ";" + bg + ";" + fg + " \033[0m"; + + var expected = " " + attr + ";" + bg + ";" + fg + " "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a bold-background;foreground to html', function () { + var fg = 33; + var bg = 102; + var start = "\033[" + bg + ";" + fg + "m " + bg + ";" + fg + " \033[0m"; + + var expected = " " + bg + ";" + fg + " "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + + it('should transform a complex multi-line sequence to html', function () { + var attr = 1; + var fg = 32; + var bg = 42; + var start = "\n \033[" + fg + "m " + fg + " \033[0m \n \033[" + bg + "m " + bg + " \033[0m \n zimpper "; + + var expected = "\n " + fg + " \n " + bg + " \n zimpper "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a foreground and background and reset foreground to html', function () { + var fg = 37; + var bg = 42; + var start = "\n\033[40m \033[49m\033[" + fg + ";" + bg + "m " + bg + " \033[39m foobar "; + + var expected = "\n " + bg + " foobar "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a foreground and background and reset background to html', function () { + var fg = 37; + var bg = 42; + var start = "\n\033[40m \033[49m\033[" + fg + ";" + bg + "m " + fg + " \033[49m foobar "; + + var expected = "\n " + fg + " foobar "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a foreground and background and reset them to html', function () { + var fg = 37; + var bg = 42; + var start = "\n\033[40m \033[49m\033[" + fg + ";" + bg + "m " + fg + ';' + bg + " \033[39;49m foobar "; + + var expected = "\n " + fg + ';' + bg + " foobar "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + describe('transform extended colors (palette)', function () { + it('system color, foreground', function () { + var start = "\033[38;5;1m" + "red" + "\033[0m"; + var expected = 'red'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('system color, foreground (bright)', function () { + var start = "\033[38;5;9m" + "red" + "\033[0m"; + var expected = 'red'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('system color, background', function () { + var start = "\033[48;5;1m" + "red" + "\033[0m"; + var expected = 'red'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('system color, background (bright)', function () { + var start = "\033[48;5;9m" + "red" + "\033[0m"; + var expected = 'red'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('palette, foreground', function () { + var start = "\033[38;5;171m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('palette, background', function () { + var start = "\033[48;5;171m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('combination of bold and palette', function () { + var start = "\033[1;38;5;171m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('combination of palette and bold', function () { + var start = "\033[38;5;171;1m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + }); + + describe('transform extended colors (true color)', function () { + it('foreground', function () { + var start = "\033[38;2;42;142;242m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + it('background', function () { + var start = "\033[48;2;42;142;242m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + it('both foreground and background', function () { + var start = "\033[38;2;42;142;242;48;2;1;2;3m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + }); + }); + + describe('themed colors', function () { + it('should transform a foreground to html', function () { + var attr = 0; + var fg = 32; + var start = "\033[" + fg + "m " + fg + " \033[0m"; + + var expected = " " + fg + " "; + + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a attr;foreground to html', function () { + var attr = 0; + var fg = 32; + var start = "\033[" + attr + ";" + fg + "m " + fg + " \033[0m"; + + var expected = " " + fg + " "; + + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a bold attr;foreground to html', function () { + var attr = 1; + var fg = 32; + var start = "\033[" + attr + ";" + fg + "m " + attr + ";" + fg + " \033[0m"; + + var expected = " " + attr + ";" + fg + " "; + + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a bold attr;background;foreground to html', function () { + var attr = 1; + var fg = 33; + var bg = 42; + var start = "\033[" + attr + ";" + bg + ";" + fg + "m " + attr + ";" + bg + ";" + fg + " \033[0m"; + + var expected = " " + attr + ";" + bg + ";" + fg + " "; + + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('should transform a complex multi-line sequence to html', function () { + var attr = 1; + var fg = 32; + var bg = 42; + var start = "\n \033[" + fg + "m " + fg + " \033[0m \n \033[" + bg + "m " + bg + " \033[0m \n zimpper "; + + var expected = "\n " + fg + " \n " + bg + " \n zimpper "; + + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + describe('transform extended colors (palette)', function () { + it('system color, foreground', function () { + var start = "\033[38;5;1m" + "red" + "\033[0m"; + var expected = 'red'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('system color, foreground (bright)', function () { + var start = "\033[38;5;9m" + "red" + "\033[0m"; + var expected = 'red'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('system color, background', function () { + var start = "\033[48;5;1m" + "red" + "\033[0m"; + var expected = 'red'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('system color, background (bright)', function () { + var start = "\033[48;5;9m" + "red" + "\033[0m"; + var expected = 'red'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('palette, foreground', function () { + var start = "\033[38;5;171m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('palette, background', function () { + var start = "\033[48;5;171m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('combination of bold and palette', function () { + var start = "\033[1;38;5;171m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + + it('combination of palette and bold', function () { + var start = "\033[38;5;171;1m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + }); + + describe('transform extended colors (true color)', function () { + it('foreground', function () { + var start = "\033[38;2;42;142;242m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + it('background', function () { + var start = "\033[48;2;42;142;242m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + it('both foreground and background', function () { + var start = "\033[38;2;42;142;242;48;2;1;2;3m" + "foo" + "\033[0m"; + var expected = 'foo'; + var au = new AnsiUp(); + au.use_classes = true; + var l = au.ansi_to_html(start); + l.should.eql(expected); + }); + }); + }); + + describe('ignore unsupported CSI', function () { + it('should correctly convert a string similar to CSI', function () { + // https://github.com/drudru/ansi_up/pull/15 + // "[1;31m" is a plain text. not an escape sequence. + var start = "foo\033[1@bar[1;31mbaz\033[0m"; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + + // is all plain texts exist? + l.should.containEql('foo'); + l.should.containEql('bar'); + l.should.containEql('baz'); + l.should.containEql('1;31m'); + }); + it('(italic)', function () { + var start = "foo\033[3mbar\033[0mbaz"; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql('foobarbaz'); + }); + it('(cursor-up)', function () { + var start = "foo\033[1Abar"; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql('foobar'); + }); + it('(scroll-left)', function () { + // [1 @ (including ascii space) + var start = "foo\033[1 @bar"; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql('foobar'); + }); + it('(DECMC)', function () { + var start = "foo\033[?11ibar"; + var au = new AnsiUp(); + var l = au.ansi_to_html(start); + l.should.eql('foobar'); + }); + /* I cannot find this in the XTERM specs + it('(RLIMGCP)', function () { + var start = "foo\033[ " + fg + " "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start1); + l.should.eql(""); + l = au.ansi_to_html(start2); + l.should.eql(expected); + }); + + it('should transform a lonely escape', function () { + var attr = 0; + var fg = 32; + var start1 = "xyz \033"; + var start2 = "[" + attr + ";" + fg + "m " + fg + " \033[0m"; + + var expected = " " + fg + " "; + + var au = new AnsiUp(); + var l = au.ansi_to_html(start1); + l.should.eql("xyz "); + l = au.ansi_to_html(start2); + l.should.eql(expected); + }); + + }); + + }); + + describe('ansi to text', function () { + it('should remove color sequence', function () { + var start = "foo \033[1;32mbar\033[0m baz"; + var au = new AnsiUp(); + var l = au.ansi_to_text(start); + l.should.eql("foo bar baz"); + }); + it('should remove unsupported sequence', function () { + var start = "foo \033[1Abar"; + var au = new AnsiUp(); + var l = au.ansi_to_text(start); + l.should.eql('foo bar'); + }); + it('should keep multiline', function () { + var start = "foo \033[1;32mbar\nbaz\033[0m qux"; + var au = new AnsiUp(); + var l = au.ansi_to_text(start); + l.should.eql("foo bar\nbaz qux"); + }); + }); +}); \ No newline at end of file diff --git a/js/node/node_modules/ansi_up/tsconfig.json b/js/node/node_modules/ansi_up/tsconfig.json new file mode 100644 index 0000000000..c4400d68fc --- /dev/null +++ b/js/node/node_modules/ansi_up/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "none", + "noEmitOnError": true, + "removeComments": true, + "sourceMap": true, + "declaration": true, + "noImplicitUseStrict": true, + "outDir": "dist" + }, + "exclude": [ "node_modules", "dist" ] +} \ No newline at end of file diff --git a/js/node/node_modules/ansi_up/umd.footer b/js/node/node_modules/ansi_up/umd.footer new file mode 100644 index 0000000000..9e5a476fdc --- /dev/null +++ b/js/node/node_modules/ansi_up/umd.footer @@ -0,0 +1,4 @@ + + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = AnsiUp; +})); diff --git a/js/node/node_modules/ansi_up/umd.header b/js/node/node_modules/ansi_up/umd.header new file mode 100644 index 0000000000..2c4a121266 --- /dev/null +++ b/js/node/node_modules/ansi_up/umd.header @@ -0,0 +1,19 @@ +/* ansi_up.js + * author : Dru Nelson + * license : MIT + * http://github.com/drudru/ansi_up + */ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports'], factory); + } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { + // CommonJS + factory(exports); + } else { + // Browser globals + var exp = {}; + factory(exp); + root.AnsiUp = exp.default; + } +}(this, function (exports) { diff --git a/js/node/package.json b/js/node/package.json index a2aabd5c31..605d019527 100644 --- a/js/node/package.json +++ b/js/node/package.json @@ -2,6 +2,7 @@ "dependencies": { "accepts": "1.3.3", "ansi-html": "0.0.7", + "ansi_up": "2.0.2", "aqb": "2.1.0", "babel-code-frame": "6.22.0", "chai": "3.5.0", diff --git a/utils/generateExamples.py b/utils/generateExamples.py index 8ab6f84399..bc2e5d10c1 100644 --- a/utils/generateExamples.py +++ b/utils/generateExamples.py @@ -87,6 +87,7 @@ ArangoshRunLineNo = {} ################################################################################ ArangoshFiles = {} +AQLFiles = {} ################################################################################ ### @brief map the source files for error messages @@ -113,6 +114,10 @@ FilterForTestcase = None STATE_BEGIN = 0 STATE_ARANGOSH_OUTPUT = 'HTTP_LOUTPUT' STATE_ARANGOSH_RUN = 'ARANGOSH_OUTPUT' +STATE_AQL = 'AQL' +STATE_AQL_DS = 'AQL_DS' +STATE_AQL_BIND = 'AQL_BV' +STATE_AQL_EXPLAIN = 'AQL_EXPLAIN' ################################################################################ ### @brief option states @@ -142,9 +147,14 @@ def generateArangoshHeader(): regularStartLine = re.compile(r'^(/// )? *@EXAMPLE_ARANGOSH_OUTPUT{([^}]*)}') runLine = re.compile(r'^(/// )? *@EXAMPLE_ARANGOSH_RUN{([^}]*)}') - +aqlLine = re.compile(r'^(/// )? *@EXAMPLE_AQL{([^}]*)}') +aqlDataSetLine = re.compile(r'^(/// )? *@DATASET{([^}]*)}') +aqlExplainLine = re.compile(r'^(/// )? *@EXPLAIN{(TRUE|FALSE)}') +aqlBindvaluesLine = re.compile(r'^(/// )? *@BV (.*)') + def matchStartLine(line, filename): - global regularStartLine, errorStartLine, runLine, FilterForTestcase, filterTestList + global regularStartLine, errorStartLine, runLine + global aqlLine, FilterForTestcase, filterTestList errorName = "" m = regularStartLine.match(line) @@ -159,6 +169,7 @@ def matchStartLine(line, filename): # if we match for filters, only output these! if ((FilterForTestcase != None) and not FilterForTestcase.match(name)): + print >> sys.stderr, "Arangosh: filtering out testcase '%s'" %name filterTestList.append(name) return("", STATE_BEGIN); @@ -169,7 +180,7 @@ def matchStartLine(line, filename): if m: strip = m.group(1) name = m.group(2) - + if name in ArangoshFiles: print >> sys.stderr, "%s\nduplicate test name '%s' in file %s!\n%s\n" % ('#' * 80, name, filename, '#' * 80) sys.exit(1) @@ -177,14 +188,59 @@ def matchStartLine(line, filename): # if we match for filters, only output these! if ((FilterForTestcase != None) and not FilterForTestcase.match(name)): filterTestList.append(name) + print >> sys.stderr, "CuRL: filtering out testcase '%s'" %name return("", STATE_BEGIN); ArangoshFiles[name] = True return (name, STATE_ARANGOSH_RUN) + m = aqlLine.match(line) + if m: + strip = m.group(1) + name = m.group(2) + + if name in AQLFiles: + print >> sys.stderr, "%s\nduplicate test name '%s' in file %s!\n%s\n" % ('#' * 80, name, filename, '#' * 80) + sys.exit(1) + + # if we match for filters, only output these! + if ((FilterForTestcase != None) and not FilterForTestcase.match(name)): + print >> sys.stderr, "AQL: filtering out testcase '%s'" %name + filterTestList.append(name) + return("", STATE_BEGIN); + + AQLFiles[name] = True + return (name, STATE_AQL) + # Not found, remain in STATE_BEGIN return ("", STATE_BEGIN) +def matchAqlLine(line, filename, oldState): + global aqlDataSetLine, aqlBindvaluesLine + m = aqlDataSetLine.match(line) + + if m: + strip = m.group(1) + name = m.group(2) + return (name, STATE_AQL_DS) + + m = aqlExplainLine.match(line) + + if m: + strip = m.group(1) + TRUExorFALSE = m.group(2) + return (TRUExorFALSE, STATE_AQL_EXPLAIN) + + m = aqlBindvaluesLine.match(line) + + if m: + strip = m.group(1) + bindvalueStart = m.group(2) + return (bindvalueStart, STATE_AQL_BIND) + + # Not found, remain in STATE_AQL + return (line, oldState) + endExample = re.compile(r'^(/// )? *@END_EXAMPLE_') #r5 = re.compile(r'^ +') @@ -192,6 +248,10 @@ TESTLINES="testlines" TYPE="type" LINE_NO="lineNo" STRING="string" +AQL="aql" +AQLDS="aql_dataset" +AQLBV="aql_bindvalues" +AQLEXPLAIN="aql_explain" ################################################################################ ### @brief loop over the lines of one input file @@ -229,8 +289,29 @@ def analyzeFile(f, filename): if state == STATE_ARANGOSH_RUN: RunTests[name][LINE_NO] = lineNo; RunTests[name][STRING] = ""; + + if state == STATE_AQL: + RunTests[name][LINE_NO] = lineNo; + RunTests[name][AQL] = ""; continue + if state == STATE_AQL: + (data, aqlState) = matchAqlLine(line, filename, state) + if aqlState == STATE_AQL_BIND: + RunTests[name][AQLBV] = data + state = aqlState + continue + if aqlState == STATE_AQL_EXPLAIN: + RunTests[name][AQLEXPLAIN] = data + # flip back to aql - query will come. + state = STATE_AQL + continue + if aqlState == STATE_AQL_DS: + RunTests[name][AQLDS] = data + # flip back to aql - query will come. + state = STATE_AQL + continue + # we are within a example line = line[len(strip):] showCmd = True @@ -246,7 +327,8 @@ def analyzeFile(f, filename): continue line = line.lstrip('/'); - line = line.lstrip(' '); + if state != STATE_AQL: + line = line.lstrip(' '); if state == STATE_ARANGOSH_OUTPUT: line = line.replace("\\", "\\\\").replace("'", "\\'") #print line @@ -287,6 +369,10 @@ def analyzeFile(f, filename): RunTests[name][TESTLINES].append([line, showCmd, lineNo]) elif state == STATE_ARANGOSH_RUN: RunTests[name][STRING] += line + "\n" + elif state == STATE_AQL: + RunTests[name][AQL] += line + "\n" + elif state == STATE_AQL_BIND: + RunTests[name][AQLBV] += line + "\n" def generateSetupFunction(): @@ -332,9 +418,9 @@ def generateArangoshOutput(testName): escapeBS.sub(doubleBS, MapSourceFiles[testName]) ) except Exception as x: - print x - print testName - print value + print >> sys.stderr,x + print >> sys.stderr,testName + print >> sys.stderr,value raise for l in value[TESTLINES]: @@ -429,6 +515,79 @@ def generateArangoshRun(testName): ### @brief generate arangosh run ################################################################################ +def generateAQL(testName): + value = RunTests[testName] + startLineNo = RunTests[testName][LINE_NO] + if not AQLBV in value: + value[AQLBV] = "{}" + + if not AQLDS in value: + value[AQLDS] = "" + + if not AQLEXPLAIN in value: + value[AQLEXPLAIN] = 'false' + + print ''' +%s +/// %s +(() => { + internal.startPrettyPrint(true); + internal.stopColorPrint(true); + const testName = '%s'; + const lineCount = 0; + const startLineCount = %d; + const outputDir = '%s'; + const sourceFile = '%s'; + const startTime = time(); + output = ''; +''' % ( + ('/'*80), + testName, + testName, + startLineNo, + escapeBS.sub(doubleBS, OutputDir), + escapeBS.sub(doubleBS, MapSourceFiles[testName]) + ) + print " const query = `" + value[AQL] + "`;" + print " const bv = " + value[AQLBV] + ";" + print " const ds = '" + value[AQLDS] + "';" + print " const explainAql = " + value[AQLEXPLAIN].lower() + ";" + print ''' + if (ds !== '') { + exds[ds].removeDS(); + exds[ds].createDS(); + } + + output += "@Q:\\n" + output += highlight("js", query); + if (Object.keys(bv).length > 0) { + output += "@B\\n" + jsonAppender(JSON.stringify(bv, null, 2)); + } + output += "\\n@R\\n"; + + if (explainAql) { + const explainResult = require('@arangodb/aql/explainer').explain({bindVars:bv, query:query}, {}, false); + ansiAppender(explainResult); + } else { + const result = db._query(query, bv).toArray(); + jsonAppender(JSON.stringify(result, null, 2)); + } + + if (ds !== '') { + exds[ds].removeDS(); + } + fs.write(outputDir + fs.pathSeparator + testName + '.generated', output); + print("[" + (time () - startTime) + "s] done with " + testName); + checkForOrphanTestCollections('not all collections were cleaned up after ' + sourceFile + ' Line[' + startLineCount + '] [' + testName + ']:'); +})(); + +''' + +################################################################################ +### @brief generate arangosh run +################################################################################ + def generateArangoshShutdown(): print ''' if (allErrors.length > 0) { @@ -443,7 +602,6 @@ if (allErrors.length > 0) { def loopDirectories(): global ArangoshSetup, OutputDir, FilterForTestcase - argv = sys.argv argv.pop(0) filenames = [] @@ -501,7 +659,6 @@ def loopDirectories(): for filename in filenames: if (filename.find("#") < 0): f = open(filename, "r") - analyzeFile(f, filename) f.close() @@ -518,12 +675,18 @@ def generateTestCases(): generateArangoshOutput(thisTest) elif RunTests[thisTest][TYPE] == STATE_ARANGOSH_RUN: generateArangoshRun(thisTest) + elif RunTests[thisTest][TYPE] == STATE_AQL: + generateAQL(thisTest) + ################################################################################ ### @brief main ################################################################################ loopDirectories() +if len(RunTests) == 0: + print >> sys.stderr, "no testcases generated - bailing out" + raise Exception("no Testcases") print >> sys.stderr, "filtering test %d cases" %(len(filterTestList)) generateArangoshHeader()