Handler Methods =============== Various events lead to the calling of handler methods in a tile. For example, if a user changes the size of a tile, a ``TileSizeChange`` event is generated, which in turn leads to the calling of the handler ``handle_size_change()``. The ``TileBase`` class has default handlers for all of these events, but some of them don't do anything. Your tile can choose to include its methods to handle these events. For example, you might do something like this. .. code-block:: python def handle_size_change(self): new_html = self.draw_plot() self.display_status(new_html) return In the case of the ``handle_size_handler``, no additional arguments are passed. But as noted below, some handlers are passed arguments. .. category_start Clicks on Tile Front -------------------- Many of the handler calls are generated when the user interacts with the front of a tile. This can happen if, for example, you have displayed a button on the front of the tile. In addition to passing information specific to the event, many of these handlers are also passed the name of the currently visible document as well as the currently selected row in that document. .. py:method:: handle_button_click(self, value, doc_name, active_row_index) A call to this handler is generated when the the user clicks a button within the body of a tile. ``value`` is the button value. The default handler has no effect. For example, your ``render_content`` method could add a button to the html it displays like this: .. code-block:: python the_html += "".format (val, txt) .. py:method:: handle_select_change(self, value, doc_name, active_row_index, select_name) This handler is called when the user changes the value of a select element in the body of the tile. ``value`` is the value selected. `select_name` is the value of the ``name`` property assigned in the html for your select component. The default handler does nothing. .. py:method:: handle_tile_row_click(self, clicked_row, doc_name, active_row_id=None) This handler is called when the user clicks on a row in a table that is displayed on the tile. Note that the row must have the class ``row-clickable``. This can be accomplished by calling :py:meth:`html_table` with ``click_type=row-clickable``. ``clicked_row`` contains a list of the values in the cells in the row. The default handler does nothing. .. py:method:: handle_tile_word_click(self, clicked_word, doc_name, active_row_id=None) This handler is called when the user clicks on a word on the front of the tile. Note that the word must be within an element with the class ``word-clickable``. The default handler selects all appearances of the clicked word in the main data table. .. py:method:: handle_form_submit(self, form_data, doc_name, active_row_index) Called when the user clicks submit in a form within the body of a tile. ``form_data`` is a dictionary in which the keys are the names of elements in the form, and the values are their current values. Note that one of these entries will correspond to the submit button itself. The default handler does nothing. .. py:method:: handle_textarea_change(self, value) Called when the user the user changes the contents of a textarea DOM element on the front of the tile. ``value`` is the new content of the textarea. The default handler does nothing. .. category_end .. category_start Environment changes --------------- .. py:method:: handle_size_change(self) The size of the current tile has been changed by the user. The default handler does nothing. .. py:method:: handle_doc_change(self, new_doc_name) The visible document in the main data has been changed. The default handler does nothing. .. py:method:: handle_text_select(self, selected_text) The has selected text within the main table. The default handler does nothing. .. py:method:: handle_cell_change(self, column_header, row_index, old_content, new_content, doc_name) A cell in the main data table has been changed. The default handler does nothing. .. py:method:: handle_freeform_text_change(self, new_content, doc_name) The text of a freeform data table has been changed. The default handler does nothing. .. py:method:: handle_pipe_update(self, pipe_name) The value of a pipe has changed. The default handler does nothing. .. py:method:: handle_doc_change(self, new_doc_name) The visible document in the main data has been changed. .. category_end .. category_start Dynamic Options --------------- .. py:method:: modify_options(self) Sometimes you might want the options in a tile to vary based on some conditions. For example, you might want some options to appear or disappear based on the value of another boolean option. This can be accomplished by adding a ``modify_options`` method to your tile. ``modify_options`` is run any time the form on the back of a tile is (re)generated. This includes any time that an individual option is changed on the back of a tile. It must return the options, suitably revised. Refer to `Tile Structure `__ to see what how the options list should look. You can add a "visible" key to an item in the option list. If you do, this will determine whether the option is visible. (If there is no such key, the option will be visible.) You can also hide an option simply by not including it in the revised options. Here's an example pattern: .. code-block:: python def opt_requirements(self, opt_name): reqs = { "folds": lambda : self.cross_validate, "test_fraction": lambda : not self.cross_validate, "svc_balance": lambda : self.algorithm == "SVC", "neighbors": lambda : self.algorithm == "KNeighbors", "neighbor_weights": lambda : self.algorithm == "KNeighbors", "max_iter": lambda : self.algorithm == "MLP", "max_ngram": lambda : not self.feature_type == "wordvec", "vocab_size": lambda : not self.feature_type == "wordvec", "wordvec_model": lambda : self.feature_type == "wordvec", } result = True if opt_name in reqs: result = reqs[opt_name]() return result def modify_options(self): new_options = [] for opt in self.options: opt["visible"] = self.opt_requirements(opt["name"]) new_options.append(opt) return new_options .. py:method:: handle_option_change(self, opt_name, value) Called when the user changes an individual option on the back of a tile. ``opt_name`` is the name of the option and ``value`` is the new value. .. category_end .. category_start Other ----- .. py:method:: handle_tile_message(self, event_name, data) This handler is called when the a message is sent using the :py:meth:`send_tile_message` command. Note that this handler can return a value. .. py:method:: handle_log_tile(self) The user has selected :guilabel:`Log me` from the tile menu. The default handler looks like this: .. code-block:: python def handle_log_tile(self): summary = "Log from tile " + self.tile_name self.log_it(self.current_html, summary=summary) return .. category_end