mirror of
				https://github.com/dgtlmoon/changedetection.io.git
				synced 2025-10-30 14:17:40 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			0.48.03
			...
			browserste
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 5454b0fc75 | 
| @@ -26,7 +26,7 @@ browser_step_ui_config = {'Choose one': '0 0', | ||||
| #                          'Extract text and use as filter': '1 0', | ||||
|                           'Goto site': '0 0', | ||||
|                           'Press Enter': '0 0', | ||||
|                           'Select by label': '1 1', | ||||
|                           'Select option': '1 1', | ||||
|                           'Scroll down': '0 0', | ||||
|                           'Uncheck checkbox': '1 0', | ||||
|                           'Wait for seconds': '0 1', | ||||
| @@ -236,7 +236,7 @@ class browsersteps_live_ui(steppable_browser_interface): | ||||
|         self.page.evaluate("var include_filters=''") | ||||
|         # Go find the interactive elements | ||||
|         # @todo in the future, something smarter that can scan for elements with .click/focus etc event handlers? | ||||
|         elements = 'a,button,input,select,textarea,i,th,td,p,li,h1,h2,h3,h4,div,span' | ||||
|         elements = 'a,button,input,select,textarea,i,th,td,p,li,h1,h2,h3,h4,div,span,select' | ||||
|         xpath_element_js = xpath_element_js.replace('%ELEMENTS%', elements) | ||||
|         xpath_data = self.page.evaluate("async () => {" + xpath_element_js + "}") | ||||
|         # So the JS will find the smallest one first | ||||
|   | ||||
| @@ -6,6 +6,10 @@ | ||||
| // will automatically force a scroll somewhere, so include the position offset | ||||
| // Lets hope the position doesnt change while we iterate the bbox's, but this is better than nothing | ||||
|  | ||||
| function setModalChoiceFromList(items, element) { | ||||
|  | ||||
| } | ||||
|  | ||||
| var scroll_y=+document.documentElement.scrollTop || document.body.scrollTop | ||||
|  | ||||
| // Include the getXpath script directly, easier than fetching | ||||
| @@ -133,7 +137,7 @@ for (var i = 0; i < elements.length; i++) { | ||||
|     } | ||||
|  | ||||
|     // @todo Possible to ONLY list where it's clickable to save JSON xfer size | ||||
|     size_pos.push({ | ||||
|     var n = { | ||||
|         xpath: xpath_result, | ||||
|         width: Math.round(bbox['width']), | ||||
|         height: Math.round(bbox['height']), | ||||
| @@ -142,7 +146,16 @@ for (var i = 0; i < elements.length; i++) { | ||||
|         tagName: (elements[i].tagName) ? elements[i].tagName.toLowerCase() : '', | ||||
|         tagtype: (elements[i].tagName == 'INPUT' && elements[i].type) ? elements[i].type.toLowerCase() : '', | ||||
|         isClickable: (elements[i].onclick) || window.getComputedStyle(elements[i]).cursor == "pointer" | ||||
|     }); | ||||
|     } | ||||
|  | ||||
|     if (n['tagName'] == 'select') { | ||||
|         n['options']=[] | ||||
|         for (const v of elements[i].options) { | ||||
|             n['options'].push(v.text) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     size_pos.push(n); | ||||
|  | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -214,7 +214,12 @@ $(document).ready(function () { | ||||
|                     $('input[placeholder="Value"]', first_available).addClass('ok').click().focus(); | ||||
|                     found_something = true; | ||||
|                 } else { | ||||
|                     if (x['isClickable'] || x['tagName'].startsWith('h') || x['tagName'] === 'a' || x['tagName'] === 'button' || x['tagtype'] === 'submit' || x['tagtype'] === 'checkbox' || x['tagtype'] === 'radio' || x['tagtype'] === 'li') { | ||||
|                     if (x['tagName'] === 'select') { | ||||
|                        $('select', first_available).val('Select option').change(); | ||||
|                        $('input[type=text]', first_available).first().val(x['xpath']); | ||||
|                         $('#myModal').show(); | ||||
|                        found_something = true; | ||||
|                     } else if (x['isClickable'] || x['tagName'].startsWith('h') || x['tagName'] === 'a' || x['tagName'] === 'button' || x['tagtype'] === 'submit' || x['tagtype'] === 'checkbox' || x['tagtype'] === 'radio' || x['tagtype'] === 'li') { | ||||
|                         $('select', first_available).val('Click element').change(); | ||||
|                         $('input[type=text]', first_available).first().val(x['xpath']); | ||||
|                         found_something = true; | ||||
|   | ||||
							
								
								
									
										37
									
								
								changedetectionio/static/styles/scss/parts/_modal.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								changedetectionio/static/styles/scss/parts/_modal.scss
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| /* The Modal (background) */ | ||||
| .modal { | ||||
|   display: none; /* Hidden by default */ | ||||
|   position: fixed; /* Stay in place */ | ||||
|   z-index: 1; /* Sit on top */ | ||||
|   left: 0; | ||||
|   top: 0; | ||||
|   width: 100%; /* Full width */ | ||||
|   height: 100%; /* Full height */ | ||||
|   overflow: auto; /* Enable scroll if needed */ | ||||
|   background-color: rgb(0,0,0); /* Fallback color */ | ||||
|   background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ | ||||
| } | ||||
|  | ||||
| /* Modal Content/Box */ | ||||
| .modal-content { | ||||
|   background-color: #fefefe; | ||||
|   margin: 15% auto; /* 15% from the top and centered */ | ||||
|   padding: 20px; | ||||
|   border: 1px solid #888; | ||||
|   max-width: 80%; /* Could be more or less, depending on screen size */ | ||||
| } | ||||
|  | ||||
| /* The Close Button */ | ||||
| .close { | ||||
|   color: #aaa; | ||||
|   float: right; | ||||
|   font-size: 28px; | ||||
|   font-weight: bold; | ||||
| } | ||||
|  | ||||
| .close:hover, | ||||
| .close:focus { | ||||
|   color: black; | ||||
|   text-decoration: none; | ||||
|   cursor: pointer; | ||||
| } | ||||
| @@ -2,10 +2,11 @@ | ||||
|  * -- BASE STYLES -- | ||||
|  */ | ||||
|  | ||||
| @import "parts/_variables"; | ||||
| @import "parts/_spinners"; | ||||
| @import "parts/_browser-steps"; | ||||
| @import "parts/_arrows"; | ||||
| @import "parts/_browser-steps"; | ||||
| @import "parts/_modal"; | ||||
| @import "parts/_spinners"; | ||||
| @import "parts/_variables"; | ||||
|  | ||||
| body { | ||||
|   color: var(--color-text); | ||||
|   | ||||
| @@ -1,6 +1,174 @@ | ||||
| /* | ||||
|  * -- BASE STYLES -- | ||||
|  */ | ||||
| .arrow { | ||||
|   border: solid #1b98f8; | ||||
|   border-width: 0 2px 2px 0; | ||||
|   display: inline-block; | ||||
|   padding: 3px; } | ||||
|   .arrow.right { | ||||
|     transform: rotate(-45deg); | ||||
|     -webkit-transform: rotate(-45deg); } | ||||
|   .arrow.left { | ||||
|     transform: rotate(135deg); | ||||
|     -webkit-transform: rotate(135deg); } | ||||
|   .arrow.up, .arrow.asc { | ||||
|     transform: rotate(-135deg); | ||||
|     -webkit-transform: rotate(-135deg); } | ||||
|   .arrow.down, .arrow.desc { | ||||
|     transform: rotate(45deg); | ||||
|     -webkit-transform: rotate(45deg); } | ||||
|  | ||||
| #browser_steps { | ||||
|   /* convert rows to horizontal cells */ } | ||||
|   #browser_steps th { | ||||
|     display: none; } | ||||
|   #browser_steps li { | ||||
|     list-style: decimal; | ||||
|     padding: 5px; } | ||||
|     #browser_steps li:not(:first-child):hover { | ||||
|       opacity: 1.0; } | ||||
|     #browser_steps li .control { | ||||
|       padding-left: 5px; | ||||
|       padding-right: 5px; } | ||||
|       #browser_steps li .control a { | ||||
|         font-size: 70%; } | ||||
|     #browser_steps li.empty { | ||||
|       padding: 0px; | ||||
|       opacity: 0.35; } | ||||
|       #browser_steps li.empty .control { | ||||
|         display: none; } | ||||
|     #browser_steps li:hover { | ||||
|       background: #eee; } | ||||
|     #browser_steps li > label { | ||||
|       display: none; } | ||||
|  | ||||
| #browser-steps-fieldlist { | ||||
|   height: 100%; | ||||
|   overflow-y: scroll; } | ||||
|  | ||||
| #browser-steps .flex-wrapper { | ||||
|   display: flex; | ||||
|   flex-flow: row; | ||||
|   height: 600px; | ||||
|   /*@todo make this dynamic */ } | ||||
|  | ||||
| /*  this is duplicate :( */ | ||||
| #browsersteps-selector-wrapper { | ||||
|   height: 100%; | ||||
|   width: 100%; | ||||
|   overflow-y: scroll; | ||||
|   position: relative; | ||||
|   /* nice tall skinny one */ } | ||||
|   #browsersteps-selector-wrapper > img { | ||||
|     position: absolute; | ||||
|     max-width: 100%; } | ||||
|   #browsersteps-selector-wrapper > canvas { | ||||
|     position: relative; | ||||
|     max-width: 100%; } | ||||
|     #browsersteps-selector-wrapper > canvas:hover { | ||||
|       cursor: pointer; } | ||||
|   #browsersteps-selector-wrapper .loader { | ||||
|     position: absolute; | ||||
|     left: 50%; | ||||
|     top: 50%; | ||||
|     transform: translate(-50%, -50%); | ||||
|     margin-left: -40px; | ||||
|     z-index: 100; | ||||
|     max-width: 350px; | ||||
|     text-align: center; } | ||||
|   #browsersteps-selector-wrapper .spinner, #browsersteps-selector-wrapper .spinner:after { | ||||
|     width: 80px; | ||||
|     height: 80px; | ||||
|     font-size: 3px; } | ||||
|   #browsersteps-selector-wrapper #browsersteps-click-start { | ||||
|     color: var(--color-grey-400); } | ||||
|     #browsersteps-selector-wrapper #browsersteps-click-start:hover { | ||||
|       cursor: pointer; } | ||||
|  | ||||
| /* The Modal (background) */ | ||||
| .modal { | ||||
|   display: none; | ||||
|   /* Hidden by default */ | ||||
|   position: fixed; | ||||
|   /* Stay in place */ | ||||
|   z-index: 1; | ||||
|   /* Sit on top */ | ||||
|   left: 0; | ||||
|   top: 0; | ||||
|   width: 100%; | ||||
|   /* Full width */ | ||||
|   height: 100%; | ||||
|   /* Full height */ | ||||
|   overflow: auto; | ||||
|   /* Enable scroll if needed */ | ||||
|   background-color: black; | ||||
|   /* Fallback color */ | ||||
|   background-color: rgba(0, 0, 0, 0.4); | ||||
|   /* Black w/ opacity */ } | ||||
|  | ||||
| /* Modal Content/Box */ | ||||
| .modal-content { | ||||
|   background-color: #fefefe; | ||||
|   margin: 15% auto; | ||||
|   /* 15% from the top and centered */ | ||||
|   padding: 20px; | ||||
|   border: 1px solid #888; | ||||
|   max-width: 80%; | ||||
|   /* Could be more or less, depending on screen size */ } | ||||
|  | ||||
| /* The Close Button */ | ||||
| .close { | ||||
|   color: #aaa; | ||||
|   float: right; | ||||
|   font-size: 28px; | ||||
|   font-weight: bold; } | ||||
|  | ||||
| .close:hover, | ||||
| .close:focus { | ||||
|   color: black; | ||||
|   text-decoration: none; | ||||
|   cursor: pointer; } | ||||
|  | ||||
| /* spinner */ | ||||
| .spinner, | ||||
| .spinner:after { | ||||
|   border-radius: 50%; | ||||
|   width: 10px; | ||||
|   height: 10px; } | ||||
|  | ||||
| .spinner { | ||||
|   margin: 0px auto; | ||||
|   font-size: 3px; | ||||
|   vertical-align: middle; | ||||
|   display: inline-block; | ||||
|   text-indent: -9999em; | ||||
|   border-top: 1.1em solid rgba(38, 104, 237, 0.2); | ||||
|   border-right: 1.1em solid rgba(38, 104, 237, 0.2); | ||||
|   border-bottom: 1.1em solid rgba(38, 104, 237, 0.2); | ||||
|   border-left: 1.1em solid #2668ed; | ||||
|   -webkit-transform: translateZ(0); | ||||
|   -ms-transform: translateZ(0); | ||||
|   transform: translateZ(0); | ||||
|   -webkit-animation: load8 1.1s infinite linear; | ||||
|   animation: load8 1.1s infinite linear; } | ||||
|  | ||||
| @-webkit-keyframes load8 { | ||||
|   0% { | ||||
|     -webkit-transform: rotate(0deg); | ||||
|     transform: rotate(0deg); } | ||||
|   100% { | ||||
|     -webkit-transform: rotate(360deg); | ||||
|     transform: rotate(360deg); } } | ||||
|  | ||||
| @keyframes load8 { | ||||
|   0% { | ||||
|     -webkit-transform: rotate(0deg); | ||||
|     transform: rotate(0deg); } | ||||
|   100% { | ||||
|     -webkit-transform: rotate(360deg); | ||||
|     transform: rotate(360deg); } } | ||||
|  | ||||
| /** | ||||
|  * CSS custom properties (aka variables). | ||||
|  */ | ||||
| @@ -138,130 +306,6 @@ html[data-darkmode="true"] { | ||||
|     html[data-darkmode="true"] .watch-table .unviewed.error { | ||||
|       color: var(--color-watch-table-error); } | ||||
|  | ||||
| /* spinner */ | ||||
| .spinner, | ||||
| .spinner:after { | ||||
|   border-radius: 50%; | ||||
|   width: 10px; | ||||
|   height: 10px; } | ||||
|  | ||||
| .spinner { | ||||
|   margin: 0px auto; | ||||
|   font-size: 3px; | ||||
|   vertical-align: middle; | ||||
|   display: inline-block; | ||||
|   text-indent: -9999em; | ||||
|   border-top: 1.1em solid rgba(38, 104, 237, 0.2); | ||||
|   border-right: 1.1em solid rgba(38, 104, 237, 0.2); | ||||
|   border-bottom: 1.1em solid rgba(38, 104, 237, 0.2); | ||||
|   border-left: 1.1em solid #2668ed; | ||||
|   -webkit-transform: translateZ(0); | ||||
|   -ms-transform: translateZ(0); | ||||
|   transform: translateZ(0); | ||||
|   -webkit-animation: load8 1.1s infinite linear; | ||||
|   animation: load8 1.1s infinite linear; } | ||||
|  | ||||
| @-webkit-keyframes load8 { | ||||
|   0% { | ||||
|     -webkit-transform: rotate(0deg); | ||||
|     transform: rotate(0deg); } | ||||
|   100% { | ||||
|     -webkit-transform: rotate(360deg); | ||||
|     transform: rotate(360deg); } } | ||||
|  | ||||
| @keyframes load8 { | ||||
|   0% { | ||||
|     -webkit-transform: rotate(0deg); | ||||
|     transform: rotate(0deg); } | ||||
|   100% { | ||||
|     -webkit-transform: rotate(360deg); | ||||
|     transform: rotate(360deg); } } | ||||
|  | ||||
| #browser_steps { | ||||
|   /* convert rows to horizontal cells */ } | ||||
|   #browser_steps th { | ||||
|     display: none; } | ||||
|   #browser_steps li { | ||||
|     list-style: decimal; | ||||
|     padding: 5px; } | ||||
|     #browser_steps li:not(:first-child):hover { | ||||
|       opacity: 1.0; } | ||||
|     #browser_steps li .control { | ||||
|       padding-left: 5px; | ||||
|       padding-right: 5px; } | ||||
|       #browser_steps li .control a { | ||||
|         font-size: 70%; } | ||||
|     #browser_steps li.empty { | ||||
|       padding: 0px; | ||||
|       opacity: 0.35; } | ||||
|       #browser_steps li.empty .control { | ||||
|         display: none; } | ||||
|     #browser_steps li:hover { | ||||
|       background: #eee; } | ||||
|     #browser_steps li > label { | ||||
|       display: none; } | ||||
|  | ||||
| #browser-steps-fieldlist { | ||||
|   height: 100%; | ||||
|   overflow-y: scroll; } | ||||
|  | ||||
| #browser-steps .flex-wrapper { | ||||
|   display: flex; | ||||
|   flex-flow: row; | ||||
|   height: 600px; | ||||
|   /*@todo make this dynamic */ } | ||||
|  | ||||
| /*  this is duplicate :( */ | ||||
| #browsersteps-selector-wrapper { | ||||
|   height: 100%; | ||||
|   width: 100%; | ||||
|   overflow-y: scroll; | ||||
|   position: relative; | ||||
|   /* nice tall skinny one */ } | ||||
|   #browsersteps-selector-wrapper > img { | ||||
|     position: absolute; | ||||
|     max-width: 100%; } | ||||
|   #browsersteps-selector-wrapper > canvas { | ||||
|     position: relative; | ||||
|     max-width: 100%; } | ||||
|     #browsersteps-selector-wrapper > canvas:hover { | ||||
|       cursor: pointer; } | ||||
|   #browsersteps-selector-wrapper .loader { | ||||
|     position: absolute; | ||||
|     left: 50%; | ||||
|     top: 50%; | ||||
|     transform: translate(-50%, -50%); | ||||
|     margin-left: -40px; | ||||
|     z-index: 100; | ||||
|     max-width: 350px; | ||||
|     text-align: center; } | ||||
|   #browsersteps-selector-wrapper .spinner, #browsersteps-selector-wrapper .spinner:after { | ||||
|     width: 80px; | ||||
|     height: 80px; | ||||
|     font-size: 3px; } | ||||
|   #browsersteps-selector-wrapper #browsersteps-click-start { | ||||
|     color: var(--color-grey-400); } | ||||
|     #browsersteps-selector-wrapper #browsersteps-click-start:hover { | ||||
|       cursor: pointer; } | ||||
|  | ||||
| .arrow { | ||||
|   border: solid #1b98f8; | ||||
|   border-width: 0 2px 2px 0; | ||||
|   display: inline-block; | ||||
|   padding: 3px; } | ||||
|   .arrow.right { | ||||
|     transform: rotate(-45deg); | ||||
|     -webkit-transform: rotate(-45deg); } | ||||
|   .arrow.left { | ||||
|     transform: rotate(135deg); | ||||
|     -webkit-transform: rotate(135deg); } | ||||
|   .arrow.up, .arrow.asc { | ||||
|     transform: rotate(-135deg); | ||||
|     -webkit-transform: rotate(-135deg); } | ||||
|   .arrow.down, .arrow.desc { | ||||
|     transform: rotate(45deg); | ||||
|     -webkit-transform: rotate(45deg); } | ||||
|  | ||||
| body { | ||||
|   color: var(--color-text); | ||||
|   background: var(--color-background-page); } | ||||
|   | ||||
| @@ -34,6 +34,17 @@ | ||||
|   </head> | ||||
|  | ||||
|   <body> | ||||
|  | ||||
|   <div id="myModal" class="modal" style="display: none;"> | ||||
|     <!-- Modal content --> | ||||
|     <div class="modal-content"> | ||||
|       <span class="close">×</span> | ||||
|       <div class="inner"> | ||||
|         xxx | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
|  | ||||
|     <div class="header"> | ||||
|       <div class="home-menu pure-menu pure-menu-horizontal pure-menu-fixed" id="nav-menu"> | ||||
|         {% if has_password and not current_user.is_authenticated %} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user