mirror of
				https://github.com/Alamantus/Lexiconga.git
				synced 2025-11-04 10:17:01 +01:00 
			
		
		
		
	Merge branch 'master' into new-features-wave-2
This commit is contained in:
		
						commit
						d4e7df495d
					
				
					 18 changed files with 2001 additions and 1903 deletions
				
			
		| 
						 | 
				
			
			@ -4,6 +4,9 @@ This is the light-as-possible rewrite of Lexiconga.
 | 
			
		|||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
0. Some dev tools require build tools.
 | 
			
		||||
  - On Windows, install them with `npm install --global windows-build-tools`.
 | 
			
		||||
  - Alternatively, you can just install the newest Python and Visual Studio (with Desktop C++ devkit).
 | 
			
		||||
1. Clone and run `yarn` and `composer install` to install dependencies.
 | 
			
		||||
1. Import `src/structure.sql` into a database called 'lexiconga' on your MariaDB server to get the database structure.
 | 
			
		||||
1. Copy `src/php/api/config.php.changeme` to `src/php/api/config.php` and update the values within to enable connections to your lexiconga database.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										35
									
								
								ads.json
									
										
									
									
									
								
							
							
						
						
									
										35
									
								
								ads.json
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
    "cta": "Learn to Play for Free!",
 | 
			
		||||
    "link": "https://guts.plus",
 | 
			
		||||
    "start": "June 1, 2019",
 | 
			
		||||
    "end": "March 1, 2020",
 | 
			
		||||
    "end": "December 31, 2099",
 | 
			
		||||
    "isPriority": false
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
| 
						 | 
				
			
			@ -32,25 +32,34 @@
 | 
			
		|||
    "cta": "Use RedFlag for Free",
 | 
			
		||||
    "link": "https://redflag.ga",
 | 
			
		||||
    "start": "June 1, 2019",
 | 
			
		||||
    "end": "January 1, 2020",
 | 
			
		||||
    "end": "December 31, 2099",
 | 
			
		||||
    "isPriority": false
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "header": "Get Theonite: Planet Adyn free!",
 | 
			
		||||
    "body": "\"This book is the superhero fantasy you didn't know you needed. Magic, Afrofuturism, and heart-pumping suspense - this book has it all!\" - WeReadFantasy.com",
 | 
			
		||||
    "cta": "Read Free Now",
 | 
			
		||||
    "link": "https://mailchi.mp/ce525124aec3/theonite-planet-adyn-free-copy",
 | 
			
		||||
    "start": "June 1, 2019",
 | 
			
		||||
    "end": "January 1, 2020",
 | 
			
		||||
    "header": "Looking for a New Book to Read?",
 | 
			
		||||
    "body": "Be among the first to crack open a great new fantasy world with The Legends of the Shattered Lands. Book 1 and 2 available now!",
 | 
			
		||||
    "cta": "Shop Now",
 | 
			
		||||
    "link": "https://amazon.com/S-S-Grove/e/B074SX2GYW",
 | 
			
		||||
    "start": "January 24, 2020",
 | 
			
		||||
    "end": "January 24, 2021",
 | 
			
		||||
    "isPriority": false
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "header": "The Sword of Kaigen: A Theonite War Story",
 | 
			
		||||
    "body": "\"Fantasy and martial arts aficionados alike should enjoy this emotionally supercharged novel... which pierces readers' hearts with the precision of a samurai's razor-sharp blade.\" - Blue Ink Review",
 | 
			
		||||
    "header": "Like the GUTS+ System?",
 | 
			
		||||
    "body": "Help contribute to the ongoing development of the GUTS+ System by buying the new, nicely-formatted PDF rule book! With imagery and some exclusive content, this is the best way to learn to play!",
 | 
			
		||||
    "cta": "Buy Now",
 | 
			
		||||
    "link": "https://www.amazon.com/Sword-Kaigen-Theonite-War-Story/dp/172019386X/",
 | 
			
		||||
    "start": "June 1, 2019",
 | 
			
		||||
    "end": "January 1, 2020",
 | 
			
		||||
    "link": "https://alamantus.itch.io/guts-plus",
 | 
			
		||||
    "start": "December 4, 2019",
 | 
			
		||||
    "end": "July 1, 2020",
 | 
			
		||||
    "isPriority": false
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "header": "Like the GUTS+ System?",
 | 
			
		||||
    "body": "Help contribute to the ongoing development of the GUTS+ System by buying the new, nicely-formatted PDF rule book! With imagery and some exclusive content, this is the best way to learn to play!",
 | 
			
		||||
    "cta": "Buy Now",
 | 
			
		||||
    "link": "https://www.drivethrurpg.com/product/273132/The-GUTS-System-Core-Rule-Book-PDF",
 | 
			
		||||
    "start": "December 4, 2019",
 | 
			
		||||
    "end": "July 1, 2020",
 | 
			
		||||
    "isPriority": false
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										16
									
								
								package.json
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								package.json
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "lexiconga",
 | 
			
		||||
  "version": "2.1.3",
 | 
			
		||||
  "version": "2.1.7",
 | 
			
		||||
  "description": "The quick and easy dictionary builder for constructed languages.",
 | 
			
		||||
  "main": "template-index.html",
 | 
			
		||||
  "repository": "https://github.com/Alamantus/Lexiconga.git",
 | 
			
		||||
