.. _js:
Javascript Frontend
===================
.. default-domain:: js
Dependencies
^^^^^^^^^^^^
JQuery: http://www.jquery.com
JQueryUI: http://www.jqueryui.com
CodeMirror: http://codemirror.net/
MathJax: http://www.mathjax.org/
Embedding Module
^^^^^^^^^^^^^^^^
Embedding into any page creates a global Javascript object named ``sagecell`` and a variable named ``sagecell_dependencies``.
Accessible Methods and Variables
________________________________
.. _sagecell.templates_embed:
.. attribute:: sagecell.templates
Built-in embedding templates. See :ref:`templates <Templates>` in the
Embedding documentation for more information.
.. _sagecell.quietMode:
.. attribute:: sagecell.quietMode
Boolean. When set to true, only essential messages are printed to the console.
.. _sagecell.init_embed:
.. function:: sagecell.init(callback)
Initializes Sage Cell embedding capabilities and loads external CSS and
Javascript libraries.
:param Function callback: Callback function to be executed after all external
libraries have loaded.
.. _sagecell.makeSagecell:
.. function:: sagecell.makeSagecell(args)
Constructs a Sage Cell instance. This function itself mainly interprets
configuration information; the majority of the actual rendering is done by
:ref:`sagecell.initCell() <sagecell.initCell>`.
:param Dict args: Dictionary containing Sage Cell configuration information.
See :ref:`customization <Customization>` for more information.
:returns: Dictionary of Sage Cell information used by other methods.
.. _sagecell.deleteSagecell:
.. function:: sagecell.deleteSagecell(sagecellinfo)
Deletes a Sage Cell instance.
:param Dict sagecell info: Dictionary of Sage Cell information returned by
:ref:`sagecell.makeSagecell() <sagecell.makeSagecell>`.
.. _sagecell.moveInputForm:
.. function:: sagecell.moveInputForm(sagecellinfo)
Moves form elements of a Sage Cell instance outside of that instance's
embedding context (most useful in cases where a Sage Cell is embedded
within an external form which, on submission, should not send Sage Cell
content).
:param Dict sagecellinfo: Dictionary of Sage Cell information returned by
:ref:`sagecell.makeSagecell() <sagecell.makeSagecell>`.
.. _sagecell.restoreInputForm:
.. function:: sagecell.restoreInputForm(sagecellinfo)
Restores the Sage Cell form elements moved using
:ref:`sagecell.moveInputForm() <sagecell.moveInputForm>` to the Sage
Cell instance's embedding context.
:param Dict sagecellinfo: Dictionary of Sage Cell information returned by
:ref:`sagecell.makeSagecell() <sagecell.makeSagecell>`.
Internal Methods
________________
.. _sagecell.initCell:
.. function:: sagecell.initCell(sagecellinfo)
Called by :ref:`sagecell.makeSagecell() <sagecell.makeSagecell>`.
Renders a Sage Cell instance.
:param Dict sagecellinfo: Dictionary of Sage Cell configuration
information created by
:ref:`sagecell.makeSagecell() <sagecell.makeSagecell>`.
.. _sagecell.sendRequest:
.. function:: sagecell.sendRequest(method, url, data, callback, [files])
Send an HTTP request to a URL using an ``XMLHttpRequest``, JSONP, or
a form submission. This function will give the same result regardless of
cross-origin issues.
:param string method: HTTP method (usually "GET" or "POST")
:param string url: URL to which to send the request. The host portion of this
URL must be the same as the one from which the JavaScript is loaded.
:param object data: parameters to send with the request
:param function callback: a function that takes a single argument. If the
request succeeds, the function will be called with the string containing
the server response.
:param Array files: if the browser supports the ``FormData`` class, an array
of ``File`` objects to be uploaded; otherwise, an array of ``input``
elements of ``type="file"``. This argument will be ignored if ``method`` is
``GET``.
.. _sagecell.renderEditor:
.. function:: sagecell.renderEditor(editor, inputLocation)
Called by :ref:`sagecell.initCell() <sagecell.initCell>` Renders the
code editor for a Sage Cell instance.
:param String editor: Name of editor to be rendered
:param inputLocation: jQuery selector corresponding to the location for Sage
Cell input (where the editor should be created).
:returns: ``[editor, editorData]`` where ``editor`` is the name of the
rendered editor and ``editorData`` is additional data required to later
modify the rendered editor.
Utility Functions
^^^^^^^^^^^^^^^^^
These functions serve a variety of repeated purposes throughout the Sage Cell Server and are located in the object ``sagecell.functions``.
.. _uuid4:
.. function:: sagecell.functions.uuid4()
Creates a UUID4-compliant identifier as specified in `RFC 4122 <http://tools.ietf.org/html/rfc4122.html>`_. `CC-by-SA-licensed <http://creativecommons.org/licenses/by-sa/2.5/>`_ from `StackOverflow <http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript>`_ contributers.
.. _makeClass:
.. function:: sagecell.functions.makeClass()
Generic class constructor to instantiate objects. `MIT-licensed <http://www.opensource.org/licenses/mit-license.php>`_ by `John Resig <http://ejohn.org/blog/simple-class-instantiation/>`_.
.. _colorize:
.. function:: sagecell.functions.colorize()
Colorizes error tracebacks formatted with `IPython <http://ipython.scipy.org>`_'s ultraTB library.
.. _createElement:
.. function:: sagecell.functions.createElement(type, [attrs, [children]])
Creates a DOM element with the given parameters.
:param string type: the element type
:param object attrs: the attribute names and values for the element
:param Array children: a list of child nodes to give this element
Session Class
^^^^^^^^^^^^^
.. _Session:
.. class:: sagecell.Session(outputLocation, selector, sageMode, hideDynamic)
Manages Sage Cell functionality for a given cell, including client-server communication and displaying and rendering output.
:param Object outputLocation: jQuery object for output location
:param String selector: JQuery selector for overall session output
:param Bool sageMode: whether Sage Mode is toggled
:param Object hideDynamic: output elements that should be dynamically hidden
Session Functions
_________________
.. _Session.appendMsg:
.. function:: Session.appendMsg(msg, string)
:param JSON msg: JSONify-able message to be appended.
:param String string: Text (Send, Receive, etc.) to preface the message.
Appends response message to the messages div.
.. _Session.clearQuery:
.. function:: Session.clearQuery()
Ends web server querying for the session.
.. _Session.get_output:
.. function:: Session.get_output()
Polls the web server for computation results and other messages. Calls :ref:`get_output_success() <Session.get_output_success>` when messages are returned for the session.
.. _Session.get_output_success:
.. function:: Session.get_output_success(data, textStatus, jqXHR)
Callback function that is executed if the GET request in :ref:`get_output() <Session.get_output>` succeeds. Interprets, formats, and outputs returned message contents as user-readable HTML.
.. _Session.output:
.. function:: Session.output(html)
Outputs content to the JQUery selector defined in :ref:`session_output <Session.session_output>`.
:param String html: Html markup to be inserted.
:returns: Jquery selector of last child element of the output location, which can be used to chain output.
.. _Session.restoreOutput:
.. function:: Session.restoreOutput()
Resets output location for computations to its default value, sets :ref:`replace_output <Session.replace_output>` to append (rather than replace) previous output, and resets :ref:`lock_output <Session.lock_output>` to guarantee that the output location can be set. This function overrides any previous uses of :ref:`setOutput() <Session.setOutput>`.
.. _Session.send_computation_success:
.. function:: Session.send_computation_success(data, textStatus, jqXHR)
Callback function that is executed if the post request in :ref:`sendMsg() <Session.sendMsg>` suceeds. Checks that the returned session ID matches the sent session ID.
.. _Session.sendMsg:
.. function:: Session.sendMsg(code[, id])
Posts an "execute_request" message to the web server. Supports sending messages with custom message IDs. Calls :ref:`send_computation_sucess() <Session.send_computation_success>` if post request succeeds.
:param String code: Code to be executed.
:param id: Custom message ID.
.. _Session.setQuery:
.. function:: Session.setQuery()
Sets web server querying for new messages for the session.
.. _Session.setOutput:
.. function:: Session.setOutput(selector[, replace, lock])
Sets output location for computations.
:param String location: JQuery selector for computation output within the overall session output location.
:param Bool replace: Flag designating whether computation output should replace (true) or be appended to (false) existing output.
:param Bool lock: Flag designating whether :ref:`setOutput() <Session.setOutput>` can change the output location.
.. _Session.updateQuery:
.. function:: Session.updateQuery(interval)
Sets web server querying for new messages for the session at a given interval.
:param Int interval: New querying interval (in milliseconds).
Session Variables
_________________
.. _Session.eventHandlers:
.. attribute:: Session.eventHandlers
Tracks event handlers associated with the session.
.. _Session.interacts:
.. attribute:: Session.interacts
Tracks interacts associated with the session.
.. _Session.lock_output:
.. attribute:: Session.lock_output
Boolean flag which determines whether :ref:`setOutput() <Session.setOutput>` can set the output. Note that :ref:`restoreOutput() <Session.restoreOutput>` always overrides this flag.
.. _Session.session_output:
.. attribute:: Session.session_output
JQuery selector which controls location of computation output.
.. _Session.poll_interval:
.. attribute:: Session.poll_interval
Interval (milliseconds) used in polling the web server for additional messages.
.. _Session.replace_output:
.. attribute:: Session.replace_output
Boolean flag which determines whether output (stdout, stderr, etc.) should be appended to or replace previous output.
.. _Session.sequence:
.. attribute:: Session.sequence
Sequence number of latest message received for the session; used to track messages across sessions and check they are being received in the correct order.
.. _Session.session_id:
.. attribute:: Session.session_id
Unique session ID generated by :ref:`uuid4() <uuid4>`.
InteractCell Class
^^^^^^^^^^^^^^^^^^
.. _InteractCell:
.. class:: sagecell.InteractCell(selector, data)
Manages the configuration, display, and state of an interact control.
See :doc:`interact_protocol` for more details.
:param String selector: JQuery selector for the location of the interact control.
:param Dict data: Configuration data, including layout and controls.
InteractCell Functions
______________________
.. _InteractCell.bindChange:
.. function:: InteractCell.bindChange(interact)
Binds Javascript change handlers for each interact control. When a change is noticed, :ref:`getChanges() <InteractCell.getChanges>` is called to determine updated function parameters and a message is sent using :ref:`Session.sendMsg() <Session.sendMsg>` with a :ref:`custom message ID <InteractCell.msg_id>` to update the interact computation result.
:param InteractCell interact: InteractCell object.
.. _InteractCell.getChanges:
.. function:: InteractCell.getChanges()
Gets the values of an interact's controls.
:returns: Dictionary of parameters and values for a given interact.
.. _InteractCell.locateButtonIndex:
.. function:: InteractCell.locateButtonIndex(n, nCols)
Gets the index position (row, col) of the nth entry of a two-dimensional array. Used for the selector interacts.
:param Int n: Entry in the array (e.g. 1st, 2nd, 3rd, etc. entry), where n is calculated by incrementing a counter at each entry while progressing along columns, then rows.
:param Int nCols: Number of columns in the two-dimensional array.
:return: Dictionary, where dict[location] = n, dict[row] = row, dict[col] = col.
.. _InteractCell.renderCanvas:
.. function:: InteractCell.renderCanvas()
Renders interact controls as HTML.
InteractCell Variables
______________________
.. _InteractCell.controls:
.. attribute:: InteractCell.controls
Dictionary containing data on various controls (input box, slider, etc.) in the interact.
.. _InteractCell.element:
.. attribute:: InteractCell.element
JQuery selector for the location where the interact's controls should be rendered.
.. _InteractCell.function_code:
.. attribute:: InteractCell.function_code
Unique function code for the interact
.. _InteractCell.interact_id:
.. attribute:: InteractCell.interact_id
Unique ID for the interact generated by :ref:`uuid4() <uuid4>`.
.. _InteractCell.layout:
.. attribute:: InteractCell.layout
Dictionary containing data on the layout of the controls in :ref:`controls <InteractCell.controls>`.
.. _InteractCell.session:
.. attribute:: InteractCell.session
:ref:`Session <Session>` object which the interact is instantiated within.
.. _InteractCell.msg_id:
.. attribute: InteractCell.msg_id
Unique ID used to differentiate and identify interact computation results. Also used as a selector for output of interact functions.
InteractData Object
^^^^^^^^^^^^^^^^^^^
Contains classes and functions providing control over rendering, updating, monitoring, and extracting data from each type of interact control. Located at ``sagecell.InteractData``. See :doc:`interact_protocol` for details on specific interact controls.
Each type of control (Button, Checkbox, etc.) is a separate value within the InteractData object instantiated as a class. For instance, ``sagecell.InteractData.Button`` is the class referring to a Button control. Each class must contain the following methods:
.. _InteractData.init:
.. function:: InteractData.control.init(args)
:param Dict args: Dictionary containing arguments necessary for control initialization.
Initializes control object.
.. _InteractData.changeHandlers:
.. function:: InteractData.control.changeHandlers()
Returns a list of jQuery change handlers associated with the given control.
.. _InteractData.changes:
.. function:: InteractData.control.changes()
Retrieves value of a changed control;
.. _InteractData.html:
.. function:: InteractData.control.html()
Returns core HTML code for the control.
.. _InteractData.finishRender:
.. function:: InteractData.control.finishRender()
Adds onto core HTML code for more advanced or specific functionality. This often includes binding specific change handlers for the control.