 5e3c5dedf3
			
		
	
	5e3c5dedf3
	
	
	
		
			
			* Implement support for option groups. WebHost options pages still need to be updated. * Remove debug output * In-progress conversion of player-options to Jinja rendering * Support "Randomize" button without JS, transpile SCSS to CSS, include map file for later editors * Un-alphabetize options, add default group name for item/location Option classes, implement more option types * Re-flow UI generation to avoid printing rows with unsupported or invalid option types, add support for TextChoice options * Support all remaining option types * Rendering improvements and CSS fixes for prettiness * Wrap options in a form, update button styles, fix labels, disable inputs where the default is random, nuke the JS * Minor CSS tweaks, as recommended by the designer * Hide JS-required elements in noscript tag. Add JS reactivity to range, named-range, and randomize buttons. * Fix labels, add JS handling for TextChoice * Make option groups collapsable * PEP8 current option_groups progress (#2604) * Make the python more PEP8 and remove unneeded imports * remove LocationSet from `Item & Location Options` group * It's ugly, but YAML generation is working * Stop generating JSON files for player-options pages * Do not include ItemDict entries whose values are zero * Properly format yaml output * Save options when form is submitted, load options on page load * Fix options being omitted from the page if a group has an even number of options * Implement generate-game, escape option descriptions * Fix "randomize" checkboxes not properly setting YAML options to "random" * Add a separator between item/location groups and items/locations in their respective lists * Implement option presets * Fix docs to detail what actually ended up happening * implement option groups on webworld to allow dev sorting (#2616) * Force extremely long item/location/option names with no spaces to text-wrap * Fix "randomize" button being too wide in single-column display, change page header to include game name * Update preset select to read "custom" when updating form inputs. Show error message if the user doesn't input a name * Un-break weighted-options, add option group names to weighted options * Nuke weighted-options. Set up framework to rebuild it in Jinja. * Generate styles with scss, remove styles which will be replaced, add placeholders for worlds * Support Toggle, DefaultOnToggle, and Choice options in weighted-options * Implement expand/collapse without JS for worlds and option groups * Properly style set options * Implement Range and NamedRange. Also, CSS is hard. * Add support for remaining option types. JS and backend still forthcoming. * Add JS functionality for collapsing game divs, populating span values on range updates. Add <noscript> tag to warn users with JS disabled. * Support showing/hiding game divs based on range value for game * Add support for adding/deleting range rows * Save settings to localStorage on form submission * Save deleted options on form submission * Break weighted-options into a per-game page. - Break weighted-options into a per-game page - Add "advanced options" links to supported games page - Use details/summary tags on supported games, player-options, and weighted-options - Fix bug preventing previously deleted rows from being removed on page load if JS is enabled - Move route handling for options pages to options.py - Remove world handling from weighted-options * Implement loading previous settings from localStorage on page load if JS is enabled * Weighted options can now generate YAML files and single-player games * options pages now respect option visibility settings for simple and complex pages * Remove `/weighted-settings` redirect, fix weighted-options link on player-options page * Fix instance of AutoWorld not having access to proper `random` * Catch instances of frozenset along with set * Restore word-wrap in tooltips * Fix word wrap in player-options labels * Add `dedent` filter to help with formatting tooltips in player-options * Do not change the ordering of keys when printing yaml files * Move necessary import out of conditional statement * Expand only the first option group by default on both options pages * Respect option visibility when generating yaml template files * Swap to double quotes * Replace instances of `/weighted-settings` with `/weighted-options`, swap out incomplete links * Strip newlines and spaces after applying dedent filter * Fix documentation for option groups * Update site map * Update various docs * Sort OptionSet lists alphabetically * Minor style tweak * Fix extremely long text overflowing tooltips * Convert player-options to use CSS grid instead of tables * Do not display link to weighted-options page on supported games if the options page is an external link * Update worlds/AutoWorld.py Bugfix by @alwaysintreble Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com> * Fix NamedRange options not being properly set if a preset it loaded * Move option-presets route into options.py * Include preset name in YAML if not "default" and not "custom" * Removed macros for PlandoBosses and DefaultOnToggle, as they were handled by their parent classes * Fix not disabling custom inputs when the randomize button is clicked * Only sort OptionList and OptionSet valid_keys if they are unordered * Quick style fixes for player-settings to give `select` elements `text-overflow: ellipsis` and increase base size of left-column * Prevent showing a horizontal scroll bar on player-options if the browser width was beneath a certain threshold * Fix a bug in weighted-options which prevented inputting a negative value for new range inputs --------- Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
		
			
				
	
	
		
			365 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			SCSS
		
	
	
	
	
	
			
		
		
	
	
			365 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			SCSS
		
	
	
	
	
	
| @import "../markdown.css";
 | |
| 
 | |
| html{
 | |
|     background-image: url('../../static/backgrounds/grass.png');
 | |
|     background-repeat: repeat;
 | |
|     background-size: 650px 650px;
 | |
|     overflow-x: hidden;
 | |
| }
 | |
| 
 | |
| #player-options{
 | |
|     box-sizing: border-box;
 | |
|     max-width: 1024px;
 | |
|     margin-left: auto;
 | |
|     margin-right: auto;
 | |
|     background-color: rgba(0, 0, 0, 0.15);
 | |
|     border-radius: 8px;
 | |
|     padding: 1rem;
 | |
|     color: #eeffeb;
 | |
|     word-break: break-all;
 | |
| 
 | |
|     #player-options-header{
 | |
|         h1{
 | |
|             margin-bottom: 0;
 | |
|             padding-bottom: 0;
 | |
|         }
 | |
| 
 | |
|         h1:nth-child(2){
 | |
|             font-size: 1.4rem;
 | |
|             margin-top: -8px;
 | |
|             margin-bottom: 0.5rem;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     .js-warning-banner{
 | |
|         width: calc(100% - 1rem);
 | |
|         padding: 0.5rem;
 | |
|         border-radius: 4px;
 | |
|         background-color: #f3f309;
 | |
|         color: #000000;
 | |
|         margin-bottom: 0.5rem;
 | |
|         text-align: center;
 | |
|     }
 | |
| 
 | |
|     .group-container{
 | |
|         padding: 0;
 | |
|         margin: 0;
 | |
| 
 | |
|         h2{
 | |
|             user-select: none;
 | |
|             cursor: unset;
 | |
| 
 | |
|             label{
 | |
|                 cursor: pointer;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     #player-options-button-row{
 | |
|         display: flex;
 | |
|         flex-direction: row;
 | |
|         justify-content: space-between;
 | |
|         margin-top: 15px;
 | |
|     }
 | |
| 
 | |
|     #user-message{
 | |
|         display: none;
 | |
|         width: calc(100% - 8px);
 | |
|         background-color: #ffe86b;
 | |
|         border-radius: 4px;
 | |
|         color: #000000;
 | |
|         padding: 4px;
 | |
|         text-align: center;
 | |
|         cursor: pointer;
 | |
|     }
 | |
| 
 | |
|     h1{
 | |
|         font-size: 2.5rem;
 | |
|         font-weight: normal;
 | |
|         width: 100%;
 | |
|         margin-bottom: 0.5rem;
 | |
|         text-shadow: 1px 1px 4px #000000;
 | |
|     }
 | |
| 
 | |
|     h2{
 | |
|         font-size: 40px;
 | |
|         font-weight: normal;
 | |
|         width: 100%;
 | |
|         margin-bottom: 0.5rem;
 | |
|         text-transform: lowercase;
 | |
|         text-shadow: 1px 1px 2px #000000;
 | |
|     }
 | |
| 
 | |
|     h3, h4, h5, h6{
 | |
|         text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
 | |
|     }
 | |
| 
 | |
|     input:not([type]){
 | |
|         border: 1px solid #000000;
 | |
|         padding: 3px;
 | |
|         border-radius: 3px;
 | |
|         min-width: 150px;
 | |
| 
 | |
|         &:focus{
 | |
|             border: 1px solid #ffffff;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     select{
 | |
|         border: 1px solid #000000;
 | |
|         padding: 3px;
 | |
|         border-radius: 3px;
 | |
|         min-width: 150px;
 | |
|         background-color: #ffffff;
 | |
|         text-overflow: ellipsis;
 | |
|     }
 | |
| 
 | |
|     .game-options{
 | |
|         display: flex;
 | |
|         flex-direction: row;
 | |
| 
 | |
|         .left, .right{
 | |
|             display: grid;
 | |
|             grid-template-columns: 12rem auto;
 | |
|             grid-row-gap: 0.5rem;
 | |
|             grid-auto-rows: min-content;
 | |
|             align-items: start;
 | |
|             min-width: 480px;
 | |
|             width: 50%;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     #meta-options{
 | |
|         display: flex;
 | |
|         justify-content: space-between;
 | |
|         gap: 20px;
 | |
|         padding: 3px;
 | |
| 
 | |
|         input, select{
 | |
|             box-sizing: border-box;
 | |
|             width: 200px;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     .left, .right{
 | |
|         flex-grow: 1;
 | |
|         margin-bottom: 0.5rem;
 | |
|     }
 | |
| 
 | |
|     .left{
 | |
|         margin-right: 20px;
 | |
|     }
 | |
| 
 | |
|     .select-container{
 | |
|         display: flex;
 | |
|         flex-direction: row;
 | |
|         max-width: 270px;
 | |
| 
 | |
|         select{
 | |
|             min-width: 200px;
 | |
|             flex-grow: 1;
 | |
| 
 | |
|             &:disabled{
 | |
|                 background-color: lightgray;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     .range-container{
 | |
|         display: flex;
 | |
|         flex-direction: row;
 | |
|         max-width: 270px;
 | |
| 
 | |
|         input[type=range]{
 | |
|             flex-grow: 1;
 | |
|         }
 | |
| 
 | |
|         .range-value{
 | |
|             min-width: 20px;
 | |
|             margin-left: 0.25rem;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     .named-range-container{
 | |
|         display: flex;
 | |
|         flex-direction: column;
 | |
|         max-width: 270px;
 | |
| 
 | |
|         .named-range-wrapper{
 | |
|             display: flex;
 | |
|             flex-direction: row;
 | |
|             margin-top: 0.25rem;
 | |
| 
 | |
|             input[type=range]{
 | |
|                 flex-grow: 1;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     .free-text-container{
 | |
|         display: flex;
 | |
|         flex-direction: column;
 | |
|         max-width: 270px;
 | |
| 
 | |
|         input[type=text]{
 | |
|             flex-grow: 1;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     .text-choice-container{
 | |
|         display: flex;
 | |
|         flex-direction: column;
 | |
|         max-width: 270px;
 | |
| 
 | |
|         .text-choice-wrapper{
 | |
|             display: flex;
 | |
|             flex-direction: row;
 | |
|             margin-bottom: 0.25rem;
 | |
| 
 | |
|             select{
 | |
|                 flex-grow: 1;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     .option-container{
 | |
|         display: flex;
 | |
|         flex-direction: column;
 | |
|         background-color: rgba(0, 0, 0, 0.25);
 | |
|         border: 1px solid rgba(20, 20, 20, 0.25);
 | |
|         border-radius: 3px;
 | |
|         color: #ffffff;
 | |
|         max-height: 10rem;
 | |
|         min-width: 14.5rem;
 | |
|         overflow-y: auto;
 | |
|         padding-right: 0.25rem;
 | |
|         padding-left: 0.25rem;
 | |
| 
 | |
|         .option-divider{
 | |
|             width: 100%;
 | |
|             height: 2px;
 | |
|             background-color: rgba(20, 20, 20, 0.25);
 | |
|             margin-top: 0.125rem;
 | |
|             margin-bottom: 0.125rem;
 | |
|         }
 | |
| 
 | |
|         .option-entry{
 | |
|             display: flex;
 | |
|             flex-direction: row;
 | |
|             align-items: flex-start;
 | |
|             margin-bottom: 0.125rem;
 | |
|             margin-top: 0.125rem;
 | |
|             user-select: none;
 | |
| 
 | |
|             &:hover{
 | |
|                 background-color: rgba(20, 20, 20, 0.25);
 | |
|             }
 | |
| 
 | |
|             input[type=checkbox]{
 | |
|                 margin-right: 0.25rem;
 | |
|             }
 | |
| 
 | |
|             input[type=number]{
 | |
|                 max-width: 1.5rem;
 | |
|                 max-height: 1rem;
 | |
|                 margin-left: 0.125rem;
 | |
|                 text-align: center;
 | |
| 
 | |
|                 /* Hide arrows on input[type=number] fields */
 | |
|                 -moz-appearance: textfield;
 | |
|                 &::-webkit-outer-spin-button, &::-webkit-inner-spin-button{
 | |
|                     -webkit-appearance: none;
 | |
|                     margin: 0;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             label{
 | |
|                 flex-grow: 1;
 | |
|                 margin-right: 0;
 | |
|                 min-width: unset;
 | |
|                 display: unset;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     .randomize-button{
 | |
|         display: flex;
 | |
|         flex-direction: column;
 | |
|         justify-content: center;
 | |
|         height: 22px;
 | |
|         max-width: 30px;
 | |
|         margin: 0 0 0 0.25rem;
 | |
|         font-size: 14px;
 | |
|         border: 1px solid black;
 | |
|         border-radius: 3px;
 | |
|         background-color: #d3d3d3;
 | |
|         user-select: none;
 | |
| 
 | |
|         &:hover{
 | |
|             background-color: #c0c0c0;
 | |
|             cursor: pointer;
 | |
|         }
 | |
| 
 | |
|         label{
 | |
|             line-height: 22px;
 | |
|             padding-left: 5px;
 | |
|             padding-right: 2px;
 | |
|             margin-right: 4px;
 | |
|             width: 100%;
 | |
|             height: 100%;
 | |
|             min-width: unset;
 | |
|             &:hover{
 | |
|                 cursor: pointer;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         input[type=checkbox]{
 | |
|             display: none;
 | |
|         }
 | |
| 
 | |
|         &:has(input[type=checkbox]:checked){
 | |
|             background-color: #ffef00; /* Same as .interactive in globalStyles.css */
 | |
| 
 | |
|             &:hover{
 | |
|                 background-color: #eedd27;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         &[data-tooltip]::after{
 | |
|             left: unset;
 | |
|             right: 0;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     label{
 | |
|         display: block;
 | |
|         margin-right: 4px;
 | |
|         cursor: default;
 | |
|         word-break: break-word;
 | |
|     }
 | |
| 
 | |
|     th, td{
 | |
|         border: none;
 | |
|         padding: 3px;
 | |
|         font-size: 17px;
 | |
|         vertical-align: top;
 | |
|     }
 | |
| }
 | |
| 
 | |
| @media all and (max-width: 1024px) {
 | |
|     #player-options {
 | |
|         border-radius: 0;
 | |
| 
 | |
|         #meta-options {
 | |
|             flex-direction: column;
 | |
|             justify-content: flex-start;
 | |
|             gap: 6px;
 | |
|         }
 | |
| 
 | |
|         .game-options{
 | |
|             justify-content: flex-start;
 | |
|             flex-wrap: wrap;
 | |
|         }
 | |
|     }
 | |
| }
 |