| 
						 | 
				
			
			@ -21,19 +21,19 @@
 | 
			
		|||
    "clear-cache": "rimraf .cache/{*,.*}"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "autoprefixer": "^9.6.1",
 | 
			
		||||
    "concurrently": "^4.1.1",
 | 
			
		||||
    "autoprefixer": "^9.7.4",
 | 
			
		||||
    "concurrently": "^5.2.0",
 | 
			
		||||
    "cpx": "^1.5.0",
 | 
			
		||||
    "parcel-bundler": "^1.12.3",
 | 
			
		||||
    "parcel-plugin-goodie-bag": "^2.0.0",
 | 
			
		||||
    "rimraf": "^2.6.3",
 | 
			
		||||
    "sass": "^1.22.4",
 | 
			
		||||
    "sharp": "^0.22.1"
 | 
			
		||||
    "rimraf": "^3.0.2",
 | 
			
		||||
    "sass": "^1.26.5",
 | 
			
		||||
    "sharp": "^0.25.2"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "marked": "^0.6.3",
 | 
			
		||||
    "marked": "^1.0.0",
 | 
			
		||||
    "normalize.css": "^8.0.1",
 | 
			
		||||
    "papaparse": "^4.6.3",
 | 
			
		||||
    "papaparse": "^5.1.1",
 | 
			
		||||
    "upup": "^1.1.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
<p>
 | 
			
		||||
  <em>Hover over characters to see their Phondue shortcuts.</em>
 | 
			
		||||
  <em>Hover over characters to see their Phondue shortcuts. Use Field Help to show full Phondue instructions.</em>
 | 
			
		||||
</p>
 | 
			
		||||
<table className='table is-bordered'>
 | 
			
		||||
  <thead>
 | 
			
		||||
| 
						 | 
				
			
			@ -583,6 +583,9 @@
 | 
			
		|||
      <th id='cell_9_9' class='td-lbl' colspan="7">
 | 
			
		||||
        Diacritics
 | 
			
		||||
      </th>
 | 
			
		||||
      <th id='cell_9_10' class='td-lbl' colspan="1">
 | 
			
		||||
        Tones
 | 
			
		||||
      </th>
 | 
			
		||||
    </tr>
 | 
			
		||||
  </thead>
 | 
			
		||||
  <tbody>
 | 
			
		||||
