autosize textareas in style settings (#1360)
This commit is contained in:
		
							parent
							
								
									9d1243073b
								
							
						
					
					
						commit
						9ab5369393
					
				|  | @ -471,11 +471,11 @@ | ||||||
|           </div> |           </div> | ||||||
|           <label class="form-group style-include"> |           <label class="form-group style-include"> | ||||||
|             <span class="form-label" i18n-text="styleIncludeLabel"></span> |             <span class="form-label" i18n-text="styleIncludeLabel"></span> | ||||||
|             <textarea></textarea> |             <textarea spellcheck="false" placeholder="*://site1.com/*
*://site2.com/*"></textarea> | ||||||
|           </label> |           </label> | ||||||
|           <label class="form-group style-exclude"> |           <label class="form-group style-exclude"> | ||||||
|             <span class="form-label" i18n-text="styleExcludeLabel"></span> |             <span class="form-label" i18n-text="styleExcludeLabel"></span> | ||||||
|             <textarea></textarea> |             <textarea spellcheck="false" placeholder="*://site1.com/*
*://site2.com/*"></textarea> | ||||||
|           </label> |           </label> | ||||||
|           <!-- <label class="style-always-important"> |           <!-- <label class="style-always-important"> | ||||||
|             <input type="checkbox"> |             <input type="checkbox"> | ||||||
|  |  | ||||||
|  | @ -39,7 +39,8 @@ | ||||||
| [disabled] .radio-label { | [disabled] .radio-label { | ||||||
|   opacity: 0.4; |   opacity: 0.4; | ||||||
| } | } | ||||||
| .style-include textarea, | .style-settings textarea { | ||||||
| .style-exclude textarea { |   resize: vertical; | ||||||
|   height: 12em; |   min-height: 2.5em; | ||||||
|  |   max-height: 50vh; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| /* global API */ | /* global $ $$ */// dom.js
 | ||||||
|  | /* global API */// msg.js
 | ||||||
| /* exported StyleSettings */ | /* exported StyleSettings */ | ||||||
| 'use strict'; | 'use strict'; | ||||||
| 
 | 
 | ||||||
|  | @ -10,10 +11,10 @@ function StyleSettings(editor) { | ||||||
|       e => API.styles.config(style.id, 'updateUrl', e.target.value)), |       e => API.styles.config(style.id, 'updateUrl', e.target.value)), | ||||||
|     createRadio('.style-prefer-scheme input', () => style.preferScheme || 'none', |     createRadio('.style-prefer-scheme input', () => style.preferScheme || 'none', | ||||||
|       e => API.styles.config(style.id, 'preferScheme', e.target.value)), |       e => API.styles.config(style.id, 'preferScheme', e.target.value)), | ||||||
|     createInput('.style-include textarea', () => (style.inclusions || []).join('\n'), |     ...[ | ||||||
|       e => API.styles.config(style.id, 'inclusions', textToList(e.target.value))), |       ['.style-include', 'inclusions'], | ||||||
|     createInput('.style-exclude textarea', () => (style.exclusions || []).join('\n'), |       ['.style-exclude', 'exclusions'], | ||||||
|       e => API.styles.config(style.id, 'exclusions', textToList(e.target.value))), |     ].map(createArea), | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   update(style); |   update(style); | ||||||
|  | @ -29,12 +30,30 @@ function StyleSettings(editor) { | ||||||
|     if (!newStyle.id) return; |     if (!newStyle.id) return; | ||||||
|     if (reason === 'editSave' || reason === 'config') return; |     if (reason === 'editSave' || reason === 'config') return; | ||||||
|     style = newStyle; |     style = newStyle; | ||||||
|     document.querySelector('.style-settings').disabled = false; |     $('.style-settings').disabled = false; | ||||||
|     inputs.forEach(i => i.update()); |     inputs.forEach(i => i.update()); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   function createArea([parentSel, type]) { | ||||||
|  |     const sel = parentSel + ' textarea'; | ||||||
|  |     const el = $(sel); | ||||||
|  |     el.on('input', () => { | ||||||
|  |       const val = el.value; | ||||||
|  |       el.rows = val.match(/^/gm).length + !val.endsWith('\n'); | ||||||
|  |     }); | ||||||
|  |     return createInput(sel, | ||||||
|  |       () => { | ||||||
|  |         const list = style[type] || []; | ||||||
|  |         const text = list.join('\n'); | ||||||
|  |         el.rows = (list.length || 1) + 1; | ||||||
|  |         return text; | ||||||
|  |       }, | ||||||
|  |       () => API.styles.config(style.id, type, textToList(el.value)) | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   function createRadio(selector, getter, setter) { |   function createRadio(selector, getter, setter) { | ||||||
|     const els = document.querySelectorAll(selector); |     const els = $$(selector); | ||||||
|     for (const el of els) { |     for (const el of els) { | ||||||
|       el.addEventListener('change', e => { |       el.addEventListener('change', e => { | ||||||
|         if (el.checked) { |         if (el.checked) { | ||||||
|  | @ -54,7 +73,7 @@ function StyleSettings(editor) { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   function createInput(selector, getter, setter) { |   function createInput(selector, getter, setter) { | ||||||
|     const el = document.querySelector(selector); |     const el = $(selector); | ||||||
|     el.addEventListener('change', setter); |     el.addEventListener('change', setter); | ||||||
|     return { |     return { | ||||||
|       update() { |       update() { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user