| 
									
										
										
										
											2009-01-06 14:56:14 -05:00
										 |  |  | ! Copyright (C) 2006, 2009 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2009-10-04 18:50:34 -04:00
										 |  |  | USING: accessors arrays assocs classes combinators | 
					
						
							|  |  |  | combinators.short-circuit compiler.units debugger fry help | 
					
						
							|  |  |  | help.apropos help.crossref help.home help.topics kernel models | 
					
						
							|  |  |  | sequences ui ui.commands ui.gadgets ui.gadgets.borders | 
					
						
							|  |  |  | ui.gadgets.buttons ui.gadgets.editors ui.gadgets.glass | 
					
						
							|  |  |  | ui.gadgets.labels ui.gadgets.panes ui.gadgets.scrollers | 
					
						
							|  |  |  | ui.gadgets.status-bar ui.gadgets.tracks ui.gadgets.viewports | 
					
						
							|  |  |  | ui.gestures ui.tools.browser.history ui.tools.browser.popups | 
					
						
							|  |  |  | ui.tools.common vocabs ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | IN: ui.tools.browser | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-08 12:43:47 -04:00
										 |  |  | TUPLE: browser-gadget < tool history scroller search-field popup ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-24 17:21:38 -04:00
										 |  |  | { 650 700 } browser-gadget set-tool-dim | 
					
						
							| 
									
										
										
										
											2009-01-08 19:35:34 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-06 00:19:35 -04:00
										 |  |  | M: browser-gadget history-value | 
					
						
							|  |  |  |     [ control-value ] [ scroller>> scroll-position ] | 
					
						
							|  |  |  |     bi 2array ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: browser-gadget set-history-value | 
					
						
							|  |  |  |     [ first2 ] dip
 | 
					
						
							|  |  |  |     [ set-control-value ] [ scroller>> set-scroll-position ] | 
					
						
							|  |  |  |     bi-curry bi* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-11 17:47:38 -05:00
										 |  |  | : show-help ( link browser-gadget -- )
 | 
					
						
							| 
									
										
										
										
											2009-04-06 00:19:35 -04:00
										 |  |  |     [ >link ] dip
 | 
					
						
							| 
									
										
										
										
											2009-05-01 08:36:47 -04:00
										 |  |  |     [ | 
					
						
							|  |  |  |         2dup model>> value>> =
 | 
					
						
							|  |  |  |         [ 2drop ] [ [ add-recent ] [ history>> add-history ] bi* ] if
 | 
					
						
							|  |  |  |     ] | 
					
						
							| 
									
										
										
										
											2009-04-06 00:19:35 -04:00
										 |  |  |     [ model>> set-model ] | 
					
						
							|  |  |  |     2bi ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : <help-pane> ( browser-gadget -- gadget )
 | 
					
						
							| 
									
										
										
										
											2009-01-06 14:56:14 -05:00
										 |  |  |     model>> [ '[ _ print-topic ] try ] <pane-control> ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-11 17:47:38 -05:00
										 |  |  | : search-browser ( string browser -- )
 | 
					
						
							| 
									
										
										
										
											2009-01-08 18:50:38 -05:00
										 |  |  |     '[ <apropos> _ show-help ] unless-empty ;
 | 
					
						
							| 
									
										
										
										
											2008-12-11 17:47:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : <search-field> ( browser -- field )
 | 
					
						
							| 
									
										
										
										
											2009-01-06 14:56:14 -05:00
										 |  |  |     '[ _ search-browser ] <action-field> | 
					
						
							| 
									
										
										
										
											2009-02-16 05:25:58 -05:00
										 |  |  |         10 >>min-cols | 
					
						
							|  |  |  |         10 >>max-cols ;
 | 
					
						
							| 
									
										
										
										
											2008-12-11 17:47:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : <browser-toolbar> ( browser -- toolbar )
 | 
					
						
							| 
									
										
										
										
											2009-02-14 21:46:35 -05:00
										 |  |  |     horizontal <track> | 
					
						
							|  |  |  |         0 >>fill | 
					
						
							| 
									
										
										
										
											2009-02-02 14:45:06 -05:00
										 |  |  |         1/2 >>align | 
					
						
							| 
									
										
										
										
											2008-12-11 17:47:38 -05:00
										 |  |  |         { 5 5 } >>gap | 
					
						
							| 
									
										
										
										
											2009-02-14 21:46:35 -05:00
										 |  |  |         over <toolbar> f track-add | 
					
						
							|  |  |  |         swap search-field>> "Search:" label-on-left 1 track-add ;
 | 
					
						
							| 
									
										
										
										
											2009-01-06 14:56:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : <browser-gadget> ( link -- gadget )
 | 
					
						
							| 
									
										
										
										
											2009-02-02 01:02:55 -05:00
										 |  |  |     vertical browser-gadget new-track | 
					
						
							| 
									
										
										
										
											2009-02-14 21:46:35 -05:00
										 |  |  |         1 >>fill | 
					
						
							| 
									
										
										
										
											2009-04-06 00:19:35 -04:00
										 |  |  |         swap >link <model> >>model | 
					
						
							|  |  |  |         dup <history> >>history | 
					
						
							| 
									
										
										
										
											2009-01-06 14:56:14 -05:00
										 |  |  |         dup <search-field> >>search-field | 
					
						
							| 
									
										
										
										
											2009-02-14 21:46:35 -05:00
										 |  |  |         dup <browser-toolbar> { 3 3 } <border> { 1 0 } >>fill f track-add | 
					
						
							| 
									
										
										
										
											2009-09-08 12:43:47 -04:00
										 |  |  |         dup dup <help-pane> { 10 0 } <border> { 1 1 } >>fill | 
					
						
							|  |  |  |         <scroller> >>scroller scroller>> 1 track-add ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-09 04:52:08 -05:00
										 |  |  | M: browser-gadget graft* | 
					
						
							| 
									
										
										
										
											2008-07-11 01:01:22 -04:00
										 |  |  |     [ add-definition-observer ] [ call-next-method ] bi ;
 | 
					
						
							| 
									
										
										
										
											2008-01-09 04:52:08 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: browser-gadget ungraft* | 
					
						
							| 
									
										
										
										
											2008-07-11 01:01:22 -04:00
										 |  |  |     [ call-next-method ] [ remove-definition-observer ] bi ;
 | 
					
						
							| 
									
										
										
										
											2008-01-09 04:52:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-17 09:29:57 -05:00
										 |  |  | M: browser-gadget handle-gesture | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         { [ over key-gesture? not ] [ call-next-method ] } | 
					
						
							|  |  |  |         { [ dup popup>> ] [ { [ pass-to-popup ] [ call-next-method ] } 2&& ] } | 
					
						
							|  |  |  |         [ call-next-method ] | 
					
						
							|  |  |  |     } cond ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-09 04:52:08 -05:00
										 |  |  | : showing-definition? ( defspec assoc -- ? )
 | 
					
						
							| 
									
										
										
										
											2008-11-20 21:34:49 -05:00
										 |  |  |     { | 
					
						
							|  |  |  |         [ key? ] | 
					
						
							|  |  |  |         [ [ dup word-link? [ name>> ] when ] dip key? ] | 
					
						
							|  |  |  |         [ [ dup vocab-link? [ vocab ] when ] dip key? ] | 
					
						
							|  |  |  |     } 2|| ;
 | 
					
						
							| 
									
										
										
										
											2008-01-09 04:52:08 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: browser-gadget definitions-changed ( assoc browser -- )
 | 
					
						
							| 
									
										
										
										
											2009-09-08 17:23:12 -04:00
										 |  |  |     [ model>> value>> swap showing-definition? ] keep
 | 
					
						
							|  |  |  |     '[ _ [ history-value ] keep set-history-value ] when ;
 | 
					
						
							| 
									
										
										
										
											2008-01-09 04:52:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-06 14:56:14 -05:00
										 |  |  | M: browser-gadget focusable-child* search-field>> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-08 19:56:39 -05:00
										 |  |  | : (browser-window) ( topic -- )
 | 
					
						
							|  |  |  |     <browser-gadget> "Browser" open-status-window ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : browser-window ( -- )
 | 
					
						
							| 
									
										
										
										
											2009-03-24 10:11:45 -04:00
										 |  |  |     "help.home" (browser-window) ;
 | 
					
						
							| 
									
										
										
										
											2009-01-08 19:56:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-09 00:05:45 -04:00
										 |  |  | : error-help-window ( error -- )
 | 
					
						
							| 
									
										
										
										
											2009-10-04 18:50:34 -04:00
										 |  |  |     { | 
					
						
							|  |  |  |         [ error-help ] | 
					
						
							|  |  |  |         [ dup tuple? [ class ] [ drop "errors" ] if ] | 
					
						
							|  |  |  |     } 1|| (browser-window) ;
 | 
					
						
							| 
									
										
										
										
											2009-04-09 00:05:45 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-08 19:56:39 -05:00
										 |  |  | \ browser-window H{ { +nullary+ t } } define-command | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-18 22:01:19 -05:00
										 |  |  | : com-browse ( link -- )
 | 
					
						
							| 
									
										
										
										
											2009-01-06 14:56:14 -05:00
										 |  |  |     [ browser-gadget? ] find-window | 
					
						
							|  |  |  |     [ [ raise-window ] [ gadget-child show-help ] bi ] | 
					
						
							| 
									
										
										
										
											2009-01-08 19:56:39 -05:00
										 |  |  |     [ (browser-window) ] if* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-07 22:35:44 -05:00
										 |  |  | : show-browser ( -- )
 | 
					
						
							|  |  |  |     [ browser-gadget? ] find-window | 
					
						
							| 
									
										
										
										
											2009-03-25 11:12:10 -04:00
										 |  |  |     [ [ raise-window ] [ request-focus ] bi ] [ browser-window ] if* ;
 | 
					
						
							| 
									
										
										
										
											2009-01-08 19:56:39 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | \ show-browser H{ { +nullary+ t } } define-command | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-06 00:19:35 -04:00
										 |  |  | : com-back ( browser -- ) history>> go-back ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-06 00:19:35 -04:00
										 |  |  | : com-forward ( browser -- ) history>> go-forward ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-24 10:11:45 -04:00
										 |  |  | : com-home ( browser -- ) "help.home" swap show-help ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-18 22:01:19 -05:00
										 |  |  | : browser-help ( -- ) "ui-browser" com-browse ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-24 16:47:23 -04:00
										 |  |  | : glossary ( -- ) "conventions" com-browse ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | \ browser-help H{ { +nullary+ t } } define-command | 
					
						
							| 
									
										
										
										
											2009-10-24 16:47:23 -04:00
										 |  |  | \ glossary H{ { +nullary+ t } } define-command | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | browser-gadget "toolbar" f { | 
					
						
							| 
									
										
										
										
											2008-11-21 23:03:14 -05:00
										 |  |  |     { T{ key-down f { A+ } "LEFT" } com-back } | 
					
						
							|  |  |  |     { T{ key-down f { A+ } "RIGHT" } com-forward } | 
					
						
							| 
									
										
										
										
											2009-03-24 10:11:45 -04:00
										 |  |  |     { T{ key-down f { A+ } "H" } com-home } | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     { T{ key-down f f "F1" } browser-help } | 
					
						
							| 
									
										
										
										
											2009-10-24 16:47:23 -04:00
										 |  |  |     { T{ key-down f { A+ } "F1" } glossary } | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | } define-command-map | 
					
						
							| 
									
										
										
										
											2008-04-11 23:33:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-08 20:30:58 -05:00
										 |  |  | : ?show-help ( link browser -- )
 | 
					
						
							|  |  |  |     over [ show-help ] [ 2drop ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : navigate ( browser quot -- )
 | 
					
						
							| 
									
										
										
										
											2009-03-24 05:11:08 -04:00
										 |  |  |     '[ control-value @ ] keep ?show-help ; inline
 | 
					
						
							| 
									
										
										
										
											2009-01-08 20:30:58 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : com-up ( browser -- ) [ article-parent ] navigate ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : com-prev ( browser -- ) [ prev-article ] navigate ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : com-next ( browser -- ) [ next-article ] navigate ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | browser-gadget "navigation" "Commands for navigating in the article hierarchy" { | 
					
						
							|  |  |  |     { T{ key-down f { A+ } "u" } com-up } | 
					
						
							|  |  |  |     { T{ key-down f { A+ } "p" } com-prev } | 
					
						
							|  |  |  |     { T{ key-down f { A+ } "n" } com-next } | 
					
						
							| 
									
										
										
										
											2009-02-17 09:29:57 -05:00
										 |  |  |     { T{ key-down f { A+ } "k" } com-show-outgoing-links } | 
					
						
							|  |  |  |     { T{ key-down f { A+ } "K" } com-show-incoming-links } | 
					
						
							| 
									
										
										
										
											2009-01-08 20:30:58 -05:00
										 |  |  | } define-command-map | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-11 23:33:01 -04:00
										 |  |  | browser-gadget "multi-touch" f { | 
					
						
							| 
									
										
										
										
											2009-01-28 01:30:57 -05:00
										 |  |  |     { left-action com-back } | 
					
						
							|  |  |  |     { right-action com-forward } | 
					
						
							| 
									
										
										
										
											2008-04-11 23:33:01 -04:00
										 |  |  | } define-command-map | 
					
						
							| 
									
										
										
										
											2009-01-06 14:56:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | browser-gadget "scrolling" | 
					
						
							| 
									
										
										
										
											2009-01-07 00:30:08 -05:00
										 |  |  | "The browser's scroller can be scrolled from the keyboard." | 
					
						
							| 
									
										
										
										
											2009-01-06 14:56:14 -05:00
										 |  |  | { | 
					
						
							|  |  |  |     { T{ key-down f f "UP" } com-scroll-up } | 
					
						
							|  |  |  |     { T{ key-down f f "DOWN" } com-scroll-down } | 
					
						
							|  |  |  |     { T{ key-down f f "PAGE_UP" } com-page-up } | 
					
						
							|  |  |  |     { T{ key-down f f "PAGE_DOWN" } com-page-down } | 
					
						
							| 
									
										
										
										
											2009-01-07 16:06:43 -05:00
										 |  |  | } define-command-map | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-04 18:50:34 -04:00
										 |  |  | MAIN: browser-window |