This algorithm when passed a DOM node will find a very short selector for that element.
| var groupBy = function(data, key) { // `data` is an array of objects, `key` is the key (or property accessor) to group by | |
| // reduce runs this anonymous function on each element of `data` (the `item` parameter, | |
| // returning the `storage` parameter at the end | |
| return data.reduce(function(storage, item) { | |
| // get the first instance of the key by which we're grouping | |
| var group = item[key]; | |
| // set `storage` for this instance of group to the outer scope (if not empty) or initialize it | |
| storage[group] = storage[group] || []; | |
| #!/usr/bin/env python2 | |
| import SimpleHTTPServer | |
| import SocketServer | |
| import logging | |
| PORT = 8000 | |
| class GetHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): |
SVG fragment builds for reveal.js
- make an SVG (maybe in inkscape)
- save it someplace reveal.js can find it (maybe next to your presentation)
- figure out how to identify them (maybe use named layers)
- in reveal.js/index.html
- add
reveal-svg-fragment.jsas a dependency - in a
<section>of reveal.js markup
- add
- add
data-svg-fragment=""to something, e.g.
| "************************************************************************** | |
| * Allowable characters: * | |
| * - a-z * | |
| * - A-Z * | |
| * - 0-9 * | |
| * - .+/\*~<>@%|&? * | |
| * - blank, tab, cr, ff, lf * | |
| * * | |
| * Variables: * | |
| * - variables must be declared before use * |
In a data declaration, a type constructor is the thing on the left hand side of the equals sign. The data constructor(s) are the things on the right hand side of the equals sign. You use type constructors where a type is expected, and you use data constructors where a value is expected.
To make things simple, we can start with an example of a type that represents a colour.
data Colour = Red | Green | Blue- Created: Nov 28, 2017
- Updated: Nov 29, 2017: Now covers transformation of XML documents
Recursion is a powerful programming technique, but the idea is simple: instead of performing a single operation, a function calls itself repeatedly to whittle through a larger task. In XQuery, recursion can be used to accomplish complex tasks on data that a plain FLWOR expression (which iterates through a sequence) cannot, such as transforming an entire XML document from one format into another, like TEI or DocBook into HTML, EPUB, LaTeX, or XSL-FO. Transforming a document is well-suited to recursion because each of the document's nodes may need to be examined and manipulated based on the node's type, name, and location in the document; and once a node has been processed, the transformation must continue processing the nodes' children and descendants until the deepest leaf node has been processed. But learning the technique of recursion is often hard for a beginning program
##Examples of Higher-Order Functions in XQuery
Here are a few examples of higher-order functions in XQuery. For more examples, see the very nice discussion of higher-order functions in XQuery 3.0 at the BaseX website.
N.B. In some implementations, these functions may not be implemented or may have different names/function signatures. The first four functions have been tested using Saxon PE and the second four using Zorba.
| from BaseHTTPServer import BaseHTTPRequestHandler | |
| import urlparse, json | |
| class GetHandler(BaseHTTPRequestHandler): | |
| def do_GET(self): | |
| parsed_path = urlparse.urlparse(self.path) | |
| message = '\n'.join([ | |
| 'CLIENT VALUES:', | |
| 'client_address=%s (%s)' % (self.client_address, |