In a standard definition, the controller receives input and initiates a response by making calls on model objects. A controller accepts input from the user and instructs the model and viewers to perform actions based on that input.
Arelle has these controllers:
Cntlr.py: a superclass for the controllers
CntlrCmdLine.pyw: a bare-bones controller for command line operation. The minimal coding of this module can be used to understand the most basic API of operations that a user can request, such as to load, validate, compare, and save basic extracted data.
CntlrMainWin.pyw: a GUI controller for mouse-and-menu operation. This implementation provides the basics for background operation of long-running processes (such as loading and validating) and GUI-thread interaction. The GUI uses only graphic libraries distributed with the standard Python distribution (tkinter), so that it is fully compatible and consistent on all of the Python platforms. Some graphics operations may involve more coding than fee-licensed products, but can work everywhere and for everyone.
CntlrWebMain.py: implementation is lower priority than local GUI operation. The current plan is to reimplement from scratch the main GUI features, but operating from remote web browsers, using an on demand (AJAX-style of) interoperation. This would have the user interaction patterned on prior Mark V tools, but be kind and gentile on the amount of data transferred remotely to the browser and snappy (as possible) on response times.