| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | <!DOCTYPE html> | 
					
						
							|  |  |  | <html> | 
					
						
							|  |  |  | <link rel="stylesheet" href="../../css/widget/browse.css"> | 
					
						
							|  |  |  | <link rel="stylesheet" href="../../css/fonts.css"> | 
					
						
							| 
									
										
										
										
											2019-06-18 20:58:40 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | <meta name="viewport" content="width=device-width"> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | <style> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | body { | 
					
						
							|  |  |  | 	font-family: OpenSans, sans-serif;  | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .container { | 
					
						
							|  |  |  | 	position: absolute; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-11 17:28:38 +03:00
										 |  |  | .browse-widget { | 
					
						
							|  |  |  | 	user-select: none; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | .browse-widget .list :focus { | 
					
						
							| 
									
										
										
										
											2019-06-07 02:56:01 +03:00
										 |  |  | 	outline: none;  | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 15:47:41 +03:00
										 |  |  | /* XXX move these to the main CSS */ | 
					
						
							| 
									
										
										
										
											2019-07-02 02:10:03 +03:00
										 |  |  | .browse-widget:not(.flat) .list .item:not(.not-traversable) .text:after { | 
					
						
							| 
									
										
										
										
											2019-06-04 15:47:41 +03:00
										 |  |  |     content: ""; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | /* XXX this needs to be the last .text item only */ | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | .browse-widget .list .traversable .text:after { | 
					
						
							| 
									
										
										
										
											2019-06-04 15:47:41 +03:00
										 |  |  |     content: "/" !important; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 19:50:52 +03:00
										 |  |  | /* selection... */ | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | .browse-widget .list .selected { | 
					
						
							| 
									
										
										
										
											2019-06-04 19:50:52 +03:00
										 |  |  | 	color: yellow; | 
					
						
							|  |  |  | 	background: none; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | .browse-widget .list .focused { | 
					
						
							| 
									
										
										
										
											2019-06-04 19:50:52 +03:00
										 |  |  | 	background: rgba(0, 0, 0, 0.08); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | .browse-widget .list .item.heading.focused { | 
					
						
							|  |  |  | 	background: rgba(0, 0, 0, 0.7); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-06-04 19:50:52 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-11 17:28:38 +03:00
										 |  |  | /* XXX not sure about this... */ | 
					
						
							|  |  |  | .browse-widget .list .list { | 
					
						
							|  |  |  | 	overflow: visible; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-06-04 19:50:52 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-30 02:10:30 +03:00
										 |  |  | .browse-widget .list.items .text + .text:before { | 
					
						
							|  |  |  | 	content: " "; | 
					
						
							|  |  |  | 	white-space: pre; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-16 21:14:23 +03:00
										 |  |  | .browse-widget .list .text .key-hint { | 
					
						
							|  |  |  | 	text-decoration-skip-ink: none; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-01 19:33:40 +03:00
										 |  |  | /* show non-global key hint on buttons only when element is focused... */ | 
					
						
							|  |  |  | .browse-widget .list .item:not(.focused) .button .key-hint:not(.global) { | 
					
						
							|  |  |  | 	text-decoration: none; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | /* flat list... */ | 
					
						
							|  |  |  | .browse-widget.flat .list .list { | 
					
						
							|  |  |  | 	padding-left: 0px; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .browse-widget.flat .list .list>.item:first-child { | 
					
						
							|  |  |  | 	margin-left: 0px; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-08 05:41:58 +03:00
										 |  |  | /* XXX the problem here is that the frame scrolls with the content and does not stay in place... | 
					
						
							|  |  |  | .browse-widget>.list:after { | 
					
						
							|  |  |  | 	content: ""; | 
					
						
							|  |  |  | 	display: block; | 
					
						
							|  |  |  | 	position: absolute; | 
					
						
							|  |  |  | 	overflow: hidden; | 
					
						
							|  |  |  | 	width: 100%; | 
					
						
							|  |  |  | 	height: 100%; | 
					
						
							|  |  |  | 	top: 0; | 
					
						
							|  |  |  | 	left: 0; | 
					
						
							|  |  |  | 	right: 0; | 
					
						
							|  |  |  | 	bottom: 0; | 
					
						
							| 
									
										
										
										
											2019-06-26 12:53:55 +03:00
										 |  |  | 	box-shadow:  | 
					
						
							| 
									
										
										
										
											2019-07-08 05:41:58 +03:00
										 |  |  | 		0 50px 10px -50px yellow inset,  | 
					
						
							|  |  |  | 		0 -50px 10px -50px yellow inset; | 
					
						
							| 
									
										
										
										
											2019-06-26 12:53:55 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-07-08 05:41:58 +03:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2019-06-26 12:53:55 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-26 19:41:42 +03:00
										 |  |  | .item.path .text:before { | 
					
						
							|  |  |  | 	content: "/"; | 
					
						
							| 
									
										
										
										
											2019-06-30 02:10:30 +03:00
										 |  |  | 	margin-left: 0.1em; | 
					
						
							|  |  |  | 	margin-right: 0.1em; | 
					
						
							|  |  |  | 	opacity: 0.5; | 
					
						
							| 
									
										
										
										
											2019-06-26 19:41:42 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-27 03:09:55 +03:00
										 |  |  | /* XXX experimental... */ | 
					
						
							|  |  |  | .item.sticky { | 
					
						
							|  |  |  | 	position: -webkit-sticky; | 
					
						
							|  |  |  | 	position: sticky; | 
					
						
							|  |  |  | 	top: 0px; | 
					
						
							|  |  |  | 	background: gray; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-26 19:41:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-23 04:45:31 +03:00
										 |  |  | /* | 
					
						
							|  |  |  | .browse-widget .list .item .button.toggle-collapse { | 
					
						
							|  |  |  | 	float: left; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-16 21:14:23 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 15:47:41 +03:00
										 |  |  | /* XXX stub... | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | .browse-widget .list .text:first-child:before { | 
					
						
							| 
									
										
										
										
											2019-06-04 15:47:41 +03:00
										 |  |  | 	display: inline-block; | 
					
						
							|  |  |  | 	width: 5pt; | 
					
						
							|  |  |  | 	padding-right: 3pt; | 
					
						
							|  |  |  | 	content: " "; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | .browse-widget .list .traversable .text:first-child:before { | 
					
						
							| 
									
										
										
										
											2019-06-04 15:47:41 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | .browse-widget .list .traversable:not(.collapsed) .text:first-child:before { | 
					
						
							| 
									
										
										
										
											2019-06-04 15:47:41 +03:00
										 |  |  |     content: "-"; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | .browse-widget .list .traversable.collapsed .text:first-child:before { | 
					
						
							| 
									
										
										
										
											2019-06-04 15:47:41 +03:00
										 |  |  |     content: "+"; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-11 17:28:38 +03:00
										 |  |  | /* scrollbar setup...  */ | 
					
						
							|  |  |  | .browse-widget ::-webkit-scrollbar { | 
					
						
							|  |  |  | 	width: 10px; | 
					
						
							|  |  |  | 	height: 10px; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .browse-widget ::-webkit-scrollbar-button { | 
					
						
							|  |  |  | 	display: none; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .browse-widget ::-webkit-scrollbar-track { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .browse-widget ::-webkit-scrollbar-track-piece { | 
					
						
							|  |  |  | 	background: transparent; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .browse-widget ::-webkit-scrollbar-track-piece { | 
					
						
							|  |  |  | 	background: rgba(0, 0, 0, 0.05); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .browse-widget ::-webkit-scrollbar-thumb { | 
					
						
							|  |  |  | 	background: rgba(0, 0, 0, 0.15); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .browse-widget ::-webkit-scrollbar-thumb:hover { | 
					
						
							|  |  |  | 	background: rgba(0, 0, 0, 0.3); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .browse-widget ::-webkit-scrollbar-corner { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | .browse-widget ::-webkit-resizer { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | </style> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script src="../../ext-lib/jquery.js"></script> | 
					
						
							|  |  |  | <script src="../../ext-lib/jquery-ui.js"></script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script src="../jli.js"></script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script src="../../ext-lib/require.js"></script> | 
					
						
							| 
									
										
										
										
											2019-05-03 19:43:22 +03:00
										 |  |  | <script src="../../cfg/requirejs.js"></script> | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <!--script src="browse-dialog.js"></script--> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | requirejs.config({ | 
					
						
							|  |  |  | 	paths: { | 
					
						
							|  |  |  | 		'lib/object': '../../node_modules/ig-object/object', | 
					
						
							| 
									
										
										
										
											2020-10-11 23:42:17 +03:00
										 |  |  | 		'lib/types': '../../node_modules/ig-types/', | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 		'lib/actions': '../../node_modules/ig-actions/actions', | 
					
						
							|  |  |  | 		'lib/features': '../../node_modules/ig-features/features', | 
					
						
							| 
									
										
										
										
											2019-06-12 04:44:17 +03:00
										 |  |  | 		'lib/walk': '../../node_modules/generic-walk/walk', | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 		//'lib/keyboard': '../../node_modules/ig-keyboard/keyboard', | 
					
						
							| 
									
										
										
										
											2020-07-05 17:20:22 +03:00
										 |  |  | 		'object-run': '../../node_modules/object-run/run', | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 	},	 | 
					
						
							|  |  |  | 	map: { | 
					
						
							|  |  |  | 		'*': { | 
					
						
							|  |  |  | 			'../object': 'lib/object', | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2020-10-11 23:42:17 +03:00
										 |  |  | 	packages: [ | 
					
						
							|  |  |  | 		'lib/types', | 
					
						
							|  |  |  | 	], | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | requirejs([ | 
					
						
							| 
									
										
										
										
											2020-10-11 23:42:17 +03:00
										 |  |  | 			'lib/types',  | 
					
						
							|  |  |  | 			'lib/object',  | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 			'../util', | 
					
						
							|  |  |  | 			'../keyboard',  | 
					
						
							|  |  |  | 			'../toggler',  | 
					
						
							|  |  |  | 			'./browse2', | 
					
						
							| 
									
										
										
										
											2020-10-11 23:42:17 +03:00
										 |  |  | 		], function(_, o, u, k, t, br){ | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 	util = u | 
					
						
							|  |  |  | 	keyboard = k | 
					
						
							|  |  |  | 	object = o | 
					
						
							|  |  |  | 	toggler = t | 
					
						
							|  |  |  | 	browser = br | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-10 03:02:08 +03:00
										 |  |  | 	// XXX split this into several dialogues, show each and then combine... | 
					
						
							| 
									
										
										
										
											2019-06-29 01:20:02 +03:00
										 |  |  | 	dialog = browser.Browser( | 
					
						
							| 
									
										
										
										
											2019-06-29 21:34:42 +03:00
										 |  |  | 		//browser.items.DisplayFocusedPath, | 
					
						
							| 
									
										
										
										
											2019-07-01 04:47:31 +03:00
										 |  |  | 		//null, | 
					
						
							| 
									
										
										
										
											2019-06-29 01:20:02 +03:00
										 |  |  | 		function(make){ | 
					
						
							| 
									
										
										
										
											2020-03-25 19:00:38 +03:00
										 |  |  | 			// item demo... | 
					
						
							| 
									
										
										
										
											2019-07-01 19:33:40 +03:00
										 |  |  | 			make.nest(make.Heading('$Predefined Items'), [ | 
					
						
							|  |  |  | 				make('Normal item'), | 
					
						
							|  |  |  | 				make.Heading('Heading'), | 
					
						
							| 
									
										
										
										
											2020-03-27 01:18:47 +03:00
										 |  |  | 				make.Empty({doc: 'Empty item...'}), | 
					
						
							|  |  |  | 				//make.Separator({doc: 'Separator..'}), | 
					
						
							|  |  |  | 				//make.Spinner({doc: 'Spinner...'}), | 
					
						
							|  |  |  | 				//make.Editable(), | 
					
						
							| 
									
										
										
										
											2019-07-01 19:33:40 +03:00
										 |  |  | 				make.Confirm('Confirm',  | 
					
						
							|  |  |  | 					function(){ console.log('confirm') },  | 
					
						
							| 
									
										
										
										
											2020-03-08 17:34:15 +03:00
										 |  |  | 					function(){ console.log('reject') }), | 
					
						
							| 
									
										
										
										
											2020-03-25 19:00:38 +03:00
										 |  |  | 			]) | 
					
						
							|  |  |  | 			// filed demo... | 
					
						
							|  |  |  | 			make.nest(make.Heading('$Fields'), [ | 
					
						
							|  |  |  | 				make.field('field', 'value'), | 
					
						
							| 
									
										
										
										
											2019-07-01 19:33:40 +03:00
										 |  |  | 			]) | 
					
						
							| 
									
										
										
										
											2019-07-01 23:48:23 +03:00
										 |  |  | 			make.nest(make.Heading('$Dynamic Items', { | 
					
						
							|  |  |  | 				doc: 'Item generator examples...', | 
					
						
							|  |  |  | 			}), [ | 
					
						
							|  |  |  | 				make.DisplayFocusedPath({ | 
					
						
							|  |  |  | 					id: 'inline_item_path_display', | 
					
						
							|  |  |  | 					doc: 'Shows path of focused item...' | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 				make.DisplayItemInfo({ | 
					
						
							|  |  |  | 					id: 'inline_item_info_display', | 
					
						
							|  |  |  | 					doc: 'Shows the value of .doc/.alt item attr...', | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 			]) | 
					
						
							| 
									
										
										
										
											2020-03-27 01:18:47 +03:00
										 |  |  | 			make.nest(make.Heading('Nesting test...', {collapsed: true}), [ | 
					
						
							| 
									
										
										
										
											2020-03-25 19:00:38 +03:00
										 |  |  | 				make.nest('A', [ | 
					
						
							|  |  |  | 					make('B'), | 
					
						
							|  |  |  | 					make('C'), | 
					
						
							|  |  |  | 				]), | 
					
						
							|  |  |  | 				make.nest('D', [ | 
					
						
							| 
									
										
										
										
											2020-04-02 23:06:02 +03:00
										 |  |  | 					make.group( | 
					
						
							|  |  |  | 						make('E'), | 
					
						
							|  |  |  | 						make('F')) | 
					
						
							| 
									
										
										
										
											2020-03-25 19:00:38 +03:00
										 |  |  | 				]), | 
					
						
							|  |  |  | 			]) | 
					
						
							| 
									
										
										
										
											2019-07-01 19:33:40 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			make.Separator() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-29 01:20:02 +03:00
										 |  |  | 			make(['list', 'of', 'text']) | 
					
						
							|  |  |  | 			make.group( | 
					
						
							|  |  |  | 				make('$group item 0 (open event)',  | 
					
						
							|  |  |  | 					function(){ console.log('##', ...arguments) }), | 
					
						
							|  |  |  | 				'group item 1 (bare)') | 
					
						
							|  |  |  | 			// XXX Q: should we show only one if multiple lines are in sequence??? | 
					
						
							|  |  |  | 			make('---') | 
					
						
							|  |  |  | 			// embeded browser... | 
					
						
							|  |  |  | 			make(browser.Browser(function(make){ | 
					
						
							|  |  |  | 				make('inlined browser item 0 (open/menu events)', { | 
					
						
							|  |  |  | 					open: function(){ console.log('!!! OPEN', ...arguments) }, | 
					
						
							|  |  |  | 					menu: function(){ console.log('!!! MENU', ...arguments) }, | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 				make(1) | 
					
						
							|  |  |  | 				make(2) | 
					
						
							|  |  |  | 			})) | 
					
						
							|  |  |  | 			// basic nested list... | 
					
						
							|  |  |  | 			make.nest('$nested', [ | 
					
						
							|  |  |  | 				make('mo$o', {disabled: true}), | 
					
						
							|  |  |  | 				2, | 
					
						
							|  |  |  | 				// XXX this is not supported by .map(..)... | 
					
						
							|  |  |  | 				make.nest('$ne$sted', browser.Browser(function(make){ | 
					
						
							|  |  |  | 					make('ab') | 
					
						
							|  |  |  | 					//make('<img src="../../experiments/grayscale.jpg">', | 
					
						
							|  |  |  | 					//make($('<img src="../../experiments/grayscale.jpg">')[0], | 
					
						
							|  |  |  | 					make($('<img src="../../experiments/grayscale.jpg">'),  | 
					
						
							|  |  |  | 						{ | 
					
						
							|  |  |  | 							alt: 'image item example' | 
					
						
							|  |  |  | 						}) | 
					
						
							|  |  |  | 				})), | 
					
						
							|  |  |  | 			]) | 
					
						
							|  |  |  | 			make('in between two $subtrees...') | 
					
						
							|  |  |  | 			// nested browser... | 
					
						
							|  |  |  | 			make.nest('B',  | 
					
						
							|  |  |  | 				browser.Browser(function(make){ | 
					
						
							|  |  |  | 					make('xx') | 
					
						
							|  |  |  | 					make.nest('C', browser.Browser(function(make){ | 
					
						
							|  |  |  | 						make('aaa') | 
					
						
							|  |  |  | 						make.nest('D', browser.Browser(function(make){ | 
					
						
							|  |  |  | 							make('a') | 
					
						
							|  |  |  | 							make('---') | 
					
						
							|  |  |  | 							make('b') | 
					
						
							|  |  |  | 						})) | 
					
						
							|  |  |  | 						make('bbb', {buttons: [ | 
					
						
							|  |  |  | 							['test', 'focus: "parent"'], | 
					
						
							| 
									
										
										
										
											2019-07-16 19:11:57 +03:00
										 |  |  | 							'Checkbox', | 
					
						
							| 
									
										
										
										
											2019-06-29 01:20:02 +03:00
										 |  |  | 						]}) | 
					
						
							|  |  |  | 						make('bbb') | 
					
						
							|  |  |  | 					})) | 
					
						
							|  |  |  | 				}), { | 
					
						
							|  |  |  | 					//collapsed: true, | 
					
						
							|  |  |  | 					// XXX this does not appear to survive attaching an item  | 
					
						
							|  |  |  | 					//		to the document... | 
					
						
							|  |  |  | 					open: function(e){  | 
					
						
							|  |  |  | 						e.preventDefault() | 
					
						
							|  |  |  | 						console.log('test: open: default prevented...') }, | 
					
						
							|  |  |  | 					//cls: ['heading'], | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			make.Separator() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			make.nest( | 
					
						
							|  |  |  | 				'scroll testing', | 
					
						
							|  |  |  | 				(new Array(100)) | 
					
						
							|  |  |  | 					.fill(1) | 
					
						
							|  |  |  | 					.map(function(_, i){ | 
					
						
							|  |  |  | 						return make(i) })) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-29 16:09:32 +03:00
										 |  |  | 		},  | 
					
						
							| 
									
										
										
										
											2019-06-29 21:34:42 +03:00
										 |  |  | 		//browser.items.DisplayItemInfo, | 
					
						
							| 
									
										
										
										
											2019-07-01 04:47:31 +03:00
										 |  |  | 		//browser.items.makeDisplayItem('Simple message...'), | 
					
						
							|  |  |  | 		//browser.items.makeDisplayConfirm(null,  | 
					
						
							|  |  |  | 		//	function(){ console.log('OK') }, | 
					
						
							|  |  |  | 		//	function(){ console.log('Cancel') }), | 
					
						
							| 
									
										
										
										
											2019-06-29 16:09:32 +03:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2019-07-01 04:47:31 +03:00
										 |  |  | 			headerButtons: [ | 
					
						
							|  |  |  | 				['c', 'collapse: "*"'], | 
					
						
							|  |  |  | 				['e', 'expand: "*"'], | 
					
						
							|  |  |  | 			], | 
					
						
							| 
									
										
										
										
											2019-06-29 01:20:02 +03:00
										 |  |  | 			itemButtons: [ | 
					
						
							|  |  |  | 				['–',  | 
					
						
							|  |  |  | 					'buttonAction: item button focused -- example button action...'], | 
					
						
							|  |  |  | 				['□',  | 
					
						
							|  |  |  | 					function(){ console.log('BUTTON:', ...arguments) }, | 
					
						
							|  |  |  | 					{ keys: 'r' }], | 
					
						
							|  |  |  | 				'ToggleCollapse', | 
					
						
							|  |  |  | 				'ToggleDisabled', | 
					
						
							|  |  |  | 			], | 
					
						
							| 
									
										
										
										
											2019-07-01 04:47:31 +03:00
										 |  |  | 			/* | 
					
						
							|  |  |  | 			footerButtons: [ | 
					
						
							|  |  |  | 				['save'], | 
					
						
							|  |  |  | 				['cancel'], | 
					
						
							|  |  |  | 			], | 
					
						
							|  |  |  | 			//*/ | 
					
						
							| 
									
										
										
										
											2019-06-29 01:20:02 +03:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-30 16:51:10 +03:00
										 |  |  | 	dialog.container = $('.container').first()[0] | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-19 00:31:12 +03:00
										 |  |  | 	// button handler... | 
					
						
							|  |  |  | 	dialog.buttonAction = function(item, button, focused){ | 
					
						
							|  |  |  | 		console.log(`BUTTON "${button}":`, item, '-- focus at:', focused) } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-04 04:28:08 +03:00
										 |  |  | 	dialog | 
					
						
							|  |  |  | 		.update() | 
					
						
							|  |  |  | 		.focus() | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-30 16:51:10 +03:00
										 |  |  | 	//$('.container').first().append(dialog.render()) | 
					
						
							| 
									
										
										
										
											2020-04-27 16:57:23 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(function(){ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-11 15:44:10 +03:00
										 |  |  | 	$('.container') | 
					
						
							| 
									
										
										
										
											2019-06-30 02:10:30 +03:00
										 |  |  | 		.draggable({  | 
					
						
							|  |  |  | 			//handle: '.list.header', | 
					
						
							|  |  |  | 			cancel: '.list.items', | 
					
						
							|  |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <body> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <div class="container tree"> | 
					
						
							|  |  |  | </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-27 01:18:47 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-26 16:10:44 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | <pre style="position: absolute; display: block; top: 0; right: 0; width: 50%; "> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <b>Issues:</b> | 
					
						
							|  |  |  | - an issue with DOM replacement during the update sequence... | 
					
						
							|  |  |  |     - kills draggable... | 
					
						
							|  |  |  |         the main list is dragable but after render it does not work. | 
					
						
							|  |  |  |     - messes with buttons on nested lists... | 
					
						
							|  |  |  |         to reproduce: | 
					
						
							|  |  |  |             open: B/C (copy path, then paste to dialog) | 
					
						
							|  |  |  |             collapce... | 
					
						
							|  |  |  |                 - B is hidden fully | 
					
						
							|  |  |  |             recover by collapsing B then expanding | 
					
						
							|  |  |  |                 - now everything is working but buttons are not drawn | 
					
						
							|  |  |  | - who is responsible for drawing? ...parent or child? | 
					
						
							|  |  |  |     ...this might be related to the above issue (case #2) | 
					
						
							| 
									
										
										
										
											2020-03-27 01:18:47 +03:00
										 |  |  | - is this overcomplicated??? | 
					
						
							|  |  |  |     ...can the core be simpler and more modular? | 
					
						
							|  |  |  |     should investigate <i>after</i> the main functionality is implemented | 
					
						
							|  |  |  |     <i>NOTE: the actual LOC count is 2727 at this point in time (20200327) | 
					
						
							|  |  |  |         so what's bugging me from time to time is not the code bloat but | 
					
						
							|  |  |  |         rather doc bloat...  | 
					
						
							|  |  |  |         ...but I'm not saying that there's no code bloat, though it's not  | 
					
						
							|  |  |  |         as big as I fear =)</i> | 
					
						
							| 
									
										
										
										
											2020-03-26 16:10:44 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <b>ToDo:</b> | 
					
						
							| 
									
										
										
										
											2020-11-29 16:52:22 +03:00
										 |  |  | - add to default actions: | 
					
						
							|  |  |  |     - open/push (implemented) | 
					
						
							|  |  |  | 	- edit/view | 
					
						
							|  |  |  | 	- delete | 
					
						
							|  |  |  | 	- ... | 
					
						
							|  |  |  |   ...might also be nice to make adding default actions trivial (buttons?) | 
					
						
							| 
									
										
										
										
											2020-04-11 18:37:16 +03:00
										 |  |  | - interactive <i>path</i> element... | 
					
						
							|  |  |  | - <i>search</i> -- flat/deep | 
					
						
							|  |  |  | - <i>flat tree</i> render, one level at a time (a-la browse-walk.js / finder)  | 
					
						
							|  |  |  | - migrate <i>make.*</i> constructors from browse.js... | 
					
						
							|  |  |  | - integrate into the widget framework... | 
					
						
							|  |  |  |     ...either inherit or redesign the older code... | 
					
						
							|  |  |  | - <i>partial render</i> for long lists... | 
					
						
							| 
									
										
										
										
											2020-03-27 01:18:47 +03:00
										 |  |  | - refactor/revise... | 
					
						
							| 
									
										
										
										
											2020-03-26 16:10:44 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | </pre> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-09 01:39:13 +03:00
										 |  |  | </body> | 
					
						
							|  |  |  | </html> | 
					
						
							|  |  |  | <!-- vim:set ts=4 sw=4 : --> |