WIP static themeing
This commit is contained in:
		
							parent
							
								
									92cc79be72
								
							
						
					
					
						commit
						a9ed857171
					
				
							
								
								
									
										1
									
								
								app/javascript/core/about.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								app/javascript/core/about.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | //  This file will be loaded on about pages, regardless of theme.
 | ||||||
| @ -1,3 +1,5 @@ | |||||||
|  | //  This file will be loaded on admin pages, regardless of theme.
 | ||||||
|  | 
 | ||||||
| import { delegate } from 'rails-ujs'; | import { delegate } from 'rails-ujs'; | ||||||
| 
 | 
 | ||||||
| function handleDeleteStatus(event) { | function handleDeleteStatus(event) { | ||||||
							
								
								
									
										5
									
								
								app/javascript/core/common.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								app/javascript/core/common.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | //  This file will be loaded on all pages, regardless of theme.
 | ||||||
|  | 
 | ||||||
|  | import { start } from 'rails-ujs'; | ||||||
|  | 
 | ||||||
|  | start(); | ||||||
							
								
								
									
										23
									
								
								app/javascript/core/embed.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								app/javascript/core/embed.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | //  This file will be loaded on embed pages, regardless of theme.
 | ||||||
|  | 
 | ||||||
|  | window.addEventListener('message', e => { | ||||||
|  |   const data = e.data || {}; | ||||||
|  | 
 | ||||||
|  |   if (!window.parent || data.type !== 'setHeight') { | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   function setEmbedHeight () { | ||||||
|  |     window.parent.postMessage({ | ||||||
|  |       type: 'setHeight', | ||||||
|  |       id: data.id, | ||||||
|  |       height: document.getElementsByTagName('html')[0].scrollHeight, | ||||||
|  |     }, '*'); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   if (['interactive', 'complete'].includes(document.readyState)) { | ||||||
|  |     setEmbedHeight(); | ||||||
|  |   } else { | ||||||
|  |     document.addEventListener('DOMContentLoaded', setEmbedHeight); | ||||||
|  |   } | ||||||
|  | }); | ||||||
							
								
								
									
										1
									
								
								app/javascript/core/home.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								app/javascript/core/home.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | //  This file will be loaded on home pages, regardless of theme.
 | ||||||
							
								
								
									
										1
									
								
								app/javascript/core/public.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								app/javascript/core/public.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | //  This file will be loaded on public pages, regardless of theme.
 | ||||||
							
								
								
									
										65
									
								
								app/javascript/core/settings.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								app/javascript/core/settings.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | |||||||
|  | //  This file will be loaded on settings pages, regardless of theme.
 | ||||||
|  | 
 | ||||||
|  | function main() { | ||||||
|  |   const { length } = require('stringz'); | ||||||
|  |   const { delegate } = require('rails-ujs'); | ||||||
|  | 
 | ||||||
|  |   delegate(document, '.webapp-btn', 'click', ({ target, button }) => { | ||||||
|  |     if (button !== 0) { | ||||||
|  |       return true; | ||||||
|  |     } | ||||||
|  |     window.location.href = target.href; | ||||||
|  |     return false; | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   delegate(document, '.status__content__spoiler-link', 'click', ({ target }) => { | ||||||
|  |     const contentEl = target.parentNode.parentNode.querySelector('.e-content'); | ||||||
|  | 
 | ||||||
|  |     if (contentEl.style.display === 'block') { | ||||||
|  |       contentEl.style.display = 'none'; | ||||||
|  |       target.parentNode.style.marginBottom = 0; | ||||||
|  |     } else { | ||||||
|  |       contentEl.style.display = 'block'; | ||||||
|  |       target.parentNode.style.marginBottom = null; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return false; | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   delegate(document, '.account_display_name', 'input', ({ target }) => { | ||||||
|  |     const nameCounter = document.querySelector('.name-counter'); | ||||||
|  | 
 | ||||||
|  |     if (nameCounter) { | ||||||
|  |       nameCounter.textContent = 30 - length(target.value); | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   delegate(document, '.account_note', 'input', ({ target }) => { | ||||||
|  |     const noteCounter = document.querySelector('.note-counter'); | ||||||
|  | 
 | ||||||
|  |     if (noteCounter) { | ||||||
|  |       const noteWithoutMetadata = processBio(target.value).text; | ||||||
|  |       noteCounter.textContent = 500 - length(noteWithoutMetadata); | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   delegate(document, '#account_avatar', 'change', ({ target }) => { | ||||||
|  |     const avatar = document.querySelector('.card.compact .avatar img'); | ||||||
|  |     const [file] = target.files || []; | ||||||
|  |     const url = file ? URL.createObjectURL(file) : avatar.dataset.originalSrc; | ||||||
|  | 
 | ||||||
|  |     avatar.src = url; | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   delegate(document, '#account_header', 'change', ({ target }) => { | ||||||
|  |     const header = document.querySelector('.card.compact'); | ||||||
|  |     const [file] = target.files || []; | ||||||
|  |     const url = file ? URL.createObjectURL(file) : header.dataset.originalSrc; | ||||||
|  | 
 | ||||||
|  |     header.style.backgroundImage = `url(${url})`; | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | loadPolyfills().then(main).catch(error => { | ||||||
|  |   console.error(error); | ||||||
|  | }); | ||||||
							
								
								
									
										1
									
								
								app/javascript/core/share.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								app/javascript/core/share.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | //  This file will be loaded on share pages, regardless of theme.
 | ||||||
| @ -5,8 +5,7 @@ | |||||||
| import loadPolyfills from '../mastodon/load_polyfills'; | import loadPolyfills from '../mastodon/load_polyfills'; | ||||||
| 
 | 
 | ||||||
| // import default stylesheet with variables
 | // import default stylesheet with variables
 | ||||||
| require('font-awesome/css/font-awesome.css'); | import 'font-awesome/css/font-awesome.css'; | ||||||
| 
 |  | ||||||
| import '../styles/application.scss'; | import '../styles/application.scss'; | ||||||
| 
 | 
 | ||||||
| require.context('../images/', true); | require.context('../images/', true); | ||||||
|  | |||||||
| @ -1,6 +0,0 @@ | |||||||
| import { start } from 'rails-ujs'; |  | ||||||
| import 'font-awesome/css/font-awesome.css'; |  | ||||||
| 
 |  | ||||||
| require.context('../images/', true); |  | ||||||
| 
 |  | ||||||
| start(); |  | ||||||
| @ -1,14 +0,0 @@ | |||||||
| import loadPolyfills from './util/load_polyfills'; |  | ||||||
| 
 |  | ||||||
| // import default stylesheet with variables
 |  | ||||||
| require('font-awesome/css/font-awesome.css'); |  | ||||||
| 
 |  | ||||||
| import './styles/index.scss'; |  | ||||||
| 
 |  | ||||||
| require.context('../../images/', true); |  | ||||||
| 
 |  | ||||||
| loadPolyfills().then(() => { |  | ||||||
|   require('./util/main').default(); |  | ||||||
| }).catch(e => { |  | ||||||
|   console.error(e); |  | ||||||
| }); |  | ||||||
| @ -1,7 +1,5 @@ | |||||||
| import loadPolyfills from 'themes/glitch/util/load_polyfills'; | import loadPolyfills from 'themes/glitch/util/load_polyfills'; | ||||||
| 
 | 
 | ||||||
| require.context('../images/', true); |  | ||||||
| 
 |  | ||||||
| function loaded() { | function loaded() { | ||||||
|   const TimelineContainer = require('themes/glitch/containers/timeline_container').default; |   const TimelineContainer = require('themes/glitch/containers/timeline_container').default; | ||||||
|   const React             = require('react'); |   const React             = require('react'); | ||||||
							
								
								
									
										3
									
								
								app/javascript/themes/glitch/packs/common.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								app/javascript/themes/glitch/packs/common.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | import 'font-awesome/css/font-awesome.css'; | ||||||
|  | require.context('../../images/', true); | ||||||
|  | import './styles/index.scss'; | ||||||
							
								
								
									
										7
									
								
								app/javascript/themes/glitch/packs/home.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/javascript/themes/glitch/packs/home.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | import loadPolyfills from './util/load_polyfills'; | ||||||
|  | 
 | ||||||
|  | loadPolyfills().then(() => { | ||||||
|  |   require('./util/main').default(); | ||||||
|  | }).catch(e => { | ||||||
|  |   console.error(e); | ||||||
|  | }); | ||||||
| @ -1,7 +1,5 @@ | |||||||
| import loadPolyfills from 'themes/glitch/util/load_polyfills'; | import loadPolyfills from 'themes/glitch/util/load_polyfills'; | ||||||
| 
 | 
 | ||||||
| require.context('../images/', true); |  | ||||||
| 
 |  | ||||||
| function loaded() { | function loaded() { | ||||||
|   const ComposeContainer = require('themes/glitch/containers/compose_container').default; |   const ComposeContainer = require('themes/glitch/containers/compose_container').default; | ||||||
|   const React = require('react'); |   const React = require('react'); | ||||||
| @ -1,16 +1,23 @@ | |||||||
| #  (REQUIRED) The location of the pack file inside `pack_directory`. | #  (REQUIRED) The location of the pack files. | ||||||
| pack: index.js | pack: | ||||||
|  |   about: packs/about.js | ||||||
|  |   admin: null | ||||||
|  |   common: packs/common.js | ||||||
|  |   embed: null | ||||||
|  |   home: packs/home.js | ||||||
|  |   public: packs/public.js | ||||||
|  |   settings: null | ||||||
|  |   share: packs/share.js | ||||||
| 
 | 
 | ||||||
| #  (OPTIONAL) The directory which contains the pack file. | #  (OPTIONAL) The directory which contains the pack files. | ||||||
| #  Defaults to the theme directory (`app/javascript/themes/[theme]`), | #  Defaults to the theme directory (`app/javascript/themes/[theme]`), | ||||||
| #  but in the case of the vanilla Mastodon theme the pack file is | #  which should be sufficient for like 99% of use-cases lol. | ||||||
| #  somewhere else. |  | ||||||
| #    pack_directory: app/javascript/packs | #    pack_directory: app/javascript/packs | ||||||
| 
 | 
 | ||||||
| #  (OPTIONAL) Additional javascript resources to preload, for use with | #  (OPTIONAL) Additional javascript resources to preload, for use with | ||||||
| #  lazy-loaded components. It is **STRONGLY RECOMMENDED** that you | #  lazy-loaded components. It is **STRONGLY RECOMMENDED** that you | ||||||
| #  derive these pathnames from `themes/[your-theme]` to ensure that | #  derive these pathnames from `themes/[your-theme]` to ensure that | ||||||
| #  they stay unique. (Of course, vanilla doesn't do this ^^;;) | #  they stay unique. | ||||||
| preload: | preload: | ||||||
| - themes/glitch/async/getting_started | - themes/glitch/async/getting_started | ||||||
| - themes/glitch/async/compose | - themes/glitch/async/compose | ||||||
|  | |||||||
| @ -1,9 +1,17 @@ | |||||||
| #  (REQUIRED) The location of the pack file inside `pack_directory`. | #  (REQUIRED) The location of the pack files inside `pack_directory`. | ||||||
| pack: application.js | pack: | ||||||
|  |   about: about.js | ||||||
|  |   admin: null | ||||||
|  |   common: common.js | ||||||
|  |   embed: null | ||||||
|  |   home: application.js | ||||||
|  |   public: public.js | ||||||
|  |   settings: null | ||||||
|  |   share: share.js | ||||||
| 
 | 
 | ||||||
| #  (OPTIONAL) The directory which contains the pack file. | #  (OPTIONAL) The directory which contains the pack files. | ||||||
| #  Defaults to the theme directory (`app/javascript/themes/[theme]`), | #  Defaults to the theme directory (`app/javascript/themes/[theme]`), | ||||||
| #  but in the case of the vanilla Mastodon theme the pack file is | #  but in the case of the vanilla Mastodon theme the pack files are | ||||||
| #  somewhere else. | #  somewhere else. | ||||||
| pack_directory: app/javascript/packs | pack_directory: app/javascript/packs | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user