Often, i also want to search the source code for some specific "notion", in the present case it is threejs, and the following search request may be helpful (or at least the begin of search path...)
search_src('threejs')
(Note that sage provides also search_doc and search_def...)
Then a long list of case insensitive occurences for the string threejs is given. Sometimes we get lines involving threejs as a substing of the name of a function or method, sometimes as part of a doc string, sometimes as the name of the viewer, sometimes a substring of a file path, et caetera...
At any rate, the corresponding mentioned modules have some (name) connection with threejs...
Note:
To have a first impression of what is delivered, here are the first few lines from the output:
sage: search_src('threejs')
env.py:193:var('THREEJS_DIR', join(SAGE_SHARE, 'threejs'))
repl/rich_output/backend_ipython.py:195: OutputSceneJmol, OutputSceneWavefront, OutputSceneThreejs,
repl/rich_output/backend_ipython.py:273: elif isinstance(rich_output, OutputSceneThreejs):
repl/rich_output/backend_ipython.py:400: def threejs_offline_scripts(self):
repl/rich_output/backend_ipython.py:412: sage: backend.threejs_offline_scripts()
repl/rich_output/backend_ipython.py:415: from sage.env import THREEJS_DIR
repl/rich_output/backend_ipython.py:418: os.path.join(THREEJS_DIR, script)
repl/rich_output/backend_ipython.py:503: OutputSceneJmol, OutputSceneThreejs,
repl/rich_output/backend_ipython.py:579: elif isinstance(rich_output, OutputSceneThreejs):
repl/rich_output/backend_ipython.py:592: def threejs_offline_scripts(self):
repl/rich_output/backend_ipython.py:604: sage: backend.threejs_offline_scripts()
repl/rich_output/backend_ipython.py:605: '...<script src="/nbextensions/threejs/build/three.min...<\\/script>...'
repl/rich_output/backend_ipython.py:608: CDN_scripts = get_display_manager().threejs_scripts(online=True)
repl/rich_output/backend_ipython.py:610:<script src="/nbextensions/threejs/build/three.min.js"></script>
repl/rich_output/backend_ipython.py:611:<script src="/nbextensions/threejs/examples/js/controls/OrbitControls.js"></script>
repl/rich_output/output_graphics3d.py:172:class OutputSceneThreejs(OutputBase):
repl/rich_output/output_graphics3d.py:184: sage: from sage.repl.rich_output.output_catalog import OutputSceneThreejs
repl/rich_output/output_graphics3d.py:185: sage: OutputSceneThreejs('<html></html>')
repl/rich_output/output_graphics3d.py:186: OutputSceneThreejs container
repl/rich_output/display_manager.py:718: def threejs_scripts(self, online):
repl/rich_output/display_manager.py:739: sage: get_display_manager().threejs_scripts(online=True)
repl/rich_output/display_manager.py:741: sage: get_display_manager().threejs_scripts(online=False)
repl/rich_output/display_manager.py:745: offline threejs graphics
repl/rich_output/display_manager.py:749: with open(os.path.join(sage.env.THREEJS_DIR, 'build', 'three.min.js')) as f:
and so on... Any extension of the today graphical features is welcome!