| 
						 | 
				
			
			@ -647,35 +650,42 @@
 | 
			
		|||
      <td id='cell_10_13' class='td-lbl'>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_14' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='O_ o_ _O _o'>
 | 
			
		||||
          ̥
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_15' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='U_ u_ _U _u'>
 | 
			
		||||
          ̬
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_16' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title=':_ _:'>
 | 
			
		||||
          ̤
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_17' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='~_ _~'>
 | 
			
		||||
          ̰
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_18' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='_|'>
 | 
			
		||||
          ̩
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_19' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='^_ _^'>
 | 
			
		||||
          ̯
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_20' class='td-lbl'>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_21' class='td-btn'>
 | 
			
		||||
        <button title='5|'>
 | 
			
		||||
          ˥
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
      <th id='cell_11_0' class='td-lbl' colspan="1">
 | 
			
		||||
| 
						 | 
				
			
			@ -729,35 +739,42 @@
 | 
			
		|||
      <td id='cell_11_13' class='td-lbl'>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_11_14' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='[_ _['>
 | 
			
		||||
          ̪
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_11_15' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='{_ _{'>
 | 
			
		||||
          ̼
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_11_16' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title=']_ _]'>
 | 
			
		||||
          ̺
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_11_17' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='#_ _# []'>
 | 
			
		||||
          ̻
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_11_18' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='h^ ^h'>
 | 
			
		||||
          ʰ
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_11_19' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='>^ ^>'>
 | 
			
		||||
          ̚
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_20' class='td-lbl'>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_21' class='td-btn'>
 | 
			
		||||
        <button title='4|'>
 | 
			
		||||
          ˦
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
      <th id='cell_12_0' class='td-lbl' colspan="1">
 | 
			
		||||
| 
						 | 
				
			
			@ -820,35 +837,42 @@
 | 
			
		|||
      <td id='cell_12_13' class='td-lbl'>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_12_14' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='+_ _+'>
 | 
			
		||||
          ̟
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_12_15' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='__'>
 | 
			
		||||
          ̠
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_12_16' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title=':^ ^:'>
 | 
			
		||||
          ̈
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_12_17' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='x^ ^x'>
 | 
			
		||||
          ̽
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_12_18' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title="'-_ -'_">
 | 
			
		||||
          ̝
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_12_19' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title=',-_ -,_'>
 | 
			
		||||
          ̞
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_20' class='td-lbl'>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_21' class='td-btn'>
 | 
			
		||||
        <button title='3|'>
 | 
			
		||||
          ˧
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
      <th id='cell_13_0' class='td-lbl' colspan="1">
 | 
			
		||||
| 
						 | 
				
			
			@ -877,7 +901,7 @@
 | 
			
		|||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_13_9' class='td-btn'>
 | 
			
		||||
        <button title='")'>
 | 
			
		||||
        <button title="')">
 | 
			
		||||
          ʼ
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
| 
						 | 
				
			
			@ -896,40 +920,45 @@
 | 
			
		|||
      <td id='cell_13_13' class='td-lbl'>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_13_14' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='w^ ^w'>
 | 
			
		||||
          ʷ
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_13_15' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='j^ ^j'>
 | 
			
		||||
          ʲ
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_13_16' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='h/^'>
 | 
			
		||||
          ᶣ
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_13_17' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='vO^ v0^'>
 | 
			
		||||
          ᶹ
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_13_18' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='XO^'>
 | 
			
		||||
          ˠ
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_13_19' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='?/^'>
 | 
			
		||||
          ˤ
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_13_20' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='~^ ^~'>
 | 
			
		||||
          ̴
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_21' class='td-btn'>
 | 
			
		||||
        <button title='2|'>
 | 
			
		||||
          ˨
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
      <th id='cell_14_0' class='td-lbl' colspan="1">
 | 
			
		||||
| 
						 | 
				
			
			@ -992,35 +1021,42 @@
 | 
			
		|||
      <td id='cell_14_13' class='td-lbl'>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_14_14' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title=')_ _)'>
 | 
			
		||||
          ̹
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_14_15' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='(_ _('>
 | 
			
		||||
          ̜
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_14_16' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='<|_ |<_'>
 | 
			
		||||
          ̘
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_14_17' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='>|_ |>_'>
 | 
			
		||||
          ̙
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_14_18' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='~^ ^~'>
 | 
			
		||||
          ̃
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_14_19' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='>r r>'>
 | 
			
		||||
          ˞
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_20' class='td-lbl'>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_10_21' class='td-btn'>
 | 
			
		||||
        <button title='1|'>
 | 
			
		||||
          ˩
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
    </tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
      <th id='cell_15_0' class='td-lbl' colspan="1">
 | 
			
		||||
| 
						 | 
				
			
			@ -1111,7 +1147,7 @@
 | 
			
		|||
        Suprasegmental
 | 
			
		||||
      </th>
 | 
			
		||||
      <td id='cell_16_12' class='td-btn'>
 | 
			
		||||
        <button title='""'>
 | 
			
		||||
        <button title="''">
 | 
			
		||||
          ˈ
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
| 
						 | 
				
			
			@ -1131,7 +1167,7 @@
 | 
			
		|||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
      <td id='cell_16_16' class='td-btn'>
 | 
			
		||||
        <button title=''>
 | 
			
		||||
        <button title='u^ ^u'>
 | 
			
		||||
          ̆
 | 
			
		||||
        </button>
 | 
			
		||||
      </td>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -174,10 +174,11 @@ export function syncWords(remoteWords, deletedWords) {
 | 
			
		|||
  }
 | 
			
		||||
  
 | 
			
		||||
  remoteWords.forEach(remoteWord => {
 | 
			
		||||
    let localWord = words.find(word => word.wordId === remoteWord.wordId);
 | 
			
		||||
    const localWordIndex = words.findIndex(word => word.wordId === remoteWord.wordId);
 | 
			
		||||
    const localWord = words[localWordIndex];
 | 
			
		||||
    if (localWord) {
 | 
			
		||||
      if (localWord.lastUpdated < remoteWord.lastUpdated) {
 | 
			
		||||
        localWord = remoteWord;
 | 
			
		||||
        words[localWordIndex] = remoteWord;
 | 
			
		||||
      } else if (localWord.lastUpdated > remoteWord.lastUpdated) {
 | 
			
		||||
        // Add more-recently-updated words to upload
 | 
			
		||||
        localWordsToUpload.push(localWord);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -237,7 +237,7 @@ export function importWords() {
 | 
			
		|||
              console.error('Error Importing Word: ', err)
 | 
			
		||||
            });
 | 
			
		||||
          } else {
 | 
			
		||||
            const row = results.data[0];
 | 
			
		||||
            const row = results.data;
 | 
			
		||||
            const importedWord = addWord({
 | 
			
		||||
              name: removeTags(row.word).trim(),
 | 
			
		||||
              pronunciation: removeTags(row.pronunciation).trim(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ export function renderDetails() {
 | 
			
		|||
  const consonantHTML = `<p><strong>Consonants</strong><br>${consonants.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const vowelHTML = `<p><strong>Vowels</strong><br>${vowels.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const blendHTML = blends.length > 0 ? `<p><strong>Polyphthongs / Blends</strong><br>${blends.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>` : '';
 | 
			
		||||
  const phonologyNotesHTML = phonology.notes.trim().length > 0 ? '<p><strong>Notes</strong></p><div>' + md(removeTags(phonology.notes)) + '</div>' : '';
 | 
			
		||||
  const phonologyNotesHTML = phonology.notes.trim().length > 0 ? '<p><strong>Notes</strong></p><div>' + md(parseReferences(removeTags(phonology.notes))) + '</div>' : '';
 | 
			
		||||
  const phonologyHTML = `<h2>Phonology</h2>
 | 
			
		||||
  <div class="split two">
 | 
			
		||||
    <div>${consonantHTML}</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ export function renderDetails() {
 | 
			
		|||
  const onsetHTML = `<p><strong>Onset</strong><br>${onset.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const nucleusHTML = `<p><strong>Nucleus</strong><br>${nucleus.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const codaHTML = `<p><strong>Coda</strong><br>${coda.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const phonotacticsNotesHTML = phonotactics.notes.trim().length > 0 ? '<p><strong>Notes</strong></p><div>' + md(removeTags(phonotactics.notes)) + '</div>' : '';
 | 
			
		||||
  const phonotacticsNotesHTML = phonotactics.notes.trim().length > 0 ? '<p><strong>Notes</strong></p><div>' + md(parseReferences(removeTags(phonotactics.notes))) + '</div>' : '';
 | 
			
		||||
  const phonotacticsHTML = onset.length + nucleus.length + coda.length + phonotacticsNotesHTML.length > 0
 | 
			
		||||
    ? `<h2>Phonotactics</h2>
 | 
			
		||||
  ${onset.length > 0 || nucleus.length > 0 || coda.length > 0
 | 
			
		||||
| 
						 | 
				
			
			@ -93,14 +93,14 @@ export function renderDetails() {
 | 
			
		|||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
  }).filter(html => html !== false).join(' ')}</p>` : '';
 | 
			
		||||
  const orthographyNotesHTML = orthography.notes.trim().length > 0 ? '<p><strong>Notes</strong><br>' + md(removeTags(orthography.notes)) + '</div>' : '';
 | 
			
		||||
  const orthographyNotesHTML = orthography.notes.trim().length > 0 ? '<p><strong>Notes</strong><br>' + md(parseReferences(removeTags(orthography.notes))) + '</div>' : '';
 | 
			
		||||
  const orthographyHTML = translations.length + orthographyNotesHTML.length > 0
 | 
			
		||||
    ? `<h2>Orthography</h2>
 | 
			
		||||
  ${translationsHTML}
 | 
			
		||||
  ${orthographyNotesHTML}`
 | 
			
		||||
    : '';
 | 
			
		||||
  const grammarHTML = grammar.notes.trim().length > 0 ? '<h2>Grammar</h2><div>'
 | 
			
		||||
    + (grammar.notes.trim().length > 0 ? md(removeTags(grammar.notes)) : '')
 | 
			
		||||
    + (grammar.notes.trim().length > 0 ? md(parseReferences(removeTags(grammar.notes))) : '')
 | 
			
		||||
  + '</div>' : '';
 | 
			
		||||
 | 
			
		||||
  detailsPanel.innerHTML = generalHTML + phonologyHTML + phonotacticsHTML + orthographyHTML + grammarHTML;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ export function renderDetails() {
 | 
			
		|||
  const consonantHTML = `<p><strong>Consonants</strong><br>${consonants.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const vowelHTML = `<p><strong>Vowels</strong><br>${vowels.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const blendHTML = blends.length > 0 ? `<p><strong>Polyphthongs / Blends</strong><br>${blends.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>` : '';
 | 
			
		||||
  const phonologyNotesHTML = phonology.notes.trim().length > 0 ? '<p><strong>Notes</strong></p><div>' + md(removeTags(phonology.notes)) + '</div>' : '';
 | 
			
		||||
  const phonologyNotesHTML = phonology.notes.trim().length > 0 ? '<p><strong>Notes</strong></p><div>' + md(phonology.notes) + '</div>' : '';
 | 
			
		||||
  const phonologyHTML = `<h3>Phonology</h3>
 | 
			
		||||
  <div class="split two">
 | 
			
		||||
    <div>${consonantHTML}</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -79,11 +79,11 @@ export function renderDetails() {
 | 
			
		|||
  const onsetHTML = `<p><strong>Onset</strong><br>${onset.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const nucleusHTML = `<p><strong>Nucleus</strong><br>${nucleus.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const codaHTML = `<p><strong>Coda</strong><br>${coda.map(letter => `<span class="tag">${letter}</span>`).join(' ')}</p>`;
 | 
			
		||||
  const phonotacticsNotesHTML = phonotactics.notes.trim().length > 0 ? '<p><strong>Notes</strong></p><div>' + md(removeTags(phonotactics.notes)) + '</div>' : '';
 | 
			
		||||
  const phonotacticsNotesHTML = phonotactics.notes.trim().length > 0 ? '<p><strong>Notes</strong></p><div>' + md(phonotactics.notes) + '</div>' : '';
 | 
			
		||||
  const phonotacticsHTML = onset.length + nucleus.length + coda.length + phonotacticsNotesHTML.length > 0
 | 
			
		||||
    ? `<h3>Phonotactics</h3>
 | 
			
		||||
  ${onset.length > 0 || nucleus.length > 0 || coda.length > 0
 | 
			
		||||
    ? `<div class="split three">
 | 
			
		||||
      ? `<div class="split three">
 | 
			
		||||
    <div>${onsetHTML}</div>
 | 
			
		||||
    <div>${nucleusHTML}</div>
 | 
			
		||||
    <div>${codaHTML}</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -99,15 +99,17 @@ export function renderDetails() {
 | 
			
		|||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
  }).filter(html => html !== false).join(' ')}</p>` : '';
 | 
			
		||||
  const orthographyNotesHTML = orthography.notes.trim().length > 0 ? '<p><strong>Notes</strong><br>' + md(removeTags(orthography.notes)) + '</div>' : '';
 | 
			
		||||
  const orthographyNotesHTML = orthography.notes.trim().length > 0 ? '<p><strong>Notes</strong><br>' + md(orthography.notes) + '</div>' : '';
 | 
			
		||||
  const orthographyHTML = translations.length + orthographyNotesHTML.length > 0
 | 
			
		||||
    ? `<h3>Orthography</h3>
 | 
			
		||||
  ${translationsHTML}
 | 
			
		||||
  ${orthographyNotesHTML}`
 | 
			
		||||
    : '';
 | 
			
		||||
  const grammarHTML = grammar.notes.trim().length > 0 ? '<h3>Grammar</h3><div>'
 | 
			
		||||
    + (grammar.notes.trim().length > 0 ? md(removeTags(grammar.notes)) : '')
 | 
			
		||||
  + '</div>' : '';
 | 
			
		||||
  const grammarHTML = grammar.notes.trim().length > 0
 | 
			
		||||
    ? '<h3>Grammar</h3><div>'
 | 
			
		||||
      + (grammar.notes.trim().length > 0 ? md(grammar.notes) : '')
 | 
			
		||||
      + '</div>'
 | 
			
		||||
    : '';
 | 
			
		||||
 | 
			
		||||
  detailsPanel.innerHTML = generalHTML + phonologyHTML + phonotacticsHTML + orthographyHTML + grammarHTML;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,6 @@
 | 
			
		|||
# To resolve the issue with "Your connection to this site is not secure" message
 | 
			
		||||
Header set Content-Security-Policy: upgrade-insecure-requests env=HTTPS 
 | 
			
		||||
 | 
			
		||||
RewriteEngine On    # Turn on the rewriting engine
 | 
			
		||||
 | 
			
		||||
RewriteRule    ^view/([0-9]+)/([0-9]+)/?$    router.php?view=word&dict=$1&word=$2    [NC,L]    # Handle word ids.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,8 @@
 | 
			
		|||
[
 | 
			
		||||
  {
 | 
			
		||||
    "header": "New Features have Arrived!",
 | 
			
		||||
    "body": "<p><em>July 15, 2019</em> – Custom Alphabetical Order, Orthographic Translations, and Custom Styling are now here!</p><p>Check the <a href=\"https://github.com/Alamantus/Lexiconga/releases\" target=\"_blank\" rel=\"noopener\">Updates page</a> for all the new features and bug fixes!</p>",
 | 
			
		||||
    "expire": "January 1, 2020",
 | 
			
		||||
    "dismissId": "wave1"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "header": "Welcome to Lexiconga 2.0!",
 | 
			
		||||
    "body": "<p><em>July 1, 2019</em> – Lexiconga has been rewritten from the ground up!</p><p>Check the <a href=\"https://github.com/Alamantus/Lexiconga/releases\" target=\"_blank\" rel=\"noopener\">Updates page</a> for all the new features, or click Help to get a refresher on how to use Lexiconga!</p>",
 | 
			
		||||
    "expire": "January 1, 2020",
 | 
			
		||||
    "dismissId": "welcome"
 | 
			
		||||
    "header": "Minor Updates + 1 Important Fix",
 | 
			
		||||
    "body": "<p><em>March 4, 2020</em> – Lexiconga has been updated to fix a long-standing bug that prevented updated words from syncing between devices!</p><p>Check the <a href=\"https://github.com/Alamantus/Lexiconga/releases\" target=\"_blank\" rel=\"noopener\">Updates page</a> for the other minor updates.</p>",
 | 
			
		||||
    "expire": "April 4, 2020",
 | 
			
		||||
    "dismissId": "marchFixes1"
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -264,7 +264,7 @@ WHERE dictionary=$dictionary";
 | 
			
		|||
    $word_ids = array();
 | 
			
		||||
    $most_recent_word_update = 0;
 | 
			
		||||
    foreach($words as $word) {
 | 
			
		||||
      $last_updated = isset($word['lastUpdated']) ? $word['createdOn'] : $word['lastUpdated'];
 | 
			
		||||
      $last_updated = isset($word['lastUpdated']) ? $word['lastUpdated'] : $word['createdOn'];
 | 
			
		||||
      if ($most_recent_word_update < $last_updated) {
 | 
			
		||||
        $most_recent_word_update = $last_updated;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,20 +44,20 @@ class PublicDictionary {
 | 
			
		|||
              'consonants' => $result['consonants'] !== '' ? explode(' ', $result['consonants']) : array(),
 | 
			
		||||
              'vowels' => $result['vowels'] !== '' ? explode(' ', $result['vowels']) : array(),
 | 
			
		||||
              'blends' => $result['blends'] !== '' ? explode(' ', $result['blends']) : array(),
 | 
			
		||||
              'notes' => $result['phonology_notes'],
 | 
			
		||||
              'notes' => $this->parseReferences(strip_tags($result['phonology_notes']), $result['id']),
 | 
			
		||||
            ),
 | 
			
		||||
            'phonotactics' => array(
 | 
			
		||||
              'onset' => $result['onset'] !== '' ? explode(',', $result['onset']) : array(),
 | 
			
		||||
              'nucleus' => $result['nucleus'] !== '' ? explode(',', $result['nucleus']) : array(),
 | 
			
		||||
              'coda' => $result['coda'] !== '' ? explode(',', $result['coda']) : array(),
 | 
			
		||||
              'notes' => $result['phonotactics_notes'],
 | 
			
		||||
              'notes' => $this->parseReferences(strip_tags($result['phonotactics_notes']), $result['id']),
 | 
			
		||||
            ),
 | 
			
		||||
            'orthography' => array(
 | 
			
		||||
              'translations' => $result['translations'] !== '' ? explode(PHP_EOL, $result['translations']) : array(),
 | 
			
		||||
              'notes' => $result['orthography_notes'],
 | 
			
		||||
              'notes' => $this->parseReferences(strip_tags($result['orthography_notes']), $result['id']),
 | 
			
		||||
            ),
 | 
			
		||||
            'grammar' => array(
 | 
			
		||||
              'notes' => $result['grammar_notes'],
 | 
			
		||||
              'notes' => $this->parseReferences(strip_tags($result['grammar_notes']), $result['id']),
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
          'settings' => array(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,7 +134,7 @@ switch ($view) {
 | 
			
		|||
      oldLoad && oldLoad();
 | 
			
		||||
      if (UpUp) {
 | 
			
		||||
        UpUp.start({
 | 
			
		||||
          'cache-version': '2.1.3',
 | 
			
		||||
          'cache-version': '2.1.7',
 | 
			
		||||
          'content-url': 'offline.html',
 | 
			
		||||
          'assets': [
 | 
			
		||||
            \"" . implode('","', $files) . "\"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@ input:not([type="checkbox"]),
 | 
			
		|||
select,
 | 
			
		||||
textarea {
 | 
			
		||||
  font-size: 12pt;
 | 
			
		||||
  padding: 2px 3px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
label {
 | 
			
		||||
| 
						 | 
				
			
			@ -30,8 +31,7 @@ label {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  input:not([type="checkbox"]):not([type="radio"]) {
 | 
			
		||||
    padding-bottom: 2px;
 | 
			
		||||
    line-height: 1.3;
 | 
			
		||||
    line-height: 1.6;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  input:not([type="checkbox"]):not([type="radio"]),
 | 
			
		||||
| 
						 | 
				
			
			@ -153,6 +153,7 @@ span .tag {
 | 
			
		|||
  left: 0;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  right: 0;
 | 
			
		||||
  z-index: 10;
 | 
			
		||||
  
 | 
			
		||||
  .modal-background {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -347,7 +347,7 @@ $nav-font-height: 16px;
 | 
			
		|||
  bottom: $general-padding;
 | 
			
		||||
  right: $general-padding;
 | 
			
		||||
  max-width: 300px;
 | 
			
		||||
  z-index: 10;
 | 
			
		||||
  z-index: 15;
 | 
			
		||||
 | 
			
		||||
  .message {
 | 
			
		||||
    position: relative;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,13 +23,9 @@
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.modal {
 | 
			
		||||
  z-index: 10;
 | 
			
		||||
 | 
			
		||||
  .modal-content .close-button {
 | 
			
		||||
    top: 5px;
 | 
			
		||||
    right: 5px;
 | 
			
		||||
  }
 | 
			
		||||
.modal .modal-content .close-button {
 | 
			
		||||
  top: 5px;
 | 
			
		||||
  right: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.split {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -129,7 +129,7 @@
 | 
			
		|||
  #top {
 | 
			
		||||
    background-color: $header-color;
 | 
			
		||||
    border-bottom: 1px solid darken($header-color, 2);
 | 
			
		||||
    box-shadow: 0px 4px 5px 0px $dark;
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
 | 
			
		||||
    #title {
 | 
			
		||||
      #lexi {
 | 
			
		||||
| 
						 | 
				
			
			@ -156,13 +156,13 @@
 | 
			
		|||
  #wordForm {
 | 
			
		||||
    background-color: $word-form-color;
 | 
			
		||||
    border: 1px solid darken($word-form-color, 2);
 | 
			
		||||
    box-shadow: 4px 4px 5px 0px $dark;
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #mainColumn {
 | 
			
		||||
    background-color: $dictionary-color;
 | 
			
		||||
    border: 1px solid darken($dictionary-color, 2);
 | 
			
		||||
    box-shadow: 4px 4px 5px 0px $dark;
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #detailsSection {
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +184,7 @@
 | 
			
		|||
 | 
			
		||||
  .announcement {
 | 
			
		||||
    background-color: saturate(lighten($footer-color, 20%), 20%);
 | 
			
		||||
    box-shadow: 4px 4px 5px 0px $dark;
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .entry {
 | 
			
		||||
| 
						 | 
				
			
			@ -238,7 +238,7 @@
 | 
			
		|||
  #bottom {
 | 
			
		||||
    background-color: $footer-color;
 | 
			
		||||
    border-top: 1px solid darken($footer-color, 2);
 | 
			
		||||
    box-shadow: 0px -4px 5px 0px $dark;
 | 
			
		||||
    box-shadow: none;
 | 
			
		||||
 | 
			
		||||
    a {
 | 
			
		||||
      color: $light;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue