Compare commits
	
		
			1544 Commits
		
	
	
		
			untagged-e
			...
			rewrite-ov
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					8eadb8287d | ||
| 
						 | 
					541ebbbb19 | ||
| 
						 | 
					d92a9ae1ae | ||
| 
						 | 
					47749dde7b | ||
| 
						 | 
					78a8c2bdce | ||
| 
						 | 
					2c54e43e37 | ||
| 
						 | 
					fba3b99b54 | ||
| 
						 | 
					489d95f23f | ||
| 
						 | 
					5d01dafeb3 | ||
| 
						 | 
					b0bd85ccc6 | ||
| 
						 | 
					9fc570e183 | ||
| 
						 | 
					695d812ecb | ||
| 
						 | 
					ef6db98da5 | ||
| 
						 | 
					cd38819a7a | ||
| 
						 | 
					f207ed274b | ||
| 
						 | 
					c3691783de | ||
| 
						 | 
					7171831b14 | ||
| 
						 | 
					fa14921421 | ||
| 
						 | 
					475a80acdd | ||
| 
						 | 
					9826c3f33e | ||
| 
						 | 
					ecee949547 | ||
| 
						 | 
					95eea7051f | ||
| 
						 | 
					74e3ea41a7 | ||
| 
						 | 
					dc27db920a | ||
| 
						 | 
					b2724fe362 | ||
| 
						 | 
					5d43a5b159 | ||
| 
						 | 
					7435f3ddfd | ||
| 
						 | 
					94b6de6d3f | ||
| 
						 | 
					1eb49e9a26 | ||
| 
						 | 
					0893aa4ee1 | ||
| 
						 | 
					ccdd9fba88 | ||
| 
						 | 
					01dc5ff700 | ||
| 
						 | 
					346e8319df | ||
| 
						 | 
					5ca7046d5c | ||
| 
						 | 
					f39e851211 | ||
| 
						 | 
					3747020876 | ||
| 
						 | 
					5ed5a9ade3 | ||
| 
						 | 
					04f157353f | ||
| 
						 | 
					a1bbcc9be2 | ||
| 
						 | 
					1266ef44ee | ||
| 
						 | 
					0da36709d5 | ||
| 
						 | 
					2b5637f388 | ||
| 
						 | 
					6d478906a0 | ||
| 
						 | 
					e436aed6c5 | ||
| 
						 | 
					25867690f3 | ||
| 
						 | 
					b5efbebadb | ||
| 
						 | 
					e93f860c0c | ||
| 
						 | 
					df04ebca4c | ||
| 
						 | 
					d2aaf2c2cf | ||
| 
						 | 
					8386cd675c | ||
| 
						 | 
					ad7b3cf485 | ||
| 
						 | 
					f9f2aeab23 | ||
| 
						 | 
					ea735d279f | ||
| 
						 | 
					fa616d56fd | ||
| 
						 | 
					907e55e6d7 | ||
| 
						 | 
					874be5bca8 | ||
| 
						 | 
					f49907e5e5 | ||
| 
						 | 
					da197340ec | ||
| 
						 | 
					cf6e5b5dd5 | ||
| 
						 | 
					917cd322fc | ||
| 
						 | 
					bc616ba118 | ||
| 
						 | 
					ea26648619 | ||
| 
						 | 
					c2f1aec8b6 | ||
| 
						 | 
					c005b546ba | ||
| 
						 | 
					783ceec8de | ||
| 
						 | 
					b1ccfa85ba | ||
| 
						 | 
					7e6d03fd53 | ||
| 
						 | 
					dd0e1279c4 | ||
| 
						 | 
					1b3e676b30 | ||
| 
						 | 
					a4582bb18a | ||
| 
						 | 
					25e99725d2 | ||
| 
						 | 
					da011cd302 | ||
| 
						 | 
					53010751ee | ||
| 
						 | 
					19401b61cb | ||
| 
						 | 
					82271f1c17 | ||
| 
						 | 
					a74d0ecf8d | ||
| 
						 | 
					7ee4205f8a | ||
| 
						 | 
					9aef043344 | ||
| 
						 | 
					4dbc673719 | ||
| 
						 | 
					d44cecf21f | ||
| 
						 | 
					3c0ea8f40d | ||
| 
						 | 
					06b806532e | ||
| 
						 | 
					1983864294 | ||
| 
						 | 
					c523a274e1 | ||
| 
						 | 
					03563eb1f2 | ||
| 
						 | 
					2f14d18126 | ||
| 
						 | 
					d1309a82ec | ||
| 
						 | 
					2a2607eb4b | ||
| 
						 | 
					e9b5221f05 | ||
| 
						 | 
					bb71a28375 | ||
| 
						 | 
					af3e87b0e3 | ||
| 
						 | 
					4728a59c33 | ||
| 
						 | 
					f9a9c13dc5 | ||
| 
						 | 
					1fa6abccf7 | ||
| 
						 | 
					9aa68b8ee6 | ||
| 
						 | 
					f90cfe221f | ||
| 
						 | 
					b70a5d0053 | ||
| 
						 | 
					9c4ba4da80 | ||
| 
						 | 
					591dc1ba3c | ||
| 
						 | 
					841afc5a33 | ||
| 
						 | 
					3a2e3c7895 | ||
| 
						 | 
					5e035dc239 | ||
| 
						 | 
					2761cc23b0 | ||
| 
						 | 
					cf00fefa6b | ||
| 
						 | 
					039799083d | ||
| 
						 | 
					f6f53f9729 | ||
| 
						 | 
					219695f9ae | ||
| 
						 | 
					34c189b3ed | ||
| 
						 | 
					4a704bc257 | ||
| 
						 | 
					2dc3ca51a3 | ||
| 
						 | 
					b2564cfabb | ||
| 
						 | 
					d0734ed5fe | ||
| 
						 | 
					6ddc613b5a | ||
| 
						 | 
					3373ff417f | ||
| 
						 | 
					9bee8afe95 | ||
| 
						 | 
					f79da2b692 | ||
| 
						 | 
					fedb1ee858 | ||
| 
						 | 
					50e11ec035 | ||
| 
						 | 
					233442936a | ||
| 
						 | 
					b68ae81782 | ||
| 
						 | 
					835234885b | ||
| 
						 | 
					6995155392 | ||
| 
						 | 
					2d7d127266 | ||
| 
						 | 
					ee6cbf922e | ||
| 
						 | 
					2c2ba89434 | ||
| 
						 | 
					68b23dc25a | ||
| 
						 | 
					181e8b47fd | ||
| 
						 | 
					8004643768 | ||
| 
						 | 
					681b2f207a | ||
| 
						 | 
					8ba1fa5e18 | ||
| 
						 | 
					3b4fe169d0 | ||
| 
						 | 
					8ea7cde8e6 | ||
| 
						 | 
					db23b2b016 | ||
| 
						 | 
					e8b0fb3e6c | ||
| 
						 | 
					b47079e4c8 | ||
| 
						 | 
					bae2d84d81 | ||
| 
						 | 
					73a57c86cb | ||
| 
						 | 
					50a2ce1470 | ||
| 
						 | 
					429a5c764f | ||
| 
						 | 
					6fbfdf0323 | ||
| 
						 | 
					7822b2c740 | ||
| 
						 | 
					0014890881 | ||
| 
						 | 
					8e909cf3b2 | ||
| 
						 | 
					f7be9e9143 | ||
| 
						 | 
					e44fee2165 | ||
| 
						 | 
					940514c97d | ||
| 
						 | 
					4839c64878 | ||
| 
						 | 
					8c660d8499 | ||
| 
						 | 
					2d0c7bdcea | ||
| 
						 | 
					9ecdb4fdb6 | ||
| 
						 | 
					b03b387707 | ||
| 
						 | 
					3df827cbeb | ||
| 
						 | 
					0af7e1da9f | ||
| 
						 | 
					3531c338de | ||
| 
						 | 
					d44724d784 | ||
| 
						 | 
					2d67a7df23 | ||
| 
						 | 
					38db36602c | ||
| 
						 | 
					2e1264173e | ||
| 
						 | 
					365918bb94 | ||
| 
						 | 
					db7c471ec5 | ||
| 
						 | 
					b67ac5e48b | ||
| 
						 | 
					0f72db8e9c | ||
| 
						 | 
					3bff41f3d9 | ||
| 
						 | 
					b02b031d97 | ||
| 
						 | 
					ecda811835 | ||
| 
						 | 
					0b573e3825 | ||
| 
						 | 
					dc42ac6fce | ||
| 
						 | 
					f345e1e33b | ||
| 
						 | 
					5ffa9bc732 | ||
| 
						 | 
					343b02bf19 | ||
| 
						 | 
					c8786ca00f | ||
| 
						 | 
					2732161dd2 | ||
| 
						 | 
					8db9c438c4 | ||
| 
						 | 
					50a32d75d3 | ||
| 
						 | 
					d32c3c7866 | ||
| 
						 | 
					a8390a0f2a | ||
| 
						 | 
					9ad0e3e2c0 | ||
| 
						 | 
					03b08b7c71 | ||
| 
						 | 
					aa30072848 | ||
| 
						 | 
					528e7ea61c | ||
| 
						 | 
					89abea0706 | ||
| 
						 | 
					3c45752ce1 | ||
| 
						 | 
					b6cf6158f8 | ||
| 
						 | 
					b4eaa6a849 | ||
| 
						 | 
					86c83e8b11 | ||
| 
						 | 
					a235e536da | ||
| 
						 | 
					56fe5e6345 | ||
| 
						 | 
					5d9327d3d3 | ||
| 
						 | 
					72daf55e4e | ||
| 
						 | 
					e5d651365b | ||
| 
						 | 
					e1a0a69a2a | ||
| 
						 | 
					a9e5e72ccc | ||
| 
						 | 
					1d5f73e2ab | ||
| 
						 | 
					0f81740562 | ||
| 
						 | 
					0adb904c86 | ||
| 
						 | 
					92f8611043 | ||
| 
						 | 
					c24ef878c4 | ||
| 
						 | 
					ba01510c88 | ||
| 
						 | 
					47d69857ba | ||
| 
						 | 
					8d812fbd2c | ||
| 
						 | 
					790d353b69 | ||
| 
						 | 
					495db60a84 | ||
| 
						 | 
					ce117cca24 | ||
| 
						 | 
					547a7b7c7c | ||
| 
						 | 
					b6255244ef | ||
| 
						 | 
					04e7088b7d | ||
| 
						 | 
					1aefd4a3bb | ||
| 
						 | 
					34075000a8 | ||
| 
						 | 
					b24d937152 | ||
| 
						 | 
					b821724e59 | ||
| 
						 | 
					9a1f7311a6 | ||
| 
						 | 
					b642d42229 | ||
| 
						 | 
					ab265fae62 | ||
| 
						 | 
					44b0c6c8fd | ||
| 
						 | 
					ae16bb3525 | ||
| 
						 | 
					7bf5353f05 | ||
| 
						 | 
					64a3440969 | ||
| 
						 | 
					6a02d4df6c | ||
| 
						 | 
					4f84ad6c91 | ||
| 
						 | 
					3fe5676f44 | ||
| 
						 | 
					bc11e75d79 | ||
| 
						 | 
					87f4d86587 | ||
| 
						 | 
					de06c930ea | ||
| 
						 | 
					dd056f4c05 | ||
| 
						 | 
					484f320b7f | ||
| 
						 | 
					bf7b38a02e | ||
| 
						 | 
					bf534f9c79 | ||
| 
						 | 
					bf94612e2e | ||
| 
						 | 
					16fe5f07e3 | ||
| 
						 | 
					c85ef3c659 | ||
| 
						 | 
					e8910d7e64 | ||
| 
						 | 
					817d159fd9 | ||
| 
						 | 
					674ce32a30 | ||
| 
						 | 
					8f85016d8c | ||
| 
						 | 
					ee7ca45b91 | ||
| 
						 | 
					51af1590ad | ||
| 
						 | 
					b42b04d769 | ||
| 
						 | 
					ffaa59cf88 | ||
| 
						 | 
					109170627f | ||
| 
						 | 
					553abf90cb | ||
| 
						 | 
					eccdee7446 | ||
| 
						 | 
					b2d98948d2 | ||
| 
						 | 
					4bcb8104de | ||
| 
						 | 
					b7c82b4831 | ||
| 
						 | 
					626aebef4d | ||
| 
						 | 
					32420fecd9 | ||
| 
						 | 
					c318803ecd | ||
| 
						 | 
					adf37f6513 | ||
| 
						 | 
					0dcc0ff0ac | ||
| 
						 | 
					f30749d752 | ||
| 
						 | 
					af459aa93a | ||
| 
						 | 
					e190cf3393 | ||
| 
						 | 
					9f6c14ced0 | ||
| 
						 | 
					320576f288 | ||
| 
						 | 
					7366d9ce98 | ||
| 
						 | 
					6da37a6cbb | ||
| 
						 | 
					140e47d842 | ||
| 
						 | 
					44128d8801 | ||
| 
						 | 
					046dbc5559 | ||
| 
						 | 
					f46b05dca8 | ||
| 
						 | 
					8844320fc5 | ||
| 
						 | 
					9f1aeb2b58 | ||
| 
						 | 
					89ba321890 | ||
| 
						 | 
					0ede195a5a | ||
| 
						 | 
					c305ed5627 | ||
| 
						 | 
					e58989f021 | ||
| 
						 | 
					f88a3169c4 | ||
| 
						 | 
					8aa9de05f9 | ||
| 
						 | 
					e6ee50a6ea | ||
| 
						 | 
					802988cb77 | ||
| 
						 | 
					3afe00e208 | ||
| 
						 | 
					0db238b023 | ||
| 
						 | 
					3c07bbaf38 | ||
| 
						 | 
					951d4d7251 | ||
| 
						 | 
					dc789ad9c0 | ||
| 
						 | 
					c5cbc07b2b | ||
| 
						 | 
					101212de01 | ||
| 
						 | 
					6a977d6484 | ||
| 
						 | 
					4ed28c4d6c | ||
| 
						 | 
					136d101588 | ||
| 
						 | 
					e55a211269 | ||
| 
						 | 
					89e01ec6e2 | ||
| 
						 | 
					06c9e3437a | ||
| 
						 | 
					a24d058ee5 | ||
| 
						 | 
					176c692e46 | ||
| 
						 | 
					17505711d7 | ||
| 
						 | 
					e359347ae7 | ||
| 
						 | 
					51dbf712f7 | ||
| 
						 | 
					30bd7abec1 | ||
| 
						 | 
					370af944d8 | ||
| 
						 | 
					ccdd30f372 | ||
| 
						 | 
					157aec934d | ||
| 
						 | 
					a6d8bfd874 | ||
| 
						 | 
					ed8dc492c5 | ||
| 
						 | 
					87aee3764b | ||
| 
						 | 
					692f01885f | ||
| 
						 | 
					8b4537f61c | ||
| 
						 | 
					74abc5d150 | ||
| 
						 | 
					968dd67bda | ||
| 
						 | 
					08b38f2789 | ||
| 
						 | 
					8c826ccc3f | ||
| 
						 | 
					f76fa5b13a | ||
| 
						 | 
					2cc42fd3e0 | ||
| 
						 | 
					4eabfad002 | ||
| 
						 | 
					fa6304f244 | ||
| 
						 | 
					27b0a6e47e | ||
| 
						 | 
					6aca5a7b2b | ||
| 
						 | 
					c0b9fc96e7 | ||
| 
						 | 
					84b0defe3b | ||
| 
						 | 
					49e6f89015 | ||
| 
						 | 
					e9abe29fc3 | ||
| 
						 | 
					4c26a76cd4 | ||
| 
						 | 
					ce9bd51a92 | ||
| 
						 | 
					f6dad03f7f | ||
| 
						 | 
					0ee1ca5086 | ||
| 
						 | 
					088c370d0e | ||
| 
						 | 
					db934fb96b | ||
| 
						 | 
					ef3bae0c0f | ||
| 
						 | 
					bcf7d5f6ae | ||
| 
						 | 
					bfaee4533c | ||
| 
						 | 
					cf24c2042b | ||
| 
						 | 
					be9a52c221 | ||
| 
						 | 
					142098c4e7 | ||
| 
						 | 
					b4da761c5b | ||
| 
						 | 
					48d1dd14c1 | ||
| 
						 | 
					3243602653 | ||
| 
						 | 
					c2cfbd5583 | ||
| 
						 | 
					6105152926 | ||
| 
						 | 
					7ae073dec4 | ||
| 
						 | 
					d6933a05a7 | ||
| 
						 | 
					aa53700ffd | ||
| 
						 | 
					6deec5758d | ||
| 
						 | 
					ef68d2b421 | ||
| 
						 | 
					496106476b | ||
| 
						 | 
					7dd48c6da6 | ||
| 
						 | 
					6435f55d0b | ||
| 
						 | 
					a5c7494ba2 | ||
| 
						 | 
					ed0e7cc615 | ||
| 
						 | 
					529a08dd01 | ||
| 
						 | 
					3a3e4159d9 | ||
| 
						 | 
					fbbcf5de7f | ||
| 
						 | 
					101f0afa07 | ||
| 
						 | 
					298ef0547b | ||
| 
						 | 
					b948608ce3 | ||
| 
						 | 
					ec16bf81ed | ||
| 
						 | 
					c6b63d1d0c | ||
| 
						 | 
					b7397bccb0 | ||
| 
						 | 
					95606ed251 | ||
| 
						 | 
					5e3a89a654 | ||
| 
						 | 
					2a0a9fd205 | ||
| 
						 | 
					34e6a3bb72 | ||
| 
						 | 
					6b44ca625f | ||
| 
						 | 
					2082bb4662 | ||
| 
						 | 
					5c5161ed3f | ||
| 
						 | 
					3713a06750 | ||
| 
						 | 
					a897d517cf | ||
| 
						 | 
					df9c022563 | ||
| 
						 | 
					3796b79872 | ||
| 
						 | 
					f74eab450f | ||
| 
						 | 
					493066df76 | ||
| 
						 | 
					b89b5ea108 | ||
| 
						 | 
					3dcfe1812d | ||
| 
						 | 
					7b9d084cde | ||
| 
						 | 
					f80ec5e6c3 | ||
| 
						 | 
					773e482d56 | ||
| 
						 | 
					6a1910ec9d | ||
| 
						 | 
					a53b8fd884 | ||
| 
						 | 
					5d9bb0ff19 | ||
| 
						 | 
					b27c3c0940 | ||
| 
						 | 
					e8f05ac324 | ||
| 
						 | 
					279c6c3514 | ||
| 
						 | 
					61a6a0f4d9 | ||
| 
						 | 
					9e84456b46 | ||
| 
						 | 
					3d65080e28 | ||
| 
						 | 
					2cc8551386 | ||
| 
						 | 
					2140757d5b | ||
| 
						 | 
					f5226a6a7d | ||
| 
						 | 
					6addb35131 | ||
| 
						 | 
					ebba76cb92 | ||
| 
						 | 
					e3c6d81a23 | ||
| 
						 | 
					b35ecbf79c | ||
| 
						 | 
					3e3387e4bd | ||
| 
						 | 
					4b8c7fdaf3 | ||
| 
						 | 
					07dcf40d13 | ||
| 
						 | 
					1962e9265f | ||
| 
						 | 
					92b692a958 | ||
| 
						 | 
					a335813b42 | ||
| 
						 | 
					7579cf6636 | ||
| 
						 | 
					25316d8dcf | ||
| 
						 | 
					b87a28521f | ||
| 
						 | 
					e67d4e2e4f | ||
| 
						 | 
					ea8295bb6b | ||
| 
						 | 
					3dfa92e091 | ||
| 
						 | 
					9a9907b264 | ||
| 
						 | 
					e6b711b4b4 | ||
| 
						 | 
					3375222582 | ||
| 
						 | 
					b6a9284cbf | ||
| 
						 | 
					7462c2195d | ||
| 
						 | 
					01b4d0240b | ||
| 
						 | 
					663fed681d | ||
| 
						 | 
					16d02b5507 | ||
| 
						 | 
					73ba6ff27a | ||
| 
						 | 
					d2b0bf0927 | ||
| 
						 | 
					e653beee09 | ||
| 
						 | 
					3491c9b24b | ||
| 
						 | 
					e328c0fb6e | ||
| 
						 | 
					fdf1f34365 | ||
| 
						 | 
					9fe22338a9 | ||
| 
						 | 
					80ac4a55d3 | ||
| 
						 | 
					c600009722 | ||
| 
						 | 
					256e7b0f09 | ||
| 
						 | 
					ce72432039 | ||
| 
						 | 
					b3689fe297 | ||
| 
						 | 
					0b58690ddd | ||
| 
						 | 
					e598ab32cf | ||
| 
						 | 
					001892dcee | ||
| 
						 | 
					a89e1202e1 | ||
| 
						 | 
					f9c8fb727c | ||
| 
						 | 
					4a6e8c733f | ||
| 
						 | 
					de2ac24382 | ||
| 
						 | 
					e7aa01c547 | ||
| 
						 | 
					72b060e7ae | ||
| 
						 | 
					2a99a79d37 | ||
| 
						 | 
					d1e6fac1b0 | ||
| 
						 | 
					63802c98a3 | ||
| 
						 | 
					3bd8520e7c | ||
| 
						 | 
					662c15da93 | ||
| 
						 | 
					dd0fd325b8 | ||
| 
						 | 
					b772b03ef2 | ||
| 
						 | 
					eda554eb8f | ||
| 
						 | 
					2936bd1e5a | ||
| 
						 | 
					df2f86f577 | ||
| 
						 | 
					b9d1899cf2 | ||
| 
						 | 
					b01497e391 | ||
| 
						 | 
					af38681293 | ||
| 
						 | 
					022565e176 | ||
| 
						 | 
					00863d6917 | ||
| 
						 | 
					e345b3a479 | ||
| 
						 | 
					fe32723ad5 | ||
| 
						 | 
					b9d562d8f0 | ||
| 
						 | 
					83bd9499fd | ||
| 
						 | 
					d3911792ec | ||
| 
						 | 
					5c49715298 | ||
| 
						 | 
					2b3feb40ad | ||
| 
						 | 
					f7dbeaef84 | ||
| 
						 | 
					31472e3206 | ||
| 
						 | 
					2e88a8e0c3 | ||
| 
						 | 
					224d762bc6 | ||
| 
						 | 
					2fa1299391 | ||
| 
						 | 
					dad459694c | ||
| 
						 | 
					c2fa24c956 | ||
| 
						 | 
					e55ea3bd0c | ||
| 
						 | 
					ae9e6c4a56 | ||
| 
						 | 
					2a5bb034ab | ||
| 
						 | 
					49f190a471 | ||
| 
						 | 
					3f5a870877 | ||
| 
						 | 
					fd3cf1eb9f | ||
| 
						 | 
					9a49979dcb | ||
| 
						 | 
					6a11099b50 | ||
| 
						 | 
					5c5c57739a | ||
| 
						 | 
					8e663391b9 | ||
| 
						 | 
					85ccbd1382 | ||
| 
						 | 
					542ee57f93 | ||
| 
						 | 
					f3fa854074 | ||
| 
						 | 
					714feca455 | ||
| 
						 | 
					f0db66d8d8 | ||
| 
						 | 
					cd74236462 | ||
| 
						 | 
					955c95e8a8 | ||
| 
						 | 
					ebdacc013a | ||
| 
						 | 
					d08c2ecd74 | ||
| 
						 | 
					ef9b851309 | ||
| 
						 | 
					083139efa7 | ||
| 
						 | 
					bd11f7da50 | ||
| 
						 | 
					472e9268a1 | ||
| 
						 | 
					e6ce764084 | ||
| 
						 | 
					b8fcd11a62 | ||
| 
						 | 
					f35232cc52 | ||
| 
						 | 
					615b89be3a | ||
| 
						 | 
					ffa4ecd673 | ||
| 
						 | 
					5dfb28f2de | ||
| 
						 | 
					25d24ddef0 | ||
| 
						 | 
					dcc9aba4a8 | ||
| 
						 | 
					9977c009e0 | ||
| 
						 | 
					2fd45f9e31 | ||
| 
						 | 
					4f7eb88a13 | ||
| 
						 | 
					1455f04261 | ||
| 
						 | 
					9f9e4d6d6e | ||
| 
						 | 
					3ab45a57e1 | ||
| 
						 | 
					3d5485072c | ||
| 
						 | 
					8c2083955f | ||
| 
						 | 
					450c6a758f | ||
| 
						 | 
					24f3e1e758 | ||
| 
						 | 
					b9103abe96 | ||
| 
						 | 
					a7f8793454 | ||
| 
						 | 
					7b28981e9c | ||
| 
						 | 
					ca41ca955c | ||
| 
						 | 
					dd086e62cb | ||
| 
						 | 
					3e2d40d248 | ||
| 
						 | 
					bb08ec2435 | ||
| 
						 | 
					0677c24887 | ||
| 
						 | 
					29277236ca | ||
| 
						 | 
					7579957fdf | ||
| 
						 | 
					257d0d313d | ||
| 
						 | 
					4b970ef770 | ||
| 
						 | 
					6ec35e37ab | ||
| 
						 | 
					72f461f0d2 | ||
| 
						 | 
					32c7f52882 | ||
| 
						 | 
					4943b3ad20 | ||
| 
						 | 
					7eccc04e98 | ||
| 
						 | 
					88e65c36bf | ||
| 
						 | 
					5e13d86778 | ||
| 
						 | 
					0e89f8bc4d | ||
| 
						 | 
					a9a57822ef | ||
| 
						 | 
					df25b4e609 | ||
| 
						 | 
					b3ca402842 | ||
| 
						 | 
					a52d7aee73 | ||
| 
						 | 
					7214ff001a | ||
| 
						 | 
					0e731c3e8a | ||
| 
						 | 
					4f858cf7d6 | ||
| 
						 | 
					3e5f9c51f5 | ||
| 
						 | 
					8784cae01c | ||
| 
						 | 
					81a3da550f | ||
| 
						 | 
					7fc06d0750 | ||
| 
						 | 
					1e0ebe9b7f | ||
| 
						 | 
					73b7abd894 | ||
| 
						 | 
					132f7253f6 | ||
| 
						 | 
					827d581f1a | ||
| 
						 | 
					9a315c241c | ||
| 
						 | 
					5f9ddd969e | ||
| 
						 | 
					cacf7f9920 | ||
| 
						 | 
					d642729158 | ||
| 
						 | 
					6b339b636a | ||
| 
						 | 
					85468761d3 | ||
| 
						 | 
					4cabeb2e99 | ||
| 
						 | 
					f7d89b7659 | ||
| 
						 | 
					6b5c527a3e | ||
| 
						 | 
					57cbab10ac | ||
| 
						 | 
					f50c2d3049 | ||
| 
						 | 
					9957bd9b8a | ||
| 
						 | 
					e6767dc3f9 | ||
| 
						 | 
					136935d4f9 | ||
| 
						 | 
					d654b63bca | ||
| 
						 | 
					3ba4dee8a7 | ||
| 
						 | 
					d4e0a50dbb | ||
| 
						 | 
					3d4e35d942 | ||
| 
						 | 
					5dcdbcdb53 | ||
| 
						 | 
					d3a6ad1105 | ||
| 
						 | 
					f233ca3284 | ||
| 
						 | 
					f4914d9461 | ||
| 
						 | 
					433aac37da | ||
| 
						 | 
					fa34f5483e | ||
| 
						 | 
					defa748497 | ||
| 
						 | 
					c70b78d0c7 | ||
| 
						 | 
					570b0c3e6a | ||
| 
						 | 
					62a8d9b0f6 | ||
| 
						 | 
					97e1e4ce53 | ||
| 
						 | 
					b5655b530f | ||
| 
						 | 
					b2c2530a1a | ||
| 
						 | 
					c0a1139773 | ||
| 
						 | 
					e452f8e006 | ||
| 
						 | 
					7de625e004 | ||
| 
						 | 
					8106296f6c | ||
| 
						 | 
					7df901756f | ||
| 
						 | 
					b41984e153 | ||
| 
						 | 
					376c7f2545 | ||
| 
						 | 
					d5df64f949 | ||
| 
						 | 
					c9b2a66114 | ||
| 
						 | 
					530917b85e | ||
| 
						 | 
					b118e61741 | ||
| 
						 | 
					635df4dd09 | ||
| 
						 | 
					dccdc6290e | ||
| 
						 | 
					573c461aa2 | ||
| 
						 | 
					5a76eb28bf | ||
| 
						 | 
					48028a8e09 | ||
| 
						 | 
					1917531c54 | ||
| 
						 | 
					a9d2bc08b7 | ||
| 
						 | 
					e4ddd6ad8c | ||
| 
						 | 
					aaf318de03 | ||
| 
						 | 
					3c80cc0670 | ||
| 
						 | 
					a01d89db30 | ||
| 
						 | 
					26090084ff | ||
| 
						 | 
					ab0ce56033 | ||
| 
						 | 
					527854bbed | ||
| 
						 | 
					f9de846ad5 | ||
| 
						 | 
					57fbb15685 | ||
| 
						 | 
					8986107256 | ||
| 
						 | 
					2326d409a4 | ||
| 
						 | 
					bcbccd5cb1 | ||
| 
						 | 
					d47373e3b5 | ||
| 
						 | 
					9ffcfa7f41 | ||
| 
						 | 
					9a7ff92b5b | ||
| 
						 | 
					a53f2ace64 | ||
| 
						 | 
					280f6c4c9a | ||
| 
						 | 
					cc33e8fa1b | ||
| 
						 | 
					52b649b1c4 | ||
| 
						 | 
					4194412540 | ||
| 
						 | 
					9f2f0e29be | ||
| 
						 | 
					e43107ccf7 | ||
| 
						 | 
					c2ebadd87a | ||
| 
						 | 
					3521e7b0e7 | ||
| 
						 | 
					9d0aad933e | ||
| 
						 | 
					3bd3df8fb2 | ||
| 
						 | 
					71e1f5ae9d | ||
| 
						 | 
					36c3d354cd | ||
| 
						 | 
					9f0af1ba86 | ||
| 
						 | 
					f74e2262dc | ||
| 
						 | 
					2971144d7f | ||
| 
						 | 
					2e2723427b | ||
| 
						 | 
					ee6127ffcc | ||
| 
						 | 
					dcd6fa6958 | ||
| 
						 | 
					7442216962 | ||
| 
						 | 
					bb0c781daa | ||
| 
						 | 
					56e5a5ac53 | ||
| 
						 | 
					419fa4906d | ||
| 
						 | 
					16e7617b1e | ||
| 
						 | 
					2ca5798f89 | ||
| 
						 | 
					a08ddc1b8c | ||
| 
						 | 
					83153e2777 | ||
| 
						 | 
					5b72b93248 | ||
| 
						 | 
					c7d911451c | ||
| 
						 | 
					c400cc317d | ||
| 
						 | 
					50784c9958 | ||
| 
						 | 
					c4a5d406c7 | ||
| 
						 | 
					d933eef8cc | ||
| 
						 | 
					ce84069429 | ||
| 
						 | 
					8140e56cbc | ||
| 
						 | 
					de40e0e22a | ||
| 
						 | 
					44ccd111b2 | ||
| 
						 | 
					7ac0889b78 | ||
| 
						 | 
					c4a5996b21 | ||
| 
						 | 
					9eaca7bcb2 | ||
| 
						 | 
					90629aecb4 | ||
| 
						 | 
					cb6a75de3b | ||
| 
						 | 
					9bb066596c | ||
| 
						 | 
					a0b6610b7d | ||
| 
						 | 
					c4e06f90f8 | ||
| 
						 | 
					60a525f0b8 | ||
| 
						 | 
					fe6067eeed | ||
| 
						 | 
					f72294e2b9 | ||
| 
						 | 
					409b98dd39 | ||
| 
						 | 
					0168b882a8 | ||
| 
						 | 
					9aa83354bd | ||
| 
						 | 
					e311d82b0a | ||
| 
						 | 
					531e526d33 | ||
| 
						 | 
					a2a6c49ae0 | ||
| 
						 | 
					15ae6d91d9 | ||
| 
						 | 
					f3ba3706ba | ||
| 
						 | 
					0ab6ea2e26 | ||
| 
						 | 
					05d17f329f | ||
| 
						 | 
					c7e9b67698 | ||
| 
						 | 
					f654620816 | ||
| 
						 | 
					5bd4885241 | ||
| 
						 | 
					91643b06f2 | ||
| 
						 | 
					d35ec1b7c4 | ||
| 
						 | 
					d2609d11ab | ||
| 
						 | 
					014d3499f0 | ||
| 
						 | 
					edd8a412b5 | ||
| 
						 | 
					7c57eef9f7 | ||
| 
						 | 
					8df4d5d808 | ||
| 
						 | 
					98b0fd4a4f | ||
| 
						 | 
					3e8c9acb02 | ||
| 
						 | 
					d829dd01de | ||
| 
						 | 
					41803d21c9 | ||
| 
						 | 
					b58b66178c | ||
| 
						 | 
					7c40cf1fb7 | ||
| 
						 | 
					a923c62dac | ||
| 
						 | 
					00d9c91a53 | ||
| 
						 | 
					6fa101c699 | ||
| 
						 | 
					1372833dd8 | ||
| 
						 | 
					7d57750d73 | ||
| 
						 | 
					28c06706b4 | ||
| 
						 | 
					18146d2ef7 | ||
| 
						 | 
					52c65afce6 | ||
| 
						 | 
					8f76c9b09d | ||
| 
						 | 
					fffc94fbdd | ||
| 
						 | 
					1f398a8b4c | ||
| 
						 | 
					98f4010cb7 | ||
| 
						 | 
					d34e8940a7 | ||
| 
						 | 
					bbf3c33a89 | ||
| 
						 | 
					f69fee98df | ||
| 
						 | 
					f9b717965f | ||
| 
						 | 
					01ad439d0a | ||
| 
						 | 
					29ad8d9dbc | ||
| 
						 | 
					6ffad11cba | ||
| 
						 | 
					dc62840299 | ||
| 
						 | 
					ae9c669ca3 | ||
| 
						 | 
					cd4b9b3be6 | ||
| 
						 | 
					e7fc5719e3 | ||
| 
						 | 
					29350e0782 | ||
| 
						 | 
					2c9821e670 | ||
| 
						 | 
					a61050f8fa | ||
| 
						 | 
					747d25b439 | ||
| 
						 | 
					cafd36b85d | ||
| 
						 | 
					d7450d9699 | ||
| 
						 | 
					4224a02d16 | ||
| 
						 | 
					82bf21d54b | ||
| 
						 | 
					e2672d5d94 | ||
| 
						 | 
					8d30ccf6fe | ||
| 
						 | 
					be995930a0 | ||
| 
						 | 
					fbd52c5a85 | ||
| 
						 | 
					10e7a7fd27 | ||
| 
						 | 
					92a0ec03b1 | ||
| 
						 | 
					83a07f7ee4 | ||
| 
						 | 
					32628be87b | ||
| 
						 | 
					102e8964ee | ||
| 
						 | 
					742ea9f245 | ||
| 
						 | 
					25f843331c | ||
| 
						 | 
					c6680d1f03 | ||
| 
						 | 
					f5279fc91e | ||
| 
						 | 
					ba50376c85 | ||
| 
						 | 
					dd1395f3f4 | ||
| 
						 | 
					450df2ce6a | ||
| 
						 | 
					f9e384a87d | ||
| 
						 | 
					81484b7ae3 | ||
| 
						 | 
					a14809a96a | ||
| 
						 | 
					1753b01a1b | ||
| 
						 | 
					86e7924675 | ||
| 
						 | 
					e0daa923c6 | ||
| 
						 | 
					32c67d5f62 | ||
| 
						 | 
					7580706bd0 | ||
| 
						 | 
					68da5085ea | ||
| 
						 | 
					55d0c0f66b | ||
| 
						 | 
					5d35d56837 | ||
| 
						 | 
					a9b150960e | ||
| 
						 | 
					72a9e81ba1 | ||
| 
						 | 
					0032a51051 | ||
| 
						 | 
					faa9102815 | ||
| 
						 | 
					525ce59b8b | ||
| 
						 | 
					00055a9f32 | ||
| 
						 | 
					3da62e366f | ||
| 
						 | 
					66ba0fe18e | ||
| 
						 | 
					cc7a7386be | ||
| 
						 | 
					f1a89f1001 | ||
| 
						 | 
					83ad5538b0 | ||
| 
						 | 
					8e1497cf71 | ||
| 
						 | 
					9b4da63b0d | ||
| 
						 | 
					1fad5adbd2 | ||
| 
						 | 
					72497154a7 | ||
| 
						 | 
					5dcab4fe9e | ||
| 
						 | 
					d592f5eb62 | ||
| 
						 | 
					d85cbca8ea | ||
| 
						 | 
					be92ae76d6 | ||
| 
						 | 
					3cfedd4ae9 | ||
| 
						 | 
					cd88acf337 | ||
| 
						 | 
					adf628b3b0 | ||
| 
						 | 
					bbb945283b | ||
| 
						 | 
					10b7691313 | ||
| 
						 | 
					1e93556f8e | ||
| 
						 | 
					77bfb852e0 | ||
| 
						 | 
					abeb0ad82f | ||
| 
						 | 
					722304c4a1 | ||
| 
						 | 
					9e5ea8c052 | ||
| 
						 | 
					e6dc46a270 | ||
| 
						 | 
					cf0fffcc3b | ||
| 
						 | 
					64835b0de9 | ||
| 
						 | 
					ca3ae925d1 | ||
| 
						 | 
					245e17ed42 | ||
| 
						 | 
					22605323c1 | ||
| 
						 | 
					ca0e8f93f9 | ||
| 
						 | 
					8f763f9c5c | ||
| 
						 | 
					1e8e619762 | ||
| 
						 | 
					5d3d5b4c72 | ||
| 
						 | 
					81029b203e | ||
| 
						 | 
					1fbfb3970d | ||
| 
						 | 
					aa9e590574 | ||
| 
						 | 
					495ef70d41 | ||
| 
						 | 
					8d45bf6ee9 | ||
| 
						 | 
					5ea7e397c6 | ||
| 
						 | 
					70af77f06e | ||
| 
						 | 
					21da8f0274 | ||
| 
						 | 
					9be2b578a2 | ||
| 
						 | 
					bcbc640840 | ||
| 
						 | 
					a569240444 | ||
| 
						 | 
					f071b9c4f2 | ||
| 
						 | 
					681f116733 | ||
| 
						 | 
					b1bfa713e2 | ||
| 
						 | 
					8133bf1916 | ||
| 
						 | 
					7fc61cdad3 | ||
| 
						 | 
					0f926c96c8 | ||
| 
						 | 
					557409ea72 | ||
| 
						 | 
					f0a847b135 | ||
| 
						 | 
					5181b271bc | ||
| 
						 | 
					38fe00fbe0 | ||
| 
						 | 
					be100b24d1 | ||
| 
						 | 
					0ef338b1e8 | ||
| 
						 | 
					12130f8601 | ||
| 
						 | 
					dfe6c9e8e7 | ||
| 
						 | 
					cfd4d18c62 | ||
| 
						 | 
					7ee60c8986 | ||
| 
						 | 
					0fee24734d | ||
| 
						 | 
					4b7895c3ab | ||
| 
						 | 
					63610a324c | ||
| 
						 | 
					7a72daf3ec | ||
| 
						 | 
					f33acd67ec | ||
| 
						 | 
					9a5ac036d6 | ||
| 
						 | 
					e0d8094268 | ||
| 
						 | 
					1d5648f882 | ||
| 
						 | 
					d528093510 | ||
| 
						 | 
					738a11d96f | ||
| 
						 | 
					01744889fb | ||
| 
						 | 
					f5c4362f0d | ||
| 
						 | 
					268dd4d469 | ||
| 
						 | 
					41c207af14 | ||
| 
						 | 
					513b7ecd78 | ||
| 
						 | 
					83fb4663f6 | ||
| 
						 | 
					7e88993b5c | ||
| 
						 | 
					6e6b7f37b2 | ||
| 
						 | 
					a1152446d9 | ||
| 
						 | 
					3eab9b30a1 | ||
| 
						 | 
					573587b894 | ||
| 
						 | 
					adfb395492 | ||
| 
						 | 
					b4b4f09287 | ||
| 
						 | 
					31c80ff07b | ||
| 
						 | 
					d20e94b422 | ||
| 
						 | 
					1e7fefbde9 | ||
| 
						 | 
					42f68a1109 | ||
| 
						 | 
					f47c704e29 | ||
| 
						 | 
					be3cfd8d2d | ||
| 
						 | 
					d6ded9e64b | ||
| 
						 | 
					6b0704ec76 | ||
| 
						 | 
					a896ae69d0 | ||
| 
						 | 
					9ba4fe2d0f | ||
| 
						 | 
					29b904998e | ||
| 
						 | 
					bf422cb0b2 | ||
| 
						 | 
					bf87c3e3f1 | ||
| 
						 | 
					b96c6bd324 | ||
| 
						 | 
					0293318b59 | ||
| 
						 | 
					38588b8204 | ||
| 
						 | 
					f2d22e6b7f | ||
| 
						 | 
					45848306bc | ||
| 
						 | 
					b160b25d7d | ||
| 
						 | 
					d1e6d533fc | ||
| 
						 | 
					ee168ed5e2 | ||
| 
						 | 
					6c8e3d88bd | ||
| 
						 | 
					77b2e416c1 | ||
| 
						 | 
					e02eefdc8e | ||
| 
						 | 
					fd4f5ec574 | ||
| 
						 | 
					b327b38113 | ||
| 
						 | 
					76ad662f56 | ||
| 
						 | 
					4ad3c397b6 | ||
| 
						 | 
					75d2b46c7a | ||
| 
						 | 
					a7659a0c2e | ||
| 
						 | 
					e3a740f66a | ||
| 
						 | 
					af281481d5 | ||
| 
						 | 
					5f6758554d | ||
| 
						 | 
					2b2a8c1d2e | ||
| 
						 | 
					156f5aec91 | ||
| 
						 | 
					9045e5aa90 | ||
| 
						 | 
					5ca9d2f1b1 | ||
| 
						 | 
					6cb5bcfb0c | ||
| 
						 | 
					ffaff7c356 | ||
| 
						 | 
					130fc4996f | ||
| 
						 | 
					a95141048d | ||
| 
						 | 
					2d82382f34 | ||
| 
						 | 
					6afd975913 | ||
| 
						 | 
					0df0eb104c | ||
| 
						 | 
					f1c5d3605c | ||
| 
						 | 
					afed289647 | ||
| 
						 | 
					22fb1fb8c9 | ||
| 
						 | 
					5809d4efca | ||
| 
						 | 
					332e215c85 | ||
| 
						 | 
					9eefbe9fb9 | ||
| 
						 | 
					3fa86d3236 | ||
| 
						 | 
					f0e125df08 | ||
| 
						 | 
					8bf7d0efd4 | ||
| 
						 | 
					8a71dfa591 | ||
| 
						 | 
					928dee677f | ||
| 
						 | 
					bf5500eb19 | ||
| 
						 | 
					a5efb1b4b6 | ||
| 
						 | 
					5aa77a67a8 | ||
| 
						 | 
					c5c22f8dc9 | ||
| 
						 | 
					ad3ae5e6b1 | ||
| 
						 | 
					ed029ecb01 | ||
| 
						 | 
					ff45c64a22 | ||
| 
						 | 
					c953091e8d | ||
| 
						 | 
					fd30ab7168 | ||
| 
						 | 
					dca3dddba0 | ||
| 
						 | 
					41eb4c54a4 | ||
| 
						 | 
					15a2333010 | ||
| 
						 | 
					1061d2867f | ||
| 
						 | 
					64ba1f1ea1 | ||
| 
						 | 
					196cc664c8 | ||
| 
						 | 
					1d871d4d68 | ||
| 
						 | 
					89475a9838 | ||
| 
						 | 
					52d335cbfd | ||
| 
						 | 
					333ca4f36a | ||
| 
						 | 
					d2e18c5400 | ||
| 
						 | 
					f04cc92b44 | ||
| 
						 | 
					fa3a048a6c | ||
| 
						 | 
					6200034dd0 | ||
| 
						 | 
					9a25d82c48 | ||
| 
						 | 
					95e0d3953e | ||
| 
						 | 
					fb91da4b69 | ||
| 
						 | 
					74fcd2df7b | ||
| 
						 | 
					1a88a08454 | ||
| 
						 | 
					688cf579d6 | ||
| 
						 | 
					ba9ba5f55b | ||
| 
						 | 
					8341733dc2 | ||
| 
						 | 
					54f7a0f20e | ||
| 
						 | 
					b2382d91d6 | ||
| 
						 | 
					b729780ac1 | ||
| 
						 | 
					6f4c516d0c | ||
| 
						 | 
					b9bdcba4f9 | ||
| 
						 | 
					bd69863799 | ||
| 
						 | 
					375fdc444e | ||
| 
						 | 
					e832592b35 | ||
| 
						 | 
					a15d4e097e | ||
| 
						 | 
					2597d2455c | ||
| 
						 | 
					16e817d42c | ||
| 
						 | 
					c6d39a9e60 | ||
| 
						 | 
					b860f1a170 | ||
| 
						 | 
					0cebd0b7f3 | ||
| 
						 | 
					91742c1b80 | ||
| 
						 | 
					64bc79de38 | ||
| 
						 | 
					55239be477 | ||
| 
						 | 
					0feebb662f | ||
| 
						 | 
					1699f9d141 | ||
| 
						 | 
					7ac9df9496 | ||
| 
						 | 
					2074818cd0 | ||
| 
						 | 
					ecb3eaf541 | ||
| 
						 | 
					345455da4b | ||
| 
						 | 
					1937fddbfd | ||
| 
						 | 
					e7534bbcbd | ||
| 
						 | 
					305192eae6 | ||
| 
						 | 
					0541aa3373 | ||
| 
						 | 
					81fe8b7435 | ||
| 
						 | 
					4ca26b4e32 | ||
| 
						 | 
					d348a67ba8 | ||
| 
						 | 
					e2f03ee8d6 | ||
| 
						 | 
					0e64c46064 | ||
| 
						 | 
					987a4125ae | ||
| 
						 | 
					a7e4c1a5a5 | ||
| 
						 | 
					6d66982d35 | ||
| 
						 | 
					7c78e05649 | ||
| 
						 | 
					61383ef294 | ||
| 
						 | 
					469d4ec566 | ||
| 
						 | 
					418f1146b7 | ||
| 
						 | 
					170c8885d0 | ||
| 
						 | 
					e3f04f4ab8 | ||
| 
						 | 
					791b8142bd | ||
| 
						 | 
					ffff89ae96 | ||
| 
						 | 
					3c8b0f6308 | ||
| 
						 | 
					a01aa8c335 | ||
| 
						 | 
					1dc1e6f081 | ||
| 
						 | 
					b86447cdbf | ||
| 
						 | 
					bf1e805269 | ||
| 
						 | 
					0b0d551730 | ||
| 
						 | 
					22016d2856 | ||
| 
						 | 
					6ef5d66521 | ||
| 
						 | 
					bbf80408d4 | ||
| 
						 | 
					f7c7614625 | ||
| 
						 | 
					c5e71230e3 | ||
| 
						 | 
					d61e15a02c | ||
| 
						 | 
					981d286e13 | ||
| 
						 | 
					f58c3e9a67 | ||
| 
						 | 
					c316c381f8 | ||
| 
						 | 
					066ae678f9 | ||
| 
						 | 
					c3a75a5525 | ||
| 
						 | 
					14257ba448 | ||
| 
						 | 
					2c7e86fa97 | ||
| 
						 | 
					63d7b7a471 | ||
| 
						 | 
					98a882f450 | ||
| 
						 | 
					868fd1ddc5 | ||
| 
						 | 
					9c19819a08 | ||
| 
						 | 
					62ef634bc0 | ||
| 
						 | 
					f4158deb0a | ||
| 
						 | 
					e61a224fc6 | ||
| 
						 | 
					c83fb868e4 | ||
| 
						 | 
					0a118f1740 | ||
| 
						 | 
					d5d6edd2fb | ||
| 
						 | 
					e17382f441 | ||
| 
						 | 
					6c6fe5378f | ||
| 
						 | 
					b68a31b2ee | ||
| 
						 | 
					0be362e82c | ||
| 
						 | 
					17a917ad00 | ||
| 
						 | 
					f975fbf221 | ||
| 
						 | 
					1741813003 | ||
| 
						 | 
					7e7e24021b | ||
| 
						 | 
					a662106228 | ||
| 
						 | 
					be98a562d4 | ||
| 
						 | 
					2af4692e1a | ||
| 
						 | 
					b525ac18bc | ||
| 
						 | 
					3fdca1ba64 | ||
| 
						 | 
					9cc721bf80 | ||
| 
						 | 
					d9cbd5d173 | ||
| 
						 | 
					59f5cb9d35 | ||
| 
						 | 
					bd020c14fb | ||
| 
						 | 
					7b9f814d37 | ||
| 
						 | 
					7a6fe30ee5 | ||
| 
						 | 
					9910adbb40 | ||
| 
						 | 
					ad6a578863 | ||
| 
						 | 
					365120ed9f | ||
| 
						 | 
					dbd0541ad1 | ||
| 
						 | 
					7ce16856ec | ||
| 
						 | 
					8fff3e4ec0 | ||
| 
						 | 
					53f559a750 | ||
| 
						 | 
					924fc30697 | ||
| 
						 | 
					41955f8927 | ||
| 
						 | 
					83689f420c | ||
| 
						 | 
					1c68a0fd4b | ||
| 
						 | 
					9e25db7089 | ||
| 
						 | 
					7eacd54a9c | ||
| 
						 | 
					be44519431 | ||
| 
						 | 
					66f35b2720 | ||
| 
						 | 
					23902d2465 | ||
| 
						 | 
					1c3717edef | ||
| 
						 | 
					17fa0f3eb0 | ||
| 
						 | 
					247e19f1e3 | ||
| 
						 | 
					54fae816d2 | ||
| 
						 | 
					3b70a2cc2d | ||
| 
						 | 
					acd4a16dcb | ||
| 
						 | 
					550c84c367 | ||
| 
						 | 
					e35e0be251 | ||
| 
						 | 
					db5ada2cfb | ||
| 
						 | 
					643f452064 | ||
| 
						 | 
					bbda6c6785 | ||
| 
						 | 
					e6449cd818 | ||
| 
						 | 
					708527db77 | ||
| 
						 | 
					b1aa6c5699 | ||
| 
						 | 
					eeaa1a7f07 | ||
| 
						 | 
					52b7183935 | ||
| 
						 | 
					386833ae64 | ||
| 
						 | 
					d4a48ce585 | ||
| 
						 | 
					4931cdd272 | ||
| 
						 | 
					d7933dc73f | ||
| 
						 | 
					9a1048cc17 | ||
| 
						 | 
					a8fd0736b3 | ||
| 
						 | 
					10d884a837 | ||
| 
						 | 
					52b28c79c7 | ||
| 
						 | 
					8a36e55813 | ||
| 
						 | 
					5103bb2697 | ||
| 
						 | 
					c6a07714ba | ||
| 
						 | 
					48c3500033 | ||
| 
						 | 
					d155e75a5d | ||
| 
						 | 
					fa481129a9 | ||
| 
						 | 
					3c1402dab7 | ||
| 
						 | 
					a7f4189bd3 | ||
| 
						 | 
					64ed13de7c | ||
| 
						 | 
					21394eb29e | ||
| 
						 | 
					fbb8c3613f | ||
| 
						 | 
					7778da80d5 | ||
| 
						 | 
					e791e102d5 | ||
| 
						 | 
					deb73450c3 | ||
| 
						 | 
					cc9d1bf4f2 | ||
| 
						 | 
					b025ef8b22 | ||
| 
						 | 
					7bda0f400a | ||
| 
						 | 
					3b7a113a11 | ||
| 
						 | 
					ee636bf88c | ||
| 
						 | 
					52144d8e52 | ||
| 
						 | 
					513c686dea | ||
| 
						 | 
					29cc2429ae | ||
| 
						 | 
					31219e9ac1 | ||
| 
						 | 
					3beab5a9e1 | ||
| 
						 | 
					7558311531 | ||
| 
						 | 
					106d08a899 | ||
| 
						 | 
					02f203475d | ||
| 
						 | 
					b4460eddf7 | ||
| 
						 | 
					90e06116d1 | ||
| 
						 | 
					1e4397ed7b | ||
| 
						 | 
					e9cc2d0e52 | ||
| 
						 | 
					376847b489 | ||
| 
						 | 
					5d61b83c50 | ||
| 
						 | 
					561b3a594b | ||
| 
						 | 
					2d0acb68b1 | ||
| 
						 | 
					919c6c40e2 | ||
| 
						 | 
					120e9da1c9 | ||
| 
						 | 
					47c6454c00 | ||
| 
						 | 
					02f49cd392 | ||
| 
						 | 
					8117ddb6ce | ||
| 
						 | 
					d372fa8e6e | ||
| 
						 | 
					c3ed865a3a | ||
| 
						 | 
					96c137ec4b | ||
| 
						 | 
					c5cd683aa5 | ||
| 
						 | 
					c5cdabaa3a | ||
| 
						 | 
					d19be3f2cb | ||
| 
						 | 
					a9f55aa64f | ||
| 
						 | 
					dfb0f79c92 | ||
| 
						 | 
					4a59438c0c | ||
| 
						 | 
					f35710d652 | ||
| 
						 | 
					c19a532f3e | ||
| 
						 | 
					be6b278b3c | ||
| 
						 | 
					78c16dc278 | ||
| 
						 | 
					09d2839a00 | ||
| 
						 | 
					d17d52436f | ||
| 
						 | 
					5c522a33d0 | ||
| 
						 | 
					c9cf89adeb | ||
| 
						 | 
					c5c996cb7a | ||
| 
						 | 
					f2ec258e7a | ||
| 
						 | 
					8c29f21970 | ||
| 
						 | 
					5b730d2c38 | ||
| 
						 | 
					609e84a8ae | ||
| 
						 | 
					7ca778f81b | ||
| 
						 | 
					93b194af3b | ||
| 
						 | 
					b3e1f32ffe | ||
| 
						 | 
					d78b3bffeb | ||
| 
						 | 
					bff5038a64 | ||
| 
						 | 
					0c7fcfbcc5 | ||
| 
						 | 
					9d6fc15959 | ||
| 
						 | 
					5bad5e1031 | ||
| 
						 | 
					f8d6ec3a8f | ||
| 
						 | 
					9a3dc81630 | ||
| 
						 | 
					3d9b97ccb5 | ||
| 
						 | 
					2c3dbba052 | ||
| 
						 | 
					907eecd030 | ||
| 
						 | 
					75026bf42d | ||
| 
						 | 
					d217fb33a9 | ||
| 
						 | 
					8cea32d01b | ||
| 
						 | 
					c8d2da0c07 | ||
| 
						 | 
					a458f51b9a | ||
| 
						 | 
					bd8ac2935b | ||
| 
						 | 
					dd59cc1468 | ||
| 
						 | 
					fd365c52cc | ||
| 
						 | 
					ad7e77a067 | ||
| 
						 | 
					6b9135a205 | ||
| 
						 | 
					fdca5b1c60 | ||
| 
						 | 
					f891b30f9f | ||
| 
						 | 
					8fbd8070f2 | ||
| 
						 | 
					657dec1c10 | ||
| 
						 | 
					0d93dcdc45 | ||
| 
						 | 
					5a50c0e1e6 | ||
| 
						 | 
					ab8da89fbc | ||
| 
						 | 
					c9edf47643 | ||
| 
						 | 
					84328bf693 | ||
| 
						 | 
					6fdbf0b48e | ||
| 
						 | 
					8b1d5b3cb4 | ||
| 
						 | 
					bf69d23379 | ||
| 
						 | 
					a4e3031796 | ||
| 
						 | 
					286e7956f2 | ||
| 
						 | 
					e04b64a326 | ||
| 
						 | 
					c86a99df06 | ||
| 
						 | 
					3b69c4e7c1 | ||
| 
						 | 
					bc5be9449d | ||
| 
						 | 
					b968e59db1 | ||
| 
						 | 
					fa06c4a729 | ||
| 
						 | 
					81b99515cd | ||
| 
						 | 
					5e6c713f9d | ||
| 
						 | 
					376425cc98 | ||
| 
						 | 
					38cff550e1 | ||
| 
						 | 
					64781c1cca | ||
| 
						 | 
					e82e85b5ea | ||
| 
						 | 
					2b84a27cdc | ||
| 
						 | 
					6f7f5cbabc | ||
| 
						 | 
					174a8696b0 | ||
| 
						 | 
					d5a27ba814 | ||
| 
						 | 
					6e2e488565 | ||
| 
						 | 
					7d02ef2b3e | ||
| 
						 | 
					f8f2719c5d | ||
| 
						 | 
					da6faaf1a5 | ||
| 
						 | 
					350068d6f1 | ||
| 
						 | 
					70bee4265b | ||
| 
						 | 
					18ce8cf2f4 | ||
| 
						 | 
					b50a55cce7 | ||
| 
						 | 
					e6f0e18aed | ||
| 
						 | 
					fd7daa407a | ||
| 
						 | 
					0dead93606 | ||
| 
						 | 
					5d6e8cf9b3 | ||
| 
						 | 
					a0544e21e3 | ||
| 
						 | 
					d54112d41c | ||
| 
						 | 
					1a0ba40b43 | ||
| 
						 | 
					5d8ca9566a | ||
| 
						 | 
					834fa719b2 | ||
| 
						 | 
					89bde2739a | ||
| 
						 | 
					46dbc9ae62 | ||
| 
						 | 
					71554fca59 | ||
| 
						 | 
					1c76b5886f | ||
| 
						 | 
					5007b70683 | ||
| 
						 | 
					5694cbd945 | ||
| 
						 | 
					eee3c34dd7 | ||
| 
						 | 
					cac39ad539 | ||
| 
						 | 
					1b68cdf7db | ||
| 
						 | 
					845c9a0f2e | ||
| 
						 | 
					24c69af942 | ||
| 
						 | 
					c656bc4bb6 | ||
| 
						 | 
					025b60e564 | ||
| 
						 | 
					1e86964d8f | ||
| 
						 | 
					61d4d7005e | ||
| 
						 | 
					d0ed9faf50 | ||
| 
						 | 
					8ed12170de | ||
| 
						 | 
					d2ba5cbe4d | ||
| 
						 | 
					6b6d3c7307 | ||
| 
						 | 
					362b5b9c69 | ||
| 
						 | 
					3cde12e893 | ||
| 
						 | 
					d2214480f6 | ||
| 
						 | 
					b8bd1a8ae6 | ||
| 
						 | 
					0bfef0c2ce | ||
| 
						 | 
					f2ce98fda5 | ||
| 
						 | 
					5f08215571 | ||
| 
						 | 
					9567a6ddf9 | ||
| 
						 | 
					4416c56884 | ||
| 
						 | 
					68328a9449 | ||
| 
						 | 
					141f2a3f39 | ||
| 
						 | 
					7bbca06033 | ||
| 
						 | 
					ebb72265b9 | ||
| 
						 | 
					c98f433da6 | ||
| 
						 | 
					2346ef7089 | ||
| 
						 | 
					8aac6474da | ||
| 
						 | 
					ffcecf38c8 | ||
| 
						 | 
					77342206b1 | ||
| 
						 | 
					b6a44e7a7c | ||
| 
						 | 
					e138d357c7 | ||
| 
						 | 
					66645982e9 | ||
| 
						 | 
					4347f55077 | ||
| 
						 | 
					ab9d45c775 | ||
| 
						 | 
					9c0c662f25 | ||
| 
						 | 
					63abdb2d53 | ||
| 
						 | 
					47e2693368 | ||
| 
						 | 
					b909cbe666 | ||
| 
						 | 
					95f5ce13ba | ||
| 
						 | 
					fed1496e68 | ||
| 
						 | 
					da6993730c | ||
| 
						 | 
					0a1d462ace | ||
| 
						 | 
					1387482db0 | ||
| 
						 | 
					b7a86324dd | ||
| 
						 | 
					babc5a6424 | ||
| 
						 | 
					74a468383c | ||
| 
						 | 
					3a48f0ff0d | ||
| 
						 | 
					e26363adf6 | ||
| 
						 | 
					35d97d42c5 | ||
| 
						 | 
					4fa7d07500 | ||
| 
						 | 
					15f428528b | ||
| 
						 | 
					7fa805fe3a | ||
| 
						 | 
					fd9c97a126 | ||
| 
						 | 
					f081154804 | ||
| 
						 | 
					866affdf45 | ||
| 
						 | 
					30aee556f1 | ||
| 
						 | 
					b12c18aa08 | ||
| 
						 | 
					f17a47d088 | ||
| 
						 | 
					d79f096749 | ||
| 
						 | 
					5b82b91c6a | ||
| 
						 | 
					4a6b87ac1c | ||
| 
						 | 
					1bea06354e | ||
| 
						 | 
					5fbd5aaf10 | ||
| 
						 | 
					0290a6d918 | ||
| 
						 | 
					2576c48441 | ||
| 
						 | 
					eb02dd2986 | ||
| 
						 | 
					d92570fa3b | ||
| 
						 | 
					38c988d2a2 | ||
| 
						 | 
					0927282d41 | ||
| 
						 | 
					5ffd59619c | ||
| 
						 | 
					a739926ad4 | ||
| 
						 | 
					e41c38f41d | ||
| 
						 | 
					2de05b84aa | ||
| 
						 | 
					0e9bdef9ca | ||
| 
						 | 
					8e70e005c1 | ||
| 
						 | 
					3817dbc925 | ||
| 
						 | 
					63ec669c52 | ||
| 
						 | 
					afc5702796 | ||
| 
						 | 
					41ec66b58a | ||
| 
						 | 
					936d3ca7fc | ||
| 
						 | 
					f8b4b7b74d | ||
| 
						 | 
					bd865977b0 | ||
| 
						 | 
					d056db5617 | ||
| 
						 | 
					7685677ada | ||
| 
						 | 
					eb0aa81492 | ||
| 
						 | 
					dc52531f28 | ||
| 
						 | 
					5a20034b9f | ||
| 
						 | 
					5cd0ef0d8a | ||
| 
						 | 
					4daf47bb5f | ||
| 
						 | 
					3e0dbd8433 | ||
| 
						 | 
					fc4d3b24f6 | ||
| 
						 | 
					3a9eab55a4 | ||
| 
						 | 
					546b34275d | ||
| 
						 | 
					3ee4cf27d5 | ||
| 
						 | 
					87da95b9a4 | ||
| 
						 | 
					3368e30e15 | ||
| 
						 | 
					f1ea5ad8f1 | ||
| 
						 | 
					fa2d5f8492 | ||
| 
						 | 
					0f2c5de161 | ||
| 
						 | 
					b69937d4fd | ||
| 
						 | 
					e82faacbb2 | ||
| 
						 | 
					2ab5c67545 | ||
| 
						 | 
					358d01b12e | ||
| 
						 | 
					95460fabbb | ||
| 
						 | 
					0fb882b3ad | ||
| 
						 | 
					3d0382d279 | ||
| 
						 | 
					59d5aa4515 | ||
| 
						 | 
					2dff9f9b17 | ||
| 
						 | 
					03fded672e | ||
| 
						 | 
					a21c1f5329 | ||
| 
						 | 
					37815ced63 | ||
| 
						 | 
					b7f9b8d668 | ||
| 
						 | 
					f68af78099 | ||
| 
						 | 
					027abffa01 | ||
| 
						 | 
					5dfba4dd5e | ||
| 
						 | 
					d0ae7e9cf9 | ||
| 
						 | 
					5a57e984de | ||
| 
						 | 
					473f4d7c24 | ||
| 
						 | 
					35bfea2dbd | ||
| 
						 | 
					62cb30cb5b | ||
| 
						 | 
					9d2eb6f18b | ||
| 
						 | 
					d5cd57c26d | ||
| 
						 | 
					37695735e0 | ||
| 
						 | 
					c15625c063 | ||
| 
						 | 
					cd65bd4c2a | ||
| 
						 | 
					fc3fead235 | ||
| 
						 | 
					2e00282560 | ||
| 
						 | 
					54d740e861 | ||
| 
						 | 
					478a849e8d | ||
| 
						 | 
					82c5b35d07 | ||
| 
						 | 
					6cdd4cba9e | ||
| 
						 | 
					dda9469874 | ||
| 
						 | 
					334fbdab3f | ||
| 
						 | 
					a5f8e34ee6 | ||
| 
						 | 
					eba54d0906 | ||
| 
						 | 
					070c40a958 | ||
| 
						 | 
					8d308cae5e | ||
| 
						 | 
					848e9fcf99 | ||
| 
						 | 
					d146776b17 | ||
| 
						 | 
					7da16a7428 | ||
| 
						 | 
					7b46145114 | ||
| 
						 | 
					725f0f789a | ||
| 
						 | 
					772a5438aa | ||
| 
						 | 
					3c276b329b | ||
| 
						 | 
					e2cde71831 | ||
| 
						 | 
					861ee3250d | ||
| 
						 | 
					5672ccfa37 | ||
| 
						 | 
					65e691cda8 | ||
| 
						 | 
					56cca8b529 | ||
| 
						 | 
					367f2f656e | ||
| 
						 | 
					7f806bd155 | ||
| 
						 | 
					a70444e3c7 | ||
| 
						 | 
					1a72033571 | ||
| 
						 | 
					a475407c27 | ||
| 
						 | 
					b602cd92a9 | ||
| 
						 | 
					2878a4a524 | ||
| 
						 | 
					8b1ac63343 | ||
| 
						 | 
					8d1012c9fb | ||
| 
						 | 
					62f2654358 | ||
| 
						 | 
					e7feb4b2c5 | ||
| 
						 | 
					dcc62b32a2 | ||
| 
						 | 
					26eecd11b6 | ||
| 
						 | 
					8d388bbd4b | ||
| 
						 | 
					409635b00c | ||
| 
						 | 
					17a71ddbf6 | ||
| 
						 | 
					d2a86af0e2 | ||
| 
						 | 
					f23dc928b2 | ||
| 
						 | 
					68e11dc222 | ||
| 
						 | 
					075c3ef9ca | ||
| 
						 | 
					6b004a3992 | ||
| 
						 | 
					3cf198538a | ||
| 
						 | 
					612400944e | ||
| 
						 | 
					5f22d2427e | ||
| 
						 | 
					2692967b7d | ||
| 
						 | 
					2ed85ab978 | ||
| 
						 | 
					f843872a14 | ||
| 
						 | 
					b365b9d15b | ||
| 
						 | 
					938ff926c3 | ||
| 
						 | 
					7a1a6354df | ||
| 
						 | 
					37e9d8242b | ||
| 
						 | 
					8bf03f2809 | ||
| 
						 | 
					c684a5b0d0 | ||
| 
						 | 
					3281461809 | ||
| 
						 | 
					2cd5cf505d | ||
| 
						 | 
					42334450bf | ||
| 
						 | 
					410633c873 | ||
| 
						 | 
					ee67baf0b4 | ||
| 
						 | 
					7afa959e6c | ||
| 
						 | 
					ca0db95910 | ||
| 
						 | 
					9825a84880 | ||
| 
						 | 
					68260f3d85 | ||
| 
						 | 
					d25fcfadc1 | ||
| 
						 | 
					7059c1bb31 | ||
| 
						 | 
					a4ac0af6e1 | ||
| 
						 | 
					205a3bea44 | ||
| 
						 | 
					748a69b3bd | ||
| 
						 | 
					be36c3dd0b | ||
| 
						 | 
					13384ed93f | ||
| 
						 | 
					92b8a36019 | ||
| 
						 | 
					225786e07f | ||
| 
						 | 
					8c8cf44ed6 | ||
| 
						 | 
					c3e6e657c9 | ||
| 
						 | 
					04185ea07b | ||
| 
						 | 
					49794e05d0 | ||
| 
						 | 
					b2be1a7bcc | ||
| 
						 | 
					2d167c9c2e | ||
| 
						 | 
					5251ba9b3f | ||
| 
						 | 
					df443003e4 | ||
| 
						 | 
					3719b1ed40 | ||
| 
						 | 
					d4a246ea59 | ||
| 
						 | 
					c77b0f5924 | ||
| 
						 | 
					bb1165ecf9 | ||
| 
						 | 
					93d2e8e0d5 | ||
| 
						 | 
					b0db765f25 | ||
| 
						 | 
					68a3786fb8 | ||
| 
						 | 
					9103ba6af1 | ||
| 
						 | 
					dd8e89234c | ||
| 
						 | 
					bcb358cc8b | ||
| 
						 | 
					f42c59669f | ||
| 
						 | 
					d656860b2e | ||
| 
						 | 
					30744e402a | ||
| 
						 | 
					43bac6f3e6 | ||
| 
						 | 
					dae4371a3f | ||
| 
						 | 
					990c2f796e | ||
| 
						 | 
					89c3a4f8b1 | ||
| 
						 | 
					ca12884735 | ||
| 
						 | 
					07e907b599 | ||
| 
						 | 
					e0bdd1e0b2 | ||
| 
						 | 
					595b1a3c62 | ||
| 
						 | 
					236392299b | ||
| 
						 | 
					418b2e7668 | ||
| 
						 | 
					052694dbde | ||
| 
						 | 
					d529a105c5 | ||
| 
						 | 
					40d877682b | ||
| 
						 | 
					5e324f19ae | ||
| 
						 | 
					9d8b9cbd04 | ||
| 
						 | 
					54e5180732 | ||
| 
						 | 
					dbf959782f | ||
| 
						 | 
					33114ca3c8 | ||
| 
						 | 
					4c2aebc7c1 | ||
| 
						 | 
					b51470f999 | ||
| 
						 | 
					b2be5f3706 | ||
| 
						 | 
					06eb347cf8 | ||
| 
						 | 
					81c5c1d86a | ||
| 
						 | 
					82858b7b92 | ||
| 
						 | 
					b3506aec3c | ||
| 
						 | 
					de6e9c6f11 | ||
| 
						 | 
					d3ff1aa17a | ||
| 
						 | 
					3cde6d0bff | ||
| 
						 | 
					bfade31849 | ||
| 
						 | 
					3a06820f1e | ||
| 
						 | 
					c5f712359d | ||
| 
						 | 
					c9cca85db3 | ||
| 
						 | 
					07b203b719 | ||
| 
						 | 
					a636c745e4 | ||
| 
						 | 
					e9024312a7 | ||
| 
						 | 
					edbe3c164f | ||
| 
						 | 
					8991cb5a96 | ||
| 
						 | 
					b4aa5aead5 | ||
| 
						 | 
					873a8fd229 | ||
| 
						 | 
					d0ddc58160 | ||
| 
						 | 
					6eebfed609 | ||
| 
						 | 
					09b7b8633e | ||
| 
						 | 
					c93326d218 | ||
| 
						 | 
					a03c5c0ecf | ||
| 
						 | 
					0380251294 | ||
| 
						 | 
					d8f857e05d | ||
| 
						 | 
					7a06a2b192 | ||
| 
						 | 
					771db8c3ad | ||
| 
						 | 
					9a800639e6 | ||
| 
						 | 
					550c7b1805 | ||
| 
						 | 
					ad7c7ffa66 | ||
| 
						 | 
					57978bd152 | ||
| 
						 | 
					5cd72a538c | ||
| 
						 | 
					d439169c63 | ||
| 
						 | 
					da39e0ded6 | ||
| 
						 | 
					823fae5eac | ||
| 
						 | 
					4f3a7c47e3 | ||
| 
						 | 
					bd8d480e07 | ||
| 
						 | 
					a09c031dbe | ||
| 
						 | 
					1fee94846d | ||
| 
						 | 
					4fb37525d5 | ||
| 
						 | 
					8f25557f20 | ||
| 
						 | 
					cb47eabed9 | ||
| 
						 | 
					f8823a4c5a | ||
| 
						 | 
					7fdd5964cc | ||
| 
						 | 
					3aadcaef0f | ||
| 
						 | 
					f58d4f349b | ||
| 
						 | 
					9bb8ec0b66 | ||
| 
						 | 
					ec9a14d63b | ||
| 
						 | 
					82a00f4d1e | ||
| 
						 | 
					af97f88d0a | ||
| 
						 | 
					e27351481b | ||
| 
						 | 
					4c375e2d0a | ||
| 
						 | 
					53cd49d4e8 | ||
| 
						 | 
					e36942180e | ||
| 
						 | 
					6b58c88118 | ||
| 
						 | 
					d20777ed18 | ||
| 
						 | 
					202e389c20 | ||
| 
						 | 
					707a5b2033 | ||
| 
						 | 
					0967c93dde | ||
| 
						 | 
					b13849a427 | ||
| 
						 | 
					d0322c7bda | ||
| 
						 | 
					494a4e90d6 | ||
| 
						 | 
					d1968a2e69 | ||
| 
						 | 
					51e6909f77 | ||
| 
						 | 
					cec46faf19 | ||
| 
						 | 
					53f880ab97 | ||
| 
						 | 
					cc20b0a7c0 | ||
| 
						 | 
					efac88db4c | ||
| 
						 | 
					2e1c076b5f | ||
| 
						 | 
					5a03df6ee9 | ||
| 
						 | 
					ade5893183 | ||
| 
						 | 
					8a17e737f9 | ||
| 
						 | 
					94c1ff3731 | ||
| 
						 | 
					4e5fe2fc91 | ||
| 
						 | 
					f88ed31e38 | ||
| 
						 | 
					7df51c161b | ||
| 
						 | 
					b5d1686c12 | ||
| 
						 | 
					a1048b3243 | ||
| 
						 | 
					f9090e261d | ||
| 
						 | 
					4029f168df | ||
| 
						 | 
					7965e7c742 | ||
| 
						 | 
					932e6731c9 | ||
| 
						 | 
					3c3eb5209b | ||
| 
						 | 
					a07d6b3172 | ||
| 
						 | 
					253f742332 | ||
| 
						 | 
					35e262293d | ||
| 
						 | 
					972ea9f5ed | ||
| 
						 | 
					0c1191e362 | ||
| 
						 | 
					426e48325c | ||
| 
						 | 
					6c86825732 | ||
| 
						 | 
					e0cae78827 | ||
| 
						 | 
					09d3643b19 | ||
| 
						 | 
					ed93d5b4f2 | ||
| 
						 | 
					f0d7d84f8e | ||
| 
						 | 
					05fab4c45c | ||
| 
						 | 
					3059ec9941 | ||
| 
						 | 
					892872869b | ||
| 
						 | 
					0db7ed4a33 | ||
| 
						 | 
					54e12db08b | ||
| 
						 | 
					6fb90f0c8e | ||
| 
						 | 
					5f3257a83b | ||
| 
						 | 
					f333595817 | ||
| 
						 | 
					cc1018c65d | ||
| 
						 | 
					1c16a5f4a0 | ||
| 
						 | 
					0ad7bf9036 | ||
| 
						 | 
					1670c0bc08 | ||
| 
						 | 
					f1c4276d06 | ||
| 
						 | 
					50bfbbd755 | ||
| 
						 | 
					f5afafe26a | ||
| 
						 | 
					c524777505 | ||
| 
						 | 
					8155baa07d | ||
| 
						 | 
					32c56dcf6a | ||
| 
						 | 
					9e982dca37 | ||
| 
						 | 
					6f25ece72d | ||
| 
						 | 
					b28023bec2 | ||
| 
						 | 
					0df8baa7bf | ||
| 
						 | 
					14c647ca46 | ||
| 
						 | 
					f2ff82c810 | ||
| 
						 | 
					2ce9f55f28 | ||
| 
						 | 
					4c3c1ac56e | ||
| 
						 | 
					4aa14a14a2 | ||
| 
						 | 
					a398fae023 | ||
| 
						 | 
					100bd648a9 | ||
| 
						 | 
					348c5c31c0 | ||
| 
						 | 
					7556e5560d | ||
| 
						 | 
					931afc3dd2 | ||
| 
						 | 
					b25244aa9a | ||
| 
						 | 
					abe3a2ccb6 | ||
| 
						 | 
					f7a80da21b | ||
| 
						 | 
					e11f0293fe | ||
| 
						 | 
					5ec617a778 | ||
| 
						 | 
					eb86966d33 | ||
| 
						 | 
					e44014a1a9 | 
							
								
								
									
										8
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
# These are supported funding model platforms
 | 
			
		||||
 | 
			
		||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
 | 
			
		||||
patreon: cutls
 | 
			
		||||
open_collective: # Replace with a single Open Collective username
 | 
			
		||||
ko_fi: # Replace with a single Ko-fi username
 | 
			
		||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
 | 
			
		||||
custom: https://www.pixiv.net/fanbox/creator/28105985
 | 
			
		||||
							
								
								
									
										27
									
								
								.github/ISSUE_TEMPLATE/bug-report-english.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,27 @@
 | 
			
		||||
---
 | 
			
		||||
name: Bug report English
 | 
			
		||||
about: Create a report to help us improve
 | 
			
		||||
title: ''
 | 
			
		||||
labels: "\U0001F41Bbug"
 | 
			
		||||
assignees: ''
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
Describe the bug: a clear and concise description of what the bug is.
 | 
			
		||||
 | 
			
		||||
**To Reproduce**
 | 
			
		||||
Steps to reproduce the behavior:
 | 
			
		||||
1. Click on '....'
 | 
			
		||||
2. See error
 | 
			
		||||
 | 
			
		||||
**Expected behavior**
 | 
			
		||||
A clear and concise description of what you expected to happen.
 | 
			
		||||
 | 
			
		||||
**Environment**
 | 
			
		||||
 - OS: [e.g. macOS High Sierra , Windows 10 Pro 1903, Ubuntu 19.04]
 | 
			
		||||
 - Version: [e.g. Usamin (18.0.0)]  
 | 
			
		||||
Check at 'Application,' 'About TheDesk' at top of the window.
 | 
			
		||||
- Your instance: [e.g. mastodon.social]
 | 
			
		||||
 | 
			
		||||
**Additional context**
 | 
			
		||||
Add any other context about the problem here.
 | 
			
		||||
							
								
								
									
										27
									
								
								.github/ISSUE_TEMPLATE/bug-report-japanese----------.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,27 @@
 | 
			
		||||
---
 | 
			
		||||
name: Bug report Japanese(日本語のバグ報告)
 | 
			
		||||
about: 迅速なバグ撲滅のために
 | 
			
		||||
title: ''
 | 
			
		||||
labels: "\U0001F41Bbug"
 | 
			
		||||
assignees: ''
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
バグの簡単な説明を最初に入れます。
 | 
			
		||||
 | 
			
		||||
**再現方法**
 | 
			
		||||
このようにするとバグが発生しました。
 | 
			
		||||
1. '....'をクリックすると
 | 
			
		||||
2. エラーが出ます
 | 
			
		||||
 | 
			
		||||
**本来の挙動**
 | 
			
		||||
本来どのように動くのが望ましいかを記入
 | 
			
		||||
 | 
			
		||||
**環境**
 | 
			
		||||
 - OS: [例 macOS High Sierra , Windows 10 Pro 1903, Ubuntu 19.04]
 | 
			
		||||
 - バージョン: [例 Usamin (18.0.0)]  
 | 
			
		||||
TheDesk画面上部の「アプリケーション」から「TheDeskについて」で確認
 | 
			
		||||
- インスタンス: [例. mastodon.social]
 | 
			
		||||
 | 
			
		||||
**追記**
 | 
			
		||||
追記
 | 
			
		||||
							
								
								
									
										17
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -3,10 +3,7 @@
 | 
			
		||||
*.7z
 | 
			
		||||
*.exe
 | 
			
		||||
TheDesk-*
 | 
			
		||||
app/build
 | 
			
		||||
build
 | 
			
		||||
make.js
 | 
			
		||||
make_js.js
 | 
			
		||||
build/*
 | 
			
		||||
app/.DS_Store
 | 
			
		||||
.DS_Store
 | 
			
		||||
.vs/*
 | 
			
		||||
@@ -15,3 +12,15 @@ enq.md
 | 
			
		||||
app/.tkn
 | 
			
		||||
app/node_modules
 | 
			
		||||
app/js/login/tkn.js
 | 
			
		||||
app/view/en
 | 
			
		||||
app/view/ja
 | 
			
		||||
app/view/ja-KS
 | 
			
		||||
app/view/de
 | 
			
		||||
app/view/bg
 | 
			
		||||
app/view/cs
 | 
			
		||||
app/view/ps
 | 
			
		||||
app/view/es-AR
 | 
			
		||||
app/git
 | 
			
		||||
*.code-workspace
 | 
			
		||||
releasenote.md
 | 
			
		||||
app/yarn-error.log
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										59
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						@@ -1,33 +1,54 @@
 | 
			
		||||
os: windows
 | 
			
		||||
os: 
 | 
			
		||||
 - windows
 | 
			
		||||
 - linux
 | 
			
		||||
 - osx
 | 
			
		||||
language: node_js
 | 
			
		||||
env:
 | 
			
		||||
  - YARN_GPG=no
 | 
			
		||||
node_js:
 | 
			
		||||
- '10.15.2'
 | 
			
		||||
cache:
 | 
			
		||||
  yarn: true
 | 
			
		||||
script: node -v
 | 
			
		||||
before_deploy:
 | 
			
		||||
  - yarn global add electron-builder
 | 
			
		||||
  - cd app
 | 
			
		||||
  - npm install electron-builder -g
 | 
			
		||||
  - npm install
 | 
			
		||||
  - electron-builder --win --ia32
 | 
			
		||||
  - mv ../build/TheDesk-setup.exe ../TheDesk-setup-ia32.exe
 | 
			
		||||
  - mv ../build/TheDesk*.exe ../TheDesk-ia32.exe
 | 
			
		||||
  - electron-builder --win --x64
 | 
			
		||||
  - mv ../build/TheDesk-setup.exe ../TheDesk-setup.exe
 | 
			
		||||
  - mv ../build/TheDesk*.exe ../TheDesk.exe
 | 
			
		||||
  - VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')
 | 
			
		||||
  - yarn install --no-lockfile --prod
 | 
			
		||||
  - yarn construct
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "osx" ];then electron-builder --mac -p never;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "linux" ];then electron-builder --linux --x64 -p never;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../build;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "linux" ];then ls;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "linux" ];then mv thedesk-*.zip thedesk.zip;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "linux" ];then cd ../app;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then yarn add electron-builder;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then electron-builder --win --ia32 -p never;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../build;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then ls;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then mv TheDesk-setup.exe TheDesk-setup-ia32.exe;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then mv *$VERSION.exe TheDesk-ia32.exe;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../app;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then electron-builder --win --x64 -p never;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../build;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then ls;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then mv ../build/TheDesk-setup.exe ../build/TheDesk-setup.exe;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then mv ../build/*$VERSION.exe ../build/TheDesk.exe;else :;fi
 | 
			
		||||
  - if [ "$TRAVIS_OS_NAME" = "windows" ];then cd ../app;else :;fi
 | 
			
		||||
  - cd ../
 | 
			
		||||
  - ls
 | 
			
		||||
after_deploy: ls
 | 
			
		||||
  - ls build
 | 
			
		||||
deploy:
 | 
			
		||||
  skip_cleanup: true
 | 
			
		||||
  provider: releases
 | 
			
		||||
  # GitHub にリリースするための API KEY を暗号化した値
 | 
			
		||||
  api_key:
 | 
			
		||||
    secure: jndR02p5KRTtcJk18b3YsXL2cC+yzEf1AOqXdpWciF8f3lO5oY01jlxd17xdHIcK7VywSsLVZpLToSdqAoIEhJ5OxEQ/FmA3FlmbwwD6ou13gLa4VGIvsBHveCmKGjVu0Z++atIy76tZYU1SOWFWv4B0ZhnVz2ca2VZynvLgw3YNsPJH7rHO966GXgRkGYJAJ4UvLg3sj/iztVh2FSfbUj5IGO1e/JHJO63wAo1MSQtRjkutVgl/djnBLC6vbL4YHkM3Ynpkx/YQEcxwrmeY0Ra8D5yYDq4MNIDMmZahWC+k4u2eA2Cj2ifBFNxbZvTN75vLwRBp6DsTNHsiqkXrSPDBdNeet31RbwTQ6LtsK8jqmL4S/59dmLcj7uCU2WxyBLPbJdbdZWlqW2ZQvfQY8QVAYy7S3MiHQWQN0oP5wqXk89jcgR42ig/zsqFNPpXHM4mExR7l/gDLPg0j9c3XEF6sWtk3FmJN1i4+B+9kn09b6UKlV7EFPKp8XcFNrz4ZcE9/I8lKwsqLVG2jAXIk7Z9LwDRcAmK5eG348X5zwFtOY6raKIvRw2cn92bPnEI+55v8A4WANS2647GFTgxHj30D0d/sOZmJ5BS34zpdWTgE0AlKg7sOqkncjqoW5J5zCh5Ow7b3KXvEvlAts44mAag8tZTectxMP4iguXvTnv4=
 | 
			
		||||
  file: 
 | 
			
		||||
    - TheDesk.exe
 | 
			
		||||
    - TheDesk-setup.exe
 | 
			
		||||
    - TheDesk-ia32.exe
 | 
			
		||||
    - TheDesk-setup-ia32.exe
 | 
			
		||||
  # Releases ページにアップロードするファイル
 | 
			
		||||
  file_glob: true
 | 
			
		||||
  file:
 | 
			
		||||
    - build/*
 | 
			
		||||
  skip_cleanup: true
 | 
			
		||||
  on:
 | 
			
		||||
    repo: cutls/TheDesk
 | 
			
		||||
    tags: true
 | 
			
		||||
branches:
 | 
			
		||||
  only:
 | 
			
		||||
  - master
 | 
			
		||||
  only: "/^v?[0-9\\.]+/"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								LATEST.md
									
									
									
									
									
								
							
							
						
						@@ -1,22 +0,0 @@
 | 
			
		||||
## For Astarte(kirishima.cloud), My Primary Instance
 | 
			
		||||
 | 
			
		||||
TheDesk :thedesk: Akane (16.1.0)  
 | 
			
		||||
・不具合修正(マウスオーバー,クリックに関する)
 | 
			
		||||
・2.5.0に対する対応(リプ数やendorseなど)
 | 
			
		||||
・軽量化を図った
 | 
			
		||||
・一つのカラムをTwitter(TweetDeck)にできる機能
 | 
			
		||||
・画像の保存先を変えられるように
 | 
			
		||||
・インスタンス情報の拡充
 | 
			
		||||
・デザイン変更
 | 
			
		||||
・トゥートバーを左端に持ってこれるように
 | 
			
		||||
・Windowsのネイティブ通知が復活
 | 
			
		||||
 | 
			
		||||
ほか
 | 
			
		||||
https://thedesk.top
 | 
			
		||||
 :github: https://github.com/cutls/TheDesk #Desk #DeskUpdate
 | 
			
		||||
 | 
			
		||||
 ## For Other Instances
 | 
			
		||||
 | 
			
		||||
TheDesk :thedesk: Akane (16.0.1)  
 | 
			
		||||
 | 
			
		||||
https://thedesk.top
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
# プライバシーポリシー
 | 
			
		||||
 | 
			
		||||
* TheDeskは「開発者からのお知らせ」配信のためにサーバー(thedesk.top)に常時アクセスしています。
 | 
			
		||||
* 上記の接続によるユーザーの情報提供はありません。(IPアドレス等を含む)
 | 
			
		||||
* thedesk.topのページにおいては、Googleアナリティクスによる解析を採用しています。
 | 
			
		||||
* 配信についてAmazon Web Service CloudFrontを使用しています。CloudFrontにはアクセス解析機能がありますが、これの使用につきましては同プライバシーポリシーに則ります。
 | 
			
		||||
* 接続するインスタンスのプライバシーポリシーはAPIを通じた全てのアクションに対して有効ですので、TheDeskについてもそれらに則ります。
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										192
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@@ -1,83 +1,148 @@
 | 
			
		||||
# rewrite-overallブランチへようこそ🎃
 | 
			
		||||
 | 
			
		||||
このブランチはコードを最初から全部読み直して書き直そうという途方もなく壮大なプロジェクトです。
 | 
			
		||||
 | 
			
		||||
1周目では、
 | 
			
		||||
 | 
			
		||||
* 脱jQuery
 | 
			
		||||
* 脱onclick
 | 
			
		||||
* 脱コールバック地獄
 | 
			
		||||
* 重複してるやつや使ってないやつを消す
 | 
			
		||||
 | 
			
		||||
という極めて当たり前のやつをやっていきます。
 | 
			
		||||
 | 
			
		||||
# 以下いつものREADME
 | 
			
		||||
 | 
			
		||||
<img src="https://thedesk.top/img/top.png" width="300" align="left">
 | 
			
		||||
<img src="https://thedesk.top/img/desk.png" width="150" align="right">
 | 
			
		||||
 | 
			
		||||
# TheDesk
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
[](https://travis-ci.org/cutls/TheDesk)
 | 
			
		||||
[](https://translate.thedesk.top/project/thedesk)  
 | 
			
		||||
[](https://translate.thedesk.top/project/thedesk)
 | 
			
		||||
[](https://bit.ly/31zqMmZ)
 | 
			
		||||
[](https://github.com/cutls/TheDesk/releases)
 | 
			
		||||
  
 | 
			
		||||
Mastodon/Misskey client for PC(Windows/Linux/macOS)  
 | 
			
		||||
オープンソースSNSマストドン/MisskeyのWindows/Linuxクライアント  
 | 
			
		||||
Download:[TheDesk](https://thedesk.top)  
 | 
			
		||||
オープンソースSNSマストドン/MisskeyのPC向けクライアント[日本語はこちら](README_ja.md)  
 | 
			
		||||
  
 | 
			
		||||
Download:[TheDesk](https://thedesk.top) [](https://status.cutls.com)    
 | 
			
		||||
 | 
			
		||||
Contact me(bug report...):GitHub Issues, mention to [Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls) or toot with #Desk  
 | 
			
		||||
<a href="https://www.patreon.com/cutls"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160"></a>  
 | 
			
		||||
<a href="https://liberapay.com/cutls/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a>
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
バグレポートなど:GitHub Issuesや[Cutls@kirishima.cloud](https://kirishima.cloud/@Cutls)へのリプ,または#Deskでトゥートして下さい.  
 | 
			
		||||
 | 
			
		||||
### Contribute/コントリビュート
 | 
			
		||||
 | 
			
		||||
Please make a pull request to ***WIP(before CI)*** brunch  
 | 
			
		||||
***WIP(before CI)*** ブランチにプルリクエストをお願いします。
 | 
			
		||||
 | 
			
		||||
## License/ライセンス
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)  
 | 
			
		||||
 | 
			
		||||
The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)/アイコンは[クリエイティブ・コモンズ 表示-非営利-継承](https://creativecommons.org/licenses/by-nc-sa/4.0/)で提供されています。  
 | 
			
		||||
[Press Kit](https://dl.thedesk.top/press/TheDesk+PressKit.zip)  
 | 
			
		||||
The icon is provided under [Creative Commons BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)
 | 
			
		||||
[Press Kit](https://d2upiril6ywqp9.cloudfront.net/press/TheDesk+PressKit.zip)  
 | 
			
		||||
 | 
			
		||||
* [PNG](https://dl.thedesk.top/press/TheDesk.png)
 | 
			
		||||
* [Monotone SVG](https://dl.thedesk.top/press/TheDesk.svg)
 | 
			
		||||
* [ico](https://dl.thedesk.top/press/TheDesk.ico)
 | 
			
		||||
* [icns](https://dl.thedesk.top/press/TheDesk.icns)
 | 
			
		||||
* [PNG 512x512](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.png)
 | 
			
		||||
* [SVG 4095x4096](https://d2upiril6ywqp9.cloudfront.net/press/thedesk-fullcolor.svg)
 | 
			
		||||
* [ico 256x256](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ico)
 | 
			
		||||
* [icns old](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.icns)
 | 
			
		||||
 | 
			
		||||
## Terms of Use/利用規約
 | 
			
		||||
The default sounds of notifications is provided [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/)
 | 
			
		||||
 | 
			
		||||
## Terms of Use
 | 
			
		||||
 | 
			
		||||
* [利用規約(Terms of Use(ja))](https://thedesk.top/tos.html)
 | 
			
		||||
* [プライバシーポリシー(Privacy Policy(ja))](https://thedesk.top/priv.html)
 | 
			
		||||
 | 
			
		||||
## Language/言語
 | 
			
		||||
## Language
 | 
			
		||||
 | 
			
		||||
* 日本語(Japanese)
 | 
			
		||||
* English(英語)
 | 
			
		||||
* English
 | 
			
		||||
* de, cs, bg(from Crowdin)
 | 
			
		||||
 | 
			
		||||
### Translation/翻訳
 | 
			
		||||
### Translation
 | 
			
		||||
 | 
			
		||||
Crowdin project is available! Visit: https://translate.thedesk.top  
 | 
			
		||||
  
 | 
			
		||||
Crowdinから翻訳に参加してみませんか?: https://translate.thedesk.top  
 | 
			
		||||
Crowdin project is available! Visit: https://translate.thedesk.top
 | 
			
		||||
 | 
			
		||||
## Requirement/環境
 | 
			
		||||
### Run on developer mode
 | 
			
		||||
 | 
			
		||||
* Electron 3.0.10(install yourself)
 | 
			
		||||
* electron-dl(in package.json)
 | 
			
		||||
* Jimp(in package.json)
 | 
			
		||||
* font-manager(in package.json)
 | 
			
		||||
  * Python 2.x(install yourself)
 | 
			
		||||
  * VisualC++(Windows)(install yourself)
 | 
			
		||||
* itunes-nowplaying-mac(for macOS)(in package.json)
 | 
			
		||||
* node-notifier(in package.json)
 | 
			
		||||
* sumchecker(in package.json)
 | 
			
		||||
* Ability to read unformated files!(install yourself)
 | 
			
		||||
`npm run dev` on `app` folder.
 | 
			
		||||
 | 
			
		||||
## Contributors/主なコントリビューター
 | 
			
		||||
## Contributors
 | 
			
		||||
 | 
			
		||||
macOSビルダー  
 | 
			
		||||
Build for macOS  
 | 
			
		||||
 | 
			
		||||
* [とねぢ](https://minohdon.jp/@toneji)
 | 
			
		||||
* [toneji](https://minohdon.jp/@toneji)
 | 
			
		||||
 | 
			
		||||
Linuxビルダー  
 | 
			
		||||
Build for Linux  
 | 
			
		||||
 | 
			
		||||
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja)
 | 
			
		||||
* [popn_ja](https://popon.pptdn.jp/@popn_ja)
 | 
			
		||||
 | 
			
		||||
iTunes NowPlayingにアルバムアートワークを付けてくれた人
 | 
			
		||||
Fellow coder
 | 
			
		||||
 | 
			
		||||
* [kPherox](https://www.kr-kp.com/)
 | 
			
		||||
* [kPherox](https://pl.kpherox.dev/kPherox)
 | 
			
		||||
 | 
			
		||||
## Build/ビルド
 | 
			
		||||
## Build
 | 
			
		||||
 | 
			
		||||
Misskey(misskey.xyz) application token is not in cutls/TheDesk  
 | 
			
		||||
Misskey(misskey.xyz)のトークンは含まれておりません。  
 | 
			
		||||
`git clone https://github.com/cutls/TheDesk`  
 | 
			
		||||
`npm install electron -g`  
 | 
			
		||||
`cd TheDesk/app`  
 | 
			
		||||
`npm install`  
 | 
			
		||||
You have to use either **npm** or **yarn**. Whichever you use, it works well.
 | 
			
		||||
 | 
			
		||||
### npm
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
git clone https://github.com/cutls/TheDesk
 | 
			
		||||
cd TheDesk/app
 | 
			
		||||
npm install
 | 
			
		||||
npm install --only=dev
 | 
			
		||||
npm run construct
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### yarn
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
git clone https://github.com/cutls/TheDesk
 | 
			
		||||
cd TheDesk/app
 | 
			
		||||
# Linux or macOS
 | 
			
		||||
yarn install --no-lockfile
 | 
			
		||||
# Windows
 | 
			
		||||
yarn install
 | 
			
		||||
 | 
			
		||||
yarn construct
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
run `npm run dev` or `yarn dev` to launch developer version with console(click `view`)
 | 
			
		||||
 | 
			
		||||
### electron-builder(Recommended)
 | 
			
		||||
Use scripts(they can work well with npm, **yarn**).  
 | 
			
		||||
 | 
			
		||||
#### npm
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
# Build for current platform
 | 
			
		||||
npm run build
 | 
			
		||||
 | 
			
		||||
# Select build target
 | 
			
		||||
## Windows
 | 
			
		||||
npm run build:win
 | 
			
		||||
 | 
			
		||||
## Windows and Linux (The macOS target should run on macOS. So, this option hasn't include the build for macOS)
 | 
			
		||||
npm run build:all
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### yarn
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
# Build for current platform
 | 
			
		||||
yarn build
 | 
			
		||||
 | 
			
		||||
# Select build target
 | 
			
		||||
## Windows
 | 
			
		||||
yarn build:win
 | 
			
		||||
 | 
			
		||||
## Windows and Linux (The macOS target should run on macOS. So, this option hasn't include the build for macOS)
 | 
			
		||||
yarn build:all
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Config is all on package.json  
 | 
			
		||||
 | 
			
		||||
### electron-packager
 | 
			
		||||
`npm install --save-dev electron-rebuild`  
 | 
			
		||||
  
 | 
			
		||||
Linux/macOS  
 | 
			
		||||
@@ -86,12 +151,7 @@ Windows
 | 
			
		||||
`.\node_modules\.bin\electron-rebuild.cmd`  
 | 
			
		||||
  
 | 
			
		||||
To install Python 2.x and Visual C++ for Windows, before running `npm install --save-dev electron-rebuild`  
 | 
			
		||||
WindowsでPython 2.xやVisualC++を一発でインストールできるツールもあります(`npm install --save-dev electron-rebuild`の前に)  
 | 
			
		||||
`npm install --global windows-build-tools`  
 | 
			
		||||
  
 | 
			
		||||
日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談)  
 | 
			
		||||
 | 
			
		||||
### electron-packager
 | 
			
		||||
 | 
			
		||||
Windows  
 | 
			
		||||
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --win32metadata.CompanyName="TheDesk&Cutls.com" --win32metadata.FileDescription="TheDesk" --win32metadata.OriginalFilename="TheDesk" --win32metadata.InternalName="TheDesk" --win32metadata.ProductName="TheDesk" --platform=win32 --arch=all --electron-version=4.0.5 --icon=.\app\thedesk.ico --overwrite`  
 | 
			
		||||
@@ -100,19 +160,23 @@ Linux
 | 
			
		||||
macOS  
 | 
			
		||||
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite`  
 | 
			
		||||
 | 
			
		||||
### electron-builder
 | 
			
		||||
### PWA support
 | 
			
		||||
 | 
			
		||||
Config is all on package.json  
 | 
			
		||||
ビルド設定はすべてpackage.jsonに記載しています。  
 | 
			
		||||
TheDesk is a wed-based app, so you can run it on a browser. Of course, the main stream is as Electron. Some features won't work as well as Electron.
 | 
			
		||||
 | 
			
		||||
You can run `npm run build:pwa` to build as PWA, including `manifest.json` and the ServiceWorker.
 | 
			
		||||
 | 
			
		||||
**You have to rename `node_modules` to `dependencies` to run as a web application. (restricted by Netlify)**
 | 
			
		||||
 | 
			
		||||
Check the app on Chrome or Firefox: [Here](https://app.thedesk.top) (it follows the `master` branch, so not stable.)  
 | 
			
		||||
[](https://app.netlify.com/sites/thedesk/deploys)
 | 
			
		||||
 | 
			
		||||
## Pleroma support
 | 
			
		||||
 | 
			
		||||
Did you find a bug with Pleroma accounts?  
 | 
			
		||||
Pleroma **does not** follow Mastodon API rules completely although Pleroma developers say so.  
 | 
			
		||||
Please write issues to improve TheDesk affinity with Pleroma.  
 | 
			
		||||
Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。  
 | 
			
		||||
Issuesに書いてある問題についてはなるべく対処しますので、ぜひお知らせください。
 | 
			
		||||
Please write issues to improve TheDesk affinity with Pleroma.
 | 
			
		||||
 | 
			
		||||
## See also/詳しく
 | 
			
		||||
## Vulnerabilities when `npm i`???
 | 
			
		||||
 | 
			
		||||
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)
 | 
			
		||||
No, if your npm says materialize-css has vulnerabilities(CVE-2019-11002/3/4), look at [here](https://github.com/Dogfalo/materialize/issues/6286) under discussion.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										171
									
								
								README_ja.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,171 @@
 | 
			
		||||
<img src="https://thedesk.top/img/top.png" width="300" align="left">
 | 
			
		||||
<img src="https://thedesk.top/img/desk.png" width="150" align="right">
 | 
			
		||||
 | 
			
		||||
# TheDesk
 | 
			
		||||
 
 | 
			
		||||
[](https://travis-ci.org/cutls/TheDesk)
 | 
			
		||||
[](https://translate.thedesk.top/project/thedesk)
 | 
			
		||||
[](https://bit.ly/31zqMmZ)
 | 
			
		||||
[](https://github.com/cutls/TheDesk/releases)
 | 
			
		||||
  
 | 
			
		||||
Mastodon/Misskey client for PC(Windows/Linux/macOS)  
 | 
			
		||||
オープンソースSNSマストドン/MisskeyのPC向けクライアント  
 | 
			
		||||
Download:[TheDesk](https://thedesk.top) [](https://status.cutls.com)    
 | 
			
		||||
 | 
			
		||||
[Pixiv FANBOX](https://www.pixiv.net/fanbox/creator/28105985)
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
## ライセンス
 | 
			
		||||
 | 
			
		||||
[GNU General Public License v3.0](https://github.com/cutls/TheDesk/blob/master/LICENSE)  
 | 
			
		||||
 | 
			
		||||
アイコンは[クリエイティブ・コモンズ 表示-非営利-継承](https://creativecommons.org/licenses/by-nc-sa/4.0/)で提供されています。  
 | 
			
		||||
[プレスキット](https://d2upiril6ywqp9.cloudfront.net/press/TheDesk+PressKit.zip)  
 | 
			
		||||
 | 
			
		||||
* [PNG 512x512](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.png)
 | 
			
		||||
* [SVG 4095x4096](https://d2upiril6ywqp9.cloudfront.net/press/thedesk-fullcolor.svg)
 | 
			
		||||
* [ico 256x256](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ico)
 | 
			
		||||
* [icns old](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.icns)
 | 
			
		||||
* [Illustrator .ai](https://d2upiril6ywqp9.cloudfront.net/press/thedesk.ai)
 | 
			
		||||
 | 
			
		||||
標準の通知音は [Creative Commons BY](https://creativecommons.org/licenses/by/4.0/) で提供されています。
 | 
			
		||||
 | 
			
		||||
## 利用規約
 | 
			
		||||
 | 
			
		||||
* [利用規約](https://thedesk.top/tos.html)
 | 
			
		||||
* [プライバシーポリシー](https://thedesk.top/priv.html)
 | 
			
		||||
 | 
			
		||||
## 言語
 | 
			
		||||
 | 
			
		||||
* 日本語
 | 
			
		||||
* English(英語)
 | 
			
		||||
* ドイツ語, チェコ語, ブルガリア語(from Crowdin)
 | 
			
		||||
 | 
			
		||||
### 翻訳
 | 
			
		||||
  
 | 
			
		||||
Crowdinから翻訳に参加してみませんか?: https://translate.thedesk.top  
 | 
			
		||||
 | 
			
		||||
### デベロッパーモード
 | 
			
		||||
 | 
			
		||||
`npm run dev`を`app`フォルダ内で実行
 | 
			
		||||
 | 
			
		||||
## 主なコントリビューター
 | 
			
		||||
 | 
			
		||||
macOSビルダー  
 | 
			
		||||
 | 
			
		||||
* [とねぢ](https://minohdon.jp/@toneji)
 | 
			
		||||
 | 
			
		||||
Linuxビルダー  
 | 
			
		||||
 | 
			
		||||
* [ぽぷんじゃ](https://popon.pptdn.jp/@popn_ja)
 | 
			
		||||
 | 
			
		||||
コーダー
 | 
			
		||||
 | 
			
		||||
* [kPherox](https://pl.kpherox.dev/kPherox)
 | 
			
		||||
 | 
			
		||||
## ビルド
 | 
			
		||||
 | 
			
		||||
npmでもyarnでも好きな方を選んでください。
 | 
			
		||||
 | 
			
		||||
### npm
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
git clone https://github.com/cutls/TheDesk
 | 
			
		||||
cd TheDesk/app
 | 
			
		||||
npm install
 | 
			
		||||
npm install --only=dev
 | 
			
		||||
npm run construct
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### yarn
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
git clone https://github.com/cutls/TheDesk
 | 
			
		||||
cd TheDesk/app
 | 
			
		||||
# Linux or macOS
 | 
			
		||||
yarn install --no-lockfile
 | 
			
		||||
# Windows
 | 
			
		||||
yarn install
 | 
			
		||||
 | 
			
		||||
yarn construct
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### electron-builder(推奨)
 | 
			
		||||
 | 
			
		||||
scriptsを利用します
 | 
			
		||||
 | 
			
		||||
#### npm
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
# 実行している環境向けにビルド
 | 
			
		||||
npm run build
 | 
			
		||||
 | 
			
		||||
# ターゲットを指定してビルド
 | 
			
		||||
## Windows
 | 
			
		||||
npm run build:win
 | 
			
		||||
 | 
			
		||||
## macOS向けのビルドにはmacOSで実行する必要があるためこのコマンドではビルドされません
 | 
			
		||||
npm run build:all
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### yarn
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
# 実行している環境向けにビルド
 | 
			
		||||
yarn build
 | 
			
		||||
 | 
			
		||||
# ターゲットを指定してビルド
 | 
			
		||||
## Windows
 | 
			
		||||
yarn build:win
 | 
			
		||||
 | 
			
		||||
## macOS向けのビルドにはmacOSで実行する必要があるためこのコマンドではビルドされません
 | 
			
		||||
yarn build:all
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
ビルド設定はすべてpackage.jsonに記載しています。  
 | 
			
		||||
 | 
			
		||||
### electron-packager(非推奨)
 | 
			
		||||
`npm install --save-dev electron-rebuild`  
 | 
			
		||||
  
 | 
			
		||||
Linux/macOS  
 | 
			
		||||
`./node_modules/.bin/electron-rebuild`  
 | 
			
		||||
Windows  
 | 
			
		||||
`.\node_modules\.bin\electron-rebuild.cmd`  
 | 
			
		||||
  
 | 
			
		||||
WindowsでPython 2.xやVisualC++を一発でインストールできるツールもあります(`npm install --save-dev electron-rebuild`の前に)  
 | 
			
		||||
`npm install --global windows-build-tools`  
 | 
			
		||||
  
 | 
			
		||||
日本語話者向けですが、macOSビルドにはXCodeが要るとの情報があります。([とねぢ](https://minohdon.jp/@toneji)氏談)  
 | 
			
		||||
 | 
			
		||||
Windows  
 | 
			
		||||
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --win32metadata.CompanyName="TheDesk&Cutls.com" --win32metadata.FileDescription="TheDesk" --win32metadata.OriginalFilename="TheDesk" --win32metadata.InternalName="TheDesk" --win32metadata.ProductName="TheDesk" --platform=win32 --arch=all --electron-version=4.0.5 --icon=.\app\thedesk.ico --overwrite`  
 | 
			
		||||
Linux  
 | 
			
		||||
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=linux --arch=x64,ia32 --electron-version=4.0.5 --overwrite`  
 | 
			
		||||
macOS  
 | 
			
		||||
`electron-packager ./app TheDesk --executable-name="TheDesk" --app-copyright="Copyright (c) TheDesk 2018 Cutls.com 2015 All Right Reserved" --platform=darwin --arch=all --electron-version=4.0.5 --icon=./app/icon.icns --overwrite`  
 | 
			
		||||
 | 
			
		||||
### PWAとして実行
 | 
			
		||||
 | 
			
		||||
TheDeskはウェブ技術を使用して作られているので、ブラウザで動かすこともできます。もちろん、Electron向けに設計されているので一部機能は動きません。
 | 
			
		||||
 | 
			
		||||
`npm run build:pwa`でビルドできます。PWAに必要な`manifest.json`やサービスワーカーなども要員されています。
 | 
			
		||||
 | 
			
		||||
**`node_modules`を`dependencies`にリネームしないと動きません。(Netlifyの制限です)**
 | 
			
		||||
 | 
			
		||||
ChromeまたはFirefoxでチェック: [こちら](https://app.thedesk.top) (`master`ブランチに追従しています。不安定です。)  
 | 
			
		||||
[](https://app.netlify.com/sites/thedesk/deploys)
 | 
			
		||||
 | 
			
		||||
## Pleromaのサポート
 | 
			
		||||
 | 
			
		||||
Pleromaは、Mastodon APIとの互換性を謳っていますが、実際には様々な差異があり、TheDeskで不具合が発生することがあります。  
 | 
			
		||||
Issuesに書いてある問題についてはなるべく対処しますので、ぜひお知らせください。
 | 
			
		||||
 | 
			
		||||
## 詳しく
 | 
			
		||||
 | 
			
		||||
[TheDesk - マストドン日本語ウィキ](https://ja.mstdn.wiki/TheDesk)
 | 
			
		||||
 | 
			
		||||
## `npm i`したら脆弱性あるって言われた
 | 
			
		||||
 | 
			
		||||
materialize-cssの脆弱性(CVE-2019-11002/3/4)については[こちら](https://github.com/Dogfalo/materialize/issues/6286)で本当に脆弱性かどうか議論しています。  
 | 
			
		||||
実際には害が無いものと思われます。
 | 
			
		||||
							
								
								
									
										226
									
								
								app/about.html
									
									
									
									
									
								
							
							
						
						@@ -1,109 +1,139 @@
 | 
			
		||||
<!doctype html>
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="ja">
 | 
			
		||||
<head>
 | 
			
		||||
<title>TheDesk</title>
 | 
			
		||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
 | 
			
		||||
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
 | 
			
		||||
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
 | 
			
		||||
<link href="./css/themes.css" type="text/css" rel="stylesheet">
 | 
			
		||||
<link href="./css/master.css" type="text/css" rel="stylesheet">
 | 
			
		||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet">
 | 
			
		||||
<meta charset="utf-8">
 | 
			
		||||
<style>
 | 
			
		||||
body{
 | 
			
		||||
    font-family:'Open Sans';
 | 
			
		||||
    -webkit-app-region: drag;
 | 
			
		||||
    cursor: move;
 | 
			
		||||
}
 | 
			
		||||
a,button{
 | 
			
		||||
    -webkit-app-region: no-drag;
 | 
			
		||||
}
 | 
			
		||||
.container {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: 1fr 1fr;
 | 
			
		||||
    grid-template-rows: 1fr 1fr 1fr 1fr 1fr;
 | 
			
		||||
    grid-template-areas: 'name1 data1' 'name2 data2' 'name3 data3' 'name4 data4' 'name5 data5';
 | 
			
		||||
    text-align:left;
 | 
			
		||||
    margin:5px;
 | 
			
		||||
}
 | 
			
		||||
	<head>
 | 
			
		||||
		<title>TheDesk</title>
 | 
			
		||||
		<meta content="width=device-width,initial-scale=1.0" name="viewport" />
 | 
			
		||||
		<link href="./node_modules/materialize-css/dist/css/materialize.css" type="text/css" rel="stylesheet" />
 | 
			
		||||
		<link href="./css/font-awesome.css" rel="stylesheet" type="text/css" />
 | 
			
		||||
		<link href="./css/themes.css" type="text/css" rel="stylesheet" />
 | 
			
		||||
		<link href="./css/master.css" type="text/css" rel="stylesheet" />
 | 
			
		||||
		<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300|Baloo+Bhai" rel="stylesheet" />
 | 
			
		||||
		<meta charset="utf-8" />
 | 
			
		||||
		<style>
 | 
			
		||||
			body {
 | 
			
		||||
				font-family: 'Open Sans';
 | 
			
		||||
				-webkit-app-region: drag;
 | 
			
		||||
				cursor: move;
 | 
			
		||||
				padding: 5px;
 | 
			
		||||
				padding-top: 15px;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-name1 {
 | 
			
		||||
    grid-area: name1;
 | 
			
		||||
}
 | 
			
		||||
			a,
 | 
			
		||||
			button {
 | 
			
		||||
				-webkit-app-region: no-drag;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-data1 {
 | 
			
		||||
    grid-area: data1;
 | 
			
		||||
}
 | 
			
		||||
			.container {
 | 
			
		||||
				width: 100%;
 | 
			
		||||
				display: grid;
 | 
			
		||||
				grid-template-columns: 1fr 1fr;
 | 
			
		||||
				grid-template-rows: 1fr 1fr 1fr 1fr 1fr;
 | 
			
		||||
				grid-template-areas: 'name1 data1' 'name2 data2' 'name3 data3' 'name4 data4' 'name5 data5' 'name6 data6';
 | 
			
		||||
				text-align: left;
 | 
			
		||||
				margin: 5px;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-name2 {
 | 
			
		||||
    grid-area: name2;
 | 
			
		||||
}
 | 
			
		||||
			.area-name1 {
 | 
			
		||||
				grid-area: name1;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-data2 {
 | 
			
		||||
    grid-area: data2;
 | 
			
		||||
}
 | 
			
		||||
			.area-data1 {
 | 
			
		||||
				grid-area: data1;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-name3 {
 | 
			
		||||
    grid-area: name3;
 | 
			
		||||
}
 | 
			
		||||
			.area-name2 {
 | 
			
		||||
				grid-area: name2;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-data3 {
 | 
			
		||||
    grid-area: data3;
 | 
			
		||||
}
 | 
			
		||||
			.area-data2 {
 | 
			
		||||
				grid-area: data2;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-name4 {
 | 
			
		||||
    grid-area: name4;
 | 
			
		||||
}
 | 
			
		||||
			.area-name3 {
 | 
			
		||||
				grid-area: name3;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-data4 {
 | 
			
		||||
    grid-area: data4;
 | 
			
		||||
}
 | 
			
		||||
			.area-data3 {
 | 
			
		||||
				grid-area: data3;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-name5 {
 | 
			
		||||
    grid-area: name5;
 | 
			
		||||
}
 | 
			
		||||
			.area-name4 {
 | 
			
		||||
				grid-area: name4;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
.area-data5 {
 | 
			
		||||
    grid-area: data5;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
</head>
 | 
			
		||||
<body class="center " style="overflow:hidden">
 | 
			
		||||
<script type="text/javascript" src="./js/common/jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
 | 
			
		||||
<script type="text/javascript" src="./js/common/materialize.js"></script>
 | 
			
		||||
<img src="./img/desk.png" style="max-width:70%;">
 | 
			
		||||
<h5>TheDesk</h5>
 | 
			
		||||
<div class='container'>
 | 
			
		||||
    <div class='area-name1'>バージョン</div>
 | 
			
		||||
    <div class='area-data1' id="now"></div>
 | 
			
		||||
    <div class='area-name2'>Internal version</div>
 | 
			
		||||
    <div class='area-data2' id="ver"></div>
 | 
			
		||||
    <div class='area-name3'>Chromium</div>
 | 
			
		||||
    <div class='area-data3' id="chrome"></div>
 | 
			
		||||
    <div class='area-name4'>Electron</div>
 | 
			
		||||
    <div class='area-data4' id="electron"></div>
 | 
			
		||||
    <div class='area-name5'>Node.js</div>
 | 
			
		||||
    <div class='area-data5' id="node"></div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="cp">Copyright © TheDesk 2018 All rights reserved.<br><a href="https://thedesk.top" target="_blank">Web site</a></div>
 | 
			
		||||
<button onclick="window.close()" class="btn waves-effect indigo" style="width:calc(100% - 10px);"><i class="material-icons left">close</i>Close</button>
 | 
			
		||||
<script type="text/javascript" src="./js/ui/theme.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
    $("#now").text(localStorage.getItem("ver"));
 | 
			
		||||
    var electron = require("electron");
 | 
			
		||||
    var remote=electron.remote;
 | 
			
		||||
    //JSON.parse(fs.readFileSync(info_path, 'utf8'));
 | 
			
		||||
    console.log(process.versions);
 | 
			
		||||
    $("#node").text(process.version);
 | 
			
		||||
    $("#chrome").text(process.versions.chrome);
 | 
			
		||||
    $("#electron").text(process.versions.electron);
 | 
			
		||||
    if(location.search){
 | 
			
		||||
        var m = location.search.match(/\?ver=([a-zA-Z-0-9.]+)/);
 | 
			
		||||
        var ver=m[1];
 | 
			
		||||
        $("#ver").text(ver);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
</script>
 | 
			
		||||
<script type="text/javascript" src="./js/platform/end.js"></script>
 | 
			
		||||
			.area-data4 {
 | 
			
		||||
				grid-area: data4;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			.area-name5 {
 | 
			
		||||
				grid-area: name5;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			.area-data5 {
 | 
			
		||||
				grid-area: data5;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			.area-name6 {
 | 
			
		||||
				grid-area: name6;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			.area-data6 {
 | 
			
		||||
				grid-area: data6;
 | 
			
		||||
			}
 | 
			
		||||
		</style>
 | 
			
		||||
	</head>
 | 
			
		||||
 | 
			
		||||
	<body class="center" style="overflow: hidden;">
 | 
			
		||||
		<script type="text/javascript" src="./node_modules/jquery/dist/jquery.js"></script>
 | 
			
		||||
		<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
 | 
			
		||||
		<script type="text/javascript" src="./node_modules/materialize-css/dist/js/materialize.js"></script>
 | 
			
		||||
		<img src="./img/desk.svg" style="max-width: 62%;" />
 | 
			
		||||
		<h5>TheDesk</h5>
 | 
			
		||||
		<div class="container">
 | 
			
		||||
			<div class="area-name1">Display version</div>
 | 
			
		||||
			<div class="area-data1" id="now"></div>
 | 
			
		||||
			<div class="area-name2">Internal version</div>
 | 
			
		||||
			<div class="area-data2" id="ver"></div>
 | 
			
		||||
			<div class="area-name3">Commit(7chars)</div>
 | 
			
		||||
			<div class="area-data3" id="hash"></div>
 | 
			
		||||
			<div class="area-name4">Chromium</div>
 | 
			
		||||
			<div class="area-data4" id="chrome"></div>
 | 
			
		||||
			<div class="area-name5">Electron</div>
 | 
			
		||||
			<div class="area-data5" id="electron"></div>
 | 
			
		||||
			<div class="area-name6">Node.js</div>
 | 
			
		||||
			<div class="area-data6" id="node"></div>
 | 
			
		||||
		</div>
 | 
			
		||||
		<div class="cp">
 | 
			
		||||
			Copyright © TheDesk 2018<br />
 | 
			
		||||
			Main developer(author): <a href="https://cutls.com/@Cutls" target="_blank">Cutls P</a><br />
 | 
			
		||||
			Thanks:<a href="https://minohdon.jp/@toneji" target="_blank">toneji</a>/<a href="https://popon.pptdn.jp/@popn_ja" target="_blank">popn_ja</a>/<a
 | 
			
		||||
				href="https://pl.kpherox.dev/kPherox"
 | 
			
		||||
				target="_blank"
 | 
			
		||||
				>kPherox</a
 | 
			
		||||
			>
 | 
			
		||||
			and all users
 | 
			
		||||
			<img draggable="false" style="width: 0.8rem; top: 1px; margin-left: 1px; position: relative;" alt="❤️" title=":heart:" src="https://twemoji.maxcdn.com/2/72x72/2764.png" />
 | 
			
		||||
			<br /><a href="https://thedesk.top" target="_blank">Web site</a>
 | 
			
		||||
		</div>
 | 
			
		||||
		<button onclick="window.close()" class="btn waves-effect indigo" style="width: calc(100% - 10px);"><i class="material-icons left">close</i>Close</button>
 | 
			
		||||
		<script type="text/javascript" src="./js/ui/theme.js"></script>
 | 
			
		||||
		<script>
 | 
			
		||||
			var about = JSON.parse(localStorage.getItem('about'))
 | 
			
		||||
			$('#now').text(localStorage.getItem('ver'))
 | 
			
		||||
			$('#node').text(about[0])
 | 
			
		||||
			$('#chrome').text(about[1])
 | 
			
		||||
			$('#electron').text(about[2])
 | 
			
		||||
			if (location.search) {
 | 
			
		||||
				var m = location.search.match(/\?ver=([a-zA-Z-0-9.]+)/)
 | 
			
		||||
				var ver = m[1]
 | 
			
		||||
				$('#ver').text(ver)
 | 
			
		||||
			}
 | 
			
		||||
			$('#hash').html('<a href="https://github.com/cutls/TheDesk/commits/' + about[3] + '" target="_blank">' + about[3].slice(0, 7) + '</a>')
 | 
			
		||||
			$(document).on('click', 'a', (e) => {
 | 
			
		||||
				var url = $(e.target).attr('href')
 | 
			
		||||
				postMessage(['openUrl', url], '*')
 | 
			
		||||
				return false
 | 
			
		||||
			})
 | 
			
		||||
		</script>
 | 
			
		||||
	</body>
 | 
			
		||||
</html>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										260
									
								
								app/adobe.html
									
									
									
									
									
								
							
							
						
						@@ -1,260 +0,0 @@
 | 
			
		||||
<!doctype html>
 | 
			
		||||
<html lang="ja">
 | 
			
		||||
<head>
 | 
			
		||||
<title>Adobe Photo Editor - TheDesk</title>
 | 
			
		||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
 | 
			
		||||
<link href="./css/materialize.css" type="text/css" rel="stylesheet">
 | 
			
		||||
<link href="./css/themes.css" type="text/css" rel="stylesheet">
 | 
			
		||||
<link href="./css/master.css" type="text/css" rel="stylesheet">
 | 
			
		||||
<link href="./css/auth.css" type="text/css" rel="stylesheet">
 | 
			
		||||
<link href='./css/font-awesome.css' rel='stylesheet' type='text/css'>
 | 
			
		||||
<link href='./css/tl.css' rel='stylesheet' type='text/css'>
 | 
			
		||||
<link href='./css/userdata.css' rel='stylesheet' type='text/css'>
 | 
			
		||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons|Open+Sans:300" rel="stylesheet">
 | 
			
		||||
<style>
 | 
			
		||||
    #cb-drag {
 | 
			
		||||
  margin-bottom: 8px;
 | 
			
		||||
  padding: 24px 0;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
#cb-drag p {
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
#cb-file {
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
#cb-display {
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
#cb-display p {
 | 
			
		||||
  margin-top: 8px;
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
  line-height: 1.4;
 | 
			
		||||
}
 | 
			
		||||
.cb-div {
 | 
			
		||||
  padding: 16px;
 | 
			
		||||
  margin-bottom: 8px;
 | 
			
		||||
}
 | 
			
		||||
.cb-image {
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
<meta charset="utf-8">
 | 
			
		||||
</head>
 | 
			
		||||
<body id="mainView">
 | 
			
		||||
<script type="text/javascript" src="./js/common/jquery.js"></script>
 | 
			
		||||
<script type="text/javascript" src="./js/platform/first-not-view.js"></script>
 | 
			
		||||
<script type="text/javascript" src="./js/common/materialize.js"></script>
 | 
			
		||||
<script type="text/javascript" src="./js/ui/tips.js"></script>
 | 
			
		||||
<script type="text/javascript" src="./js/common/time.js"></script>
 | 
			
		||||
<script type="text/javascript" src="./js/common/modal.js"></script>
 | 
			
		||||
<div>
 | 
			
		||||
        <div id="cb-drag">
 | 
			
		||||
        <p>ここに画像ファイルをドラッグし、画像をクリックしてください。</p>
 | 
			
		||||
        <input type="file" id="cb-file">
 | 
			
		||||
        </div>
 | 
			
		||||
        <div id="cb-display"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
<script type="text/javascript" src="https://dme0ih8comzn4.cloudfront.net/imaging/v2/editor.js"></script>
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
 | 
			
		||||
 var dragAndDrop = (function (window, document) {
 | 
			
		||||
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
var drag = document.getElementById("mainView");
 | 
			
		||||
var disp = document.getElementById("cb-display");
 | 
			
		||||
var file = document.getElementById("cb-file");
 | 
			
		||||
 | 
			
		||||
function makeView(data) {
 | 
			
		||||
 | 
			
		||||
  var div, img, customEvent;
 | 
			
		||||
  var metaData = "<p>■ファイル名: <b>" + data.name + "</b><br>■容量: <b>" + data.size + "</b>バイト</p>";
 | 
			
		||||
 | 
			
		||||
  div = document.createElement("div");
 | 
			
		||||
  div.setAttribute("class", "cb-div");
 | 
			
		||||
 | 
			
		||||
  img = document.createElement("img");
 | 
			
		||||
  img.src = data.url;
 | 
			
		||||
  img.setAttribute("class", "cb-image");
 | 
			
		||||
  img.style.maxWidth = "100%";
 | 
			
		||||
  img.style.height = "auto";
 | 
			
		||||
 | 
			
		||||
  div.appendChild(img);
 | 
			
		||||
  img.insertAdjacentHTML("afterend", metaData);
 | 
			
		||||
  disp.appendChild(div);
 | 
			
		||||
 | 
			
		||||
  customEvent = document.createEvent("HTMLEvents");
 | 
			
		||||
  customEvent.initEvent("makeView", true, false);
 | 
			
		||||
  div.dispatchEvent(customEvent);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function readImage(e) {
 | 
			
		||||
 | 
			
		||||
  var f = (e.dataTransfer) ? e.dataTransfer.files : e.target.files;
 | 
			
		||||
 | 
			
		||||
  for (var i = 0, l = f.length; i < l; i++) {
 | 
			
		||||
 | 
			
		||||
    var reader = new FileReader();
 | 
			
		||||
 | 
			
		||||
    reader.onload = (function (f) {
 | 
			
		||||
 | 
			
		||||
      var imageData = {};
 | 
			
		||||
 | 
			
		||||
      return function (evt) {
 | 
			
		||||
 | 
			
		||||
        if (f.type === "image/gif" || f.type === "image/png" || f.type === "image/jpeg") {
 | 
			
		||||
 | 
			
		||||
          imageData.type = f.type;
 | 
			
		||||
          imageData.name = f.name;
 | 
			
		||||
          imageData.size = f.size;
 | 
			
		||||
          imageData.date = f.lastModifiedDate.toLocaleDateString();
 | 
			
		||||
          imageData.url = evt.target.result;
 | 
			
		||||
          makeView(imageData);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
    })(f[i]);
 | 
			
		||||
 | 
			
		||||
    reader.readAsDataURL(f[i]);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function dragFiles() {
 | 
			
		||||
 | 
			
		||||
  drag.addEventListener("drop", function (e) {
 | 
			
		||||
    e.stopPropagation();
 | 
			
		||||
    e.preventDefault();
 | 
			
		||||
    readImage(e);
 | 
			
		||||
  }, false);
 | 
			
		||||
 | 
			
		||||
  drag.addEventListener("dragover", function (e) {
 | 
			
		||||
    e.stopPropagation();
 | 
			
		||||
    e.preventDefault();
 | 
			
		||||
  }, false);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function uploadFiles() {
 | 
			
		||||
 | 
			
		||||
  file.addEventListener("change", function(e) {
 | 
			
		||||
    readImage(e);
 | 
			
		||||
  }, false);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
return {
 | 
			
		||||
  init: function () {
 | 
			
		||||
    dragFiles();
 | 
			
		||||
    uploadFiles();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
})(this, this.document);
 | 
			
		||||
 | 
			
		||||
var photoEditor = (function (window, document) {
 | 
			
		||||
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
var featherEditor = new Aviary.Feather({
 | 
			
		||||
  apiKey: "ffee425017ab44b18ce95dab98a5cdc1",
 | 
			
		||||
  onSave: function(imageID, newURL) {
 | 
			
		||||
    var img1 = document.getElementById(imageID);
 | 
			
		||||
    img1.src = newURL;
 | 
			
		||||
    var electron = require("electron");
 | 
			
		||||
    var ipc = electron.ipcRenderer;
 | 
			
		||||
    ipc.send('bmp-image', [newURL,0]);
 | 
			
		||||
    window.close();
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function clearImage() {
 | 
			
		||||
  this.parentNode.style.display = "none";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function launchEditor(id, src) {
 | 
			
		||||
  featherEditor.launch({
 | 
			
		||||
    image: id,
 | 
			
		||||
    url: src
 | 
			
		||||
  });
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function editPhoto() {
 | 
			
		||||
  //console.log(this);
 | 
			
		||||
  var id = this.getAttribute("id");
 | 
			
		||||
  var src = this.getAttribute("src");
 | 
			
		||||
  launchEditor(id, src);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeButton() {
 | 
			
		||||
  var button = document.createElement("button");
 | 
			
		||||
  button.setAttribute("style",
 | 
			
		||||
    "width: 64px;"
 | 
			
		||||
    + " line-height: 24px;"
 | 
			
		||||
    + " background-color: #37474F;"
 | 
			
		||||
    + " color: #fff;"
 | 
			
		||||
    + " border: none;"
 | 
			
		||||
    + " cursor: pointer;"
 | 
			
		||||
    + " border-radius: 2px;"
 | 
			
		||||
    + " font-size: 14px;"
 | 
			
		||||
    + " position: absolute;"
 | 
			
		||||
    + " text-align: center;"
 | 
			
		||||
    + " top: 16px;"
 | 
			
		||||
    + " right: 8px;"
 | 
			
		||||
    + " padding: 0;"
 | 
			
		||||
    + " z-index: 1000;"
 | 
			
		||||
  );
 | 
			
		||||
  button.innerHTML = "削除";
 | 
			
		||||
  return button;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function listener() {
 | 
			
		||||
 | 
			
		||||
  var disp = document.getElementById("cb-display");
 | 
			
		||||
 | 
			
		||||
  disp.addEventListener("makeView", function () {
 | 
			
		||||
 | 
			
		||||
    var image = document.querySelectorAll(".cb-image");
 | 
			
		||||
    var button = [];
 | 
			
		||||
 | 
			
		||||
    for (var i = 0, l = image.length; i < l; i++) {
 | 
			
		||||
 | 
			
		||||
      button[i] = makeButton();
 | 
			
		||||
      image[i].setAttribute("id", "cb-image_" + i);
 | 
			
		||||
      image[i].parentNode.style.position = "relative";
 | 
			
		||||
      image[i].parentNode.appendChild(button[i]);
 | 
			
		||||
 | 
			
		||||
      button[i].addEventListener("click", clearImage, false);
 | 
			
		||||
      image[i].addEventListener("click", editPhoto, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }, false);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
return {
 | 
			
		||||
  init: function () {
 | 
			
		||||
    listener();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
})(this, this.document);
 | 
			
		||||
 | 
			
		||||
dragAndDrop.init();
 | 
			
		||||
photoEditor.init();
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<script type="text/javascript" src="./js/ui/theme.js"></script>
 | 
			
		||||
<script type="text/javascript" src="./js/platform/end.js"></script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										112
									
								
								app/build.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,112 @@
 | 
			
		||||
const builder = require("electron-builder");
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
const os = process.platform;
 | 
			
		||||
const Platform = builder.Platform
 | 
			
		||||
const Arch = builder.Arch
 | 
			
		||||
const targets = new Map();
 | 
			
		||||
const archToType = new Map();
 | 
			
		||||
const pref = {
 | 
			
		||||
    productName: "TheDesk",
 | 
			
		||||
    appId: "top.thedesk",
 | 
			
		||||
    asarUnpack: [
 | 
			
		||||
        "node_modules/itunes-nowplaying-mac"
 | 
			
		||||
    ],
 | 
			
		||||
    directories: {
 | 
			
		||||
        output: "../build/"
 | 
			
		||||
    },
 | 
			
		||||
    win: {
 | 
			
		||||
        icon: "build/thedesk.ico",
 | 
			
		||||
        target: [
 | 
			
		||||
            "nsis",
 | 
			
		||||
            "portable",
 | 
			
		||||
            "appx"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    appx: {
 | 
			
		||||
        identityName: "53491Cutls.TheDesk",
 | 
			
		||||
        applicationId: "Cutls.TheDesk",
 | 
			
		||||
        publisherDisplayName: "Cutls",
 | 
			
		||||
        publisher: "CN=629757F5-A5EE-474F-9562-B304A89A9FD1",
 | 
			
		||||
        languages: [
 | 
			
		||||
            "JA-JP",
 | 
			
		||||
            "EN-US"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    nsis: {
 | 
			
		||||
        oneClick: false,
 | 
			
		||||
        allowToChangeInstallationDirectory: true
 | 
			
		||||
    },
 | 
			
		||||
    linux: {
 | 
			
		||||
        icon: "build/icons",
 | 
			
		||||
        target: [
 | 
			
		||||
            "zip",
 | 
			
		||||
            "snap"
 | 
			
		||||
        ],
 | 
			
		||||
        category: "Network"
 | 
			
		||||
    },
 | 
			
		||||
    mac: {
 | 
			
		||||
        target: [
 | 
			
		||||
            "dmg",
 | 
			
		||||
            "zip"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    electronDownload: {
 | 
			
		||||
        version: "5.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    electronVersion: "5.0.1"
 | 
			
		||||
}
 | 
			
		||||
const json = JSON.parse(fs.readFileSync("package.json", 'utf8'));
 | 
			
		||||
const version = json.version;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if (os == "win32") {
 | 
			
		||||
    archToType.set(Arch.ia32, []);
 | 
			
		||||
    targets.set(Platform.WINDOWS, archToType);
 | 
			
		||||
} else if (os == "linux") {
 | 
			
		||||
    archToType.set(Arch.x64, []);
 | 
			
		||||
    archToType.set(Arch.ia32, []);
 | 
			
		||||
    targets.set(Platform.LINUX, archToType);
 | 
			
		||||
} else if (os == "darwin") {
 | 
			
		||||
    archToType.set(Arch.x64, []);
 | 
			
		||||
    targets.set(Platform.MAC, archToType);
 | 
			
		||||
} else {
 | 
			
		||||
    return false
 | 
			
		||||
}
 | 
			
		||||
builder.build({
 | 
			
		||||
    targets: targets,
 | 
			
		||||
    config: pref
 | 
			
		||||
})
 | 
			
		||||
    .then(() => {
 | 
			
		||||
        console.log("Done on "+os)
 | 
			
		||||
        if (os == "win32") {
 | 
			
		||||
            console.log("Windows")
 | 
			
		||||
            fs.renameSync('../build/TheDesk ' + version + '.exe', '../build/TheDesk-ia32.exe');
 | 
			
		||||
            fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup-ia32.exe');
 | 
			
		||||
            retry()
 | 
			
		||||
        }else if (os == "linux") {
 | 
			
		||||
            console.log("Linux")
 | 
			
		||||
            fs.renameSync('../build/thedesk-' + version + '.zip', '../build/TheDesk.zip');
 | 
			
		||||
            fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup-ia32.exe');
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
    .catch((error) => {
 | 
			
		||||
        // handle error
 | 
			
		||||
    })
 | 
			
		||||
function retry(){
 | 
			
		||||
    console.log("Windows x64")
 | 
			
		||||
    const targetsAlt = new Map();
 | 
			
		||||
    const archToTypeAlt = new Map();
 | 
			
		||||
    targetsAlt.set(Platform.WINDOWS, archToTypeAlt);
 | 
			
		||||
    archToTypeAlt.set(Arch.x64, []);
 | 
			
		||||
    builder.build({
 | 
			
		||||
        targets: targetsAlt,
 | 
			
		||||
        config: pref
 | 
			
		||||
    })
 | 
			
		||||
        .then(() => {
 | 
			
		||||
            fs.renameSync('../build/TheDesk Setup ' + version + '.exe', '../build/TheDesk-setup.exe');
 | 
			
		||||
            fs.renameSync('../build/TheDesk ' + version + '.exe', '../build/TheDesk.exe');
 | 
			
		||||
        })
 | 
			
		||||
        .catch((error) => {
 | 
			
		||||
            // handle error
 | 
			
		||||
        })
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								app/build/appx/Square150x150Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 17 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/build/appx/Square44x44Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 14 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/build/appx/StoreLogo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 31 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/build/appx/Wide310x150Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 117 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/build/thedesk.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 9.7 KiB  | 
@@ -1,2 +1,4 @@
 | 
			
		||||
/*このソフトについてを押した時に読み込まれます*/
 | 
			
		||||
body{font-family:Open Sans;}
 | 
			
		||||
body {
 | 
			
		||||
  font-family: Open Sans;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										82
									
								
								app/css/acct.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,82 @@
 | 
			
		||||
.acct {
 | 
			
		||||
	display: flex;
 | 
			
		||||
	justify-content: space-around;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card {
 | 
			
		||||
	width: 400px;
 | 
			
		||||
	background-color: #494949;
 | 
			
		||||
	margin: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body,
 | 
			
		||||
html {
 | 
			
		||||
	overflow-y: scroll;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#acct-list {
 | 
			
		||||
	display: flex;
 | 
			
		||||
	flex-wrap: wrap;
 | 
			
		||||
	color: white;
 | 
			
		||||
	align-items: flex-start;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.lts {
 | 
			
		||||
	font-size: 150%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.colorsel {
 | 
			
		||||
	display: flex;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card .colorsel div:not(.exc) {
 | 
			
		||||
	width: 20px;
 | 
			
		||||
	height: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.card .colorsel div.exc {
 | 
			
		||||
	width: 40px;
 | 
			
		||||
	height: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.first {
 | 
			
		||||
	display: flex;
 | 
			
		||||
	justify-content: center;
 | 
			
		||||
	align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.first .hide-first {
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.hide-second {
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.first .hide-second {
 | 
			
		||||
	display: inline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#compt {
 | 
			
		||||
	margin-top: 20px;
 | 
			
		||||
	margin-bottom: 50px;
 | 
			
		||||
	border: 1px solid;
 | 
			
		||||
	border: 1px solid;
 | 
			
		||||
	padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#compt li {
 | 
			
		||||
	list-style-type: disc;
 | 
			
		||||
	margin-left: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#domain-list {
 | 
			
		||||
    width: 500px;
 | 
			
		||||
    max-width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
i.left {
 | 
			
		||||
    margin-right: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#domain-list .title {
 | 
			
		||||
   font-size: 1.3rem;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								app/css/font-awesome.css
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -5,9 +5,15 @@
 | 
			
		||||
/* FONT PATH
 | 
			
		||||
 * -------------------------- */
 | 
			
		||||
@font-face {
 | 
			
		||||
  font-family: 'FontAwesome';
 | 
			
		||||
  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
 | 
			
		||||
  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
 | 
			
		||||
  font-family: "FontAwesome";
 | 
			
		||||
  src: url("../fonts/fontawesome-webfont.eot?v=4.7.0");
 | 
			
		||||
  src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0")
 | 
			
		||||
      format("embedded-opentype"),
 | 
			
		||||
    url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),
 | 
			
		||||
    url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),
 | 
			
		||||
    url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),
 | 
			
		||||
    url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular")
 | 
			
		||||
      format("svg");
 | 
			
		||||
  font-weight: normal;
 | 
			
		||||
  font-style: normal;
 | 
			
		||||
}
 | 
			
		||||
@@ -60,9 +66,9 @@
 | 
			
		||||
  left: -1.85714286em;
 | 
			
		||||
}
 | 
			
		||||
.fa-border {
 | 
			
		||||
  padding: .2em .25em .15em;
 | 
			
		||||
  padding: 0.2em 0.25em 0.15em;
 | 
			
		||||
  border: solid 0.08em #eeeeee;
 | 
			
		||||
  border-radius: .1em;
 | 
			
		||||
  border-radius: 0.1em;
 | 
			
		||||
}
 | 
			
		||||
.fa-pull-left {
 | 
			
		||||
  float: left;
 | 
			
		||||
@@ -71,10 +77,10 @@
 | 
			
		||||
  float: right;
 | 
			
		||||
}
 | 
			
		||||
.fa.fa-pull-left {
 | 
			
		||||
  margin-right: .3em;
 | 
			
		||||
  margin-right: 0.3em;
 | 
			
		||||
}
 | 
			
		||||
.fa.fa-pull-right {
 | 
			
		||||
  margin-left: .3em;
 | 
			
		||||
  margin-left: 0.3em;
 | 
			
		||||
}
 | 
			
		||||
/* Deprecated as of 4.4.0 */
 | 
			
		||||
.pull-right {
 | 
			
		||||
@@ -84,10 +90,10 @@
 | 
			
		||||
  float: left;
 | 
			
		||||
}
 | 
			
		||||
.fa.pull-left {
 | 
			
		||||
  margin-right: .3em;
 | 
			
		||||
  margin-right: 0.3em;
 | 
			
		||||
}
 | 
			
		||||
.fa.pull-right {
 | 
			
		||||
  margin-left: .3em;
 | 
			
		||||
  margin-left: 0.3em;
 | 
			
		||||
}
 | 
			
		||||
.fa-spin {
 | 
			
		||||
  -webkit-animation: fa-spin 2s infinite linear;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,409 +1,608 @@
 | 
			
		||||
/*共通CSS*/
 | 
			
		||||
html,body{
 | 
			
		||||
  /*transform: translate3d(0,0,0);*/
 | 
			
		||||
  overflow:hidden;
 | 
			
		||||
  user-select: none;
 | 
			
		||||
  cursor:default;
 | 
			
		||||
  font-size:13px;
 | 
			
		||||
  height: 100vh;
 | 
			
		||||
  background-color: var(--bg);
 | 
			
		||||
  color: var(--color);
 | 
			
		||||
html,
 | 
			
		||||
body {
 | 
			
		||||
	/*transform: translate3d(0,0,0);*/
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	user-select: none;
 | 
			
		||||
	cursor: default;
 | 
			
		||||
	height: 100vh;
 | 
			
		||||
	color: var(--color);
 | 
			
		||||
}
 | 
			
		||||
body{
 | 
			
		||||
  border: thin solid gray;
 | 
			
		||||
html {
 | 
			
		||||
	font-size: 13px;
 | 
			
		||||
}
 | 
			
		||||
.btn {
 | 
			
		||||
  margin: 5px;
 | 
			
		||||
  text-transform: none;
 | 
			
		||||
.titlebar,
 | 
			
		||||
.menubar-menu-container,
 | 
			
		||||
.action-menu-item {
 | 
			
		||||
	background-color: var(--notfbox) !important;
 | 
			
		||||
	filter: brightness(110%) !important;
 | 
			
		||||
	color: var(--color) !important;
 | 
			
		||||
}
 | 
			
		||||
.action-menu-item:hover {
 | 
			
		||||
	filter: brightness(80%) !important;
 | 
			
		||||
}
 | 
			
		||||
.btn, .btn-flat {
 | 
			
		||||
	font-size: 1.1rem;
 | 
			
		||||
	margin: 0.4rem;
 | 
			
		||||
	text-transform: none;
 | 
			
		||||
	height: 2.76rem;
 | 
			
		||||
	line-height: 2.76rem;
 | 
			
		||||
}
 | 
			
		||||
.markdown {
 | 
			
		||||
  display: none;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
help {
 | 
			
		||||
  display: none;
 | 
			
		||||
.accessMark {
 | 
			
		||||
	font-size: 12px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
	text-overflow: ellipsis;
 | 
			
		||||
	background-color: var(--emphasized);
 | 
			
		||||
	padding-left: 5px;
 | 
			
		||||
	padding-right: 5px;
 | 
			
		||||
}
 | 
			
		||||
.accessibility .scr {
 | 
			
		||||
	display: none !important;
 | 
			
		||||
}
 | 
			
		||||
.show-help {
 | 
			
		||||
  display: inline;
 | 
			
		||||
	display: inline;
 | 
			
		||||
}
 | 
			
		||||
option {
 | 
			
		||||
  display: none;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
#mainView {
 | 
			
		||||
  padding: 10px;
 | 
			
		||||
	padding: 10px;
 | 
			
		||||
	overflow: scroll;
 | 
			
		||||
	height: auto;
 | 
			
		||||
}
 | 
			
		||||
#message {
 | 
			
		||||
  display: none;
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  background-color: black;
 | 
			
		||||
  color: white;
 | 
			
		||||
  z-index: 9999;
 | 
			
		||||
	display: none;
 | 
			
		||||
	position: fixed;
 | 
			
		||||
	bottom: 0;
 | 
			
		||||
	left: 0;
 | 
			
		||||
	background-color: black;
 | 
			
		||||
	color: white;
 | 
			
		||||
	z-index: 9999;
 | 
			
		||||
}
 | 
			
		||||
#imagemodal, #videomodal {
 | 
			
		||||
  display: none;
 | 
			
		||||
  max-width: 100vw;
 | 
			
		||||
  max-height: 100vh;
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  z-index: 9;
 | 
			
		||||
#imagemodal,
 | 
			
		||||
#videomodal {
 | 
			
		||||
	display: none;
 | 
			
		||||
	max-width: 100vw;
 | 
			
		||||
	max-height: 100vh;
 | 
			
		||||
	position: fixed;
 | 
			
		||||
	z-index: 9;
 | 
			
		||||
	top: 0 !important;
 | 
			
		||||
}
 | 
			
		||||
#videomodal, #tootmodal {
 | 
			
		||||
  background-color: var(--modal);
 | 
			
		||||
#videomodal,
 | 
			
		||||
#tootmodal {
 | 
			
		||||
	background-color: var(--modal);
 | 
			
		||||
}
 | 
			
		||||
#imagemodal .modal-content {
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  padding:0;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
}
 | 
			
		||||
#imagemodal .modal-footer{
 | 
			
		||||
  overflow-x:scroll;
 | 
			
		||||
  overflow-y:hidden;
 | 
			
		||||
#imagemodal .modal-footer {
 | 
			
		||||
	overflow-x: hidden;
 | 
			
		||||
	overflow-y: hidden;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#imagewrap {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: 100%;
 | 
			
		||||
}
 | 
			
		||||
.pointer {
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.badge{
 | 
			
		||||
   min-width: 0 !important;
 | 
			
		||||
   margin-left: 5px !important;
 | 
			
		||||
.badge {
 | 
			
		||||
	min-width: 0 !important;
 | 
			
		||||
	margin-left: 0.4rem !important;
 | 
			
		||||
}
 | 
			
		||||
.bbcode-pulse-loadings, .bbcode-pulse-loading, .fa-pulse {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  animation-duration: 3s;
 | 
			
		||||
  animation-fill-mode: both;
 | 
			
		||||
  animation-iteration-count: infinite;
 | 
			
		||||
  animation-name: pulse;
 | 
			
		||||
.unvisible {
 | 
			
		||||
	opacity: 0;
 | 
			
		||||
}
 | 
			
		||||
.bbcode-pulse-loadings,
 | 
			
		||||
.bbcode-pulse-loading,
 | 
			
		||||
.fa-pulse {
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	animation-duration: 3s;
 | 
			
		||||
	animation-fill-mode: both;
 | 
			
		||||
	animation-iteration-count: infinite;
 | 
			
		||||
	animation-name: pulse;
 | 
			
		||||
}
 | 
			
		||||
@keyframes pulse {
 | 
			
		||||
  from, 50%, to {
 | 
			
		||||
    opacity: 1;
 | 
			
		||||
  }
 | 
			
		||||
  25%, 75% {
 | 
			
		||||
    opacity: 0;
 | 
			
		||||
  }
 | 
			
		||||
	from,
 | 
			
		||||
	50%,
 | 
			
		||||
	to {
 | 
			
		||||
		opacity: 1;
 | 
			
		||||
	}
 | 
			
		||||
	25%,
 | 
			
		||||
	75% {
 | 
			
		||||
		opacity: 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@keyframes shake {
 | 
			
		||||
  from,
 | 
			
		||||
  to {
 | 
			
		||||
    -webkit-transform: translate3d(0, 0, 0);
 | 
			
		||||
    transform: translate3d(0, 0, 0);
 | 
			
		||||
  }
 | 
			
		||||
	from,
 | 
			
		||||
	to {
 | 
			
		||||
		-webkit-transform: translate3d(0, 0, 0);
 | 
			
		||||
		transform: translate3d(0, 0, 0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  10%,
 | 
			
		||||
  30%,
 | 
			
		||||
  50%,
 | 
			
		||||
  70%,
 | 
			
		||||
  90% {
 | 
			
		||||
    -webkit-transform: translate3d(-10px, 0, 0);
 | 
			
		||||
    transform: translate3d(-10px, 0, 0);
 | 
			
		||||
  }
 | 
			
		||||
	10%,
 | 
			
		||||
	30%,
 | 
			
		||||
	50%,
 | 
			
		||||
	70%,
 | 
			
		||||
	90% {
 | 
			
		||||
		-webkit-transform: translate3d(-10px, 0, 0);
 | 
			
		||||
		transform: translate3d(-10px, 0, 0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  20%,
 | 
			
		||||
  40%,
 | 
			
		||||
  60%,
 | 
			
		||||
  80% {
 | 
			
		||||
    -webkit-transform: translate3d(10px, 0, 0);
 | 
			
		||||
    transform: translate3d(10px, 0, 0);
 | 
			
		||||
  }
 | 
			
		||||
	20%,
 | 
			
		||||
	40%,
 | 
			
		||||
	60%,
 | 
			
		||||
	80% {
 | 
			
		||||
		-webkit-transform: translate3d(10px, 0, 0);
 | 
			
		||||
		transform: translate3d(10px, 0, 0);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.shake {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  animation-duration: 1s;
 | 
			
		||||
  animation-fill-mode: both;
 | 
			
		||||
  animation-iteration-count: infinite;
 | 
			
		||||
  animation-name: shake;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	animation-duration: 1s;
 | 
			
		||||
	animation-fill-mode: both;
 | 
			
		||||
	animation-iteration-count: infinite;
 | 
			
		||||
	animation-name: shake;
 | 
			
		||||
}
 | 
			
		||||
code:before, .pre:before {
 | 
			
		||||
  content: "Code";
 | 
			
		||||
  font-size: 1.8rem;
 | 
			
		||||
  line-height: 1em;
 | 
			
		||||
  font-family: monospace, monospace;
 | 
			
		||||
  color: #999;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  right: 0;
 | 
			
		||||
  top: 0;
 | 
			
		||||
code:before,
 | 
			
		||||
.pre:before {
 | 
			
		||||
	content: 'Code';
 | 
			
		||||
	font-size: 1.8rem;
 | 
			
		||||
	line-height: 1em;
 | 
			
		||||
	font-family: monospace, monospace;
 | 
			
		||||
	color: #999;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	right: 0;
 | 
			
		||||
	top: 0;
 | 
			
		||||
}
 | 
			
		||||
code, pre {
 | 
			
		||||
  color: white;
 | 
			
		||||
  display: block;
 | 
			
		||||
  border-left: 5px solid;
 | 
			
		||||
  border-color: #079903;
 | 
			
		||||
  padding-left: 10px;
 | 
			
		||||
  margin-top: 5px;
 | 
			
		||||
  margin-bottom: 5px;
 | 
			
		||||
  margin-left: 5px;
 | 
			
		||||
  background-color: #000;
 | 
			
		||||
  padding: 1em 1em 1em;
 | 
			
		||||
  position: relative;
 | 
			
		||||
  border-top-left-radius: 10px;
 | 
			
		||||
  border-bottom-right-radius: 10px;
 | 
			
		||||
  border-bottom-left-radius: 10px;
 | 
			
		||||
code,
 | 
			
		||||
pre {
 | 
			
		||||
	color: white;
 | 
			
		||||
	display: block;
 | 
			
		||||
	border-left: 5px solid;
 | 
			
		||||
	border-color: #079903;
 | 
			
		||||
	padding-left: 0.75rem;
 | 
			
		||||
	margin-top: 0.75rem;
 | 
			
		||||
	margin-bottom: 0.75rem;
 | 
			
		||||
	margin-left: 0.75rem;
 | 
			
		||||
	background-color: #000;
 | 
			
		||||
	padding: 1em 1em 1em;
 | 
			
		||||
	position: relative;
 | 
			
		||||
	border-top-left-radius: 0.75rem;
 | 
			
		||||
	border-bottom-right-radius: 0.75rem;
 | 
			
		||||
	border-bottom-left-radius: 0.75rem;
 | 
			
		||||
	white-space: normal;
 | 
			
		||||
}
 | 
			
		||||
blockquote, .quote p {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
blockquote,
 | 
			
		||||
.quote p {
 | 
			
		||||
	margin: 0;
 | 
			
		||||
}
 | 
			
		||||
blockquote, .quote {
 | 
			
		||||
  color: black;
 | 
			
		||||
  background-color: #ddd;
 | 
			
		||||
  padding: 1em 1em 1em;
 | 
			
		||||
  position: relative;
 | 
			
		||||
  border-top-left-radius: 10px;
 | 
			
		||||
  border-bottom-right-radius: 10px;
 | 
			
		||||
  border-bottom-left-radius: 10px;
 | 
			
		||||
blockquote,
 | 
			
		||||
.quote {
 | 
			
		||||
	color: black;
 | 
			
		||||
	background-color: #ddd;
 | 
			
		||||
	padding: 1em 1em 1em;
 | 
			
		||||
	position: relative;
 | 
			
		||||
	border-top-left-radius: 0.75rem;
 | 
			
		||||
	border-bottom-right-radius: 0.75rem;
 | 
			
		||||
	border-bottom-left-radius: 0.5rem;
 | 
			
		||||
}
 | 
			
		||||
blockquote:before, .quote:before {
 | 
			
		||||
  content: "Quote";
 | 
			
		||||
  font-size: 1.8rem;
 | 
			
		||||
  line-height: 1em;
 | 
			
		||||
  font-family: Open Sans, cursive;
 | 
			
		||||
  color: #999;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  right: 0;
 | 
			
		||||
  top: 0;
 | 
			
		||||
}
 | 
			
		||||
.twitter-tweet {
 | 
			
		||||
  color: black;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
  padding: 1em 1em 1em;
 | 
			
		||||
  position: relative;
 | 
			
		||||
  border-top-left-radius: 10px;
 | 
			
		||||
  border-bottom-right-radius: 10px;
 | 
			
		||||
  border-bottom-left-radius: 10px;
 | 
			
		||||
  border-left: 5px solid #0c7abf;
 | 
			
		||||
}
 | 
			
		||||
.twitter-tweet :before {
 | 
			
		||||
  content: "From Twitter";
 | 
			
		||||
  font-size: 1.8rem;
 | 
			
		||||
  line-height: 1em;
 | 
			
		||||
  font-family: Open Sans;
 | 
			
		||||
  color: #999;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  right: 0;
 | 
			
		||||
  top: 0;
 | 
			
		||||
blockquote:before,
 | 
			
		||||
.quote:before {
 | 
			
		||||
	content: 'Quote';
 | 
			
		||||
	font-size: 1.8rem;
 | 
			
		||||
	line-height: 1em;
 | 
			
		||||
	font-family: Open Sans, cursive;
 | 
			
		||||
	color: #999;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	right: 0;
 | 
			
		||||
	top: 0;
 | 
			
		||||
}
 | 
			
		||||
.pixiv-post {
 | 
			
		||||
  color: black;
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
  padding: 1em 1em 1em;
 | 
			
		||||
  position: relative;
 | 
			
		||||
  border-top-left-radius: 10px;
 | 
			
		||||
  border-bottom-right-radius: 10px;
 | 
			
		||||
  border-bottom-left-radius: 10px;
 | 
			
		||||
  border-left: 5px solid #0096fa;
 | 
			
		||||
	color: black;
 | 
			
		||||
	background-color: #fff;
 | 
			
		||||
	padding: 1em 1em 1em;
 | 
			
		||||
	position: relative;
 | 
			
		||||
	border-top-left-radius: 0.75rem;
 | 
			
		||||
	border-bottom-right-radius: 0.75rem;
 | 
			
		||||
	border-bottom-left-radius: 0.75rem;
 | 
			
		||||
	border-left: 5px solid #0096fa;
 | 
			
		||||
}
 | 
			
		||||
.pixiv-post :before {
 | 
			
		||||
  content: "From Pixiv";
 | 
			
		||||
  font-size: 1.8rem;
 | 
			
		||||
  line-height: 1em;
 | 
			
		||||
  font-family: Open Sans;
 | 
			
		||||
  color: #999;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  right: 0;
 | 
			
		||||
  top: 0;
 | 
			
		||||
	content: 'From Pixiv';
 | 
			
		||||
	font-size: 1.8rem;
 | 
			
		||||
	line-height: 1em;
 | 
			
		||||
	font-family: Open Sans;
 | 
			
		||||
	color: #999;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	right: 0;
 | 
			
		||||
	top: 0;
 | 
			
		||||
}
 | 
			
		||||
#start {
 | 
			
		||||
	display: none;
 | 
			
		||||
	position: fixed;
 | 
			
		||||
	width: 100vw;
 | 
			
		||||
	height: calc(100vh - 3rem);
 | 
			
		||||
	background-color: var(--bg);
 | 
			
		||||
	color: var(--color);
 | 
			
		||||
	z-index: 99999;
 | 
			
		||||
	justify-content: center;
 | 
			
		||||
	align-items: center;
 | 
			
		||||
}
 | 
			
		||||
#drag {
 | 
			
		||||
  display: none;
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  width: 100vw;
 | 
			
		||||
  height: 100vh;
 | 
			
		||||
  background-color: var(--bg);
 | 
			
		||||
  color: var(--color);
 | 
			
		||||
  z-index: 99999;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
	display: none;
 | 
			
		||||
	position: fixed;
 | 
			
		||||
	width: 100vw;
 | 
			
		||||
	height: 100vh;
 | 
			
		||||
	background-color: var(--bg);
 | 
			
		||||
	color: var(--color);
 | 
			
		||||
	z-index: 99999;
 | 
			
		||||
	justify-content: center;
 | 
			
		||||
	align-items: center;
 | 
			
		||||
}
 | 
			
		||||
#drag-content {
 | 
			
		||||
  font-size: 2rem;
 | 
			
		||||
	font-size: 2rem;
 | 
			
		||||
}
 | 
			
		||||
.radio{
 | 
			
		||||
  font-family:'Baloo Bhai'
 | 
			
		||||
#pip {
 | 
			
		||||
	z-index: 504;
 | 
			
		||||
	width: 418px;
 | 
			
		||||
	background-color: var(--subcolor);
 | 
			
		||||
	position: absolute;
 | 
			
		||||
}
 | 
			
		||||
#pip{
 | 
			
		||||
  z-index:504;
 | 
			
		||||
  width:418px;
 | 
			
		||||
  background-color: var(--subcolor);
 | 
			
		||||
  position:absolute;
 | 
			
		||||
.pip-bottom {
 | 
			
		||||
	bottom: 10px;
 | 
			
		||||
}
 | 
			
		||||
.pip-bottom{
 | 
			
		||||
  bottom:10px;
 | 
			
		||||
.pip-left {
 | 
			
		||||
	left: 10px;
 | 
			
		||||
}
 | 
			
		||||
.pip-left{
 | 
			
		||||
  left:10px;
 | 
			
		||||
.pip-top {
 | 
			
		||||
	top: 10px;
 | 
			
		||||
}
 | 
			
		||||
.pip-top{
 | 
			
		||||
  top:10px;
 | 
			
		||||
.pip-right {
 | 
			
		||||
	right: 10px;
 | 
			
		||||
}
 | 
			
		||||
.pip-right{
 | 
			
		||||
  right:10px;
 | 
			
		||||
#pip-content .material-icons {
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
#pip-content .material-icons{
 | 
			
		||||
  display:none;
 | 
			
		||||
}
 | 
			
		||||
.big-text{
 | 
			
		||||
  font-size:1.2rem;
 | 
			
		||||
.big-text {
 | 
			
		||||
	font-size: 1.2rem;
 | 
			
		||||
}
 | 
			
		||||
#releasenote {
 | 
			
		||||
  background-color: var(--modal);
 | 
			
		||||
	background-color: var(--modal);
 | 
			
		||||
}
 | 
			
		||||
#releasenote li{
 | 
			
		||||
  list-style-type: disc
 | 
			
		||||
#releasenote li {
 | 
			
		||||
	list-style-type: disc;
 | 
			
		||||
}
 | 
			
		||||
@media only screen and (min-width: 993px){
 | 
			
		||||
#toast-container {
 | 
			
		||||
    top:auto;
 | 
			
		||||
    right:auto;
 | 
			
		||||
    bottom: 5%;
 | 
			
		||||
    left: 4%;
 | 
			
		||||
    max-width: 86%;
 | 
			
		||||
@media only screen and (min-width: 993px) {
 | 
			
		||||
	#toast-container {
 | 
			
		||||
		top: auto;
 | 
			
		||||
		right: auto;
 | 
			
		||||
		bottom: 5%;
 | 
			
		||||
		left: 4%;
 | 
			
		||||
		max-width: 86%;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
.show {
 | 
			
		||||
	animation: show 0.2s linear 0s;
 | 
			
		||||
}
 | 
			
		||||
.show{
 | 
			
		||||
  animation: show 0.2s linear 0s;
 | 
			
		||||
@keyframes show {
 | 
			
		||||
	from {
 | 
			
		||||
		opacity: 0;
 | 
			
		||||
	}
 | 
			
		||||
	to {
 | 
			
		||||
		opacity: 1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@keyframes show{
 | 
			
		||||
  from{
 | 
			
		||||
      opacity: 0;
 | 
			
		||||
  }
 | 
			
		||||
  to{
 | 
			
		||||
      opacity: 1;
 | 
			
		||||
  }
 | 
			
		||||
.hide-anime {
 | 
			
		||||
	animation: hide 0.2s linear 0s;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.hide-anime{
 | 
			
		||||
  animation: hide 0.2s linear 0s;
 | 
			
		||||
  display:none;
 | 
			
		||||
@keyframes hide {
 | 
			
		||||
	from {
 | 
			
		||||
		opacity: 1;
 | 
			
		||||
	}
 | 
			
		||||
	to {
 | 
			
		||||
		opacity: 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@keyframes hide{
 | 
			
		||||
  from{
 | 
			
		||||
      opacity: 1;
 | 
			
		||||
  }
 | 
			
		||||
  to{
 | 
			
		||||
      opacity: 0;
 | 
			
		||||
  }
 | 
			
		||||
.collapsible-header,
 | 
			
		||||
.tabs {
 | 
			
		||||
	background-color: var(--subcolor);
 | 
			
		||||
}
 | 
			
		||||
.collapsible-header,.tabs{
 | 
			
		||||
  background-color: var(--subcolor);
 | 
			
		||||
.collapsible-header:focus {
 | 
			
		||||
	background-color: var(--subcolor) !important;
 | 
			
		||||
}
 | 
			
		||||
.modal-footer{
 | 
			
		||||
  background-color: var(--modalfooter) !important;
 | 
			
		||||
.modal-footer {
 | 
			
		||||
	background-color: var(--modalfooter) !important;
 | 
			
		||||
}
 | 
			
		||||
.font{
 | 
			
		||||
  font-size:1.5rem;
 | 
			
		||||
  margin-bottom:5px;
 | 
			
		||||
.font {
 | 
			
		||||
	font-size: 1.5rem;
 | 
			
		||||
	margin-bottom: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
.font:hover{
 | 
			
		||||
  background-color: #999;
 | 
			
		||||
.font:hover {
 | 
			
		||||
	background-color: #999;
 | 
			
		||||
}
 | 
			
		||||
.release-do{
 | 
			
		||||
  border: solid 2px;
 | 
			
		||||
  border-color:var(--color);
 | 
			
		||||
  padding:5px;
 | 
			
		||||
.release-do {
 | 
			
		||||
	border: solid 2px;
 | 
			
		||||
	border-color: var(--color);
 | 
			
		||||
	padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
#pickers{
 | 
			
		||||
  display:flex;
 | 
			
		||||
  flex-wrap: wrap;
 | 
			
		||||
#pickers {
 | 
			
		||||
	display: flex;
 | 
			
		||||
	flex-wrap: wrap;
 | 
			
		||||
}
 | 
			
		||||
#menu{
 | 
			
		||||
  position:fixed;
 | 
			
		||||
  z-index:9999;
 | 
			
		||||
  background-color: var(--box);
 | 
			
		||||
  width:540px;
 | 
			
		||||
  top:calc(50% - 150px);
 | 
			
		||||
  left:calc(50% - 250px);
 | 
			
		||||
  padding: 5px;
 | 
			
		||||
  border: thin solid gray;
 | 
			
		||||
  border-radius:5px;
 | 
			
		||||
#menu {
 | 
			
		||||
	position: fixed;
 | 
			
		||||
	z-index: 9999;
 | 
			
		||||
	background-color: var(--postbox);
 | 
			
		||||
	width: 540px;
 | 
			
		||||
	top: calc(50% - 150px);
 | 
			
		||||
	left: calc(50% - 250px);
 | 
			
		||||
	padding: 0.4rem;
 | 
			
		||||
	border: thin solid gray;
 | 
			
		||||
	border-radius: 0.4rem;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
#menu-wrapper{
 | 
			
		||||
  margin-left:-5px;
 | 
			
		||||
  display:flex;
 | 
			
		||||
#menu-wrapper {
 | 
			
		||||
	margin-left: -5px;
 | 
			
		||||
	display: flex;
 | 
			
		||||
	height: calc(100% - 3.5rem);
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
#left-menu{
 | 
			
		||||
  width:170px;
 | 
			
		||||
#left-menu {
 | 
			
		||||
	width: 17.7rem;
 | 
			
		||||
}
 | 
			
		||||
#left-menu div{
 | 
			
		||||
  padding-left:5px;
 | 
			
		||||
  width:100%;
 | 
			
		||||
  height:50px;
 | 
			
		||||
  display:flex;
 | 
			
		||||
  align-items:center;
 | 
			
		||||
  cursor:pointer;
 | 
			
		||||
#left-menu a {
 | 
			
		||||
	padding-left: 0.4rem;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: 3rem;
 | 
			
		||||
	display: flex;
 | 
			
		||||
	align-items: center;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	color: var(--color);
 | 
			
		||||
}
 | 
			
		||||
#left-menu div:hover {
 | 
			
		||||
  background-color: var(--beforehover);
 | 
			
		||||
#left-menu a:hover {
 | 
			
		||||
	background-color: var(--beforehover);
 | 
			
		||||
}
 | 
			
		||||
#left-menu span{
 | 
			
		||||
  margin-left:5px;
 | 
			
		||||
#left-menu span {
 | 
			
		||||
	margin-left: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
#left-menu div.active{
 | 
			
		||||
  background-color: var(--emphasized);
 | 
			
		||||
#left-menu a.active {
 | 
			
		||||
	background-color: var(--emphasized);
 | 
			
		||||
}
 | 
			
		||||
#right-menu{
 | 
			
		||||
  width:380px;
 | 
			
		||||
  max-height:375px;
 | 
			
		||||
  overflow-y:scroll;
 | 
			
		||||
  overflow-x:hidden;
 | 
			
		||||
  padding:5px;
 | 
			
		||||
#right-menu {
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	overflow-y: scroll;
 | 
			
		||||
	overflow-x: hidden;
 | 
			
		||||
	padding: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
#tltype{
 | 
			
		||||
  display:flex;
 | 
			
		||||
  flex-wrap: wrap;
 | 
			
		||||
  
 | 
			
		||||
#tltype {
 | 
			
		||||
	display: flex;
 | 
			
		||||
	flex-wrap: wrap;
 | 
			
		||||
}
 | 
			
		||||
#tltype .type{
 | 
			
		||||
  display:flex;
 | 
			
		||||
  flex-wrap: wrap;
 | 
			
		||||
  align-items:center;
 | 
			
		||||
  width:170px;
 | 
			
		||||
  height:40px;
 | 
			
		||||
  cursor:pointer;
 | 
			
		||||
#tltype .type {
 | 
			
		||||
	display: flex;
 | 
			
		||||
	flex-wrap: wrap;
 | 
			
		||||
	align-items: center;
 | 
			
		||||
	width: 13rem;
 | 
			
		||||
	height: 3.1rem;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	color: var(--color);
 | 
			
		||||
}
 | 
			
		||||
#tltype .type span {
 | 
			
		||||
	width: calc(100% - 2.3rem);
 | 
			
		||||
}
 | 
			
		||||
#tltype .type:hover {
 | 
			
		||||
  background-color: var(--beforehover);
 | 
			
		||||
	background-color: var(--beforehover);
 | 
			
		||||
}
 | 
			
		||||
#tltype .active{
 | 
			
		||||
  background-color: var(--emphasized);
 | 
			
		||||
#tltype .active {
 | 
			
		||||
	background-color: var(--emphasized);
 | 
			
		||||
}
 | 
			
		||||
#tltype i{
 | 
			
		||||
  font-size:30px;
 | 
			
		||||
#tltype i {
 | 
			
		||||
	font-size: 2.3rem;
 | 
			
		||||
}
 | 
			
		||||
#tltype i.sub-icon {
 | 
			
		||||
	font-size: 1.53rem;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	color: var(--beforehover);
 | 
			
		||||
	left: 0.9rem;
 | 
			
		||||
	bottom: 0.4rem;
 | 
			
		||||
	background-color: #fff;
 | 
			
		||||
}
 | 
			
		||||
.drag-bar {
 | 
			
		||||
	cursor: move;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	width: calc(100% + 0.8rem);
 | 
			
		||||
	border-radius: 5px;
 | 
			
		||||
	background-color: var(--box);
 | 
			
		||||
	filter: brightness(80%);
 | 
			
		||||
	margin-left: -0.4rem;
 | 
			
		||||
	margin-right: -0.4rem;
 | 
			
		||||
	margin-top: -0.4rem;
 | 
			
		||||
	font-size: 1.3rem;
 | 
			
		||||
	padding: 0.3rem;
 | 
			
		||||
}
 | 
			
		||||
#something-wrong {
 | 
			
		||||
	flex-direction: column;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: 100%;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	display: flex;
 | 
			
		||||
	justify-content: center;
 | 
			
		||||
	align-items: center;
 | 
			
		||||
}
 | 
			
		||||
#support-btm {
 | 
			
		||||
	position: fixed;
 | 
			
		||||
	bottom: -300px;
 | 
			
		||||
	width: 100vw;
 | 
			
		||||
	background-color: var(--box);
 | 
			
		||||
	z-index: 9999;
 | 
			
		||||
	padding: 0.8rem;
 | 
			
		||||
	display: grid;
 | 
			
		||||
	grid-template-columns: 3fr 1fr 1fr;
 | 
			
		||||
	grid-template-rows: 1fr 2.7rem;
 | 
			
		||||
	grid-template-areas: 'note middle right' 'note close close';
 | 
			
		||||
}
 | 
			
		||||
#support-btm-en,
 | 
			
		||||
#support-btm-ja {
 | 
			
		||||
	grid-area: note;
 | 
			
		||||
}
 | 
			
		||||
#support-btm-middle {
 | 
			
		||||
	grid-area: middle;
 | 
			
		||||
}
 | 
			
		||||
#support-btm-right {
 | 
			
		||||
	grid-area: right;
 | 
			
		||||
}
 | 
			
		||||
#support-btm-close {
 | 
			
		||||
	grid-area: close;
 | 
			
		||||
}
 | 
			
		||||
.select-wrapper .dropdown-content {
 | 
			
		||||
	width: 19.2rem !important;
 | 
			
		||||
}
 | 
			
		||||
input,
 | 
			
		||||
textarea {
 | 
			
		||||
	color: var(--color);
 | 
			
		||||
	font-size: 1rem !important;
 | 
			
		||||
	font-family: inherit;
 | 
			
		||||
}
 | 
			
		||||
.swal2-popup {
 | 
			
		||||
	background-color: var(--notfbox) !important;
 | 
			
		||||
}
 | 
			
		||||
.swal2-title,
 | 
			
		||||
.swal2-content {
 | 
			
		||||
	color: var(--color) !important;
 | 
			
		||||
}
 | 
			
		||||
#src-contents svg {
 | 
			
		||||
	margin-right: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
.contributor {
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.contributor img {
 | 
			
		||||
	width: 1rem;
 | 
			
		||||
}
 | 
			
		||||
.tagComp {
 | 
			
		||||
	display: grid;
 | 
			
		||||
	grid-template-columns: 4.6rem 6.15rem 1fr;
 | 
			
		||||
	grid-template-rows: 1fr 1fr;
 | 
			
		||||
	grid-template-areas: 'svg toot user' 'svg toot tag' 'svg toots tag';
 | 
			
		||||
	border-top: dotted 0.5px var(--gray);
 | 
			
		||||
	padding: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
.tagCompSvg {
 | 
			
		||||
	grid-area: svg;
 | 
			
		||||
}
 | 
			
		||||
.tagCompToot {
 | 
			
		||||
	grid-area: toot;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
}
 | 
			
		||||
.tagCompToots {
 | 
			
		||||
	grid-area: toots;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
}
 | 
			
		||||
.tagCompUser {
 | 
			
		||||
	grid-area: user;
 | 
			
		||||
}
 | 
			
		||||
.tagCompTag {
 | 
			
		||||
	grid-area: tag;
 | 
			
		||||
	padding-top: 0.4rem;
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
	text-overflow: ellipsis;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
#sabakanMark {
 | 
			
		||||
	background-color: var(--emphasized);
 | 
			
		||||
}
 | 
			
		||||
#pageSrc {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	left: calc(50vw - 11.53rem);
 | 
			
		||||
	width: 23rem;
 | 
			
		||||
	max-width: 100%;
 | 
			
		||||
	background-color: var(--box);
 | 
			
		||||
	z-index: 501;
 | 
			
		||||
	padding: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
#pageSrcInput {
 | 
			
		||||
	width: 12.3rem;
 | 
			
		||||
}
 | 
			
		||||
.voice {
 | 
			
		||||
	clip: rect(1px, 1px, 1px, 1px);
 | 
			
		||||
	position: absolute !important;
 | 
			
		||||
	height: 1px;
 | 
			
		||||
	width: 1px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
#tltype i.sub-icon{
 | 
			
		||||
  font-size: 20px;
 | 
			
		||||
  position: relative;
 | 
			
		||||
  color: var(--beforehover);
 | 
			
		||||
  left: -15px;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
.drag-bar{
 | 
			
		||||
  cursor:move;
 | 
			
		||||
  text-align:center;
 | 
			
		||||
  width:calc(100% + 10px);
 | 
			
		||||
  border-radius: 5px;
 | 
			
		||||
  background-color: var(--bg);
 | 
			
		||||
  margin-left:-5px;
 | 
			
		||||
  margin-right:-5px;
 | 
			
		||||
  margin-top:-5px;
 | 
			
		||||
  font-size:16px;
 | 
			
		||||
  padding:4px;
 | 
			
		||||
@media (max-width: 500px) {
 | 
			
		||||
	#pageSrc {
 | 
			
		||||
		left: 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*スクロールバー*/
 | 
			
		||||
::-webkit-scrollbar {
 | 
			
		||||
  width: 5px;
 | 
			
		||||
  height: 10px;
 | 
			
		||||
  background: rgba(0, 0, 0, 0.05);
 | 
			
		||||
	width: 5px;
 | 
			
		||||
	height: 10px;
 | 
			
		||||
	background: rgba(0, 0, 0, 0.05);
 | 
			
		||||
}
 | 
			
		||||
::-webkit-scrollbar-track {
 | 
			
		||||
  -webkit-border-radius: 5px;
 | 
			
		||||
  border-radius: 5px;
 | 
			
		||||
	-webkit-border-radius: 5px;
 | 
			
		||||
	border-radius: 5px;
 | 
			
		||||
}
 | 
			
		||||
/* Handle */
 | 
			
		||||
::-webkit-scrollbar-thumb {
 | 
			
		||||
  -webkit-border-radius: 5px;
 | 
			
		||||
  border-radius: 5px;
 | 
			
		||||
  background: #607d8b;
 | 
			
		||||
  -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
 | 
			
		||||
	-webkit-border-radius: 5px;
 | 
			
		||||
	border-radius: 5px;
 | 
			
		||||
	background: #607d8b;
 | 
			
		||||
	-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
 | 
			
		||||
}
 | 
			
		||||
/* Web Fonts */
 | 
			
		||||
@font-face {
 | 
			
		||||
	font-family: 'Open Sans';
 | 
			
		||||
	font-style: normal;
 | 
			
		||||
	font-weight: 300;
 | 
			
		||||
	src: local('Open Sans Light'), local('OpenSans-Light'), url('../fonts/OpenSans-Light.ttf') format('truetype');
 | 
			
		||||
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
 | 
			
		||||
}
 | 
			
		||||
@font-face {
 | 
			
		||||
	font-family: 'Material Icons';
 | 
			
		||||
	font-style: normal;
 | 
			
		||||
	font-weight: 400;
 | 
			
		||||
	src: url(https://fonts.gstatic.com/s/materialicons/v48/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');
 | 
			
		||||
}
 | 
			
		||||
.material-icons {
 | 
			
		||||
	font-family: 'Material Icons';
 | 
			
		||||
	font-weight: normal;
 | 
			
		||||
	font-style: normal;
 | 
			
		||||
	font-size: 1.84rem;
 | 
			
		||||
	line-height: 1;
 | 
			
		||||
	letter-spacing: normal;
 | 
			
		||||
	text-transform: none;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
	word-wrap: normal;
 | 
			
		||||
	direction: ltr;
 | 
			
		||||
	-webkit-font-feature-settings: 'liga';
 | 
			
		||||
	-webkit-font-smoothing: antialiased;
 | 
			
		||||
}
 | 
			
		||||
.pwaView .pwa,
 | 
			
		||||
.pwaView .mac,
 | 
			
		||||
.pwaView .win {
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.win32 .mac,
 | 
			
		||||
.linux .mac {
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.linux .win,
 | 
			
		||||
.darwin .win {
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9411
									
								
								app/css/materialize.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										16
									
								
								app/css/materialize.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										187
									
								
								app/css/post.css
									
									
									
									
									
								
							
							
						
						@@ -1,137 +1,148 @@
 | 
			
		||||
/*トゥートボックス向けCSS*/
 | 
			
		||||
#post-box {
 | 
			
		||||
  display:none;
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  left: calc(50vw - 150px);
 | 
			
		||||
  top: 50vh;
 | 
			
		||||
  background-color: var(--postbox);
 | 
			
		||||
  border: thin solid gray;
 | 
			
		||||
  z-index: 501;
 | 
			
		||||
  min-width:300px;
 | 
			
		||||
  max-width:100%;
 | 
			
		||||
  padding: 5px;
 | 
			
		||||
  border-radius:5px;
 | 
			
		||||
	display: none;
 | 
			
		||||
	position: fixed;
 | 
			
		||||
	left: calc(50vw - 150px);
 | 
			
		||||
	top: 50vh;
 | 
			
		||||
	background-color: var(--postbox);
 | 
			
		||||
	border: thin solid gray;
 | 
			
		||||
	z-index: 501;
 | 
			
		||||
	max-width: 100%;
 | 
			
		||||
	padding: 0.4rem;
 | 
			
		||||
	border-radius: 0.4rem;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
textarea {
 | 
			
		||||
	min-height: 7.7rem !important;
 | 
			
		||||
	font-family: inherit;
 | 
			
		||||
}
 | 
			
		||||
#post-box .ui-resizable-s,
 | 
			
		||||
#post-box .ui-resizable-se {
 | 
			
		||||
	display: none !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.cancel {
 | 
			
		||||
  font-size: 0.5rem;
 | 
			
		||||
  color: gray;
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  right: 2px;
 | 
			
		||||
  top:4px;
 | 
			
		||||
 | 
			
		||||
	font-size: 0.5rem;
 | 
			
		||||
	color: gray;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	right: 2px;
 | 
			
		||||
	top: 4px;
 | 
			
		||||
}
 | 
			
		||||
.more-show {
 | 
			
		||||
  display: none;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
#drag {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100px;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: 100px;
 | 
			
		||||
}
 | 
			
		||||
#post-btn {
 | 
			
		||||
  display: none;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
#vis {
 | 
			
		||||
  text-transform: capitalize;
 | 
			
		||||
	text-transform: capitalize;
 | 
			
		||||
}
 | 
			
		||||
#cw-text {
 | 
			
		||||
  display: none;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
#sch-box {
 | 
			
		||||
  display: none;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
#sch-box input {
 | 
			
		||||
  width:auto;
 | 
			
		||||
	width: auto;
 | 
			
		||||
}
 | 
			
		||||
.picker__close, .picker__today, .picker__clear {
 | 
			
		||||
.picker__close,
 | 
			
		||||
.picker__today,
 | 
			
		||||
.picker__clear {
 | 
			
		||||
	color: #26a69a !important;
 | 
			
		||||
}
 | 
			
		||||
.cw {
 | 
			
		||||
  display: none;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.sensitive {
 | 
			
		||||
  filter: blur(50px);
 | 
			
		||||
	filter: blur(50px);
 | 
			
		||||
}
 | 
			
		||||
#emoji {
 | 
			
		||||
  
 | 
			
		||||
}
 | 
			
		||||
#suggest{
 | 
			
		||||
  max-height:300px;
 | 
			
		||||
  overflow-y: scroll;
 | 
			
		||||
#suggest {
 | 
			
		||||
	max-height: 23rem;
 | 
			
		||||
	overflow-y: scroll;
 | 
			
		||||
}
 | 
			
		||||
#emoji-list {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 200px;
 | 
			
		||||
  overflow-y: scroll;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: 15.4rem;
 | 
			
		||||
	overflow-y: scroll;
 | 
			
		||||
}
 | 
			
		||||
#preview-field {
 | 
			
		||||
  display: none;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.preview-img{
 | 
			
		||||
  width:50px;
 | 
			
		||||
  max-height:100px;
 | 
			
		||||
.preview-img {
 | 
			
		||||
	width: 4rem;
 | 
			
		||||
	max-height: 7.6rem;
 | 
			
		||||
}
 | 
			
		||||
.pi-wrap{
 | 
			
		||||
  display:inline-block;
 | 
			
		||||
  width:50px;
 | 
			
		||||
  max-height:100px;
 | 
			
		||||
.pi-wrap {
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	width: 3.8rem;
 | 
			
		||||
	max-height: 7.7rem;
 | 
			
		||||
}
 | 
			
		||||
#default-emoji a{
 | 
			
		||||
  color:white;
 | 
			
		||||
  margin-right:2px;
 | 
			
		||||
#default-emoji a {
 | 
			
		||||
	color: var(--color);
 | 
			
		||||
	margin-right: 0.15rem;
 | 
			
		||||
}
 | 
			
		||||
.character-counter{
 | 
			
		||||
  position: relative;
 | 
			
		||||
  top: -25px;
 | 
			
		||||
.character-counter {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	top: -1.9rem;
 | 
			
		||||
}
 | 
			
		||||
.trendtag{
 | 
			
		||||
  overflow-y:scroll;
 | 
			
		||||
  max-height:100px;
 | 
			
		||||
.trendtag {
 | 
			
		||||
	overflow-y: scroll;
 | 
			
		||||
	max-height: 7.7rem;
 | 
			
		||||
}
 | 
			
		||||
#toot-btn-field{
 | 
			
		||||
  display:flex;
 | 
			
		||||
#toot-btn-field {
 | 
			
		||||
	display: flex;
 | 
			
		||||
}
 | 
			
		||||
#toot-post-btn{
 | 
			
		||||
  width:calc(100% - 10px); padding:0; margin-top:10px;
 | 
			
		||||
#toot-post-btn {
 | 
			
		||||
	width: calc(100% - 0.7rem);
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	margin-top: 0.7rem;
 | 
			
		||||
	height: 2.7rem;
 | 
			
		||||
}
 | 
			
		||||
#toot-sec-btn{
 | 
			
		||||
  width:30px; padding:0; margin-top:10px;
 | 
			
		||||
#toot-sec-btn {
 | 
			
		||||
	width: 2.3rem;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	margin-top: 0.7rem;
 | 
			
		||||
}
 | 
			
		||||
#left-side{
 | 
			
		||||
  float:left;
 | 
			
		||||
  width:300px;
 | 
			
		||||
#left-side {
 | 
			
		||||
	float: left;
 | 
			
		||||
	overflow-x: hidden;
 | 
			
		||||
	height: calc(100% - 2.5rem);
 | 
			
		||||
}
 | 
			
		||||
#right-side{
 | 
			
		||||
  display:none;
 | 
			
		||||
  float:left;
 | 
			
		||||
  width:300px;
 | 
			
		||||
  padding:5px;
 | 
			
		||||
#right-side {
 | 
			
		||||
	display: none;
 | 
			
		||||
	float: left;
 | 
			
		||||
	width: 23rem;
 | 
			
		||||
	padding: 0.4rem;
 | 
			
		||||
	overflow-x: hidden;
 | 
			
		||||
	height: calc(100% - 2.5rem);
 | 
			
		||||
}
 | 
			
		||||
#poll{
 | 
			
		||||
  
 | 
			
		||||
#posttgl,
 | 
			
		||||
#toot-post-btn {
 | 
			
		||||
	background-color: var(--accentbtn);
 | 
			
		||||
	color: var(--color);
 | 
			
		||||
}
 | 
			
		||||
.poll-provider{
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  height: calc(100% - 90px);
 | 
			
		||||
  overflow-y: scroll;
 | 
			
		||||
  top: 90px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*mini*/
 | 
			
		||||
.mini-post .mize{
 | 
			
		||||
  display:none !important;
 | 
			
		||||
.mini-post .mize {
 | 
			
		||||
	display: none !important;
 | 
			
		||||
}
 | 
			
		||||
.mini-post #textarea{
 | 
			
		||||
  padding:0;
 | 
			
		||||
.mini-post #textarea {
 | 
			
		||||
	padding: 0;
 | 
			
		||||
}
 | 
			
		||||
.mini-post #post-box{
 | 
			
		||||
  width:200px;
 | 
			
		||||
  min-width:100px;
 | 
			
		||||
.mini-post #post-box {
 | 
			
		||||
	width: 15.4rem;
 | 
			
		||||
	min-width: 7.7rem;
 | 
			
		||||
}
 | 
			
		||||
.mini-post #toot-field{
 | 
			
		||||
  padding:0;
 | 
			
		||||
.mini-post #toot-field {
 | 
			
		||||
	padding: 0;
 | 
			
		||||
}
 | 
			
		||||
.mini-post #toot-btn-field {
 | 
			
		||||
	padding: 0;
 | 
			
		||||
}
 | 
			
		||||
.mini-post #toot-btn-field{
 | 
			
		||||
  padding:0;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,32 +1,31 @@
 | 
			
		||||
 | 
			
		||||
.drag-content{
 | 
			
		||||
	text-overflow: ellipsis;
 | 
			
		||||
	cursor:move;
 | 
			
		||||
	user-select: none;
 | 
			
		||||
	background-color:var(--modalfooter);
 | 
			
		||||
	margin:5px;
 | 
			
		||||
	border-radius:5px;
 | 
			
		||||
	color:var(--color);
 | 
			
		||||
	padding:3px;
 | 
			
		||||
	display:grid;
 | 
			
		||||
	grid-template-columns: 43px 1fr 60px;
 | 
			
		||||
    grid-template-areas: 'sorticon sorttitle sorttitle' 'sorticon sortacct sortaction';
 | 
			
		||||
.drag-content {
 | 
			
		||||
  text-overflow: ellipsis;
 | 
			
		||||
  cursor: move;
 | 
			
		||||
  user-select: none;
 | 
			
		||||
  background-color: var(--modalfooter);
 | 
			
		||||
  margin: 0.4rem;
 | 
			
		||||
  border-radius: 0.4rem;
 | 
			
		||||
  color: var(--color);
 | 
			
		||||
  padding: 3px;
 | 
			
		||||
  display: grid;
 | 
			
		||||
  grid-template-columns: 3.3rem 1fr 4.6rem;
 | 
			
		||||
  grid-template-areas: "sorticon sorttitle sorttitle" "sorticon sortacct sortaction";
 | 
			
		||||
}
 | 
			
		||||
.sorticon {
 | 
			
		||||
	grid-area:sorticon;
 | 
			
		||||
  grid-area: sorticon;
 | 
			
		||||
}
 | 
			
		||||
.sorticon i{
 | 
			
		||||
	font-size:43px;
 | 
			
		||||
.sorticon i {
 | 
			
		||||
  font-size: 3.3rem;
 | 
			
		||||
}
 | 
			
		||||
.sorttitle {
 | 
			
		||||
	margin-left:5px;
 | 
			
		||||
	grid-area:sorttitle;
 | 
			
		||||
  margin-left: 0.4rem;
 | 
			
		||||
  grid-area: sorttitle;
 | 
			
		||||
}
 | 
			
		||||
.sortacct {
 | 
			
		||||
	margin-left:5px;
 | 
			
		||||
	grid-area:sortacct;
 | 
			
		||||
  margin-left: 0.4rem;
 | 
			
		||||
  grid-area: sortacct;
 | 
			
		||||
}
 | 
			
		||||
.sortaction {
 | 
			
		||||
	margin-left:5px;
 | 
			
		||||
	grid-area:sortaction;
 | 
			
		||||
}
 | 
			
		||||
  margin-left: 0.4rem;
 | 
			
		||||
  grid-area: sortaction;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,100 +1,192 @@
 | 
			
		||||
:root{
 | 
			
		||||
    --bg:white;
 | 
			
		||||
    --drag:rgba(255, 255, 255, 0.8);
 | 
			
		||||
    --color:black;
 | 
			
		||||
    --beforehover:#757575;
 | 
			
		||||
    --modal:white;
 | 
			
		||||
    --subcolor:#e0e0e0;
 | 
			
		||||
    --box:white;
 | 
			
		||||
    --sidebar:#eeeeee;
 | 
			
		||||
    --shared:#cfd8dc;
 | 
			
		||||
    --notfbox:white;
 | 
			
		||||
    --emphasized:#81c784;
 | 
			
		||||
    --his-data:rgba(255, 255, 255, 0.9);
 | 
			
		||||
    --active:#e6ee9c;
 | 
			
		||||
    --postbox:white;
 | 
			
		||||
    --modalfooter:#fafafa;
 | 
			
		||||
:root {
 | 
			
		||||
  --bg: white;
 | 
			
		||||
  --drag: rgba(255, 255, 255, 0.8);
 | 
			
		||||
  --color: black;
 | 
			
		||||
  --beforehover: #757575;
 | 
			
		||||
  --modal: white;
 | 
			
		||||
  --subcolor: #e0e0e0;
 | 
			
		||||
  --box: white;
 | 
			
		||||
  --sidebar: #eeeeee;
 | 
			
		||||
  --shared: #cfd8dc;
 | 
			
		||||
  --notfbox: white;
 | 
			
		||||
  --emphasized: #81c784;
 | 
			
		||||
  --his-data: rgba(255, 255, 255, 0.9);
 | 
			
		||||
  --active: #e6ee9c;
 | 
			
		||||
  --postbox: white;
 | 
			
		||||
  --modalfooter: #fafafa;
 | 
			
		||||
  --accentbtn: #009688;
 | 
			
		||||
  --selected: #c0c0c0;
 | 
			
		||||
  --selectedWithShare: #b2babd;
 | 
			
		||||
  --gray: #757575;
 | 
			
		||||
}
 | 
			
		||||
#imagemodal{
 | 
			
		||||
    background: url("../img/pixel.white.svg");
 | 
			
		||||
#imagemodal {
 | 
			
		||||
  background: url("../img/pixel.white.svg");
 | 
			
		||||
}
 | 
			
		||||
.blacktheme {
 | 
			
		||||
    --bg:#212121;
 | 
			
		||||
    --drag:rgba(0, 0, 0, 0.8);
 | 
			
		||||
    --color:white;
 | 
			
		||||
    --beforehover:#9e9e9e;
 | 
			
		||||
    --modal:black;
 | 
			
		||||
    --subcolor:#212121;
 | 
			
		||||
    --box:#424242;
 | 
			
		||||
    --sidebar:#424242;
 | 
			
		||||
    --shared:#004d40;
 | 
			
		||||
    --notfbox:#333333;
 | 
			
		||||
    --emphasized:#4e342e;
 | 
			
		||||
    --his-data:rgba(0, 0, 0, 0.8);
 | 
			
		||||
    --active:#757575;
 | 
			
		||||
    --postbox:#424242;
 | 
			
		||||
    --modalfooter:#212121;
 | 
			
		||||
  --bg: #212121;
 | 
			
		||||
  --drag: rgba(0, 0, 0, 0.8);
 | 
			
		||||
  --color: white;
 | 
			
		||||
  --beforehover: #9e9e9e;
 | 
			
		||||
  --modal: black;
 | 
			
		||||
  --subcolor: #212121;
 | 
			
		||||
  --box: #424242;
 | 
			
		||||
  --sidebar: #424242;
 | 
			
		||||
  --shared: #004d40;
 | 
			
		||||
  --notfbox: #333333;
 | 
			
		||||
  --emphasized: #4e342e;
 | 
			
		||||
  --his-data: rgba(0, 0, 0, 0.8);
 | 
			
		||||
  --active: #757575;
 | 
			
		||||
  --postbox: #424242;
 | 
			
		||||
  --modalfooter: #212121;
 | 
			
		||||
  --accentbtn: #3f51b5;
 | 
			
		||||
  --selected: #3f3f3f;
 | 
			
		||||
  --selectedWithShare: #003a30;
 | 
			
		||||
  --gray: #cccccc;
 | 
			
		||||
}
 | 
			
		||||
.blacktheme #imagemodal{
 | 
			
		||||
    background: url("../img/pixel.svg");
 | 
			
		||||
.blacktheme #imagemodal {
 | 
			
		||||
  background: url("../img/pixel.svg");
 | 
			
		||||
}
 | 
			
		||||
.indigotheme {
 | 
			
		||||
    --bg:#031833;
 | 
			
		||||
    --drag:rgba(0, 0, 0, 0.8);
 | 
			
		||||
    --color:white;
 | 
			
		||||
    --beforehover:#9e9e9e;
 | 
			
		||||
    --modal:#0d1351;
 | 
			
		||||
    --subcolor:#0d1351;
 | 
			
		||||
    --shared:#004d40;
 | 
			
		||||
    --box:#0d1351;
 | 
			
		||||
    --sidebar:#0d1351;
 | 
			
		||||
    --notfbox:#0d47a1;
 | 
			
		||||
    --emphasized:#4e342e;
 | 
			
		||||
    --his-data:rgba(13, 19, 81,0.8);
 | 
			
		||||
    --active:#757575;
 | 
			
		||||
    --postbox:#1a237e;
 | 
			
		||||
    --modalfooter:#031833;
 | 
			
		||||
  --bg: #031833;
 | 
			
		||||
  --drag: rgba(0, 0, 0, 0.8);
 | 
			
		||||
  --color: white;
 | 
			
		||||
  --beforehover: #9e9e9e;
 | 
			
		||||
  --modal: #0d1351;
 | 
			
		||||
  --subcolor: #0d1351;
 | 
			
		||||
  --shared: #004d40;
 | 
			
		||||
  --box: #0d1351;
 | 
			
		||||
  --sidebar: #0d1351;
 | 
			
		||||
  --notfbox: #0d47a1;
 | 
			
		||||
  --emphasized: #4e342e;
 | 
			
		||||
  --his-data: rgba(13, 19, 81, 0.8);
 | 
			
		||||
  --active: #757575;
 | 
			
		||||
  --postbox: #1a237e;
 | 
			
		||||
  --modalfooter: #031833;
 | 
			
		||||
  --accentbtn: #00acc1;
 | 
			
		||||
  --selected: #214f8a;
 | 
			
		||||
  --selectedWithShare: #003a30;
 | 
			
		||||
  --gray: #cccccc ;
 | 
			
		||||
}
 | 
			
		||||
.indigotheme #imagemodal{
 | 
			
		||||
    background: url("../img/pixel.svg");
 | 
			
		||||
.indigotheme #imagemodal {
 | 
			
		||||
  background: url("../img/pixel.svg");
 | 
			
		||||
}
 | 
			
		||||
.browntheme {
 | 
			
		||||
    --bg:#261411;
 | 
			
		||||
    --drag:rgba(0, 0, 0, 0.8);
 | 
			
		||||
    --color:white;
 | 
			
		||||
    --beforehover:#9e9e9e;
 | 
			
		||||
    --modal:#261411;
 | 
			
		||||
    --subcolor:#4e342e;
 | 
			
		||||
    --shared:#004d40;
 | 
			
		||||
    --box:#4e342e;
 | 
			
		||||
    --sidebar:#4e342e;
 | 
			
		||||
    --notfbox:#4e342e;
 | 
			
		||||
    --emphasized:#0d47a1;
 | 
			
		||||
    --his-data:rgba(62, 39, 35,0.8);
 | 
			
		||||
    --active:#757575;
 | 
			
		||||
    --postbox:#4e342e;
 | 
			
		||||
    --modalfooter:#261411;
 | 
			
		||||
  --bg: #261411;
 | 
			
		||||
  --drag: rgba(0, 0, 0, 0.8);
 | 
			
		||||
  --color: white;
 | 
			
		||||
  --beforehover: #9e9e9e;
 | 
			
		||||
  --modal: #261411;
 | 
			
		||||
  --subcolor: #4e342e;
 | 
			
		||||
  --shared: #004d40;
 | 
			
		||||
  --box: #4e342e;
 | 
			
		||||
  --sidebar: #4e342e;
 | 
			
		||||
  --notfbox: #4e342e;
 | 
			
		||||
  --emphasized: #0d47a1;
 | 
			
		||||
  --his-data: rgba(62, 39, 35, 0.8);
 | 
			
		||||
  --active: #757575;
 | 
			
		||||
  --postbox: #4e342e;
 | 
			
		||||
  --modalfooter: #261411;
 | 
			
		||||
  --accentbtn: #827717;
 | 
			
		||||
  --selected: #6d352b;
 | 
			
		||||
  --selectedWithShare: #003a30;
 | 
			
		||||
  --gray: #cccccc;
 | 
			
		||||
}
 | 
			
		||||
.browntheme #imagemodal{
 | 
			
		||||
    background: url("../img/pixel.svg");
 | 
			
		||||
.browntheme #imagemodal {
 | 
			
		||||
  background: url("../img/pixel.svg");
 | 
			
		||||
}
 | 
			
		||||
.greentheme{
 | 
			
		||||
    --bg:#c8e6c9;
 | 
			
		||||
    --drag:rgba(255, 255, 255, 0.8);
 | 
			
		||||
    --color:black;
 | 
			
		||||
    --beforehover:#757575;
 | 
			
		||||
    --modal:#81c784;
 | 
			
		||||
    --subcolor:#a5d6a7;
 | 
			
		||||
    --box:#81c784;
 | 
			
		||||
    --sidebar:#81c784;
 | 
			
		||||
    --shared:#ffcc80;
 | 
			
		||||
    --notfbox:#a5d6a7;
 | 
			
		||||
    --emphasized:#9e9d24;
 | 
			
		||||
    --his-data:rgba(255, 255, 255, 0.9);
 | 
			
		||||
    --active:#e6ee9c;
 | 
			
		||||
    --postbox:#a5d6a7;
 | 
			
		||||
    --modalfooter:#81c784;
 | 
			
		||||
.greentheme {
 | 
			
		||||
  --bg: #c8e6c9;
 | 
			
		||||
  --drag: rgba(255, 255, 255, 0.8);
 | 
			
		||||
  --color: black;
 | 
			
		||||
  --beforehover: #757575;
 | 
			
		||||
  --modal: #81c784;
 | 
			
		||||
  --subcolor: #a5d6a7;
 | 
			
		||||
  --box: #81c784;
 | 
			
		||||
  --sidebar: #c5e1a5;
 | 
			
		||||
  --shared: #ffcc80;
 | 
			
		||||
  --notfbox: #a5d6a7;
 | 
			
		||||
  --emphasized: #9e9d24;
 | 
			
		||||
  --his-data: rgba(255, 255, 255, 0.9);
 | 
			
		||||
  --active: #e6ee9c;
 | 
			
		||||
  --postbox: #a5d6a7;
 | 
			
		||||
  --modalfooter: #81c784;
 | 
			
		||||
  --accentbtn: #33691e;
 | 
			
		||||
  --selected: #78c17a;
 | 
			
		||||
  --selectedWithShare: #caa266;
 | 
			
		||||
  --gray: #757575;
 | 
			
		||||
}
 | 
			
		||||
.greentheme #imagemodal{
 | 
			
		||||
    background: url("../img/pixel.white.svg");
 | 
			
		||||
.greentheme #imagemodal {
 | 
			
		||||
  background: url("../img/pixel.white.svg");
 | 
			
		||||
}
 | 
			
		||||
.bluetheme {
 | 
			
		||||
  --bg: #c9e1ec;
 | 
			
		||||
  --drag: rgba(255, 255, 255, 0.8);
 | 
			
		||||
  --color: black;
 | 
			
		||||
  --beforehover: #757575;
 | 
			
		||||
  --modal: #b2ebf2;
 | 
			
		||||
  --subcolor: #90caf9;
 | 
			
		||||
  --box: #90caf9;
 | 
			
		||||
  --sidebar: #b6e6f5;
 | 
			
		||||
  --shared: #e0ffe4;
 | 
			
		||||
  --notfbox: #90caf9;
 | 
			
		||||
  --emphasized: #c5e1a5;
 | 
			
		||||
  --his-data: rgba(255, 255, 255, 0.9);
 | 
			
		||||
  --active: #b39ddb;
 | 
			
		||||
  --postbox: #dff1ff;
 | 
			
		||||
  --modalfooter: #2196f3;
 | 
			
		||||
  --accentbtn: #2f7bb7;
 | 
			
		||||
  --selected: #9dcade;
 | 
			
		||||
  --selectedWithShare: #c1dac4;
 | 
			
		||||
  --gray: #757575;
 | 
			
		||||
}
 | 
			
		||||
.bluetheme #imagemodal {
 | 
			
		||||
  background: url("../img/pixel.white.svg");
 | 
			
		||||
}
 | 
			
		||||
.polartheme {
 | 
			
		||||
  --bg: #2e3440;
 | 
			
		||||
  --drag: rgba(0, 0, 0, 0.8);
 | 
			
		||||
  --color: white;
 | 
			
		||||
  --beforehover: #8d94a0;
 | 
			
		||||
  --modal: #3b4252;
 | 
			
		||||
  --subcolor: #434c5e;
 | 
			
		||||
  --box: #4c566a;
 | 
			
		||||
  --sidebar: #3b4252;
 | 
			
		||||
  --shared: #2d3b58;
 | 
			
		||||
  --notfbox: #2a3857;
 | 
			
		||||
  --emphasized: #2f4b86;
 | 
			
		||||
  --his-data: rgba(0, 0, 0, 0.8);
 | 
			
		||||
  --active: #2a3857;
 | 
			
		||||
  --postbox: #434c5e;
 | 
			
		||||
  --modalfooter: #485166;
 | 
			
		||||
  --accentbtn: #2f4b86;
 | 
			
		||||
  --selected: #464f61;
 | 
			
		||||
  --selectedWithShare: #3e527e;
 | 
			
		||||
  --gray: #cccccc;
 | 
			
		||||
}
 | 
			
		||||
.polartheme #imagemodal {
 | 
			
		||||
  background: url("../img/pixel.svg");
 | 
			
		||||
}
 | 
			
		||||
.snowtheme {
 | 
			
		||||
  --bg: #eceff4;
 | 
			
		||||
  --drag: rgba(255, 255, 255, 0.8);
 | 
			
		||||
  --color: #36425a;
 | 
			
		||||
  --beforehover: #344058;
 | 
			
		||||
  --modal: #e5e9f0;
 | 
			
		||||
  --subcolor: #d8dee9;
 | 
			
		||||
  --box: #c0c8d6;
 | 
			
		||||
  --sidebar: #eeeeee;
 | 
			
		||||
  --shared: #c3d4e6;
 | 
			
		||||
  --notfbox: #d8dee9;
 | 
			
		||||
  --emphasized: #88c0d0;
 | 
			
		||||
  --his-data: rgba(255, 255, 255, 0.9);
 | 
			
		||||
  --active: #8fbcbb;
 | 
			
		||||
  --postbox: #d8dee9;
 | 
			
		||||
  --modalfooter: #b2bed4;
 | 
			
		||||
  --accentbtn: #81a1c1;
 | 
			
		||||
  --selected: #b4bdd0;
 | 
			
		||||
  --selectedWithShare: #a3afbb;
 | 
			
		||||
  --gray: #5c6c8c;
 | 
			
		||||
}
 | 
			
		||||
.snowtheme #imagemodal {
 | 
			
		||||
  background: url("../img/pixel.white.svg");
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1130
									
								
								app/css/tl.css
									
									
									
									
									
								
							
							
						
						@@ -1,92 +1,147 @@
 | 
			
		||||
/*アイコンをクリックした時とかにでてくるユーザーデータ*/
 | 
			
		||||
#his-data {
 | 
			
		||||
  background-repeat: no-repeat;
 | 
			
		||||
  background-image: url('../../loading.svg');
 | 
			
		||||
  background-image: url("../img/loading.svg");
 | 
			
		||||
  overflow-y: hidden;
 | 
			
		||||
}
 | 
			
		||||
#his-name{
 | 
			
		||||
  font-size:1.5rem;
 | 
			
		||||
#his-data .btn .material-icons{
 | 
			
		||||
  float:left;
 | 
			
		||||
}
 | 
			
		||||
#his-data-content {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
}
 | 
			
		||||
#his-name {
 | 
			
		||||
  font-size: 1.5rem;
 | 
			
		||||
}
 | 
			
		||||
#his-prof {
 | 
			
		||||
  float: left;
 | 
			
		||||
  width: 100px;
 | 
			
		||||
  margin-right:5px;
 | 
			
		||||
  width: 7.7rem;
 | 
			
		||||
  margin-right: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
.his-float {
 | 
			
		||||
  float: left;
 | 
			
		||||
  overflow-y: scroll;
 | 
			
		||||
  padding: 5px;
 | 
			
		||||
  padding: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
#his-float-data{
 | 
			
		||||
  width: 400px;
 | 
			
		||||
#his-float-data {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  overflow-y: hidden;
 | 
			
		||||
}
 | 
			
		||||
#his-float-timeline{
 | 
			
		||||
  width: calc(100% - 400px);
 | 
			
		||||
  height:100%;
 | 
			
		||||
  overflow-y:hidden;
 | 
			
		||||
#his-leftside {
 | 
			
		||||
  width: 38.4rem;
 | 
			
		||||
}
 | 
			
		||||
#his-basic-prof{
 | 
			
		||||
  min-height:130px;
 | 
			
		||||
#his-float-timeline {
 | 
			
		||||
  max-width: 59.6rem;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  overflow-y: hidden;
 | 
			
		||||
}
 | 
			
		||||
#his-matching-list{
 | 
			
		||||
  overflow-y: scroll;
 | 
			
		||||
  overflow-x: hidden;
 | 
			
		||||
#his-basic-prof {
 | 
			
		||||
  min-height: 10rem;
 | 
			
		||||
}
 | 
			
		||||
#his-field{
 | 
			
		||||
#his-field {
 | 
			
		||||
  vertical-align: baseline;
 | 
			
		||||
  text-align:center;
 | 
			
		||||
  padding:0;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
#his-field tr{
 | 
			
		||||
  height:1.5rem;
 | 
			
		||||
#his-field tr {
 | 
			
		||||
  height: 1.5rem;
 | 
			
		||||
}
 | 
			
		||||
.his-field-title{
 | 
			
		||||
  height:1.5rem; padding:0; background-color:#757575; text-align:center; 
 | 
			
		||||
  padding:5px;
 | 
			
		||||
  margin-bottom:1px;
 | 
			
		||||
.his-field-title {
 | 
			
		||||
  height: 1.5rem;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  background-color: #757575;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  padding: 0.4rem;
 | 
			
		||||
  margin-bottom: 1px;
 | 
			
		||||
  width: 30%;
 | 
			
		||||
}
 | 
			
		||||
.his-field-content{
 | 
			
		||||
  height:1.5rem; padding:0; padding-left:5px;
 | 
			
		||||
.his-field-content {
 | 
			
		||||
  height: 1.5rem;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  padding-left: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
#his-data a span.ellipsis:after{
 | 
			
		||||
  content:"...";
 | 
			
		||||
.his-var-content a span.ellipsis:after {
 | 
			
		||||
  content: "...";
 | 
			
		||||
}
 | 
			
		||||
#his-data a:not(.mention) span:last-of-type{
 | 
			
		||||
  display:none;
 | 
			
		||||
.his-var-content a:not(.mention) span:last-of-type {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
#his-data a .rep_ct,
 | 
			
		||||
#his-data a .rt_ct,
 | 
			
		||||
#his-data a .fav_ct {
 | 
			
		||||
  display: inline !important;
 | 
			
		||||
}
 | 
			
		||||
#his-data-show {
 | 
			
		||||
  margin: 20px;
 | 
			
		||||
  background-color:var(--his-data);
 | 
			
		||||
  width: calc(100% - 20px);
 | 
			
		||||
  height: calc(100% - 20px);
 | 
			
		||||
  margin: 1.5rem;
 | 
			
		||||
  margin-left: 3.8rem;
 | 
			
		||||
  margin-right: 3.8rem;
 | 
			
		||||
  background-color: var(--his-data);
 | 
			
		||||
  height: calc(100% - 1.5rem);
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
  padding: 5px;
 | 
			
		||||
  padding: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
.tab-content {
 | 
			
		||||
#his-data-wrap {
 | 
			
		||||
  display: flex;
 | 
			
		||||
}
 | 
			
		||||
.his-var-content {
 | 
			
		||||
  overflow-y: scroll;
 | 
			
		||||
  overflow-x: hidden;
 | 
			
		||||
  height: calc(100% - 240px)
 | 
			
		||||
  height: calc(100% - 3.4rem);
 | 
			
		||||
}
 | 
			
		||||
.my-data-width {
 | 
			
		||||
  width: 10%;
 | 
			
		||||
#my-data-nav .btn {
 | 
			
		||||
  width: 10.7rem;
 | 
			
		||||
}
 | 
			
		||||
.active-back{
 | 
			
		||||
.active-back {
 | 
			
		||||
  background-color: var(--active);
 | 
			
		||||
}
 | 
			
		||||
#his-name .emojione,#his-name .emoji-img{
 | 
			
		||||
  width: 20px;
 | 
			
		||||
#his-name .emojione,
 | 
			
		||||
#his-name .emoji-img {
 | 
			
		||||
  width: 1.538rem;
 | 
			
		||||
}
 | 
			
		||||
#his-plus-action .btn{
 | 
			
		||||
  width:170px
 | 
			
		||||
#his-plus-action .btn {
 | 
			
		||||
  padding-right: 0.4rem;
 | 
			
		||||
  padding-left: 0.4rem;
 | 
			
		||||
}
 | 
			
		||||
.custom-tabs{
 | 
			
		||||
  display:flex;
 | 
			
		||||
.tabs {
 | 
			
		||||
  display: flex;
 | 
			
		||||
}
 | 
			
		||||
.custom-tabs .custom-tab a{
 | 
			
		||||
  padding: 8px 12px;
 | 
			
		||||
.tabs .tab a {
 | 
			
		||||
  padding: 0.6rem 0.9rem;
 | 
			
		||||
}
 | 
			
		||||
#his-des .mention{
 | 
			
		||||
#his-des {
 | 
			
		||||
  max-height: 17.7rem;
 | 
			
		||||
  overflow-y: scroll;
 | 
			
		||||
}
 | 
			
		||||
#his-sign-action {
 | 
			
		||||
  border: 1px solid;
 | 
			
		||||
  border-radius: 0.4rem;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  padding-left: 0.75rem;
 | 
			
		||||
  padding-right: 0.75rem;
 | 
			
		||||
  flex-wrap: wrap;
 | 
			
		||||
}
 | 
			
		||||
#his-sign-action .btn {
 | 
			
		||||
  flex-basis: 31.2%;
 | 
			
		||||
}
 | 
			
		||||
#his-des .mention {
 | 
			
		||||
  color: #039be5;
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
#his-table{
 | 
			
		||||
  max-height: 11.538rem;
 | 
			
		||||
  overflow-y: scroll;
 | 
			
		||||
}
 | 
			
		||||
#his-float-blocked {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  font-size: 2rem;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
#hisdropdown{
 | 
			
		||||
  background-color: var(--bg);
 | 
			
		||||
}
 | 
			
		||||
#hisdropdown li:hover{
 | 
			
		||||
  background-color: var(--active);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								app/dist/builder-effective-config.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
directories:
 | 
			
		||||
  output: dist
 | 
			
		||||
  buildResources: build
 | 
			
		||||
electronVersion: 1.4.13
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								app/fonts/OpenSans-Light.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										37
									
								
								app/img/desk-animation.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,37 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 4096 4096" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
 | 
			
		||||
    <g id="TheDesk">
 | 
			
		||||
        <g id="back">
 | 
			
		||||
            <g transform="matrix(1,0,0,1.53232,-11.8871,-1144.65)">
 | 
			
		||||
                <rect x="1044.02" y="1686.36" width="2335.77" height="782.558" style="fill:rgba(255,255,255,0);">
 | 
			
		||||
                    <animate attributeName="fill" begin="0.5s" dur="0.1s" fill="freeze" values="rgba(255,255,255,0);rgba(255,255,255,1)" />
 | 
			
		||||
                </rect>
 | 
			
		||||
            </g>
 | 
			
		||||
            <rect x="1058.89" y="609.971" width="711.146" height="2885.69" style="fill:rgba(255,255,255,0);">
 | 
			
		||||
                <animate attributeName="fill" begin="0.5s" dur="0.1s" fill="freeze" values="rgba(255,255,255,0);rgba(255,255,255,1)" />
 | 
			
		||||
            </rect>
 | 
			
		||||
            <g transform="matrix(1.08582,0,0,1,-142.973,0)">
 | 
			
		||||
                <rect x="1665.9" y="1021.89" width="776.607" height="2050.26" style="fill:rgba(255,255,255,0);">
 | 
			
		||||
                    <animate attributeName="fill" begin="0.5s" dur="0.1s" fill="freeze" values="rgba(255,255,255,0);rgba(255,255,255,1)" />
 | 
			
		||||
                </rect>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
        <g transform="matrix(1,0,0,0.998821,0,4.65666)" id="gray">
 | 
			
		||||
            <rect x="678.5" y="128.48" width="450" height="3821.5" style="fill:rgb(84,82,81);"/>
 | 
			
		||||
        </g>
 | 
			
		||||
        <g transform="matrix(0.999978,-5.55112e-17,-2.20005e-08,0.996112,-1237.17,972.039)" id="orange">
 | 
			
		||||
            <rect x="1915.71" y="-583.55" width="450" height="3117.62" style="fill:rgb(240,132,46);" r="3117.62">
 | 
			
		||||
                <animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0,1915.71,-583.55" to="-60,1915.71,-583.55" dur="0.5s" repeatCount="1" fill="freeze" />
 | 
			
		||||
            </rect>
 | 
			
		||||
        </g>
 | 
			
		||||
        <g transform="matrix(0.999978,5.55112e-17,-5.55112e-17,0.999978,-1236.96,-1164.58)" id="blue">
 | 
			
		||||
            <rect x="1915.5" y="1775.41" width="450" height="3105.58" style="fill:rgb(54,76,159);" r="3117.62">
 | 
			
		||||
                <animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0,1915.71,4881" to="60,1915.71,4881" dur="0.5s" repeatCount="1" fill="freeze" />
 | 
			
		||||
            </rect>
 | 
			
		||||
        </g>
 | 
			
		||||
        <path id="cat" d="M1592.47,2584L2048.94,2584C2048.94,2519.11 2044.31,2506.24 1936.84,2506.24C1954.01,2454.74 2023.79,2330.13 2062.57,2330.13C2096.88,2330.13 2137.81,2332.02 2137.81,2410.3C2137.81,2499.17 2287.37,2642.46 2323.63,2584C2377.67,2496.88 2230.72,2523.45 2230.72,2313.35C2230.72,2025.92 2398.46,2066.84 2398.46,1905.36C2398.46,1824.57 2376.14,1813.66 2376.14,1755.9C2376.14,1679.56 2443.39,1683.99 2430.31,1620.7C2421.27,1576.98 2414.2,1541.92 2408.93,1489.05C2405.19,1451.54 2404,1411.55 2365.03,1413.16C2319.25,1415.05 2301.88,1495.63 2230.72,1501.41C2159.7,1507.18 2099.15,1440.95 2071.66,1450.41C2044.41,1459.79 2052.98,1533.73 2069.14,1586.24C2094.54,1668.78 2149.93,1776.1 2048.94,1792.26C1947.95,1808.42 1774.25,1824.58 1649.02,1990.2C1523.79,2155.82 1528.42,2350.19 1479.36,2410.31C1314.72,2612.08 1146,2529.23 1146,2697.11C1146,2772.27 1273.35,2826.38 1293.55,2802.14C1313.75,2777.9 1121.93,2705.68 1336.56,2620.36C1519.91,2547.46 1536.28,2532.58 1592.47,2584Z" style="fill:rgba(0,0,0,0);">
 | 
			
		||||
            <animate attributeName="fill" begin="0.6s" dur="0.5s" fill="freeze" values="rgba(0,0,0,0);rgba(0,0,0,1)" repeatCount="1" />
 | 
			
		||||
        </path>
 | 
			
		||||
    </g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 3.6 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/img/desk.png
									
									
									
									
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 22 KiB  | 
							
								
								
									
										26
									
								
								app/img/desk.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,26 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 4096 4096" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
 | 
			
		||||
    <g id="TheDesk">
 | 
			
		||||
        <g>
 | 
			
		||||
            <g transform="matrix(1,0,0,1.53232,-11.8871,-1144.65)">
 | 
			
		||||
                <rect x="1044.02" y="1686.36" width="2335.77" height="782.558" style="fill:white;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <rect x="1058.89" y="609.971" width="711.146" height="2885.69" style="fill:white;"/>
 | 
			
		||||
            <g transform="matrix(1.08582,0,0,1,-142.973,0)">
 | 
			
		||||
                <rect x="1665.9" y="1021.89" width="776.607" height="2050.26" style="fill:white;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
        <g transform="matrix(1,0,0,0.998821,0,4.65666)">
 | 
			
		||||
            <rect x="678.5" y="128.48" width="450" height="3821.5" style="fill:rgb(84,82,81);"/>
 | 
			
		||||
        </g>
 | 
			
		||||
        <g transform="matrix(0.5,-0.866,0.862652,0.498067,224.046,2340.41)">
 | 
			
		||||
            <rect x="1915.71" y="-583.55" width="450" height="3117.62" style="fill:rgb(240,132,46);"/>
 | 
			
		||||
        </g>
 | 
			
		||||
        <g transform="matrix(0.5,0.866,-0.866,0.5,3757.17,-299.625)">
 | 
			
		||||
            <rect x="1915.5" y="1555.41" width="450" height="3105.58" style="fill:rgb(54,76,159);"/>
 | 
			
		||||
        </g>
 | 
			
		||||
        <path id="cat" d="M1592.47,2584L2048.94,2584C2048.94,2519.11 2044.31,2506.24 1936.84,2506.24C1954.01,2454.74 2023.79,2330.13 2062.57,2330.13C2096.88,2330.13 2137.81,2332.02 2137.81,2410.3C2137.81,2499.17 2287.37,2642.46 2323.63,2584C2377.67,2496.88 2230.72,2523.45 2230.72,2313.35C2230.72,2025.92 2398.46,2066.84 2398.46,1905.36C2398.46,1824.57 2376.14,1813.66 2376.14,1755.9C2376.14,1679.56 2443.39,1683.99 2430.31,1620.7C2421.27,1576.98 2414.2,1541.92 2408.93,1489.05C2405.19,1451.54 2404,1411.55 2365.03,1413.16C2319.25,1415.05 2301.88,1495.63 2230.72,1501.41C2159.7,1507.18 2099.15,1440.95 2071.66,1450.41C2044.41,1459.79 2052.98,1533.73 2069.14,1586.24C2094.54,1668.78 2149.93,1776.1 2048.94,1792.26C1947.95,1808.42 1774.25,1824.58 1649.02,1990.2C1523.79,2155.82 1528.42,2350.19 1479.36,2410.31C1314.72,2612.08 1146,2529.23 1146,2697.11C1146,2772.27 1273.35,2826.38 1293.55,2802.14C1313.75,2777.9 1121.93,2705.68 1336.56,2620.36C1519.91,2547.46 1536.28,2532.58 1592.47,2584Z" style="fill:rgb(4,0,0);"/>
 | 
			
		||||
        <rect x="0" y="0" width="4096" height="4096" style="fill:none;"/>
 | 
			
		||||
    </g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 2.5 KiB  | 
@@ -1,122 +1,39 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
 | 
			
		||||
              "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
 | 
			
		||||
 | 
			
		||||
<svg xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
     width="7.11022in" height="7.11022in"
 | 
			
		||||
     viewBox="0 0 512 512">
 | 
			
		||||
  <path id="選択範囲 #1"
 | 
			
		||||
        fill="white" stroke="white" stroke-width="1"
 | 
			
		||||
        d="M 96.00,16.00
 | 
			
		||||
           C 99.85,16.01 102.39,15.12 104.00,19.00
 | 
			
		||||
             104.00,19.00 97.00,19.00 97.00,19.00
 | 
			
		||||
             97.00,19.00 108.00,22.07 108.00,22.07
 | 
			
		||||
             108.00,22.07 144.00,43.08 144.00,43.08
 | 
			
		||||
             144.00,43.08 181.83,64.31 181.83,64.31
 | 
			
		||||
             181.83,64.31 223.00,88.26 223.00,88.26
 | 
			
		||||
             223.00,88.26 247.00,102.22 247.00,102.22
 | 
			
		||||
             247.00,102.22 257.00,107.00 257.00,107.00
 | 
			
		||||
             260.09,110.36 266.43,114.39 271.00,115.00
 | 
			
		||||
             271.00,115.00 298.00,133.00 298.00,133.00
 | 
			
		||||
             298.00,133.00 300.00,132.00 300.00,132.00
 | 
			
		||||
             300.00,132.00 312.00,141.00 312.00,141.00
 | 
			
		||||
             312.00,141.00 314.00,140.00 314.00,140.00
 | 
			
		||||
             318.40,144.39 334.83,152.80 341.00,156.45
 | 
			
		||||
             341.00,156.45 404.00,192.94 404.00,192.94
 | 
			
		||||
             404.00,192.94 425.67,205.63 425.67,205.63
 | 
			
		||||
             428.70,208.64 426.87,211.86 425.12,215.00
 | 
			
		||||
             425.12,215.00 412.26,237.00 412.26,237.00
 | 
			
		||||
             410.65,240.07 409.02,245.62 404.90,245.68
 | 
			
		||||
             401.70,245.72 396.83,242.47 394.00,240.87
 | 
			
		||||
             394.00,240.87 370.00,226.89 370.00,226.89
 | 
			
		||||
             370.00,226.89 282.00,176.51 282.00,176.51
 | 
			
		||||
             282.00,176.51 271.00,169.52 271.00,169.52
 | 
			
		||||
             271.00,169.52 261.00,164.31 261.00,164.31
 | 
			
		||||
             257.45,162.08 251.05,157.46 247.00,157.00
 | 
			
		||||
             247.00,157.00 234.00,148.55 234.00,148.55
 | 
			
		||||
             234.00,148.55 208.17,133.78 208.17,133.78
 | 
			
		||||
             208.17,133.78 190.00,124.00 190.00,124.00
 | 
			
		||||
             190.00,124.00 163.00,107.60 163.00,107.60
 | 
			
		||||
             163.00,107.60 103.00,73.00 103.00,73.00
 | 
			
		||||
             103.00,73.00 103.00,453.00 103.00,453.00
 | 
			
		||||
             103.00,453.00 127.00,439.42 127.00,439.42
 | 
			
		||||
             127.00,439.42 170.00,414.58 170.00,414.58
 | 
			
		||||
             170.00,414.58 237.17,376.24 237.17,376.24
 | 
			
		||||
             237.17,376.24 256.00,364.59 256.00,364.59
 | 
			
		||||
             256.00,364.59 264.00,360.53 264.00,360.53
 | 
			
		||||
             264.00,360.53 285.00,348.20 285.00,348.20
 | 
			
		||||
             285.00,348.20 292.99,344.12 292.99,344.12
 | 
			
		||||
             292.99,344.12 299.28,339.83 299.28,339.83
 | 
			
		||||
             299.28,339.83 320.00,328.41 320.00,328.41
 | 
			
		||||
             320.00,328.41 362.00,304.05 362.00,304.05
 | 
			
		||||
             362.00,304.05 371.91,297.68 371.91,297.68
 | 
			
		||||
             371.91,297.68 379.04,294.41 379.04,294.41
 | 
			
		||||
             379.04,294.41 410.00,276.00 410.00,276.00
 | 
			
		||||
             410.00,276.00 416.00,285.00 416.00,285.00
 | 
			
		||||
             416.81,288.83 421.21,296.21 424.00,299.00
 | 
			
		||||
             424.00,299.00 423.00,301.00 423.00,301.00
 | 
			
		||||
             427.24,303.72 430.62,312.17 432.00,317.00
 | 
			
		||||
             432.00,317.00 388.00,342.67 388.00,342.67
 | 
			
		||||
             388.00,342.67 317.00,383.55 317.00,383.55
 | 
			
		||||
             317.00,383.55 279.00,405.32 279.00,405.32
 | 
			
		||||
             279.00,405.32 264.00,415.00 264.00,415.00
 | 
			
		||||
             264.00,415.00 262.00,414.00 262.00,414.00
 | 
			
		||||
             262.00,414.00 250.00,423.00 250.00,423.00
 | 
			
		||||
             250.00,423.00 248.00,422.00 248.00,422.00
 | 
			
		||||
             248.00,422.00 238.00,428.92 238.00,428.92
 | 
			
		||||
             238.00,428.92 218.00,440.67 218.00,440.67
 | 
			
		||||
             218.00,440.67 207.00,448.00 207.00,448.00
 | 
			
		||||
             207.00,448.00 193.00,455.18 193.00,455.18
 | 
			
		||||
             193.00,455.18 176.00,465.08 176.00,465.08
 | 
			
		||||
             176.00,465.08 166.09,470.31 166.09,470.31
 | 
			
		||||
             166.09,470.31 137.00,487.31 137.00,487.31
 | 
			
		||||
             137.00,487.31 103.00,506.00 103.00,506.00
 | 
			
		||||
             103.00,506.00 104.00,509.00 104.00,509.00
 | 
			
		||||
             104.00,509.00 57.00,509.00 57.00,509.00
 | 
			
		||||
             57.00,509.00 57.00,16.00 57.00,16.00
 | 
			
		||||
             57.00,16.00 96.00,16.00 96.00,16.00 Z
 | 
			
		||||
           M 102.00,72.00
 | 
			
		||||
           C 102.00,72.00 103.00,73.00 103.00,73.00
 | 
			
		||||
             103.00,73.00 103.00,72.00 103.00,72.00
 | 
			
		||||
             103.00,72.00 102.00,72.00 102.00,72.00 Z
 | 
			
		||||
           M 261.00,190.61
 | 
			
		||||
           C 270.30,188.63 274.03,177.15 280.77,179.78
 | 
			
		||||
             284.36,181.18 284.28,187.65 284.72,191.00
 | 
			
		||||
             285.35,195.85 287.64,207.99 286.57,212.00
 | 
			
		||||
             285.51,216.00 282.42,218.30 280.78,222.00
 | 
			
		||||
             277.54,229.29 282.79,236.85 282.99,245.00
 | 
			
		||||
             283.38,261.24 274.02,264.52 266.36,276.00
 | 
			
		||||
             261.36,283.50 258.58,297.05 259.09,306.00
 | 
			
		||||
             259.91,320.41 263.09,322.38 271.02,333.00
 | 
			
		||||
             273.09,335.77 275.09,339.39 272.11,342.37
 | 
			
		||||
             269.94,344.63 266.39,343.51 264.00,342.37
 | 
			
		||||
             258.40,339.52 252.76,332.51 249.91,327.00
 | 
			
		||||
             246.61,320.60 248.26,314.37 244.57,310.23
 | 
			
		||||
             240.72,305.90 235.19,306.50 231.18,310.23
 | 
			
		||||
             225.69,315.34 221.16,325.22 218.00,332.00
 | 
			
		||||
             226.04,333.96 232.79,331.61 234.00,342.00
 | 
			
		||||
             234.00,342.00 175.00,342.00 175.00,342.00
 | 
			
		||||
             166.62,341.85 166.77,339.11 162.00,338.56
 | 
			
		||||
             158.39,338.15 148.72,341.68 145.00,343.05
 | 
			
		||||
             138.31,345.53 120.54,352.22 119.64,360.00
 | 
			
		||||
             119.01,365.49 125.06,367.91 127.00,374.00
 | 
			
		||||
             115.41,373.03 104.20,364.93 108.88,352.00
 | 
			
		||||
             111.36,345.12 117.06,343.57 123.00,340.75
 | 
			
		||||
             132.86,336.05 141.94,332.38 149.58,323.96
 | 
			
		||||
             151.40,321.95 154.62,318.26 155.92,316.00
 | 
			
		||||
             155.92,316.00 166.03,283.00 166.03,283.00
 | 
			
		||||
             169.87,271.08 179.16,256.26 189.00,248.52
 | 
			
		||||
             199.37,240.36 208.38,237.36 221.00,234.66
 | 
			
		||||
             226.45,233.50 237.77,232.36 240.99,227.79
 | 
			
		||||
             244.55,222.75 241.98,216.26 240.34,211.00
 | 
			
		||||
             237.46,201.77 234.64,193.69 237.00,184.00
 | 
			
		||||
             244.82,185.47 252.94,192.32 261.00,190.61 Z
 | 
			
		||||
           M 102.00,453.00
 | 
			
		||||
           C 102.00,453.00 103.00,454.00 103.00,454.00
 | 
			
		||||
             103.00,454.00 103.00,453.00 103.00,453.00
 | 
			
		||||
             103.00,453.00 102.00,453.00 102.00,453.00 Z
 | 
			
		||||
           M 102.00,505.00
 | 
			
		||||
           C 102.00,505.00 103.00,506.00 103.00,506.00
 | 
			
		||||
             103.00,506.00 103.00,505.00 103.00,505.00
 | 
			
		||||
             103.00,505.00 102.00,505.00 102.00,505.00 Z" />
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<!--
 | 
			
		||||
	TheDesk icon, Cutls P.
 | 
			
		||||
	This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
 | 
			
		||||
-->
 | 
			
		||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
			
		||||
	 viewBox="0 0 4096 4096" style="enable-background:new 0 0 4096 4096;" xml:space="preserve">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
	.st0{display:none;}
 | 
			
		||||
	.st1{fill:none;}
 | 
			
		||||
	.st2{fill:#FFFFFF;}
 | 
			
		||||
	.st3{fill:#FFFFFF;}
 | 
			
		||||
	.st4{fill:#FFFFFF;}
 | 
			
		||||
	.st5{fill:#none;}
 | 
			
		||||
	.st6{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
 | 
			
		||||
	.st7{fill-rule:evenodd;clip-rule:evenodd;fill:none;}
 | 
			
		||||
</style>
 | 
			
		||||
<g id="レイヤー_1" class="st0">
 | 
			
		||||
</g>
 | 
			
		||||
<g id="レイヤー_2">
 | 
			
		||||
	<polyline class="st1" points="1128.5,650.67 3378,1950 3378,2137 1128.5,3432.67 	"/>
 | 
			
		||||
	<rect x="678.5" y="128.48" class="st2" width="450" height="3821.5"/>
 | 
			
		||||
	
 | 
			
		||||
		<rect x="1915.71" y="-583.55" transform="matrix(0.5 -0.866 0.866 0.5 225.753 2341.5386)" class="st3" width="450" height="3117.62"/>
 | 
			
		||||
	
 | 
			
		||||
		<rect x="1915.5" y="1555.41" transform="matrix(0.5 0.866 -0.866 0.5 3762.031 -299.6245)" class="st4" width="450" height="3105.58"/>
 | 
			
		||||
	<path class="st5" d="M714.5,2953.5"/>
 | 
			
		||||
	<path id="path1891" class="st6" d="M1592.47,2584h456.47c0-64.89-4.63-77.76-112.1-77.76c17.17-51.5,86.95-176.11,125.73-176.11
 | 
			
		||||
		c34.31,0,75.24,1.89,75.24,80.17c0,88.87,149.56,232.16,185.82,173.7c54.04-87.12-92.91-60.55-92.91-270.65
 | 
			
		||||
		c0-287.43,167.74-246.51,167.74-407.99c0-80.79-22.32-91.7-22.32-149.46c0-76.34,67.25-71.91,54.17-135.2
 | 
			
		||||
		c-9.04-43.72-16.11-78.78-21.38-131.65c-3.74-37.51-4.93-77.5-43.9-75.89c-45.78,1.89-63.15,82.47-134.31,88.25
 | 
			
		||||
		c-71.02,5.77-131.57-60.46-159.06-51c-27.25,9.38-18.68,83.32-2.52,135.83c25.4,82.54,80.79,189.86-20.2,206.02
 | 
			
		||||
		c-100.99,16.16-274.69,32.32-399.92,197.94s-120.6,359.99-169.66,420.11C1314.72,2612.08,1146,2529.23,1146,2697.11
 | 
			
		||||
		c0,75.16,127.35,129.27,147.55,105.03c20.2-24.24-171.62-96.46,43.01-181.78C1519.91,2547.46,1536.28,2532.58,1592.47,2584z"/>
 | 
			
		||||
	<rect class="st7" width="4096" height="4096"/>
 | 
			
		||||
	<path class="st1" d="M-58,1122"/>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 2.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/img/icons/icon-128x128.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 16 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/img/icons/icon-144x144.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 17 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/img/icons/icon-152x152.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 17 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/img/icons/icon-192x192.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 19 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/img/icons/icon-384x384.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 28 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/img/icons/icon-512x512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 22 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/img/icons/icon-72x72.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								app/img/icons/icon-96x96.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
| 
		 Before Width: | Height: | Size: 434 B  | 
							
								
								
									
										2
									
								
								app/img/picture.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
 | 
			
		||||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 259 B  | 
| 
		 Before Width: | Height: | Size: 34 KiB  | 
							
								
								
									
										136
									
								
								app/img/thinking.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,136 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!--
 | 
			
		||||
	ThinkingDesk: Cutls P's icon, Cutls P.
 | 
			
		||||
	This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
 | 
			
		||||
-->
 | 
			
		||||
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
			
		||||
	 viewBox="0 0 4096 4096" style="enable-background:new 0 0 4096 4096;" xml:space="preserve">
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
	.st0{fill:#040000;}
 | 
			
		||||
	.st1{fill:#040000;stroke:#040000;stroke-miterlimit:10;}
 | 
			
		||||
	.st2{clip-path:url(#SVGID_2_);}
 | 
			
		||||
	.st3{clip-path:url(#SVGID_4_);}
 | 
			
		||||
	.st4{fill:none;}
 | 
			
		||||
	.st5{fill:#FFFFFF;}
 | 
			
		||||
	.st6{fill:#545251;stroke:#040000;stroke-miterlimit:10;}
 | 
			
		||||
	.st7{fill:#F0842E;}
 | 
			
		||||
	.st8{fill:#3D4FA0;}
 | 
			
		||||
	.st9{fill:#63451F;stroke:#FFFFFF;stroke-width:20;stroke-miterlimit:10;}
 | 
			
		||||
	.st10{fill:#63451F;}
 | 
			
		||||
</style>
 | 
			
		||||
<g id="DrawBlack">
 | 
			
		||||
	<polyline id="BG_1_" class="st0" points="1128.5,650.67 3378,1950 3378,2137 1128.5,3432.67 	"/>
 | 
			
		||||
	<rect id="Left_1_" x="678.5" y="128.48" class="st1" width="450" height="3821.5"/>
 | 
			
		||||
	
 | 
			
		||||
		<rect id="Top_1_" x="1915.71" y="-583.55" transform="matrix(0.5 -0.866 0.866 0.5 225.753 2341.5386)" class="st0" width="450" height="3117.62"/>
 | 
			
		||||
	<g id="Finger_1_">
 | 
			
		||||
		<g>
 | 
			
		||||
			<defs>
 | 
			
		||||
				
 | 
			
		||||
					<rect id="SVGID_1_" x="-626.54" y="666.18" transform="matrix(0.9063 -0.4226 0.4226 0.9063 -723.8983 1097.2598)" width="5478.6" height="3030.2"/>
 | 
			
		||||
			</defs>
 | 
			
		||||
			<clipPath id="SVGID_2_">
 | 
			
		||||
				<use xlink:href="#SVGID_1_"  style="overflow:visible;"/>
 | 
			
		||||
			</clipPath>
 | 
			
		||||
			<g id="g14_3_" class="st2">
 | 
			
		||||
				<g id="g44_1_" transform="translate(17.2764,0.8682)">
 | 
			
		||||
					<path id="path46_1_" class="st0" d="M2605.11,3533.86c0,0,159.85-112.71,149-195.05c-10.68-85.2-127.58-48.89-127.58-48.89
 | 
			
		||||
						s136.18-82.82,112.7-180.35c-22.17-91.83-167.38-48.54-167.38-48.54s119.56-92.9,85.39-182.75
 | 
			
		||||
						c-28.87-75.6-188.03-44.94-188.03-44.94s651.47-417.09,718.51-459.5c66.86-42.42,160.29-131.95,87.28-198.12
 | 
			
		||||
						c-72.76-66.37-205.83-7.85-269.88,32.69c-64.01,40.62-874.42,553.28-1153.93,730.24c-29.84,18.84-169.66,107.16-186.59,118.03
 | 
			
		||||
						c-69.96,44.42-112.22,42.02-74.07-13.01c51.14-73.63,74.73-139.7,55.45-222.1c-20.44-86.69-114.31-161.6-159.65-186.44
 | 
			
		||||
						c-84.35-46.21-197.27-61.16-306.71-33.34c-170.83,43.44-256.98,149.65-157.15,218.26c149.29,102.66,148.88,244.02,37.82,381.07
 | 
			
		||||
						c-261.05,322.06-363.57,512.7-142.28,713.95c241.24,219.53,812.72,166.75,1276.35-126.35
 | 
			
		||||
						C2218.92,3773.38,2605.11,3533.86,2605.11,3533.86"/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g id="Eyes_1_">
 | 
			
		||||
		<g>
 | 
			
		||||
			<defs>
 | 
			
		||||
				<rect id="SVGID_3_" x="95.01" y="544.01" width="3526.99" height="3526.99"/>
 | 
			
		||||
			</defs>
 | 
			
		||||
			<clipPath id="SVGID_4_">
 | 
			
		||||
				<use xlink:href="#SVGID_3_"  style="overflow:visible;"/>
 | 
			
		||||
			</clipPath>
 | 
			
		||||
			<g id="g14_2_" class="st3">
 | 
			
		||||
				<g id="g24_1_" transform="translate(15.4063,25.5)">
 | 
			
		||||
					<path id="path26_1_" class="st0" d="M1588.99,1547.21c0,135.3-87.78,244.93-195.94,244.93
 | 
			
		||||
						c-108.16,0-195.94-109.63-195.94-244.93c0-135.2,87.78-244.93,195.94-244.93C1501.21,1302.28,1588.99,1412.01,1588.99,1547.21"
 | 
			
		||||
						/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g id="g32_1_" transform="translate(9.6709,29.667)">
 | 
			
		||||
					<path id="path34_1_" class="st0" d="M1032.82,1134.8c-16.07-8.52-29.69-21.85-38.31-38.99c-21.16-42.03-3.92-90.82,38.5-109.04
 | 
			
		||||
						c417.95-179.29,754.29-4.21,768.39,3.33c42.42,22.63,59.57,73.28,38.31,113.06c-21.16,39.68-72.5,53.49-114.92,31.16
 | 
			
		||||
						c-12.05-6.27-277.46-140.3-615.07,4.6C1084.54,1149.59,1056.13,1147.24,1032.82,1134.8"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g id="g36_1_" transform="translate(14.7427,16.4277)">
 | 
			
		||||
					<path id="path38_1_" class="st0" d="M1524.64,2445.12c-13.32-12.44-23.12-28.71-27.04-47.61c-9.7-45.95,19.4-88.76,65.15-95.42
 | 
			
		||||
						c449.89-66.43,730.09,188.99,741.94,199.86c35.27,32.72,38.7,85.92,8.03,119.04c-30.57,32.92-83.77,33.11-118.94,0.59
 | 
			
		||||
						c-10.19-9.01-232.39-206.52-595.87-152.93C1570.78,2472.65,1543.94,2463.15,1524.64,2445.12"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g id="g40_1_" transform="translate(20.4307,25.917)">
 | 
			
		||||
					<path id="path42_1_" class="st0" d="M2076.21,1505.94c-15.28-9.6-28.02-23.81-35.47-41.54c-18.32-43.3,2.25-90.92,45.75-106.2
 | 
			
		||||
						c429.22-150.48,752.91,47.03,766.53,55.55c40.66,25.47,54.28,77.1,30.47,115.41c-23.71,38.21-76.03,48.5-116.68,23.32
 | 
			
		||||
						c-11.76-7.15-267.27-158.81-613.99-37.23C2126.96,1524.26,2098.75,1519.95,2076.21,1505.94"/>
 | 
			
		||||
				</g>
 | 
			
		||||
				<g id="g28_1_" transform="translate(26,24.5)">
 | 
			
		||||
					<path id="path30_1_" class="st0" d="M2616.28,1646.19c0,135.3-87.69,244.93-195.94,244.93
 | 
			
		||||
						c-108.16,0-195.94-109.63-195.94-244.93c0-135.2,87.78-244.93,195.94-244.93C2528.6,1401.26,2616.28,1510.99,2616.28,1646.19"
 | 
			
		||||
						/>
 | 
			
		||||
				</g>
 | 
			
		||||
			</g>
 | 
			
		||||
		</g>
 | 
			
		||||
	</g>
 | 
			
		||||
</g>
 | 
			
		||||
<g id="Path">
 | 
			
		||||
	<path id="CutLine" class="st4" d="M528,128C532-14,669,0,669,0h346l2629,1464c0,0,78,34,28,108s-217,359-217,359s-22,9,9,226
 | 
			
		||||
		s-204,313-204,313l-545,356c0,0,421.37,492.67,29.68,732.33S1798,4056,1798,4056s28.13,15-290.94,15s-828.56,0-828.56,0
 | 
			
		||||
		S531,4102,528,3904S528,128,528,128z"/>
 | 
			
		||||
</g>
 | 
			
		||||
<g id="Draw">
 | 
			
		||||
	<polyline id="BG" class="st5" points="1128.5,650.67 3378,1950 3378,2137 1128.5,3432.67 	"/>
 | 
			
		||||
	<rect id="Left" x="678.5" y="128.48" class="st6" width="450" height="3821.5"/>
 | 
			
		||||
	
 | 
			
		||||
		<rect id="Top" x="1915.71" y="-583.55" transform="matrix(0.5 -0.866 0.866 0.5 225.753 2341.5386)" class="st7" width="450" height="3117.62"/>
 | 
			
		||||
	<g id="Finger">
 | 
			
		||||
		<g id="g44" transform="translate(17.2764,0.8682)">
 | 
			
		||||
			<path id="path46" class="st8" d="M2605.11,3533.86c0,0,159.85-112.71,149-195.05c-10.68-85.2-127.58-48.89-127.58-48.89
 | 
			
		||||
				s136.18-82.82,112.7-180.35c-22.17-91.83-167.38-48.54-167.38-48.54s119.56-92.9,85.39-182.75
 | 
			
		||||
				c-28.87-75.6-188.03-44.94-188.03-44.94s651.47-417.09,718.51-459.5c66.86-42.42,160.29-131.95,87.28-198.12
 | 
			
		||||
				c-72.76-66.37-205.83-7.85-269.88,32.69c-64.01,40.62-874.42,553.28-1153.93,730.24c-29.84,18.84-169.66,107.16-186.59,118.03
 | 
			
		||||
				c-69.96,44.42-112.22,42.02-74.07-13.01c51.14-73.63,74.73-139.7,55.45-222.1c-20.44-86.69-114.31-161.6-159.65-186.44
 | 
			
		||||
				c-84.35-46.21-197.27-61.16-306.71-33.34c-170.83,43.44-256.98,149.65-157.15,218.26c149.29,102.66,148.88,244.02,37.82,381.07
 | 
			
		||||
				c-261.05,322.06-363.57,512.7-142.28,713.95c241.24,219.53,812.72,166.75,1276.35-126.35
 | 
			
		||||
				C2218.92,3773.38,2605.11,3533.86,2605.11,3533.86"/>
 | 
			
		||||
		</g>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g id="Eyes">
 | 
			
		||||
		<g id="g24" transform="translate(15.4063,25.5)">
 | 
			
		||||
			<path id="path26" class="st9" d="M1588.99,1547.21c0,135.3-87.78,244.93-195.94,244.93c-108.16,0-195.94-109.63-195.94-244.93
 | 
			
		||||
				c0-135.2,87.78-244.93,195.94-244.93C1501.21,1302.28,1588.99,1412.01,1588.99,1547.21"/>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g id="g32" transform="translate(9.6709,29.667)">
 | 
			
		||||
			<path id="path34" class="st9" d="M1032.82,1134.8c-16.07-8.52-29.69-21.85-38.31-38.99c-21.16-42.03-3.92-90.82,38.5-109.04
 | 
			
		||||
				c417.95-179.29,754.29-4.21,768.39,3.33c42.42,22.63,59.57,73.28,38.31,113.06c-21.16,39.68-72.5,53.49-114.92,31.16
 | 
			
		||||
				c-12.05-6.27-277.46-140.3-615.07,4.6C1084.54,1149.59,1056.13,1147.24,1032.82,1134.8"/>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g id="g36" transform="translate(14.7427,16.4277)">
 | 
			
		||||
			<path id="path38" class="st9" d="M1524.64,2445.12c-13.32-12.44-23.12-28.71-27.04-47.61c-9.7-45.95,19.4-88.76,65.15-95.42
 | 
			
		||||
				c449.89-66.43,730.09,188.99,741.94,199.86c35.27,32.72,38.7,85.92,8.03,119.04c-30.57,32.92-83.77,33.11-118.94,0.59
 | 
			
		||||
				c-10.19-9.01-232.39-206.52-595.87-152.93C1570.78,2472.65,1543.94,2463.15,1524.64,2445.12"/>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g id="g40" transform="translate(20.4307,25.917)">
 | 
			
		||||
			<path id="path42" class="st9" d="M2076.21,1505.94c-15.28-9.6-28.02-23.81-35.47-41.54c-18.32-43.3,2.25-90.92,45.75-106.2
 | 
			
		||||
				c429.22-150.48,752.91,47.03,766.53,55.55c40.66,25.47,54.28,77.1,30.47,115.41c-23.71,38.21-76.03,48.5-116.68,23.32
 | 
			
		||||
				c-11.76-7.15-267.27-158.81-613.99-37.23C2126.96,1524.26,2098.75,1519.95,2076.21,1505.94"/>
 | 
			
		||||
		</g>
 | 
			
		||||
		<g id="g28" transform="translate(26,24.5)">
 | 
			
		||||
			<path id="path30" class="st10" d="M2616.28,1646.19c0,135.3-87.69,244.93-195.94,244.93c-108.16,0-195.94-109.63-195.94-244.93
 | 
			
		||||
				c0-135.2,87.78-244.93,195.94-244.93C2528.6,1401.26,2616.28,1510.99,2616.28,1646.19"/>
 | 
			
		||||
		</g>
 | 
			
		||||
	</g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 8.0 KiB  | 
							
								
								
									
										7
									
								
								app/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,7 @@
 | 
			
		||||
<!doctype html>
 | 
			
		||||
<html>
 | 
			
		||||
    <head>
 | 
			
		||||
        <meta http-equiv=”refresh” content=”0;URL=’./view/ja'” />
 | 
			
		||||
        <script>location.href = './view/ja';</script>
 | 
			
		||||
    </head>
 | 
			
		||||
</html>
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
<!doctype html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
	<meta http-equiv="refresh" content="0;URL='language.html?mode=redirect'" />
 | 
			
		||||
</head>
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
//このソフトについて
 | 
			
		||||
function about() {
 | 
			
		||||
		var electron = require("electron");
 | 
			
		||||
		var ipc = electron.ipcRenderer;
 | 
			
		||||
		ipc.send('about', 'go');
 | 
			
		||||
}
 | 
			
		||||
	postMessage(["sendSinmpleIpc", "about"], "*")
 | 
			
		||||
}
 | 
			
		||||
document.getElementById('onClickAbout').addEventListener('click', about)
 | 
			
		||||
							
								
								
									
										38
									
								
								app/js/common/api.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,38 @@
 | 
			
		||||
async function getApi(start, at) {
 | 
			
		||||
    let json = {}
 | 
			
		||||
    let response = null
 | 
			
		||||
    response = await fetch(start, {
 | 
			
		||||
        method: 'GET',
 | 
			
		||||
        headers: {
 | 
			
		||||
            'content-type': 'application/json',
 | 
			
		||||
            'Authorization': `Bearer ${at}`
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
    if (!response.ok) {
 | 
			
		||||
        response.text().then(function (text) {
 | 
			
		||||
            setLog(response.url, response.status, text)
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
    json = await response.json()
 | 
			
		||||
    return json
 | 
			
		||||
}
 | 
			
		||||
async function postApi(url, body, at, ideKey) {
 | 
			
		||||
    let json = {}
 | 
			
		||||
    let response = null
 | 
			
		||||
    response = await fetch(url, {
 | 
			
		||||
        method: 'POST',
 | 
			
		||||
        headers: {
 | 
			
		||||
            'content-type': 'application/json',
 | 
			
		||||
            'Authorization': `Bearer ${at}`,
 | 
			
		||||
            'Idempotency-Key': ideKey
 | 
			
		||||
        },
 | 
			
		||||
        body: JSON.stringify(body)
 | 
			
		||||
    })
 | 
			
		||||
    if (!response.ok) {
 | 
			
		||||
        response.text().then(function (text) {
 | 
			
		||||
            setLog(response.url, response.status, text)
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
    json = await response.json()
 | 
			
		||||
    return json
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										119
									
								
								app/js/common/blurhash.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,119 @@
 | 
			
		||||
const digitCharacters = [
 | 
			
		||||
    "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
 | 
			
		||||
    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
 | 
			
		||||
    "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
 | 
			
		||||
    "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d",
 | 
			
		||||
    "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
 | 
			
		||||
    "o", "p", "q", "r", "s", "t", "u", "v", "w", "x",
 | 
			
		||||
    "y", "z", "#", "$", "%", "*", "+", ",", "-", ".",
 | 
			
		||||
    ":", ";", "=", "?", "@", "[", "]", "^", "_", "{",
 | 
			
		||||
    "|", "}", "~",
 | 
			
		||||
];
 | 
			
		||||
function decode83(str) {
 | 
			
		||||
    let value = 0;
 | 
			
		||||
    for (let i = 0; i < str.length; i++) {
 | 
			
		||||
        const c = str[i];
 | 
			
		||||
        const digit = digitCharacters.indexOf(c);
 | 
			
		||||
        value = value * 83 + digit;
 | 
			
		||||
    }
 | 
			
		||||
    return value;
 | 
			
		||||
}
 | 
			
		||||
function linearTosRGB(value) {
 | 
			
		||||
    const v = Math.max(0, Math.min(1, value));
 | 
			
		||||
    if (v <= 0.0031308) {
 | 
			
		||||
        return Math.round(v * 12.92 * 255 + 0.5);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return Math.round((1.055 * Math.pow(v, 1 / 2.4) - 0.055) * 255 + 0.5);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
function sRGBToLinear(value) {
 | 
			
		||||
    const v = value / 255;
 | 
			
		||||
    if (v <= 0.04045) {
 | 
			
		||||
        return v / 12.92;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return Math.pow((v + 0.055) / 1.055, 2.4);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
function decodeDC(value) {
 | 
			
		||||
    const intR = value >> 16;
 | 
			
		||||
    const intG = (value >> 8) & 255;
 | 
			
		||||
    const intB = value & 255;
 | 
			
		||||
    return [sRGBToLinear(intR), sRGBToLinear(intG), sRGBToLinear(intB)];
 | 
			
		||||
};
 | 
			
		||||
function sign(n) { return (n < 0 ? -1 : 1); }
 | 
			
		||||
function signPow(val, exp) { return sign(val) * Math.pow(Math.abs(val), exp); }
 | 
			
		||||
function decodeDC2(value, maximumValue) {
 | 
			
		||||
    const quantR = Math.floor(value / (19 * 19));
 | 
			
		||||
    const quantG = Math.floor(value / 19) % 19;
 | 
			
		||||
    const quantB = value % 19;
 | 
			
		||||
    const rgb = [
 | 
			
		||||
        signPow((quantR - 9) / 9, 2.0) * maximumValue,
 | 
			
		||||
        signPow((quantG - 9) / 9, 2.0) * maximumValue,
 | 
			
		||||
        signPow((quantB - 9) / 9, 2.0) * maximumValue,
 | 
			
		||||
    ];
 | 
			
		||||
    return rgb;
 | 
			
		||||
};
 | 
			
		||||
function decodeblur(blurhash, width, height, punch) {
 | 
			
		||||
    punch = punch | 1;
 | 
			
		||||
    if (blurhash.length < 6) {
 | 
			
		||||
        console.error('too short blurhash');
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
    const sizeFlag = decode83(blurhash[0]);
 | 
			
		||||
    const numY = Math.floor(sizeFlag / 9) + 1;
 | 
			
		||||
    const numX = (sizeFlag % 9) + 1;
 | 
			
		||||
    const quantisedMaximumValue = decode83(blurhash[1]);
 | 
			
		||||
    const maximumValue = (quantisedMaximumValue + 1) / 166;
 | 
			
		||||
    if (blurhash.length !== 4 + 2 * numX * numY) {
 | 
			
		||||
        console.error('blurhash length mismatch', blurhash.length, 4 + 2 * numX * numY);
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
    let colors = new Array(numX * numY);
 | 
			
		||||
    for (let i = 0; i < colors.length; i++) {
 | 
			
		||||
        if (i === 0) {
 | 
			
		||||
            const value = decode83(blurhash.substring(2, 6));
 | 
			
		||||
            colors[i] = decodeDC(value);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            const value = decode83(blurhash.substring(4 + i * 2, 6 + i * 2));
 | 
			
		||||
            colors[i] = decodeDC2(value, maximumValue * punch);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    const bytesPerRow = width * 4;
 | 
			
		||||
    let pixels = new Uint8ClampedArray(bytesPerRow * height);
 | 
			
		||||
    for (var y = 0; y < height; y++) {
 | 
			
		||||
        for (var x = 0; x < width; x++) {
 | 
			
		||||
            var r = 0;
 | 
			
		||||
            var g = 0;
 | 
			
		||||
            var b = 0;
 | 
			
		||||
            for (let j = 0; j < numY; j++) {
 | 
			
		||||
                for (let i = 0; i < numX; i++) {
 | 
			
		||||
                    let basis = Math.cos(Math.PI * x * i / width) * Math.cos(Math.PI * y * j / height);
 | 
			
		||||
                    let color = colors[i + j * numX];
 | 
			
		||||
                    r += color[0] * basis;
 | 
			
		||||
                    g += color[1] * basis;
 | 
			
		||||
                    b += color[2] * basis;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            const intR = linearTosRGB(r);
 | 
			
		||||
            const intG = linearTosRGB(g);
 | 
			
		||||
            const intB = linearTosRGB(b);
 | 
			
		||||
            pixels[4 * x + 0 + y * bytesPerRow] = intR;
 | 
			
		||||
            pixels[4 * x + 1 + y * bytesPerRow] = intG;
 | 
			
		||||
            pixels[4 * x + 2 + y * bytesPerRow] = intB;
 | 
			
		||||
            pixels[4 * x + 3 + y * bytesPerRow] = 255; // alpha
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return pixels;
 | 
			
		||||
}
 | 
			
		||||
function parseBlur(blur) {
 | 
			
		||||
    const canvas = document.getElementById('canvas');
 | 
			
		||||
    const ctx = canvas.getContext('2d');
 | 
			
		||||
    const pixels = decodeblur(blur, 32, 32)
 | 
			
		||||
    const imageData = new ImageData(pixels, 32, 32);
 | 
			
		||||
 | 
			
		||||
    ctx.putImageData(imageData, 0, 0);
 | 
			
		||||
    return canvas.toDataURL()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								app/js/common/jquery.js
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,203 +1,267 @@
 | 
			
		||||
$(function($) {
 | 
			
		||||
let selectedColumn = 0
 | 
			
		||||
let selectedToot = 0
 | 
			
		||||
$(function ($) {
 | 
			
		||||
	//キーボードショートカット
 | 
			
		||||
	$(window).keydown(function(e) {
 | 
			
		||||
		var hasFocus = $('input').is(':focus');
 | 
			
		||||
		var hasFocus2 = $('textarea').is(':focus');
 | 
			
		||||
		if(document.getElementById("webview")){
 | 
			
		||||
			if($("#webviewsel:checked").val()){
 | 
			
		||||
				var wv=false;
 | 
			
		||||
			}else{
 | 
			
		||||
				var wv=true;
 | 
			
		||||
	$(window).keydown(function (e) {
 | 
			
		||||
		const hasFocus = isFocused('input')
 | 
			
		||||
		const hasFocus2 = isFocused('textarea')
 | 
			
		||||
		const postBox = document.querySelector('#textarea')
 | 
			
		||||
		let wv = false
 | 
			
		||||
		//Enter
 | 
			
		||||
		if (e.keyCode === 13) {
 | 
			
		||||
			if (isFocused('#src')) {
 | 
			
		||||
				src()
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			if (isFocused('#list-add')) {
 | 
			
		||||
				makeNewList()
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		}else{
 | 
			
		||||
			var wv=true;
 | 
			
		||||
		}
 | 
			
		||||
		//Ctrl+Shift+Enter:Lgen
 | 
			
		||||
		if (event.metaKey || event.ctrlKey && wv) {
 | 
			
		||||
		if (event.metaKey || (event.ctrlKey && wv)) {
 | 
			
		||||
			if (event.shiftKey) {
 | 
			
		||||
				if (e.keyCode === 13) {
 | 
			
		||||
					post('local');
 | 
			
		||||
					return false;
 | 
			
		||||
					post('local')
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
		//Ctrl+Enter:投稿
 | 
			
		||||
		if (event.metaKey || event.ctrlKey && wv) {
 | 
			
		||||
		if (event.metaKey || (event.ctrlKey && wv)) {
 | 
			
		||||
			if (e.keyCode === 13) {
 | 
			
		||||
				post();
 | 
			
		||||
				return false;
 | 
			
		||||
				post()
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//Alt+Enter:セカンダリー
 | 
			
		||||
		if (event.metaKey || event.altKey && wv) {
 | 
			
		||||
		if (event.metaKey || (event.altKey && wv)) {
 | 
			
		||||
			if (e.keyCode === 13) {
 | 
			
		||||
				sec();
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		//Shift+Space:Markdownゼロ幅スペース
 | 
			
		||||
		if (event.shiftKey) {
 | 
			
		||||
			if (e.keyCode === 32) {
 | 
			
		||||
				brInsert("");
 | 
			
		||||
				return false;
 | 
			
		||||
				sec()
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//Esc:消す
 | 
			
		||||
		if (e.keyCode === 27 && wv) {
 | 
			
		||||
			hide();
 | 
			
		||||
			return false;
 | 
			
		||||
			hide()
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
		//F5リロード
 | 
			
		||||
		if (e.keyCode === 116 && wv) {
 | 
			
		||||
			location.href = "index.html";
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		//Ctrl+R:ランキング
 | 
			
		||||
		if ((event.metaKey || event.ctrlKey) && wv) {
 | 
			
		||||
			if (e.keyCode === 82) {
 | 
			
		||||
				if(localStorage.getItem("kirishima")){
 | 
			
		||||
					window.open("https://astarte.thedesk.top");
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			location.href = 'index.html'
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
		//Ctrl+Sift+C:全消し
 | 
			
		||||
		if (((event.metaKey || event.ctrlKey) && event.shiftKey )&& wv) {
 | 
			
		||||
		if ((event.metaKey || event.ctrlKey) && event.shiftKey && wv) {
 | 
			
		||||
			if (e.keyCode === 67) {
 | 
			
		||||
				clear();
 | 
			
		||||
				return false;
 | 
			
		||||
				clear()
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//Ctrl+Sift+N:NowPlaying
 | 
			
		||||
		if (((event.metaKey || event.ctrlKey) && event.shiftKey) && wv) {
 | 
			
		||||
		if ((event.metaKey || event.ctrlKey) && event.shiftKey && wv) {
 | 
			
		||||
			if (e.keyCode === 78) {
 | 
			
		||||
				show();
 | 
			
		||||
				show()
 | 
			
		||||
				nowplaying()
 | 
			
		||||
				return false;
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//input/textareaにフォーカスなし時
 | 
			
		||||
		if ((!hasFocus && !hasFocus2 ) && wv) {
 | 
			
		||||
			if(!wv){
 | 
			
		||||
				return true;
 | 
			
		||||
		if (!hasFocus && !hasFocus2 && wv) {
 | 
			
		||||
			if (!wv) {
 | 
			
		||||
				return true
 | 
			
		||||
			}
 | 
			
		||||
			//Ctrl+V:いつもの
 | 
			
		||||
			if (event.metaKey || event.ctrlKey) {
 | 
			
		||||
				if (e.keyCode === 86) {
 | 
			
		||||
					show();
 | 
			
		||||
					show()
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//Ctrl+F:検索
 | 
			
		||||
			if (event.metaKey || event.ctrlKey) {
 | 
			
		||||
				if (e.keyCode === 70) {
 | 
			
		||||
					srcBox()
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//X:開閉
 | 
			
		||||
			if (e.keyCode === 88) {
 | 
			
		||||
				if (!$("#post-box").hasClass("appear")) {
 | 
			
		||||
					show();
 | 
			
		||||
				if (!document.querySelector('#post-box').classList.contains('appear')) {
 | 
			
		||||
					show()
 | 
			
		||||
					$('textarea').focus()
 | 
			
		||||
				} else {
 | 
			
		||||
					hide();
 | 
			
		||||
					hide()
 | 
			
		||||
				}
 | 
			
		||||
				return false;
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			//N:新トゥート
 | 
			
		||||
			if (e.keyCode === 78) {
 | 
			
		||||
				if (!$("#post-box").hasClass("appear")) {
 | 
			
		||||
					show();
 | 
			
		||||
				if (!document.querySelector('#post-box').classList.contains('appear')) {
 | 
			
		||||
					show()
 | 
			
		||||
				}
 | 
			
		||||
				$('textarea').focus();
 | 
			
		||||
				return false;
 | 
			
		||||
				postBox.focus()
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			//Ctrl+E:全ての通知未読を既読にする
 | 
			
		||||
			if (event.metaKey || event.ctrlKey) {
 | 
			
		||||
				if (e.keyCode === 69) {
 | 
			
		||||
					allNotfRead();
 | 
			
		||||
					return false;
 | 
			
		||||
					allNotfRead()
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//Ctrl+K:メニュー開閉
 | 
			
		||||
			if (event.metaKey || event.ctrlKey) {
 | 
			
		||||
				if (e.keyCode === 75) {
 | 
			
		||||
					menu()
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//Ctrl+Space:読み込み
 | 
			
		||||
			if (event.metaKey || event.ctrlKey) {
 | 
			
		||||
				if (e.keyCode === 32) {
 | 
			
		||||
					parseColumn();
 | 
			
		||||
					return false;
 | 
			
		||||
					parseColumn()
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//Ctrl+Sift+S:設定
 | 
			
		||||
			if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
 | 
			
		||||
				if (e.keyCode === 83) {
 | 
			
		||||
					location.href = "setting.html";
 | 
			
		||||
					return false;
 | 
			
		||||
					location.href = 'setting.html'
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//Ctrl+Sift+M:アカマネ
 | 
			
		||||
			if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
 | 
			
		||||
				if (e.keyCode === 77) {
 | 
			
		||||
					location.href = "acct.html";
 | 
			
		||||
					return false;
 | 
			
		||||
					location.href = 'acct.html'
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//Ctrl+Sift+P:プロフ
 | 
			
		||||
			if ((event.ctrlKey) && event.shiftKey) {
 | 
			
		||||
			if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
 | 
			
		||||
				if (e.keyCode === 80) {
 | 
			
		||||
					profShow()
 | 
			
		||||
					return false;
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//数字:TL
 | 
			
		||||
			if (event.metaKey || event.ctrlKey) {
 | 
			
		||||
			if (e.keyCode >= 49 && e.keyCode <= 57) {
 | 
			
		||||
				var kz=e.keyCode-49;
 | 
			
		||||
				goColumn(kz);
 | 
			
		||||
				return false;
 | 
			
		||||
				if (e.keyCode >= 49 && e.keyCode <= 57) {
 | 
			
		||||
					const kz = e.keyCode - 49
 | 
			
		||||
					goColumn(kz)
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//矢印:選択
 | 
			
		||||
			if (e.code == 'ArrowLeft') {
 | 
			
		||||
				//left
 | 
			
		||||
				if (document.querySelector('#imagemodal').classList.contains('open')) {
 | 
			
		||||
					imgCont('prev')
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
				if (selectedColumn > 0) {
 | 
			
		||||
					selectedColumn--
 | 
			
		||||
				}
 | 
			
		||||
				tootSelector(selectedColumn, selectedToot)
 | 
			
		||||
				return false
 | 
			
		||||
			} else if (e.code == 'ArrowUp') {
 | 
			
		||||
				//up
 | 
			
		||||
				if (document.querySelector('#imagemodal').classList.contains('open')) {
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
				if (selectedToot > 0) {
 | 
			
		||||
					selectedToot--
 | 
			
		||||
				}
 | 
			
		||||
				tootSelector(selectedColumn, selectedToot)
 | 
			
		||||
				return false
 | 
			
		||||
			} else if (e.code == 'ArrowRight') {
 | 
			
		||||
				//right
 | 
			
		||||
				if (document.querySelector('#imagemodal').classList.contains('open')) {
 | 
			
		||||
					imgCont('next')
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
				if (selectedColumn < $('.tl-box').length - 1) {
 | 
			
		||||
					selectedColumn++
 | 
			
		||||
				}
 | 
			
		||||
				tootSelector(selectedColumn, selectedToot)
 | 
			
		||||
				return false
 | 
			
		||||
			} else if (e.code == 'ArrowDown') {
 | 
			
		||||
				//down
 | 
			
		||||
				if (document.querySelector('#imagemodal').classList.contains('open')) {
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
				selectedToot++
 | 
			
		||||
				tootSelector(selectedColumn, selectedToot)
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			//Ctrl+U:0,0選択
 | 
			
		||||
			if (event.ctrlKey || event.metaKey) {
 | 
			
		||||
				if (e.keyCode === 85) {
 | 
			
		||||
					selectedToot = 0
 | 
			
		||||
					selectedColumn = 0
 | 
			
		||||
					tootSelector(0, 0)
 | 
			
		||||
					return false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			//選択時
 | 
			
		||||
			const selectedId = document.querySelector('.selectedToot').getAttribute('unique-id')
 | 
			
		||||
			const selectedAcctIds = document.querySelector(`#timeline_${selectedColumn}`).getAttribute('data-acct')
 | 
			
		||||
			if (e.keyCode == 70) {
 | 
			
		||||
				fav(selectedId, selectedAcctIds, false)
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			if (e.keyCode == 66) {
 | 
			
		||||
				rt(selectedId, selectedAcctIds, false)
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			if (e.keyCode == 82) {
 | 
			
		||||
				const target = document.querySelector('.selectedToot .rep-btn')
 | 
			
		||||
				const ats_cm = target.getAttribute('data-men')
 | 
			
		||||
				const mode = target.getAttribute('data-visen')
 | 
			
		||||
				re(selectedId, ats_cm, selectedAcctIds, mode)
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//textareaフォーカス時
 | 
			
		||||
		if (hasFocus2 && wv) {
 | 
			
		||||
			if (event.metaKey || event.ctrlKey) {
 | 
			
		||||
				//Ctrl+B:太字
 | 
			
		||||
				if (e.keyCode === 66) {
 | 
			
		||||
					tagsel('b');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				//Ctrl+I:斜字
 | 
			
		||||
				if (e.keyCode === 73) {
 | 
			
		||||
					tagsel('i');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				//Ctrl+U:下線
 | 
			
		||||
				if (e.keyCode === 85) {
 | 
			
		||||
					tagsel('u');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				//Ctrl+S:取り消し線
 | 
			
		||||
				if (e.keyCode === 83) {
 | 
			
		||||
					tagsel('s');
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				//C+S+(No):ワンクリ
 | 
			
		||||
				if ((event.metaKey || event.ctrlKey) && event.shiftKey) {
 | 
			
		||||
					if (e.keyCode >= 49 && e.keyCode <= 51) {
 | 
			
		||||
						var no=e.keyCode-48;
 | 
			
		||||
						if(localStorage.getItem("oks-"+no)){$("#textarea").val($("#textarea").val()+localStorage.getItem("oks-"+no))}
 | 
			
		||||
						return false;
 | 
			
		||||
						const no = e.keyCode - 48
 | 
			
		||||
						const oks = localStorage.getItem('oks-' + no)
 | 
			
		||||
						if (oks) {
 | 
			
		||||
							postBox.value = postBox.value + oks
 | 
			
		||||
						}
 | 
			
		||||
						return false
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//イメージビューワー切り替え
 | 
			
		||||
		if (e.keyCode === 37 &&wv) {
 | 
			
		||||
			if ($("#imagemodal").hasClass("open")) {
 | 
			
		||||
				imgCont('prev');
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (e.keyCode === 39 && wv) {
 | 
			
		||||
			if ($("#imagemodal").hasClass("open")) {
 | 
			
		||||
				imgCont('next');
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
	})
 | 
			
		||||
	//クリアボタン
 | 
			
		||||
	$("#clear").click(function() {
 | 
			
		||||
		clear();
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
	document.getElementById('clear').addEventListener('click', clear)
 | 
			
		||||
})
 | 
			
		||||
//選択する
 | 
			
		||||
function tootSelector(column, toot) {
 | 
			
		||||
	const selectedToot = document.querySelector('.selectedToot')
 | 
			
		||||
	let rect = {top: 0}
 | 
			
		||||
	if (selectedToot) {
 | 
			
		||||
		selectedToot.classList.remove('selectedToot')
 | 
			
		||||
		rect = selectedToot.getBoundingClientRect()
 | 
			
		||||
	}
 | 
			
		||||
	document.querySelectorAll(`#timeline_${column} .cvo`)[toot].classList.add('selectedToot')
 | 
			
		||||
	const scr = document.querySelector(`#tlBox${column}`).scrollTop
 | 
			
		||||
	const elem = rect.top + document.body.scrollTop
 | 
			
		||||
	let top = elem - getHeight('.tl-box') + scr
 | 
			
		||||
	if (top > 0) {
 | 
			
		||||
		top = top + getHeight('.selectedToot')
 | 
			
		||||
		if (top > scr) {
 | 
			
		||||
			$(`#tlBox${column}`).animate({ scrollTop: top })
 | 
			
		||||
		}
 | 
			
		||||
	} else if (elem < 0) {
 | 
			
		||||
		const to = scr + elem - getHeight('.selectedToot')
 | 
			
		||||
		if (to < scr) {
 | 
			
		||||
			$(`#tlBox${column}`).animate({ scrollTop: to })
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10022
									
								
								app/js/common/materialize.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										6
									
								
								app/js/common/materialize.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,17 +1,31 @@
 | 
			
		||||
//モーダル・ドロップダウンの各種設定
 | 
			
		||||
$(document).ready(function(){
 | 
			
		||||
    // the "href" attribute of the modal trigger must specify the modal ID that wants to be triggered
 | 
			
		||||
    $('.modal').modal();
 | 
			
		||||
	  $('.dropdown-button').dropdown({
 | 
			
		||||
      inDuration: 300,
 | 
			
		||||
      outDuration: 225,
 | 
			
		||||
      constrainWidth: false, // Does not change width of dropdown to that of the activator
 | 
			
		||||
      hover: false, // Activate on hover
 | 
			
		||||
      gutter: 0, // Spacing from edge
 | 
			
		||||
      belowOrigin: false, // Displays dropdown below the button
 | 
			
		||||
      alignment: 'left', // Displays dropdown with edge aligned to the left of button
 | 
			
		||||
      stopPropagation: false // Stops event propagation
 | 
			
		||||
    }
 | 
			
		||||
  );
 | 
			
		||||
     
 | 
			
		||||
  });
 | 
			
		||||
$(document).ready(function () {
 | 
			
		||||
  // the "href" attribute of the modal trigger must specify the modal ID that wants to be triggered
 | 
			
		||||
  const modals = document.querySelectorAll('.modal')
 | 
			
		||||
  M.Modal.init(modals, {
 | 
			
		||||
    inDuration: 300,
 | 
			
		||||
    outDuration: 225,
 | 
			
		||||
    constrainWidth: false, // Does not change width of dropdown to that of the activator
 | 
			
		||||
    hover: false, // Activate on hover
 | 
			
		||||
    gutter: 0, // Spacing from edge
 | 
			
		||||
    belowOrigin: false, // Displays dropdown below the button
 | 
			
		||||
    alignment: 'left', // Displays dropdown with edge aligned to the left of button
 | 
			
		||||
    stopPropagation: false
 | 
			
		||||
  })
 | 
			
		||||
  const dropdown = document.querySelectorAll('.modal')
 | 
			
		||||
  M.Dropdown.init(dropdown, {
 | 
			
		||||
    inDuration: 300,
 | 
			
		||||
    outDuration: 225,
 | 
			
		||||
    constrainWidth: false, // Does not change width of dropdown to that of the activator
 | 
			
		||||
    hover: false, // Activate on hover
 | 
			
		||||
    gutter: 0, // Spacing from edge
 | 
			
		||||
    belowOrigin: false, // Displays dropdown below the button
 | 
			
		||||
    alignment: 'left', // Displays dropdown with edge aligned to the left of button
 | 
			
		||||
    stopPropagation: false // Stops event propagation
 | 
			
		||||
  })
 | 
			
		||||
  M.Collapsible.init(document.querySelectorAll('.collapsible'));
 | 
			
		||||
  const videoModal = document.querySelectorAll('#videomodal')
 | 
			
		||||
  M.Modal.init(videoModal, {
 | 
			
		||||
    onCloseEnd: stopVideo
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
@@ -1,33 +1,96 @@
 | 
			
		||||
/*
 | 
			
		||||
 A JavaScript implementation of the SHA family of hashes, as
 | 
			
		||||
 defined in FIPS PUB 180-4 and FIPS PUB 202, as well as the corresponding
 | 
			
		||||
 HMAC implementation as defined in FIPS PUB 198a
 | 
			
		||||
const sha256 = function sha256(ascii) {
 | 
			
		||||
	function rightRotate(value, amount) {
 | 
			
		||||
		return (value >>> amount) | (value << (32 - amount));
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 Copyright 2008-2018 Brian Turek, 1998-2009 Paul Johnston & Contributors
 | 
			
		||||
 Distributed under the BSD License
 | 
			
		||||
 See http://caligatio.github.com/jsSHA/ for more information
 | 
			
		||||
*/
 | 
			
		||||
'use strict';(function(I){function w(c,a,d){var l=0,b=[],g=0,f,n,k,e,h,q,y,p,m=!1,t=[],r=[],u,z=!1;d=d||{};f=d.encoding||"UTF8";u=d.numRounds||1;if(u!==parseInt(u,10)||1>u)throw Error("numRounds must a integer >= 1");if(0===c.lastIndexOf("SHA-",0))if(q=function(b,a){return A(b,a,c)},y=function(b,a,l,f){var g,e;if("SHA-224"===c||"SHA-256"===c)g=(a+65>>>9<<4)+15,e=16;else throw Error("Unexpected error in SHA-2 implementation");for(;b.length<=g;)b.push(0);b[a>>>5]|=128<<24-a%32;a=a+l;b[g]=a&4294967295;
 | 
			
		||||
b[g-1]=a/4294967296|0;l=b.length;for(a=0;a<l;a+=e)f=A(b.slice(a,a+e),f,c);if("SHA-224"===c)b=[f[0],f[1],f[2],f[3],f[4],f[5],f[6]];else if("SHA-256"===c)b=f;else throw Error("Unexpected error in SHA-2 implementation");return b},p=function(b){return b.slice()},"SHA-224"===c)h=512,e=224;else if("SHA-256"===c)h=512,e=256;else throw Error("Chosen SHA variant is not supported");else throw Error("Chosen SHA variant is not supported");k=B(a,f);n=x(c);this.setHMACKey=function(b,a,g){var e;if(!0===m)throw Error("HMAC key already set");
 | 
			
		||||
if(!0===z)throw Error("Cannot set HMAC key after calling update");f=(g||{}).encoding||"UTF8";a=B(a,f)(b);b=a.binLen;a=a.value;e=h>>>3;g=e/4-1;if(e<b/8){for(a=y(a,b,0,x(c));a.length<=g;)a.push(0);a[g]&=4294967040}else if(e>b/8){for(;a.length<=g;)a.push(0);a[g]&=4294967040}for(b=0;b<=g;b+=1)t[b]=a[b]^909522486,r[b]=a[b]^1549556828;n=q(t,n);l=h;m=!0};this.update=function(a){var c,f,e,d=0,p=h>>>5;c=k(a,b,g);a=c.binLen;f=c.value;c=a>>>5;for(e=0;e<c;e+=p)d+h<=a&&(n=q(f.slice(e,e+p),n),d+=h);l+=d;b=f.slice(d>>>
 | 
			
		||||
5);g=a%h;z=!0};this.getHash=function(a,f){var d,h,k,q;if(!0===m)throw Error("Cannot call getHash after setting HMAC key");k=C(f);switch(a){case "HEX":d=function(a){return D(a,e,k)};break;case "B64":d=function(a){return E(a,e,k)};break;case "BYTES":d=function(a){return F(a,e)};break;case "ARRAYBUFFER":try{h=new ArrayBuffer(0)}catch(v){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a){return G(a,e)};break;default:throw Error("format must be HEX, B64, BYTES, or ARRAYBUFFER");
 | 
			
		||||
}q=y(b.slice(),g,l,p(n));for(h=1;h<u;h+=1)q=y(q,e,0,x(c));return d(q)};this.getHMAC=function(a,f){var d,k,t,u;if(!1===m)throw Error("Cannot call getHMAC without first setting HMAC key");t=C(f);switch(a){case "HEX":d=function(a){return D(a,e,t)};break;case "B64":d=function(a){return E(a,e,t)};break;case "BYTES":d=function(a){return F(a,e)};break;case "ARRAYBUFFER":try{d=new ArrayBuffer(0)}catch(v){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a){return G(a,e)};break;default:throw Error("outputFormat must be HEX, B64, BYTES, or ARRAYBUFFER");
 | 
			
		||||
}k=y(b.slice(),g,l,p(n));u=q(r,x(c));u=y(k,e,h,u);return d(u)}}function m(){}function D(c,a,d){var l="";a/=8;var b,g;for(b=0;b<a;b+=1)g=c[b>>>2]>>>8*(3+b%4*-1),l+="0123456789abcdef".charAt(g>>>4&15)+"0123456789abcdef".charAt(g&15);return d.outputUpper?l.toUpperCase():l}function E(c,a,d){var l="",b=a/8,g,f,n;for(g=0;g<b;g+=3)for(f=g+1<b?c[g+1>>>2]:0,n=g+2<b?c[g+2>>>2]:0,n=(c[g>>>2]>>>8*(3+g%4*-1)&255)<<16|(f>>>8*(3+(g+1)%4*-1)&255)<<8|n>>>8*(3+(g+2)%4*-1)&255,f=0;4>f;f+=1)8*g+6*f<=a?l+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n>>>
 | 
			
		||||
6*(3-f)&63):l+=d.b64Pad;return l}function F(c,a){var d="",l=a/8,b,g;for(b=0;b<l;b+=1)g=c[b>>>2]>>>8*(3+b%4*-1)&255,d+=String.fromCharCode(g);return d}function G(c,a){var d=a/8,l,b=new ArrayBuffer(d),g;g=new Uint8Array(b);for(l=0;l<d;l+=1)g[l]=c[l>>>2]>>>8*(3+l%4*-1)&255;return b}function C(c){var a={outputUpper:!1,b64Pad:"=",shakeLen:-1};c=c||{};a.outputUpper=c.outputUpper||!1;!0===c.hasOwnProperty("b64Pad")&&(a.b64Pad=c.b64Pad);if("boolean"!==typeof a.outputUpper)throw Error("Invalid outputUpper formatting option");
 | 
			
		||||
if("string"!==typeof a.b64Pad)throw Error("Invalid b64Pad formatting option");return a}function B(c,a){var d;switch(a){case "UTF8":case "UTF16BE":case "UTF16LE":break;default:throw Error("encoding must be UTF8, UTF16BE, or UTF16LE");}switch(c){case "HEX":d=function(a,b,c){var f=a.length,d,k,e,h,q;if(0!==f%2)throw Error("String of HEX type must be in byte increments");b=b||[0];c=c||0;q=c>>>3;for(d=0;d<f;d+=2){k=parseInt(a.substr(d,2),16);if(isNaN(k))throw Error("String of HEX type contains invalid characters");
 | 
			
		||||
h=(d>>>1)+q;for(e=h>>>2;b.length<=e;)b.push(0);b[e]|=k<<8*(3+h%4*-1)}return{value:b,binLen:4*f+c}};break;case "TEXT":d=function(c,b,d){var f,n,k=0,e,h,q,m,p,r;b=b||[0];d=d||0;q=d>>>3;if("UTF8"===a)for(r=3,e=0;e<c.length;e+=1)for(f=c.charCodeAt(e),n=[],128>f?n.push(f):2048>f?(n.push(192|f>>>6),n.push(128|f&63)):55296>f||57344<=f?n.push(224|f>>>12,128|f>>>6&63,128|f&63):(e+=1,f=65536+((f&1023)<<10|c.charCodeAt(e)&1023),n.push(240|f>>>18,128|f>>>12&63,128|f>>>6&63,128|f&63)),h=0;h<n.length;h+=1){p=k+
 | 
			
		||||
q;for(m=p>>>2;b.length<=m;)b.push(0);b[m]|=n[h]<<8*(r+p%4*-1);k+=1}else if("UTF16BE"===a||"UTF16LE"===a)for(r=2,n="UTF16LE"===a&&!0||"UTF16LE"!==a&&!1,e=0;e<c.length;e+=1){f=c.charCodeAt(e);!0===n&&(h=f&255,f=h<<8|f>>>8);p=k+q;for(m=p>>>2;b.length<=m;)b.push(0);b[m]|=f<<8*(r+p%4*-1);k+=2}return{value:b,binLen:8*k+d}};break;case "B64":d=function(a,b,c){var f=0,d,k,e,h,q,m,p;if(-1===a.search(/^[a-zA-Z0-9=+\/]+$/))throw Error("Invalid character in base-64 string");k=a.indexOf("=");a=a.replace(/\=/g,
 | 
			
		||||
"");if(-1!==k&&k<a.length)throw Error("Invalid '=' found in base-64 string");b=b||[0];c=c||0;m=c>>>3;for(k=0;k<a.length;k+=4){q=a.substr(k,4);for(e=h=0;e<q.length;e+=1)d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(q[e]),h|=d<<18-6*e;for(e=0;e<q.length-1;e+=1){p=f+m;for(d=p>>>2;b.length<=d;)b.push(0);b[d]|=(h>>>16-8*e&255)<<8*(3+p%4*-1);f+=1}}return{value:b,binLen:8*f+c}};break;case "BYTES":d=function(a,b,c){var d,n,k,e,h;b=b||[0];c=c||0;k=c>>>3;for(n=0;n<a.length;n+=
 | 
			
		||||
1)d=a.charCodeAt(n),h=n+k,e=h>>>2,b.length<=e&&b.push(0),b[e]|=d<<8*(3+h%4*-1);return{value:b,binLen:8*a.length+c}};break;case "ARRAYBUFFER":try{d=new ArrayBuffer(0)}catch(l){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a,b,c){var d,n,k,e,h;b=b||[0];c=c||0;n=c>>>3;h=new Uint8Array(a);for(d=0;d<a.byteLength;d+=1)e=d+n,k=e>>>2,b.length<=k&&b.push(0),b[k]|=h[d]<<8*(3+e%4*-1);return{value:b,binLen:8*a.byteLength+c}};break;default:throw Error("format must be HEX, TEXT, B64, BYTES, or ARRAYBUFFER");
 | 
			
		||||
}return d}function r(c,a){return c>>>a|c<<32-a}function J(c,a,d){return c&a^~c&d}function K(c,a,d){return c&a^c&d^a&d}function L(c){return r(c,2)^r(c,13)^r(c,22)}function M(c){return r(c,6)^r(c,11)^r(c,25)}function N(c){return r(c,7)^r(c,18)^c>>>3}function O(c){return r(c,17)^r(c,19)^c>>>10}function P(c,a){var d=(c&65535)+(a&65535);return((c>>>16)+(a>>>16)+(d>>>16)&65535)<<16|d&65535}function Q(c,a,d,l){var b=(c&65535)+(a&65535)+(d&65535)+(l&65535);return((c>>>16)+(a>>>16)+(d>>>16)+(l>>>16)+(b>>>
 | 
			
		||||
16)&65535)<<16|b&65535}function R(c,a,d,l,b){var g=(c&65535)+(a&65535)+(d&65535)+(l&65535)+(b&65535);return((c>>>16)+(a>>>16)+(d>>>16)+(l>>>16)+(b>>>16)+(g>>>16)&65535)<<16|g&65535}function x(c){var a=[],d;if(0===c.lastIndexOf("SHA-",0))switch(a=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428],d=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],c){case "SHA-224":break;case "SHA-256":a=d;break;case "SHA-384":a=[new m,new m,
 | 
			
		||||
new m,new m,new m,new m,new m,new m];break;case "SHA-512":a=[new m,new m,new m,new m,new m,new m,new m,new m];break;default:throw Error("Unknown SHA variant");}else throw Error("No SHA variants supported");return a}function A(c,a,d){var l,b,g,f,n,k,e,h,m,r,p,w,t,x,u,z,A,B,C,D,E,F,v=[],G;if("SHA-224"===d||"SHA-256"===d)r=64,w=1,F=Number,t=P,x=Q,u=R,z=N,A=O,B=L,C=M,E=K,D=J,G=H;else throw Error("Unexpected error in SHA-2 implementation");d=a[0];l=a[1];b=a[2];g=a[3];f=a[4];n=a[5];k=a[6];e=a[7];for(p=
 | 
			
		||||
0;p<r;p+=1)16>p?(m=p*w,h=c.length<=m?0:c[m],m=c.length<=m+1?0:c[m+1],v[p]=new F(h,m)):v[p]=x(A(v[p-2]),v[p-7],z(v[p-15]),v[p-16]),h=u(e,C(f),D(f,n,k),G[p],v[p]),m=t(B(d),E(d,l,b)),e=k,k=n,n=f,f=t(g,h),g=b,b=l,l=d,d=t(h,m);a[0]=t(d,a[0]);a[1]=t(l,a[1]);a[2]=t(b,a[2]);a[3]=t(g,a[3]);a[4]=t(f,a[4]);a[5]=t(n,a[5]);a[6]=t(k,a[6]);a[7]=t(e,a[7]);return a}var H;H=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,
 | 
			
		||||
2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,
 | 
			
		||||
2756734187,3204031479,3329325298];"function"===typeof define&&define.amd?define(function(){return w}):"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(module.exports=w),exports=w):I.jsSHA=w})(this);
 | 
			
		||||
function sha256(token){
 | 
			
		||||
    var shaObj = new jsSHA("SHA-256", "TEXT");
 | 
			
		||||
    shaObj.update(token);
 | 
			
		||||
    var hash = shaObj.getHash("HEX");
 | 
			
		||||
    return hash;
 | 
			
		||||
}
 | 
			
		||||
	const mathPow = Math.pow;
 | 
			
		||||
	const maxWord = mathPow(2, 32);
 | 
			
		||||
	const lengthProperty = 'length'
 | 
			
		||||
	let i, j; // Used as a counter across the whole file
 | 
			
		||||
	let result = ''
 | 
			
		||||
 | 
			
		||||
	let words = [];
 | 
			
		||||
	const asciiBitLength = ascii[lengthProperty] * 8;
 | 
			
		||||
 | 
			
		||||
	//* caching results is optional - remove/add slash from front of this line to toggle
 | 
			
		||||
	// Initial hash value: first 32 bits of the fractional parts of the square roots of the first 8 primes
 | 
			
		||||
	// (we actually calculate the first 64, but extra values are just ignored)
 | 
			
		||||
	let hash = sha256.h = sha256.h || [];
 | 
			
		||||
	// Round constants: first 32 bits of the fractional parts of the cube roots of the first 64 primes
 | 
			
		||||
	let k = sha256.k = sha256.k || [];
 | 
			
		||||
	let primeCounter = k[lengthProperty];
 | 
			
		||||
	/*/
 | 
			
		||||
	var hash = [], k = [];
 | 
			
		||||
	var primeCounter = 0;
 | 
			
		||||
	//*/
 | 
			
		||||
 | 
			
		||||
	let isComposite = {};
 | 
			
		||||
	for (let candidate = 2; primeCounter < 64; candidate++) {
 | 
			
		||||
		if (!isComposite[candidate]) {
 | 
			
		||||
			for (i = 0; i < 313; i += candidate) {
 | 
			
		||||
				isComposite[i] = candidate;
 | 
			
		||||
			}
 | 
			
		||||
			hash[primeCounter] = (mathPow(candidate, .5) * maxWord) | 0;
 | 
			
		||||
			k[primeCounter++] = (mathPow(candidate, 1 / 3) * maxWord) | 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ascii += '\x80' // Append Ƈ' bit (plus zero padding)
 | 
			
		||||
	while (ascii[lengthProperty] % 64 - 56) ascii += '\x00' // More zero padding
 | 
			
		||||
	for (i = 0; i < ascii[lengthProperty]; i++) {
 | 
			
		||||
		j = ascii.charCodeAt(i);
 | 
			
		||||
		if (j >> 8) return; // ASCII check: only accept characters in range 0-255
 | 
			
		||||
		words[i >> 2] |= j << ((3 - i) % 4) * 8;
 | 
			
		||||
	}
 | 
			
		||||
	words[words[lengthProperty]] = ((asciiBitLength / maxWord) | 0);
 | 
			
		||||
	words[words[lengthProperty]] = (asciiBitLength)
 | 
			
		||||
 | 
			
		||||
	// process each chunk
 | 
			
		||||
	for (j = 0; j < words[lengthProperty];) {
 | 
			
		||||
		let w = words.slice(j, j += 16); // The message is expanded into 64 words as part of the iteration
 | 
			
		||||
		const oldHash = hash;
 | 
			
		||||
		// This is now the undefinedworking hash", often labelled as variables a...g
 | 
			
		||||
		// (we have to truncate as well, otherwise extra entries at the end accumulate
 | 
			
		||||
		hash = hash.slice(0, 8);
 | 
			
		||||
 | 
			
		||||
		for (i = 0; i < 64; i++) {
 | 
			
		||||
			const i2 = i + j;
 | 
			
		||||
			// Expand the message into 64 words
 | 
			
		||||
			// Used below if 
 | 
			
		||||
			const w15 = w[i - 15], w2 = w[i - 2];
 | 
			
		||||
 | 
			
		||||
			// Iterate
 | 
			
		||||
			const a = hash[0], e = hash[4];
 | 
			
		||||
			const temp1 = hash[7]
 | 
			
		||||
				+ (rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25)) // S1
 | 
			
		||||
				+ ((e & hash[5]) ^ ((~e) & hash[6])) // ch
 | 
			
		||||
				+ k[i]
 | 
			
		||||
				// Expand the message schedule if needed
 | 
			
		||||
				+ (w[i] = (i < 16) ? w[i] : (
 | 
			
		||||
					w[i - 16]
 | 
			
		||||
					+ (rightRotate(w15, 7) ^ rightRotate(w15, 18) ^ (w15 >>> 3)) // s0
 | 
			
		||||
					+ w[i - 7]
 | 
			
		||||
					+ (rightRotate(w2, 17) ^ rightRotate(w2, 19) ^ (w2 >>> 10)) // s1
 | 
			
		||||
				) | 0
 | 
			
		||||
				);
 | 
			
		||||
			// This is only used once, so *could* be moved below, but it only saves 4 bytes and makes things unreadble
 | 
			
		||||
			const temp2 = (rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22)) // S0
 | 
			
		||||
				+ ((a & hash[1]) ^ (a & hash[2]) ^ (hash[1] & hash[2])); // maj
 | 
			
		||||
 | 
			
		||||
			hash = [(temp1 + temp2) | 0].concat(hash); // We don't bother trimming off the extra ones, they're harmless as long as we're truncating when we do the slice()
 | 
			
		||||
			hash[4] = (hash[4] + temp1) | 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for (i = 0; i < 8; i++) {
 | 
			
		||||
			hash[i] = (hash[i] + oldHash[i]) | 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < 8; i++) {
 | 
			
		||||
		for (j = 3; j + 1; j--) {
 | 
			
		||||
			const b = (hash[i] >> (j * 8)) & 255;
 | 
			
		||||
			result += ((b < 16) ? 0 : '') + b.toString(16);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return result;
 | 
			
		||||
};
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
    factory(jQuery);
 | 
			
		||||
  }
 | 
			
		||||
}(function ($) {
 | 
			
		||||
  $.timeago = function(timestamp) {
 | 
			
		||||
  $.timeago = function (timestamp) {
 | 
			
		||||
    if (timestamp instanceof Date) {
 | 
			
		||||
      return inWords(timestamp);
 | 
			
		||||
    } else if (typeof timestamp === "string") {
 | 
			
		||||
@@ -36,8 +36,7 @@
 | 
			
		||||
      return inWords($.timeago.datetime(timestamp));
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  var $t = $.timeago;
 | 
			
		||||
 | 
			
		||||
  const $t = $.timeago;
 | 
			
		||||
  $.extend($.timeago, {
 | 
			
		||||
    settings: {
 | 
			
		||||
      refreshMillis: 60000,
 | 
			
		||||
@@ -47,35 +46,35 @@
 | 
			
		||||
      cutoff: 0,
 | 
			
		||||
      autoDispose: true,
 | 
			
		||||
      strings: {
 | 
			
		||||
        prefixAgo: null,
 | 
			
		||||
        prefixFromNow: "今から",
 | 
			
		||||
        suffixAgo: "",
 | 
			
		||||
        suffixFromNow: "",
 | 
			
		||||
        inPast: '',
 | 
			
		||||
        seconds: "%d秒前",
 | 
			
		||||
        minute: "1分前",
 | 
			
		||||
        minutes: "%d分前",
 | 
			
		||||
        hour: "1時間前",
 | 
			
		||||
        hours: "%d時間前",
 | 
			
		||||
        day: "昨日",
 | 
			
		||||
        days: "%d日前",
 | 
			
		||||
        month: "昨月",
 | 
			
		||||
        months: "%dヶ月前",
 | 
			
		||||
        year: "去年",
 | 
			
		||||
        years: "%d年前",
 | 
			
		||||
        prefixAgo: lang.lang_time_prefixAgo,
 | 
			
		||||
        prefixFromNow: lang.lang_time_prefixFromNow,
 | 
			
		||||
        suffixAgo: lang.lang_time_suffixAgo,
 | 
			
		||||
        suffixFromNow: lang.lang_time_suffixFromNow,
 | 
			
		||||
        inPast: lang.lang_time_inPast,
 | 
			
		||||
        seconds: lang.lang_time_seconds,
 | 
			
		||||
        minute: lang.lang_time_minute,
 | 
			
		||||
        minutes: lang.lang_time_minutes,
 | 
			
		||||
        hour: lang.lang_time_hour,
 | 
			
		||||
        hours: lang.lang_time_hours,
 | 
			
		||||
        day: lang.lang_time_day,
 | 
			
		||||
        days: lang.lang_time_days,
 | 
			
		||||
        month: lang.lang_time_month,
 | 
			
		||||
        months: lang.lang_time_months,
 | 
			
		||||
        year: lang.lang_time_year,
 | 
			
		||||
        years: lang.lang_time_years,
 | 
			
		||||
        wordSeparator: " ",
 | 
			
		||||
        numbers: []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    inWords: function(distanceMillis) {
 | 
			
		||||
      if (!this.settings.allowPast && ! this.settings.allowFuture) {
 | 
			
		||||
          throw 'timeago allowPast and allowFuture settings can not both be set to false.';
 | 
			
		||||
    inWords: function (distanceMillis) {
 | 
			
		||||
      if (!this.settings.allowPast && !this.settings.allowFuture) {
 | 
			
		||||
        throw 'timeago allowPast and allowFuture settings can not both be set to false.';
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      var $l = this.settings.strings;
 | 
			
		||||
      var prefix = $l.prefixAgo;
 | 
			
		||||
      var suffix = $l.suffixAgo;
 | 
			
		||||
      const $l = this.settings.strings;
 | 
			
		||||
      let prefix = $l.prefixAgo;
 | 
			
		||||
      let suffix = $l.suffixAgo;
 | 
			
		||||
      if (this.settings.allowFuture) {
 | 
			
		||||
        if (distanceMillis < 0) {
 | 
			
		||||
          prefix = $l.prefixFromNow;
 | 
			
		||||
@@ -87,19 +86,19 @@
 | 
			
		||||
        return this.settings.strings.inPast;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      var seconds = Math.abs(distanceMillis) / 1000;
 | 
			
		||||
      var minutes = seconds / 60;
 | 
			
		||||
      var hours = minutes / 60;
 | 
			
		||||
      var days = hours / 24;
 | 
			
		||||
      var years = days / 365;
 | 
			
		||||
      const seconds = Math.abs(distanceMillis) / 1000;
 | 
			
		||||
      const minutes = seconds / 60;
 | 
			
		||||
      const hours = minutes / 60;
 | 
			
		||||
      const days = hours / 24;
 | 
			
		||||
      const years = days / 365;
 | 
			
		||||
 | 
			
		||||
      function substitute(stringOrFunction, number) {
 | 
			
		||||
        var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
 | 
			
		||||
        var value = ($l.numbers && $l.numbers[number]) || number;
 | 
			
		||||
        const string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
 | 
			
		||||
        const value = ($l.numbers && $l.numbers[number]) || number;
 | 
			
		||||
        return string.replace(/%d/i, value);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
 | 
			
		||||
      const words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
 | 
			
		||||
        seconds < 90 && substitute($l.minute, 1) ||
 | 
			
		||||
        minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
 | 
			
		||||
        minutes < 90 && substitute($l.hour, 1) ||
 | 
			
		||||
@@ -111,25 +110,25 @@
 | 
			
		||||
        years < 1.5 && substitute($l.year, 1) ||
 | 
			
		||||
        substitute($l.years, Math.round(years));
 | 
			
		||||
 | 
			
		||||
      var separator = $l.wordSeparator || "";
 | 
			
		||||
        const separator = $l.wordSeparator || "";
 | 
			
		||||
      if ($l.wordSeparator === undefined) { separator = " "; }
 | 
			
		||||
      return $.trim([prefix, words, suffix].join(separator));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    parse: function(iso8601) {
 | 
			
		||||
      var s = $.trim(iso8601);
 | 
			
		||||
      s = s.replace(/\.\d+/,""); // remove milliseconds
 | 
			
		||||
      s = s.replace(/-/,"/").replace(/-/,"/");
 | 
			
		||||
      s = s.replace(/T/," ").replace(/Z/," UTC");
 | 
			
		||||
      s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
 | 
			
		||||
      s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
 | 
			
		||||
    parse: function (iso8601) {
 | 
			
		||||
      let s = $.trim(iso8601);
 | 
			
		||||
      s = s.replace(/\.\d+/, ""); // remove milliseconds
 | 
			
		||||
      s = s.replace(/-/, "/").replace(/-/, "/");
 | 
			
		||||
      s = s.replace(/T/, " ").replace(/Z/, " UTC");
 | 
			
		||||
      s = s.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2"); // -04:00 -> -0400
 | 
			
		||||
      s = s.replace(/([\+\-]\d\d)$/, " $100"); // +09 -> +0900
 | 
			
		||||
      return new Date(s);
 | 
			
		||||
    },
 | 
			
		||||
    datetime: function(elem) {
 | 
			
		||||
      var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
 | 
			
		||||
    datetime: function (elem) {
 | 
			
		||||
      const iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
 | 
			
		||||
      return $t.parse(iso8601);
 | 
			
		||||
    },
 | 
			
		||||
    isTime: function(elem) {
 | 
			
		||||
    isTime: function (elem) {
 | 
			
		||||
      // jQuery's `is()` doesn't play well with HTML5 in IE
 | 
			
		||||
      return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
 | 
			
		||||
    }
 | 
			
		||||
@@ -138,26 +137,26 @@
 | 
			
		||||
  // functions that can be called via $(el).timeago('action')
 | 
			
		||||
  // init is default when no action is given
 | 
			
		||||
  // functions are called with context of a single element
 | 
			
		||||
  var functions = {
 | 
			
		||||
    init: function() {
 | 
			
		||||
  const functions = {
 | 
			
		||||
    init: function () {
 | 
			
		||||
      functions.dispose.call(this);
 | 
			
		||||
      var refresh_el = $.proxy(refresh, this);
 | 
			
		||||
      const refresh_el = $.proxy(refresh, this);
 | 
			
		||||
      refresh_el();
 | 
			
		||||
      var $s = $t.settings;
 | 
			
		||||
      const $s = $t.settings;
 | 
			
		||||
      if ($s.refreshMillis > 0) {
 | 
			
		||||
        this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    update: function(timestamp) {
 | 
			
		||||
      var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp);
 | 
			
		||||
    update: function (timestamp) {
 | 
			
		||||
      const date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp);
 | 
			
		||||
      $(this).data('timeago', { datetime: date });
 | 
			
		||||
      if ($t.settings.localeTitle) {
 | 
			
		||||
        $(this).attr("title", date.toLocaleString());
 | 
			
		||||
      }
 | 
			
		||||
      refresh.apply(this);
 | 
			
		||||
    },
 | 
			
		||||
    updateFromDOM: function() {
 | 
			
		||||
      $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
 | 
			
		||||
    updateFromDOM: function () {
 | 
			
		||||
      $(this).data('timeago', { datetime: $t.parse($t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title")) });
 | 
			
		||||
      refresh.apply(this);
 | 
			
		||||
    },
 | 
			
		||||
    dispose: function () {
 | 
			
		||||
@@ -168,36 +167,36 @@
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  $.fn.timeago = function(action, options) {
 | 
			
		||||
    var fn = action ? functions[action] : functions.init;
 | 
			
		||||
  $.fn.timeago = function (action, options) {
 | 
			
		||||
    const fn = action ? functions[action] : functions.init;
 | 
			
		||||
    if (!fn) {
 | 
			
		||||
      throw new Error("Unknown function name '"+ action +"' for timeago");
 | 
			
		||||
      throw new Error("Unknown function name '" + action + "' for timeago");
 | 
			
		||||
    }
 | 
			
		||||
    // each over objects here and call the requested function
 | 
			
		||||
    this.each(function() {
 | 
			
		||||
    this.each(function () {
 | 
			
		||||
      fn.call(this, options);
 | 
			
		||||
    });
 | 
			
		||||
    return this;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  function refresh() {
 | 
			
		||||
    var $s = $t.settings;
 | 
			
		||||
    const $s = $t.settings;
 | 
			
		||||
 | 
			
		||||
    //check if it's still visible
 | 
			
		||||
    if ($s.autoDispose && !$.contains(document.documentElement,this)) {
 | 
			
		||||
    if ($s.autoDispose && !$.contains(document.documentElement, this)) {
 | 
			
		||||
      //stop if it has been removed
 | 
			
		||||
      $(this).timeago("dispose");
 | 
			
		||||
      return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var data = prepareData(this);
 | 
			
		||||
    const data = prepareData(this);
 | 
			
		||||
 | 
			
		||||
    if (!isNaN(data.datetime)) {
 | 
			
		||||
      if ( $s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
 | 
			
		||||
      if ($s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
 | 
			
		||||
        $(this).text(inWords(data.datetime));
 | 
			
		||||
      } else {
 | 
			
		||||
        if ($(this).attr('title').length > 0) {
 | 
			
		||||
            $(this).text($(this).attr('title'));
 | 
			
		||||
          $(this).text($(this).attr('title'));
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
@@ -208,7 +207,7 @@
 | 
			
		||||
    element = $(element);
 | 
			
		||||
    if (!element.data("timeago")) {
 | 
			
		||||
      element.data("timeago", { datetime: $t.datetime(element) });
 | 
			
		||||
      var text = $.trim(element.text());
 | 
			
		||||
      const text = $.trim(element.text());
 | 
			
		||||
      if ($t.settings.localeTitle) {
 | 
			
		||||
        element.attr("title", element.data('timeago').datetime.toLocaleString());
 | 
			
		||||
      } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,237 +1,278 @@
 | 
			
		||||
//バージョンチェッカー
 | 
			
		||||
function verck(ver) {
 | 
			
		||||
	console.log("Welcome")
 | 
			
		||||
	if(localStorage.getItem("ver")!=ver){
 | 
			
		||||
		localStorage.setItem("ver", ver);
 | 
			
		||||
		console.log("Thank you for your update");
 | 
			
		||||
		$(document).ready(function(){
 | 
			
		||||
			$('#releasenote').modal('open');
 | 
			
		||||
			verp=ver.replace( '(', '');
 | 
			
		||||
			verp=verp.replace( '.', '-');
 | 
			
		||||
			verp=verp.replace( '.', '-');
 | 
			
		||||
			verp=verp.replace( '[', '-');
 | 
			
		||||
			verp=verp.replace( ']', '');
 | 
			
		||||
			verp=verp.replace( ')', '');
 | 
			
		||||
			verp=verp.replace( ' ', '_');
 | 
			
		||||
			console.log(verp);
 | 
			
		||||
			if(lang.language=="ja"){
 | 
			
		||||
				$("#release-"+verp).show();
 | 
			
		||||
			}else{
 | 
			
		||||
				$("#release-en").show();
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		  });
 | 
			
		||||
async function verck(ver) {
 | 
			
		||||
	console.log('%c Welcome😊 ' + ver, 'color: red;font-size:200%;')
 | 
			
		||||
	document.querySelector('body').classList.add(localStorage.getItem('platform'))
 | 
			
		||||
	const date = new Date()
 | 
			
		||||
	let showVer = false
 | 
			
		||||
	if (localStorage.getItem('ver') != ver && localStorage.getItem('winstore')) {
 | 
			
		||||
		showVer = true
 | 
			
		||||
		console.log('%c Thank you for your update🎉', 'color: red;font-size:200%;')
 | 
			
		||||
		if (localStorage.getItem('winstore') && !pwa) {
 | 
			
		||||
			openRN()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var electron = require("electron");
 | 
			
		||||
	var remote=electron.remote;
 | 
			
		||||
	var dialog=remote.dialog;
 | 
			
		||||
	  var platform=remote.process.platform;
 | 
			
		||||
	  if(platform=="win32"){
 | 
			
		||||
		const options = {
 | 
			
		||||
			type: 'info',
 | 
			
		||||
			title: "Select your platform",
 | 
			
		||||
			message: lang.lang_version_platform,
 | 
			
		||||
			buttons: [lang.lang_no,lang.lang_yesno]
 | 
			
		||||
		  }
 | 
			
		||||
		  if(!localStorage.getItem("winstore")){
 | 
			
		||||
			  
 | 
			
		||||
				dialog.showMessageBox(options, function(arg) {
 | 
			
		||||
				  if(arg==1){
 | 
			
		||||
					  localStorage.setItem("winstore","winstore")
 | 
			
		||||
					}else{
 | 
			
		||||
					  localStorage.setItem("winstore","localinstall")
 | 
			
		||||
					}
 | 
			
		||||
			  });
 | 
			
		||||
		  }
 | 
			
		||||
	  }else if(platform=="linux"){
 | 
			
		||||
		if(localStorage.getItem("winstore")=="unix"){
 | 
			
		||||
			localStorage.removeItem("winstore")
 | 
			
		||||
	localStorage.setItem('ver', ver)
 | 
			
		||||
	if (!showVer) {
 | 
			
		||||
		console.log(showVer)
 | 
			
		||||
		if (
 | 
			
		||||
			date.getFullYear() * 100 + date.getMonth() + 1 >= localStorage.getItem('showSupportMe') ||
 | 
			
		||||
			!localStorage.getItem('showSupportMe')
 | 
			
		||||
		) {
 | 
			
		||||
			if (date.getMonth() == 11) {
 | 
			
		||||
				yrs = date.getFullYear() + 1
 | 
			
		||||
				nextmonth = yrs * 100 + 1
 | 
			
		||||
			} else {
 | 
			
		||||
				yrs = date.getFullYear()
 | 
			
		||||
				nextmonth = yrs * 100 + date.getMonth() + 2
 | 
			
		||||
			}
 | 
			
		||||
			if (lang.language != 'ja') {
 | 
			
		||||
				document.querySelector('#support-btm-ja').classList.add('hide')
 | 
			
		||||
				document.querySelector('#support-btm-en').classList.remove('hide')
 | 
			
		||||
			}
 | 
			
		||||
			localStorage.setItem('showSupportMe', nextmonth)
 | 
			
		||||
			document.querySelector('#support-btm').classList.remove('hide')
 | 
			
		||||
			document.querySelector('#support-btm').animate([
 | 
			
		||||
				{
 | 
			
		||||
					bottom: '-500px'
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					bottom: '0'
 | 
			
		||||
				}
 | 
			
		||||
			], 300);
 | 
			
		||||
		}
 | 
			
		||||
		if(!localStorage.getItem("winstore")){
 | 
			
		||||
			const options = {
 | 
			
		||||
				type: 'info',
 | 
			
		||||
				title: "Select your platform",
 | 
			
		||||
				message: lang.lang_version_platform_linux,
 | 
			
		||||
				buttons: [lang.lang_no,lang.lang_yesno]
 | 
			
		||||
			  }
 | 
			
		||||
			  dialog.showMessageBox(options, function(arg) {
 | 
			
		||||
				if(arg==1){
 | 
			
		||||
					localStorage.setItem("winstore","snapcraft")
 | 
			
		||||
				  }else{
 | 
			
		||||
					localStorage.setItem("winstore","localinstall")
 | 
			
		||||
				  }
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
	}else{
 | 
			
		||||
		  localStorage.setItem("winstore","unix")
 | 
			
		||||
	  }
 | 
			
		||||
	  if(localStorage.getItem("winstore")=="snapcraft" || localStorage.getItem("winstore")=="winstore"){
 | 
			
		||||
		var winstore=true;
 | 
			
		||||
	  }else{
 | 
			
		||||
		  var winstore=false;
 | 
			
		||||
	  }
 | 
			
		||||
	var l = 5;
 | 
			
		||||
	}
 | 
			
		||||
	const platform = localStorage.getItem('platform')
 | 
			
		||||
	console.log('Your platform:' + platform)
 | 
			
		||||
	if (!localStorage.getItem('winstore') && !pwa) {
 | 
			
		||||
		document.querySelector('#start').style.display = 'flex'
 | 
			
		||||
	}
 | 
			
		||||
	let winstore = false
 | 
			
		||||
	if (
 | 
			
		||||
		localStorage.getItem('winstore') == 'brewcask' ||
 | 
			
		||||
		localStorage.getItem('winstore') == 'snapcraft' ||
 | 
			
		||||
		localStorage.getItem('winstore') == 'winstore'
 | 
			
		||||
	) {
 | 
			
		||||
		winstore = true
 | 
			
		||||
	} else {
 | 
			
		||||
		winstore = false
 | 
			
		||||
	}
 | 
			
		||||
	const l = 5
 | 
			
		||||
	// 生成する文字列に含める文字セット
 | 
			
		||||
	var c = "abcdefghijklmnopqrstuvwxyz0123456789";
 | 
			
		||||
	var cl = c.length;
 | 
			
		||||
	var r = "";
 | 
			
		||||
	for(var i=0; i<l; i++){
 | 
			
		||||
  		r += c[Math.floor(Math.random()*cl)];
 | 
			
		||||
	const c = 'abcdefghijklmnopqrstuvwxyz0123456789'
 | 
			
		||||
	const cl = c.length
 | 
			
		||||
	let r = ''
 | 
			
		||||
	for (var i = 0; i < l; i++) {
 | 
			
		||||
		r += c[Math.floor(Math.random() * cl)]
 | 
			
		||||
	}
 | 
			
		||||
	var start = "https://thedesk.top/ver.json";
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'GET'
 | 
			
		||||
	}).then(function(response) {
 | 
			
		||||
		return response.json();
 | 
			
		||||
	}).catch(function(error) {
 | 
			
		||||
		todo(error);
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}).then(function(mess) {
 | 
			
		||||
		console.log(mess);
 | 
			
		||||
		if (mess) {
 | 
			
		||||
			var electron = require("electron");
 | 
			
		||||
			var remote=electron.remote;
 | 
			
		||||
			var platform=remote.process.platform;
 | 
			
		||||
			if(platform=="darwin"){
 | 
			
		||||
				var newest=mess.desk_mac;
 | 
			
		||||
			}else{
 | 
			
		||||
				var newest=mess.desk;
 | 
			
		||||
			}
 | 
			
		||||
			if (newest == ver) {
 | 
			
		||||
				todo(lang.lang_version_usever.replace("{{ver}}" ,mess.desk));
 | 
			
		||||
				//betaかWinstoreならアプデチェックしない
 | 
			
		||||
			} else if (ver.indexOf("beta")!=-1 || winstore) {
 | 
			
		||||
				
 | 
			
		||||
			}else{
 | 
			
		||||
				localStorage.removeItem("instance")
 | 
			
		||||
				if(localStorage.getItem("new-ver-skip")){
 | 
			
		||||
					if(localStorage.getItem("next-ver")!=newest){
 | 
			
		||||
						var ipc = electron.ipcRenderer;
 | 
			
		||||
						ipc.send('update', "true");
 | 
			
		||||
					}else{
 | 
			
		||||
						console.log(lang.lang_version_skipver);
 | 
			
		||||
						todo(lang.lang_version_skipver);
 | 
			
		||||
					}
 | 
			
		||||
				}else{
 | 
			
		||||
					var ipc = electron.ipcRenderer;
 | 
			
		||||
					ipc.send('update', "true");
 | 
			
		||||
	const start = 'https://thedesk.top/ver.json'
 | 
			
		||||
	let mess
 | 
			
		||||
	try {
 | 
			
		||||
		mess = await getApi(start, null)
 | 
			
		||||
	} catch {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	console.table(mess)
 | 
			
		||||
	if (mess) {
 | 
			
		||||
		let newest = null
 | 
			
		||||
		if (platform == 'darwin') {
 | 
			
		||||
			newest = mess.desk_mac
 | 
			
		||||
		} else {
 | 
			
		||||
			newest = mess.desk
 | 
			
		||||
		}
 | 
			
		||||
		if (newest == ver) {
 | 
			
		||||
			todo(lang.lang_version_usever.replace('{{ver}}', mess.desk))
 | 
			
		||||
			//betaかWinstoreならアプデチェックしない
 | 
			
		||||
		} else if (ver.indexOf('beta') != -1 || winstore) {
 | 
			
		||||
			//skipped
 | 
			
		||||
		} else {
 | 
			
		||||
			if (localStorage.getItem('new-ver-skip')) {
 | 
			
		||||
				if (localStorage.getItem('next-ver') != newest) {
 | 
			
		||||
					postMessage(['sendSinmpleIpc', 'update'], '*')
 | 
			
		||||
				} else {
 | 
			
		||||
					console.warn(lang.lang_version_skipver)
 | 
			
		||||
					todo(lang.lang_version_skipver)
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				postMessage(['sendSinmpleIpc', 'update'], '*')
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
	if(!localStorage.getItem("last-notice-id")){
 | 
			
		||||
		localStorage.setItem("last-notice-id",0)
 | 
			
		||||
	}
 | 
			
		||||
	console.log(localStorage.getItem("last-notice-id"))
 | 
			
		||||
	var start = "https://thedesk.top/notice?since_id="+localStorage.getItem("last-notice-id");
 | 
			
		||||
	console.log(start);
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'GET'
 | 
			
		||||
	}).then(function(response) {
 | 
			
		||||
		return response.json();
 | 
			
		||||
	}).catch(function(error) {
 | 
			
		||||
		todo(error);
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}).then(function(mess) {
 | 
			
		||||
		console.log(mess.length);
 | 
			
		||||
		if(mess.length<1){
 | 
			
		||||
			return false;
 | 
			
		||||
		}else{
 | 
			
		||||
			var last=localStorage.getItem("last-notice-id")
 | 
			
		||||
			localStorage.setItem("last-notice-id",mess[0].ID)
 | 
			
		||||
		for(i=0;i<mess.length;i++){
 | 
			
		||||
			var obj=mess[i];
 | 
			
		||||
			if(obj.ID*1<=last){
 | 
			
		||||
				break;
 | 
			
		||||
			}else{
 | 
			
		||||
				var show=true;
 | 
			
		||||
				if(obj.Toot!=""){
 | 
			
		||||
					var toot='<button class="btn-flat toast-action" onclick="detEx(\''+obj.Toot+'\',\'main\')">Show</button>';
 | 
			
		||||
				}else{
 | 
			
		||||
					var toot="";
 | 
			
		||||
				}
 | 
			
		||||
				if(obj.Ver!=""){
 | 
			
		||||
					if(obj.Ver==ver){
 | 
			
		||||
						show=true;
 | 
			
		||||
					}else{
 | 
			
		||||
						show=false;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				if(obj.Domain!=""){
 | 
			
		||||
					var multi = localStorage.getItem("multi");
 | 
			
		||||
					if (multi) {
 | 
			
		||||
						show=false;
 | 
			
		||||
						var accts = JSON.parse(multi);
 | 
			
		||||
						Object.keys(accts).forEach(function(key) {
 | 
			
		||||
							var acct = accts[key];
 | 
			
		||||
							if(acct.domain==obj.Domain){
 | 
			
		||||
								show=true;
 | 
			
		||||
							}
 | 
			
		||||
						});
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				if(show){
 | 
			
		||||
					Materialize.toast(obj.Text+toot+'<span class="sml grey-text">(スライドして消去)</span>', 86400);
 | 
			
		||||
				}
 | 
			
		||||
	let lni = localStorage.getItem('last-notice-id')
 | 
			
		||||
	if (!lni) {
 | 
			
		||||
		localStorage.setItem('last-notice-id', 0)
 | 
			
		||||
		lni = 0
 | 
			
		||||
	}
 | 
			
		||||
	const getNotice = 'https://thedesk.top/notice/index.php?since_id=' + lni
 | 
			
		||||
	let notices
 | 
			
		||||
	try {
 | 
			
		||||
		notices = await getApi(getNotice, null)
 | 
			
		||||
	} catch {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	if (notices.length < 1) {
 | 
			
		||||
		return false
 | 
			
		||||
	} else {
 | 
			
		||||
		localStorage.setItem('last-notice-id', notices[0].ID)
 | 
			
		||||
		for (i = 0; i < notices.length; i++) {
 | 
			
		||||
			var obj = notices[i]
 | 
			
		||||
			if (obj.ID * 1 <= lni) {
 | 
			
		||||
				break
 | 
			
		||||
			} else {
 | 
			
		||||
				toastInterpret(obj)
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	});
 | 
			
		||||
	infows = new WebSocket("wss://thedesk.top/ws/");
 | 
			
		||||
	infows.onopen = function(mess) {
 | 
			
		||||
		console.log(tlid + ":Connect Streaming Info:");
 | 
			
		||||
		console.log(mess);
 | 
			
		||||
}
 | 
			
		||||
let infostreaming = false
 | 
			
		||||
function infowebsocket() {
 | 
			
		||||
	infows = new WebSocket('wss://thedesk.top/ws/')
 | 
			
		||||
	infows.onopen = function (mess) {
 | 
			
		||||
		console.log([tlid, ':Connect Streaming Info:', mess])
 | 
			
		||||
		infostreaming = true
 | 
			
		||||
	}
 | 
			
		||||
	infows.onmessage = function(mess) {
 | 
			
		||||
		console.log(":Receive Streaming:");
 | 
			
		||||
		console.log(JSON.parse(mess.data));
 | 
			
		||||
		var obj=JSON.parse(mess.data);
 | 
			
		||||
		if(obj.type!="counter"){
 | 
			
		||||
		if(obj.id*1<=localStorage.getItem("last-notice-id")){
 | 
			
		||||
			
 | 
			
		||||
		}else{
 | 
			
		||||
			localStorage.setItem("last-notice-id",obj.id)
 | 
			
		||||
			var show=true;
 | 
			
		||||
			if(obj.toot!=""){
 | 
			
		||||
				var toot='<button class="btn-flat toast-action" onclick="detEx(\''+obj.toot+'\',\'main\')">Show</button>';
 | 
			
		||||
			}else{
 | 
			
		||||
				var toot="";
 | 
			
		||||
	infows.onmessage = function (mess) {
 | 
			
		||||
		console.log([tlid, ':Receive Streaming:', JSON.parse(mess.data)])
 | 
			
		||||
		const obj = JSON.parse(mess.data)
 | 
			
		||||
		localStorage.setItem('last-notice-id', obj.id)
 | 
			
		||||
		if (obj.type != 'counter') {
 | 
			
		||||
			toastInterpret(obj)
 | 
			
		||||
		} else {
 | 
			
		||||
			const people = document.querySelector('#persons')
 | 
			
		||||
			if(people) {
 | 
			
		||||
				people.innerText = obj.text
 | 
			
		||||
			}
 | 
			
		||||
			if(obj.ver!=""){
 | 
			
		||||
				if(obj.ver==ver){
 | 
			
		||||
					show=true;
 | 
			
		||||
				}else{
 | 
			
		||||
					show=false;
 | 
			
		||||
				}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	infows.onerror = function (error) {
 | 
			
		||||
		infostreaming = false
 | 
			
		||||
		console.error('Error closing:info')
 | 
			
		||||
		console.error(error)
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	infows.onclose = function () {
 | 
			
		||||
		infostreaming = false
 | 
			
		||||
		console.error('Closing:info')
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
setInterval(function () {
 | 
			
		||||
	if (!infostreaming) {
 | 
			
		||||
		console.log('try to connect to base-streaming')
 | 
			
		||||
		infowebsocket()
 | 
			
		||||
	}
 | 
			
		||||
}, 10000)
 | 
			
		||||
async function toastInterpret(obj) {
 | 
			
		||||
	if (obj.type == 'textv2') {
 | 
			
		||||
		if (~obj.languages.indexOf(lang.language)) {
 | 
			
		||||
			let showVer = true
 | 
			
		||||
			let toot = null
 | 
			
		||||
			if (obj.toot != '') {
 | 
			
		||||
				toot = `<button class="btn-flat toast-action" data-toot="${obj.toot}">Show</button>`
 | 
			
		||||
			}
 | 
			
		||||
			if(obj.domain!=""){
 | 
			
		||||
				var multi = localStorage.getItem("multi");
 | 
			
		||||
			if (obj.ver == ver) {
 | 
			
		||||
				showVer = true
 | 
			
		||||
			} else {
 | 
			
		||||
				showVer = false
 | 
			
		||||
			}
 | 
			
		||||
			if (obj.domain != '') {
 | 
			
		||||
				const multi = localStorage.getItem('multi')
 | 
			
		||||
				if (multi) {
 | 
			
		||||
					show=false;
 | 
			
		||||
					var accts = JSON.parse(multi);
 | 
			
		||||
					Object.keys(accts).forEach(function(key) {
 | 
			
		||||
						var acct = accts[key];
 | 
			
		||||
						if(acct.domain==obj.domain){
 | 
			
		||||
							show=true;
 | 
			
		||||
					showVer = false
 | 
			
		||||
					const accts = JSON.parse(multi)
 | 
			
		||||
					const keys = Object.keys(accts)
 | 
			
		||||
					for (let i = 0; i < accts.length; i++) {
 | 
			
		||||
						const key = keys[i]
 | 
			
		||||
						const acct = accts[key]
 | 
			
		||||
						if (acct.domain == obj.domain) {
 | 
			
		||||
							showVer = true
 | 
			
		||||
							break
 | 
			
		||||
						}
 | 
			
		||||
					});
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if(show){
 | 
			
		||||
				Materialize.toast(obj.text+toot+'<span class="sml grey-text">(スライドして消去)</span>', 86400);
 | 
			
		||||
			if (showVer) {
 | 
			
		||||
				M.toast({
 | 
			
		||||
					html: `${escapeHTML(obj.text)} ${toot} <span class="sml grey-text">(スライドして消去)</span>`,
 | 
			
		||||
					displayLength: 86400
 | 
			
		||||
				})
 | 
			
		||||
				await sleep(500)
 | 
			
		||||
				const targets = document.querySelectorAll('.toast-action')
 | 
			
		||||
				for (let j = 0; j < targets.length; j++) {
 | 
			
		||||
					const target = targets[j]
 | 
			
		||||
					const toot = target.getAttribute('data-toot')
 | 
			
		||||
					target.addEventListener('click', () => detEx(toot, 'main'))
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}else{
 | 
			
		||||
		$("#persons").text(obj.text);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function openRN() {
 | 
			
		||||
	console.log(kirishima)
 | 
			
		||||
	M.Modal.getInstance(document.querySelector('#releasenote')).open()
 | 
			
		||||
	if (lang.language == 'ja') {
 | 
			
		||||
		verp = ver.replace('(', '').replace('.', '-').replace('.', '-').replace('[', '-').replace(']', '').replace(')', '').replace(' ', '_')
 | 
			
		||||
		showElm(`#release-${verp}`)
 | 
			
		||||
	} else {
 | 
			
		||||
		showElm('#release-en')
 | 
			
		||||
	}
 | 
			
		||||
	infows.onerror = function(error) {
 | 
			
		||||
		console.error("Error closing:info");
 | 
			
		||||
		console.error(error);
 | 
			
		||||
		return false;
 | 
			
		||||
	};
 | 
			
		||||
	infows.onclose = function() {
 | 
			
		||||
		console.error("Closing:info");
 | 
			
		||||
	};
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
async function closeSupport() {
 | 
			
		||||
	document.querySelector('#support-btm').animate([
 | 
			
		||||
		{
 | 
			
		||||
			bottom: '0'
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			bottom: '-300px'
 | 
			
		||||
		}
 | 
			
		||||
	], 300);
 | 
			
		||||
	await sleep(300)
 | 
			
		||||
	document.querySelector('#support-btm').classList.add('hide')
 | 
			
		||||
}
 | 
			
		||||
function storeDialog(platform, ver) {
 | 
			
		||||
	if (document.querySelector('body').classList.contain('accessibility')) return false
 | 
			
		||||
	let mes = false
 | 
			
		||||
	if (platform == 'win32') {
 | 
			
		||||
		mes = lang.lang_version_platform
 | 
			
		||||
	} else if (platform == 'linux') {
 | 
			
		||||
		mes = lang.lang_version_platform_linux
 | 
			
		||||
	} else if (platform == 'darwin') {
 | 
			
		||||
		mes = lang.lang_version_platform_mac
 | 
			
		||||
	}
 | 
			
		||||
	if (mes) {
 | 
			
		||||
		Swal.fire({
 | 
			
		||||
			title: 'Select your platform',
 | 
			
		||||
			text: mes,
 | 
			
		||||
			type: 'info',
 | 
			
		||||
			showCancelButton: true,
 | 
			
		||||
			confirmButtonColor: '#3085d6',
 | 
			
		||||
			cancelButtonColor: '#3085d6',
 | 
			
		||||
			confirmButtonText: lang.lang_no,
 | 
			
		||||
			cancelButtonText: lang.lang_yesno
 | 
			
		||||
		}).then(result => {
 | 
			
		||||
			//逆にしてる
 | 
			
		||||
			if (!result.value) {
 | 
			
		||||
				localStorage.setItem('winstore', 'winstore')
 | 
			
		||||
			} else {
 | 
			
		||||
				localStorage.setItem('winstore', 'localinstall')
 | 
			
		||||
			}
 | 
			
		||||
			localStorage.setItem('ver', ver)
 | 
			
		||||
			showVer = true
 | 
			
		||||
			if (pwa) return false
 | 
			
		||||
			console.log('%c Thank you for your update🎉', 'color: red;font-size:200%;')
 | 
			
		||||
			openRN()
 | 
			
		||||
		})
 | 
			
		||||
	} else {
 | 
			
		||||
		localStorage.setItem('ver', ver)
 | 
			
		||||
		showVer = true
 | 
			
		||||
		console.log('%c Thank you for your update🎉', 'color: red;font-size:200%;')
 | 
			
		||||
		openRN()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
function closeStart() {
 | 
			
		||||
	$('#start').css('display', 'none')
 | 
			
		||||
	document.querySelector('#start').style.display = 'none'
 | 
			
		||||
	const platform = localStorage.getItem('platform')
 | 
			
		||||
	const ver = localStorage.getItem('ver')
 | 
			
		||||
	storeDialog(platform, ver)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,89 +1,92 @@
 | 
			
		||||
var defaultemojiList=["activity","flag","food","nature","object","people","place","symbol"];
 | 
			
		||||
var defaultemoji={
 | 
			
		||||
    activity:activity,
 | 
			
		||||
    flag:flag,
 | 
			
		||||
    food:food,
 | 
			
		||||
    nature:nature,
 | 
			
		||||
    object:object,
 | 
			
		||||
    people:people,
 | 
			
		||||
    place:place,
 | 
			
		||||
    symbol:symbol
 | 
			
		||||
};
 | 
			
		||||
if(lang=="ja"){
 | 
			
		||||
    var defaultemojiname={
 | 
			
		||||
        activity:"活動",
 | 
			
		||||
        flag:"国旗",
 | 
			
		||||
        food:"食べ物",
 | 
			
		||||
        nature:"自然",
 | 
			
		||||
        object:"もの",
 | 
			
		||||
        people:"ひと",
 | 
			
		||||
        place:"場所",
 | 
			
		||||
        symbol:"記号"
 | 
			
		||||
    };
 | 
			
		||||
}else{
 | 
			
		||||
    var defaultemojiname={
 | 
			
		||||
        activity:"Activities",
 | 
			
		||||
        flag:"Flags",
 | 
			
		||||
        food:"Foods",
 | 
			
		||||
        nature:"Nature",
 | 
			
		||||
        object:"Tools",
 | 
			
		||||
        people:"People",
 | 
			
		||||
        place:"Places",
 | 
			
		||||
        symbol:"Symbols"
 | 
			
		||||
    };
 | 
			
		||||
const defaultemojiList = ['activity', 'flag', 'food', 'nature', 'object', 'people', 'place', 'symbol']
 | 
			
		||||
const defaultemoji = {
 | 
			
		||||
	activity: activity,
 | 
			
		||||
	flag: flag,
 | 
			
		||||
	food: food,
 | 
			
		||||
	nature: nature,
 | 
			
		||||
	object: object,
 | 
			
		||||
	people: people,
 | 
			
		||||
	place: place,
 | 
			
		||||
	symbol: symbol
 | 
			
		||||
}
 | 
			
		||||
let defaultemojiname = {
 | 
			
		||||
	activity: 'Activities',
 | 
			
		||||
	flag: 'Flags',
 | 
			
		||||
	food: 'Foods',
 | 
			
		||||
	nature: 'Nature',
 | 
			
		||||
	object: 'Tools',
 | 
			
		||||
	people: 'People',
 | 
			
		||||
	place: 'Places',
 | 
			
		||||
	symbol: 'Symbols'
 | 
			
		||||
}
 | 
			
		||||
if (lang == 'ja') {
 | 
			
		||||
	defaultemojiname = {
 | 
			
		||||
		activity: '活動',
 | 
			
		||||
		flag: '国旗',
 | 
			
		||||
		food: '食べ物',
 | 
			
		||||
		nature: '自然',
 | 
			
		||||
		object: 'もの',
 | 
			
		||||
		people: 'ひと',
 | 
			
		||||
		place: '場所',
 | 
			
		||||
		symbol: '記号'
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function defaultEmoji(target){
 | 
			
		||||
    var json=defaultemoji[target];
 | 
			
		||||
    var emojis="";
 | 
			
		||||
    Object.keys(json).forEach(function(key) {
 | 
			
		||||
        var emoji = json[key];
 | 
			
		||||
        emojis = emojis + '<a onclick="defEmoji(\''+emoji["shortcode"]+'\')" class="pointer"><span style="width: 20px; height: 20px; display: inline-block; background-image: url(\'../../img/sheet.png\'); background-size: 4900%; background-position: '+emoji["css"]+';"></span></a>';
 | 
			
		||||
    });
 | 
			
		||||
    $("#emoji-list").html(emojis);
 | 
			
		||||
    $("#now-emoji").text(lang.lang_defaultemojis_text.replace("{{cat}}" ,defaultemojiname[target]));
 | 
			
		||||
    console.log(target);
 | 
			
		||||
    $(".emoji-control").addClass("hide");
 | 
			
		||||
function defaultEmoji(target) {
 | 
			
		||||
	let announcement = false
 | 
			
		||||
	if (document.querySelector('#media').value == 'announcement') {
 | 
			
		||||
		announcement = true
 | 
			
		||||
	}
 | 
			
		||||
	const json = defaultemoji[target]
 | 
			
		||||
	const keymap = Object.keys(json)
 | 
			
		||||
	let emojis = ''
 | 
			
		||||
	for (let i = 0; i < json.length; i++) {
 | 
			
		||||
		const key = keymap[i]
 | 
			
		||||
		const emoji = json[key]
 | 
			
		||||
		let def = `<a data-shortcode="${emoji['shortcode']}" class="pointer defEmoji">`
 | 
			
		||||
		if (announcement) {
 | 
			
		||||
			def = `<a data-shortcode="${emoji['shortcode']}" class="pointer defEmoji">`
 | 
			
		||||
		}
 | 
			
		||||
		emojis =
 | 
			
		||||
			emojis +
 | 
			
		||||
			`${def}
 | 
			
		||||
            <span style="
 | 
			
		||||
                width: 20px; height: 20px; display: inline-block; background-image: url('../../img/sheet.png'); background-size: 4900%;
 | 
			
		||||
                 background-position:${emoji['css']};"></span>
 | 
			
		||||
            </a>`
 | 
			
		||||
	}
 | 
			
		||||
	document.querySelector('#emoji-list').innerHTML = emojis
 | 
			
		||||
	document.querySelector('#now-emoji').innerText = lang.lang_defaultemojis_text.replace('{{cat}}', defaultemojiname[target])
 | 
			
		||||
	document.querySelector('.emoji-control').classList.add('hide')
 | 
			
		||||
	const targets = document.querySelectorAll('.defEmoji')
 | 
			
		||||
	for (let j = 0; j < targets.length; j++) {
 | 
			
		||||
		const target = targets[j]
 | 
			
		||||
		const sc = target.getAttribute('data-shortcode')
 | 
			
		||||
		target.addEventListener('click', () => defEmoji(sc))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function customEmoji(){
 | 
			
		||||
    $("#emoji-suggest").val("");
 | 
			
		||||
    $(".emoji-control").removeClass("hide");
 | 
			
		||||
    emojiList('home')
 | 
			
		||||
 | 
			
		||||
function customEmoji() {
 | 
			
		||||
	document.querySelector('#emoji-suggest').value = ''
 | 
			
		||||
	document.querySelector('.emoji-control').classList.remove('hide')
 | 
			
		||||
	emojiList('home')
 | 
			
		||||
}
 | 
			
		||||
function defEmoji(target){
 | 
			
		||||
    var emojiraw = newpack.filter(function(item, index){
 | 
			
		||||
     if (item.short_name == target) return true;
 | 
			
		||||
    });
 | 
			
		||||
    emoji=twemoji.convert.fromCodePoint(emojiraw[0].unified);
 | 
			
		||||
    var now = $("#textarea").val();
 | 
			
		||||
    var selin = localStorage.getItem("cursor");
 | 
			
		||||
    var now = $("#textarea").val();
 | 
			
		||||
     if(selin>0){
 | 
			
		||||
        var before = now.substr(0, selin);
 | 
			
		||||
        var after = now.substr(selin, now.length);
 | 
			
		||||
        newt = before+ emoji + after;
 | 
			
		||||
            }else{
 | 
			
		||||
        newt = emoji+now;
 | 
			
		||||
        }
 | 
			
		||||
        console.log(emoji);
 | 
			
		||||
        $("#textarea").val(newt);
 | 
			
		||||
        $("#textarea").focus();
 | 
			
		||||
        var selin = $("#textarea").prop('selectionStart');
 | 
			
		||||
	    if(!selin){
 | 
			
		||||
            selin=0;
 | 
			
		||||
	    }
 | 
			
		||||
	   localStorage.setItem("cursor", selin);
 | 
			
		||||
 | 
			
		||||
function defEmoji(target) {
 | 
			
		||||
	const textarea = document.querySelector('#textarea')
 | 
			
		||||
	let selin = textarea.selectionStart
 | 
			
		||||
	if (!selin) {
 | 
			
		||||
		selin = 0
 | 
			
		||||
	}
 | 
			
		||||
	const hex = emojipack[target].unified.split('-')
 | 
			
		||||
	let emoji = twemoji.convert.fromCodePoint(hex[0])
 | 
			
		||||
	if (hex.length === 2) {
 | 
			
		||||
		emoji = twemoji.convert.fromCodePoint(hex[0]) + twemoji.convert.fromCodePoint(hex[1])
 | 
			
		||||
	}
 | 
			
		||||
	const now = textarea.value
 | 
			
		||||
	const before = now.substr(0, selin)
 | 
			
		||||
	const after = now.substr(selin, now.length)
 | 
			
		||||
	const newt = before + emoji + after
 | 
			
		||||
	textarea.value = newt
 | 
			
		||||
	textarea.focus()
 | 
			
		||||
}
 | 
			
		||||
function faicon(){
 | 
			
		||||
    var json=faicons;
 | 
			
		||||
    console.log(json);
 | 
			
		||||
    var emojis="";
 | 
			
		||||
    Object.keys(json).forEach(function(key) {
 | 
			
		||||
        var emoji = json[key];
 | 
			
		||||
        var eje = emoji.replace( /fa-/g , "" ) ;
 | 
			
		||||
        emojis = emojis + '<a onclick="emojiInsert(\'[faicon]'+eje+'[/faicon]\')" class="pointer white-text" style="font-size:24px"><i class="fa '+emoji+'"></i></a>';
 | 
			
		||||
    });
 | 
			
		||||
    $("#emoji-list").html(emojis);
 | 
			
		||||
    $("#now-emoji").text("faicon");
 | 
			
		||||
    $(".emoji-control").addClass("hide");
 | 
			
		||||
}
 | 
			
		||||
@@ -1,245 +0,0 @@
 | 
			
		||||
//commonError
 | 
			
		||||
var lang={
 | 
			
		||||
    "language":"en",
 | 
			
		||||
    "lang_toot":"Toot",
 | 
			
		||||
    "lang_there":"Yes",
 | 
			
		||||
    "lang_nothing":"None",
 | 
			
		||||
    "lang_yesno":"Yes",
 | 
			
		||||
    "lang_no":"No",
 | 
			
		||||
    "lang_progress":"Wait...",
 | 
			
		||||
    "lang_edit":"Edit",
 | 
			
		||||
    "lang_del":"Delete",
 | 
			
		||||
    "lang_add":"Add",
 | 
			
		||||
    "lang_fatalerroroccured":"Some errors are occured, please restart TheDesk.",
 | 
			
		||||
    "lang_speech":"Google US English",
 | 
			
		||||
    //language.html
 | 
			
		||||
    "lang_lang":"Language",
 | 
			
		||||
    "lang_langlocale":"English",
 | 
			
		||||
    "lang_back":"Back",
 | 
			
		||||
    "lang_set":"Set",
 | 
			
		||||
    "lang_langadd":"Translate TheDesk to other languages or proofread TheDesk on <a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>. TheDesk needs your help.",
 | 
			
		||||
    //common/version.js
 | 
			
		||||
    "lang_version_usever":"No update is found({{ver}})",
 | 
			
		||||
    "lang_version_skipver":"Update was ignored.",
 | 
			
		||||
    "lang_version_platform":"Was this software installed at Microsoft Store? When select 'yes', any update was ignored.",
 | 
			
		||||
    "lang_version_platform_linux":"Was this software installed at Snapcraft(snapd)? When select 'yes', any update was ignored.",
 | 
			
		||||
    //login
 | 
			
		||||
    //login/login.js
 | 
			
		||||
    "lang_login_noauth":"Show TL of unlogined accounts",
 | 
			
		||||
    //login/manager.js
 | 
			
		||||
    "lang_manager_info":"About this instance",
 | 
			
		||||
    "lang_manager_refresh":"Refresh",
 | 
			
		||||
    "lang_manager_delete":"Logout",
 | 
			
		||||
    "lang_manager_color":"Account Color",
 | 
			
		||||
    "lang_manager_confirm":"is about to logout. Continue?",
 | 
			
		||||
    "lang_manager_mainAcct":"Done:choose main account",
 | 
			
		||||
    "lang_manager_def":"Default",
 | 
			
		||||
    "lang_manager_none":"None",
 | 
			
		||||
    "lang_manager_godev":"Open DevCenter of Misskey. We show also an official documents to refer.",
 | 
			
		||||
    //post/bb-md.js
 | 
			
		||||
    "lang_bbmd_misskey":"TheDesk regards \"@\" as reply, but put other parameter. Unlisted on Mastodon means Home on Misskey.",
 | 
			
		||||
    //post/emoji.js
 | 
			
		||||
    "lang_emoji_get":"Get emojis",
 | 
			
		||||
    "lang_emoji_custom":"Custom emojis",
 | 
			
		||||
    "lang_defaultemojis_text":"Emojis about {{cat}}",
 | 
			
		||||
    //post/img.js
 | 
			
		||||
    "lang_postimg_previewdis":"cannot preview",
 | 
			
		||||
    "lang_postimg_aftupload":"You cannot change accounts after uploading.",
 | 
			
		||||
    "lang_postimg_delete":"Delete this image.",
 | 
			
		||||
    //post/post.js
 | 
			
		||||
    "lang_post_tagTL":"This toot does not contain a default tag. This toot will not be shown on Local TL. Continue?",
 | 
			
		||||
    "lang_post_tagVis":"This toot(not 'public' toot) is not shown on this tag's TL.",
 | 
			
		||||
    "lang_post_cwtitle":"Auto CW Alert",
 | 
			
		||||
    "lang_post_cwtxt":"You are about to post longer toot than you set.\nWarning text:",
 | 
			
		||||
    "lang_post_btn1":"Cancel (will not post)",
 | 
			
		||||
    "lang_post_btn2":"Make text hidden automatically",
 | 
			
		||||
    "lang_post_btn3":"Continue to post",
 | 
			
		||||
    //post/status.js
 | 
			
		||||
    "lang_status_favWarn":"It will take a miunte to favourite a remote toot.",
 | 
			
		||||
    "lang_status_btWarn":"It will take a miunte to boost a remote toot.",
 | 
			
		||||
    "lang_status_follow":"Follow",
 | 
			
		||||
    "lang_status_unfollow":"Unfollow",
 | 
			
		||||
    "lang_status_block":"Block",
 | 
			
		||||
    "lang_status_unblock":"Unblock",
 | 
			
		||||
    "lang_status_mute":"Mute",
 | 
			
		||||
    "lang_status_unmute":"Unmute",
 | 
			
		||||
    "lang_status_redraft":"Continue to delete & redraft? You lose statuses of this toot. This fanction may contain some bugs. Images of this toot will be deleted on older than Mastodon 2.4.1.",
 | 
			
		||||
    "lang_status_emphas":"'s toots are emphasized. Please reload after this action.",
 | 
			
		||||
    "lang_status_unemphas":"'s toots are not emphasized. Please reload after this action.",
 | 
			
		||||
    "lang_status_unendorse":"Not feature on profile",
 | 
			
		||||
    "lang_status_endorse":"Feature on profile",
 | 
			
		||||
    //post/suggest.js
 | 
			
		||||
    "lang_suggest_nodata":"Please get emojis list in order to show suggestion.",
 | 
			
		||||
    //post/use-txtbox.js
 | 
			
		||||
    "lang_usetxtbox_reply":"Reply Mode. Ctrl+Shift+C to clear.",
 | 
			
		||||
    //tl/card.js
 | 
			
		||||
    "lang_cards_check":" check",
 | 
			
		||||
    "lang_cards_pip":"PiP mode",
 | 
			
		||||
    //tl/details.js
 | 
			
		||||
    "lang_details_nodata":"No data",
 | 
			
		||||
    "lang_details_filtered":"Filtered toot",
 | 
			
		||||
    "lang_details_embed":"Embed HTML is cliped.",
 | 
			
		||||
    "lang_details_url":"URL of this toot is cliped.",
 | 
			
		||||
    "lang_details_txt":"Content of this toot is cliped.",
 | 
			
		||||
    //tl/filter.js
 | 
			
		||||
    "lang_filter_nodata":"No data",
 | 
			
		||||
    "lang_filter_errordegree":"Please check a context",
 | 
			
		||||
    //tl/list.js
 | 
			
		||||
    "lang_list_nodata":"No data",
 | 
			
		||||
    "lang_list_show":"Show",
 | 
			
		||||
    "lang_list_users":"Users list",
 | 
			
		||||
    "lang_list_nouser":"No users in this list.",
 | 
			
		||||
    "lang_list_add":"Add to the list",
 | 
			
		||||
    "lang_list_remove":"Remove from the list",
 | 
			
		||||
    //tl/notification.js
 | 
			
		||||
    "lang_notf_new":" new notifications",
 | 
			
		||||
    //tl/speech.js
 | 
			
		||||
    "lang_speech_refresh":"Save value about TTS config",
 | 
			
		||||
    //tl/src.js
 | 
			
		||||
    "lang_src_ts":"chronological order",
 | 
			
		||||
    "lang_src_people":" people toot",
 | 
			
		||||
    //tl/tag.js
 | 
			
		||||
    "lang_tags_always":"Always toots with ",
 | 
			
		||||
    "lang_tags_realtime":"Tag-stream toot",
 | 
			
		||||
    "lang_tags_tagunpin":"Unpin {{tag}}",
 | 
			
		||||
    "lang_tags_unrealtime":"Disable TsT",
 | 
			
		||||
    "lang_tags_tagwarn":"Auto complete {{tag}}, if toot without {{tag}}",
 | 
			
		||||
    //tl/tl.js
 | 
			
		||||
    "lang_tl_media":"Media",
 | 
			
		||||
    "lang_tl_reconnect":"Reconnect to streaming API",
 | 
			
		||||
    //ui/layout.js
 | 
			
		||||
    "lang_layout_gotop":"Go top of this column. When icon is red, this column cannot connect straming API. Please reload.",
 | 
			
		||||
    "lang_layout_thisacct":"{{notf}} of this account",
 | 
			
		||||
    "lang_layout_delthis":"Remove this column",
 | 
			
		||||
    "lang_layout_setthis":"Preferences of this column",
 | 
			
		||||
    "lang_layout_mediafil":"Media filtering",
 | 
			
		||||
    "lang_layout_linkana":"Auto Link Analyzer",
 | 
			
		||||
    "lang_layout_linkanades":"Auto link analyzer",
 | 
			
		||||
    "lang_layout_tts":"Text to speech ",
 | 
			
		||||
    "lang_layout_reconnect":"Reconnect to streaming API",
 | 
			
		||||
    "lang_layout_headercolor":"Header color of this column",
 | 
			
		||||
    "lang_layout_nodata":"[No data]<br>F5/⌘+R to reload",
 | 
			
		||||
    "lang_layout_dm":"Direct Message",
 | 
			
		||||
    "lang_layout_webviewmode":"Prefer WebView",
 | 
			
		||||
    "lang_excluded":"Excluded type of notification",
 | 
			
		||||
    "lang_layout_excludingbt":"Show BT mode(OFF/Exclude BT/Only BT)",
 | 
			
		||||
    "lang_layout_leftFold":"Stack to the left",
 | 
			
		||||
    "lang_layout_leftUnfold":"Dock on the right",
 | 
			
		||||
    //ui/sort.js
 | 
			
		||||
    "lang_sort_gothis":"Go to this column",
 | 
			
		||||
    "lang_sort_remthis":"Delete this column",
 | 
			
		||||
    //ui/spotify.js
 | 
			
		||||
    "lang_spotify_img":"Attach an album artwork",
 | 
			
		||||
    "lang_spotify_imgno":"Not attach an album artwork",
 | 
			
		||||
    "lang_spotify_acct":"Connect TheDesk to Spotify",
 | 
			
		||||
    "lang_spotify_np":"Done:templete of NowPlaying",
 | 
			
		||||
    "lang_setting_npprovide":"NowPlaying provider:{{set}}",
 | 
			
		||||
    //userdata/his-data.js
 | 
			
		||||
    "lang_hisdata_frcreq":"Required Mastodon 2.4.3 and above",
 | 
			
		||||
    "lang_hisdata_frcwarn":"Unfollow accounts will be shown.",
 | 
			
		||||
    "lang_hisdata_taketime":"It will take 30s ~ several minutes",
 | 
			
		||||
    "lang_hisdata_notonmisskey":"Misskey is unable to request.",
 | 
			
		||||
    //userdata/showOnTL.js
 | 
			
		||||
    "lang_showontl_movetxt":"This account was moved",
 | 
			
		||||
    "lang_showontl_movebtn":"Continue on the new account",
 | 
			
		||||
    "lang_showontl_botacct":"[bot]",
 | 
			
		||||
    "lang_showontl_followed":"Following you",
 | 
			
		||||
    "lang_showontl_notf":"Notification ",
 | 
			
		||||
    "lang_showontl_domain":"Domain ",
 | 
			
		||||
    "lang_showontl_listwarn":"Follow to add this user to lists.",
 | 
			
		||||
//parse
 | 
			
		||||
    "lang_parse_mentioned":" replied to you",
 | 
			
		||||
    "lang_parse_faved":" favourited your toot",
 | 
			
		||||
    "lang_parse_bted":" boosted your toot",
 | 
			
		||||
    "lang_parse_btedsimple":" boosted",
 | 
			
		||||
    "lang_parse_notftime":"Actioned at",
 | 
			
		||||
    "lang_parse_cwshow":"Show",
 | 
			
		||||
    "lang_parse_fulltext":"Full size text:",
 | 
			
		||||
    "lang_parse_autofold":"Auto folded",
 | 
			
		||||
    "lang_parse_more":"More",
 | 
			
		||||
    "lang_parse_url":"URL Analyzer",
 | 
			
		||||
    "lang_parse_tagTL":"Timeline of {{tag}}",
 | 
			
		||||
    "lang_parse_tagtoot":"Toot with {{tag}}",
 | 
			
		||||
    "lang_parse_tagpin":"Pin {{tag}}",
 | 
			
		||||
    "lang_parse_public":"Public",
 | 
			
		||||
    "lang_parse_unlisted":"Unlisted",
 | 
			
		||||
    "lang_parse_private":"Private",
 | 
			
		||||
    "lang_parse_direct":"Direct",
 | 
			
		||||
    "lang_parse_clickcopy":"Click to copy text of this toot",
 | 
			
		||||
    "lang_parse_clickcopyurl":"Click to copy URL of this toot",
 | 
			
		||||
    "lang_parse_trans":"Translate to Japanese",
 | 
			
		||||
    "lang_parse_replyto":"Reply to this toot",
 | 
			
		||||
    "lang_parse_bt":"Boost this toot",
 | 
			
		||||
    "lang_parse_fav":"Favourite this toot",
 | 
			
		||||
    "lang_parse_quote":"Quote this toot",
 | 
			
		||||
    "lang_parse_del":"Delete this toot",
 | 
			
		||||
    "lang_parse_pin":"Pin this toot",
 | 
			
		||||
    "lang_parse_det":"Details via your main account.",
 | 
			
		||||
    "lang_parse_redraft":"Delete & re-draft",
 | 
			
		||||
    "lang_parse_followed":"Followed you",
 | 
			
		||||
    "lang_parse_clientop":"Operation of this client",
 | 
			
		||||
    "lang_parse_clienttxt":" will be",
 | 
			
		||||
    "lang_parse_clientno":"done nothing",
 | 
			
		||||
    "lang_parse_clientemp":"emphasized(/not emphasized)",
 | 
			
		||||
    "lang_parse_clientmute":"muted",
 | 
			
		||||
    "lang_parse_mute":" will be muted. You can remove on preferences.",
 | 
			
		||||
    "lang_parse_voted":"Voted",
 | 
			
		||||
    "lang_parse_vote":"Voted",
 | 
			
		||||
    "lang_parse_unvoted":"Show the result without voting",
 | 
			
		||||
    "lang_parse_endedvote":"Expired",
 | 
			
		||||
    "lang_parse_thread":"Show thread",
 | 
			
		||||
    //misskey
 | 
			
		||||
    "lang_misskeyparse_renote":"Repost",
 | 
			
		||||
    "lang_misskeyparse_renoteqt":"Renote",
 | 
			
		||||
    "lang_misskeyparse_reaction":"Reaction",
 | 
			
		||||
    "lang_misskeyparse_tagnostr":"No streaming API on Tag TLs",
 | 
			
		||||
    "lang_misskeyparse_listnostr":"No streaming API on List TLs",
 | 
			
		||||
    "lang_misskeyparse_home":"Home",
 | 
			
		||||
    "lang_misskeyparse_followers":"Follower",
 | 
			
		||||
    "lang_misskeyparse_specified":"Specified User",
 | 
			
		||||
    "lang_misskeyparse_qt":"Misskey renote(quote) mode:Ctrl+Shift+Enter to clear",
 | 
			
		||||
    "lang_misskeyparse_renoted":" renoted your following post.",
 | 
			
		||||
    "lang_misskeyparse_quoted":" quoted your following post.",
 | 
			
		||||
    "lang_misskeyparse_reacted":" reacted your following post.",
 | 
			
		||||
//setting
 | 
			
		||||
    "lang_setting_time":"Time format:{{set}}",
 | 
			
		||||
    "lang_setting_theme":"Theme:{{set}}",
 | 
			
		||||
    "lang_setting_nsfw":"NSFW:{{set}}",
 | 
			
		||||
    "lang_setting_cw":"CW:{{set}}",
 | 
			
		||||
    "lang_setting_cwtext":"Default CW text:{{set}}",
 | 
			
		||||
    "lang_setting_cws":"Always CW on:{{set}}",
 | 
			
		||||
    "lang_setting_rp":"Reply counter:{{set}}",
 | 
			
		||||
    "lang_setting_vis":"Default visibility:{{set}}",
 | 
			
		||||
    "lang_setting_popup":"Popup notification:{{set}}",
 | 
			
		||||
    "lang_setting_off":"Off",
 | 
			
		||||
    "lang_setting_s":"s",
 | 
			
		||||
    "lang_setting_box":"Default toot box action:{{set}}",
 | 
			
		||||
    "lang_setting_gif":"GIF:{{set}}",
 | 
			
		||||
    "lang_setting_selt":"Auto fold:{{set1}} lines and above, {{set2}} letters and above",
 | 
			
		||||
    "lang_setting_autocw":"Auto CW:{{set1}} lines and above, {{set2}} letters and above",
 | 
			
		||||
    "lang_setting_width":"Minimam width:{{set}}",
 | 
			
		||||
    "lang_setting_fixwidth":"TweetDeck fixed width:{{set}}px",
 | 
			
		||||
    "lang_setting_img":"After posting an image:{{set}}",
 | 
			
		||||
    "lang_setting_font":"Fonts:{{set}}",
 | 
			
		||||
    "lang_setting_default":"default font",
 | 
			
		||||
    "lang_setting_size":"Font size:{{set}}px",
 | 
			
		||||
    "lang_setting_imgheight":"Image height:{{set}}px",
 | 
			
		||||
    "lang_setting_ticker":"#InstanceTicker:{{set}}px",
 | 
			
		||||
    "lang_setting_animation":"Animation: {{set}}",
 | 
			
		||||
    "lang_setting_tag":"Tag TL:{{set}}",
 | 
			
		||||
    "lang_setting_boxConfirm":"Post box:{{set}}",
 | 
			
		||||
    "lang_setting_ul":"Native locale:{{set}}",
 | 
			
		||||
    "lang_setting_notf":"Native notification:{{set}}",
 | 
			
		||||
    "lang_setting_quote":"Quote format:{{set}}",
 | 
			
		||||
    "lang_setting_via":"Via:{{set}}",
 | 
			
		||||
    "lang_setting_mov":"Action buttons hiding:{{set}}",
 | 
			
		||||
    "lang_setting_setasread":"Notification markers:{{set}}",
 | 
			
		||||
    "lang_setting_main":"Default account:{{set}}",
 | 
			
		||||
    "lang_setting_sec":"Secondary toot button:{{set}}",
 | 
			
		||||
    "lang_setting_ksref":"Keyboard shortcuts are refreshed.",
 | 
			
		||||
    "lang_setting_nomuting":"No client is muted.",
 | 
			
		||||
    "lang_setting_notftest":" Notification test ",
 | 
			
		||||
    "lang_setting_notftestprof":"Your icon is shown.",
 | 
			
		||||
    "lang_setting_exportwarn":"Only important data will be exported. You must keep this data secure.",
 | 
			
		||||
    "lang_setting_importwarn":"All data will be deleted.",
 | 
			
		||||
}
 | 
			
		||||
@@ -1,245 +0,0 @@
 | 
			
		||||
    //commonError
 | 
			
		||||
var lang={
 | 
			
		||||
    "language":"ja",
 | 
			
		||||
    "lang_toot":"トゥート",
 | 
			
		||||
    "lang_there":"あり",
 | 
			
		||||
    "lang_nothing":"なし",
 | 
			
		||||
    "lang_yesno":"はい",
 | 
			
		||||
    "lang_no":"いいえ",
 | 
			
		||||
    "lang_progress":"処理中",
 | 
			
		||||
    "lang_edit":"編集",
 | 
			
		||||
    "lang_del":"削除",
 | 
			
		||||
    "lang_add":"追加",
 | 
			
		||||
    "lang_fatalerroroccured":"エラーが発生しました。しばらく待ってから再起動してください。",
 | 
			
		||||
    "lang_speech":"Google 日本語",
 | 
			
		||||
//language.html
 | 
			
		||||
    "lang_lang":"言語",
 | 
			
		||||
    "lang_langlocale":"日本語",
 | 
			
		||||
    "lang_back":"戻る",
 | 
			
		||||
    "lang_set":"設定",
 | 
			
		||||
    "lang_langadd":"<a href=\"https://github.com/cutls/TheDesk\" target=\"_blank\">GitHub</a>から翻訳に参加できます。英語の校正(緊急)や他言語に翻訳していただける方を募集しております。",
 | 
			
		||||
//common/version.js
 | 
			
		||||
    "lang_version_usever":"お使いのバージョン{{ver}}は最新です。",
 | 
			
		||||
    "lang_version_skipver":"アップデートはスキップされました。",
 | 
			
		||||
    "lang_version_platform":"このソフトウェアはMicrosoft Storeからダウンロードされましたか?(「はい」を選択すると次回からアップデート通知を無視します。)",
 | 
			
		||||
    "lang_version_platform_linux":"このソフトウェアはSnapcraft(snapd)からインストールしましたか?(「はい」を選択すると次回からアップデート通知を無視します。)",
 | 
			
		||||
//login
 | 
			
		||||
//login/login.js
 | 
			
		||||
    "lang_login_noauth":"認証せずに見る",
 | 
			
		||||
//login/manager.js
 | 
			
		||||
    "lang_manager_info":"インスタンス情報",
 | 
			
		||||
    "lang_manager_refresh":"情報更新",
 | 
			
		||||
    "lang_manager_delete":"削除",
 | 
			
		||||
    "lang_manager_color":"アカウントカラーを選択",
 | 
			
		||||
    "lang_manager_confirm":"を削除します。",
 | 
			
		||||
    "lang_manager_mainAcct":"メインアカウントを設定しました。",
 | 
			
		||||
    "lang_manager_def":"既定",
 | 
			
		||||
    "lang_manager_none":"なし",
 | 
			
		||||
    "lang_manager_godev":"MisskeyのDevセンターに移動します。同時に開かれるドキュメントを参考にログインしてください。",
 | 
			
		||||
//post/bb-md.js
 | 
			
		||||
    "lang_bbmd_misskey":"TheDeskにおけるMisskeyでは、@を返信として扱いますが、全ての@は消去され別パラメータに入力されます。また、「未収載」を「ホーム」として扱います。",
 | 
			
		||||
//post/emoji.js
 | 
			
		||||
    "lang_emoji_get":"絵文字リストを取得",
 | 
			
		||||
    "lang_emoji_custom":"カスタム絵文字",
 | 
			
		||||
    "lang_defaultemojis_text":"{{cat}}の絵文字",
 | 
			
		||||
//post/img.js
 | 
			
		||||
    "lang_postimg_previewdis":"プレビューできません。",
 | 
			
		||||
    "lang_postimg_aftupload":"アップロード後はアカウントを切り替えられません。",
 | 
			
		||||
    "lang_postimg_delete":"この画像を削除します",
 | 
			
		||||
//post/post.js
 | 
			
		||||
    "lang_post_tagTL":"デフォルトタグが挿入されていません。このまま投稿するとローカルには表示されません。",
 | 
			
		||||
    "lang_post_tagVis":"公開範囲が「公開」以外だと、タグTLに表示されません。(一部インスタンスを除く)",
 | 
			
		||||
    "lang_post_cwtitle":"長文投稿の警告",
 | 
			
		||||
    "lang_post_cwtxt":"指定文字数、行数を超えるトゥートを行おうとしています。\n自動CWのタイトル:",
 | 
			
		||||
    "lang_post_btn1":"キャンセル(投稿しない)",
 | 
			
		||||
    "lang_post_btn2":"自動でCWを付ける",
 | 
			
		||||
    "lang_post_btn3":"そのまま投稿",
 | 
			
		||||
//post/status.js
 | 
			
		||||
    "lang_status_favWarn":"お気に入り登録しました。インスタンスが違うときは時間がかかる場合があります。",
 | 
			
		||||
    "lang_status_btWarn":"ブーストしました。インスタンスが違うときは時間がかかる場合があります。",
 | 
			
		||||
    "lang_status_follow":"フォロー",
 | 
			
		||||
    "lang_status_unfollow":"フォロー解除",
 | 
			
		||||
    "lang_status_block":"ブロック",
 | 
			
		||||
    "lang_status_unblock":"ブロック解除",
 | 
			
		||||
    "lang_status_mute":"ミュート",
 | 
			
		||||
    "lang_status_unmute":"ミュート解除",
 | 
			
		||||
    "lang_status_redraft":"削除して再編集しますか?そのトゥートの全てのデータがリセットされます。この機能はベータ版です。画像は~v2.4.1で破棄されます。",
 | 
			
		||||
    "lang_status_emphas":"を強調します。リロードしてください。",
 | 
			
		||||
    "lang_status_unemphas":"を強調解除します。リロードしてください。",
 | 
			
		||||
    "lang_status_unendorse":"紹介解除",
 | 
			
		||||
    "lang_status_endorse":"プロフで紹介する",
 | 
			
		||||
//post/suggest.js
 | 
			
		||||
    "lang_suggest_nodata":"サジェストのために絵文字リストを取得してください。",
 | 
			
		||||
//post/use-txtbox.js
 | 
			
		||||
    "lang_usetxtbox_reply":"返信モードです。クリアするときはCtrl+Shift+Cを押してください。",
 | 
			
		||||
//tl/card.js
 | 
			
		||||
    "lang_cards_check":"チェック",
 | 
			
		||||
    "lang_cards_pip":"ながら観モード",
 | 
			
		||||
//tl/details.js
 | 
			
		||||
    "lang_details_nodata":"データなし",
 | 
			
		||||
    "lang_details_filtered":"フィルターされました。",
 | 
			
		||||
    "lang_details_embed":"埋め込みHTMLがコピーされました。",
 | 
			
		||||
    "lang_details_url":"トゥートURLがコピーされました。",
 | 
			
		||||
    "lang_details_txt":"トゥート本文がコピーされました。",
 | 
			
		||||
//tl/filter.js
 | 
			
		||||
    "lang_filter_nodata":"フィルターはありません",
 | 
			
		||||
    "lang_filter_errordegree":"適応範囲を最低一つ以上チェックしてください。",
 | 
			
		||||
//tl/list.js
 | 
			
		||||
    "lang_list_nodata":"リストはありません",
 | 
			
		||||
    "lang_list_show":"表示",
 | 
			
		||||
    "lang_list_users":"ユーザー一覧",
 | 
			
		||||
    "lang_list_nouser":"ユーザーはいません",
 | 
			
		||||
    "lang_list_add":"リストに追加",
 | 
			
		||||
    "lang_list_remove":"リストから削除",
 | 
			
		||||
//tl/notification.js
 | 
			
		||||
    "lang_notf_new":"件の新しい通知",
 | 
			
		||||
//tl/speech.js
 | 
			
		||||
    "lang_speech_refresh":"音声読み上げ設定を更新しました。",
 | 
			
		||||
//tl/src.js
 | 
			
		||||
    "lang_src_ts":"時系列",
 | 
			
		||||
    "lang_src_people":"人がトゥート",
 | 
			
		||||
//tl/tag.js
 | 
			
		||||
    "lang_tags_always":"常に",
 | 
			
		||||
    "lang_tags_realtime":"実況",
 | 
			
		||||
    "lang_tags_tagunpin":"{{tag}}をよく使うタグから削除",
 | 
			
		||||
    "lang_tags_unrealtime":"実況解除",
 | 
			
		||||
    "lang_tags_tagwarn":"{{tag}}がない場合自動で補完されます。",
 | 
			
		||||
//tl/tl.js
 | 
			
		||||
    "lang_tl_media":"メディア",
 | 
			
		||||
    "lang_tl_reconnect":"Streamingに再接続しました",
 | 
			
		||||
//ui/layout.js
 | 
			
		||||
    "lang_layout_gotop":"一番上へ。アイコンが赤のときはストリーミングに接続できていません。F5等で再読込をお試し下さい。",
 | 
			
		||||
    "lang_layout_thisacct":"このアカウントの{{notf}}",
 | 
			
		||||
    "lang_layout_delthis":"このカラムを削除",
 | 
			
		||||
    "lang_layout_setthis":"このカラムの設定",
 | 
			
		||||
    "lang_layout_mediafil":"メディアフィルター",
 | 
			
		||||
    "lang_layout_linkana":"リンク解析",
 | 
			
		||||
    "lang_layout_linkanades":"リンクの解析を切り替え",
 | 
			
		||||
    "lang_layout_tts":"読み上げ",
 | 
			
		||||
    "lang_layout_reconnect":"ストリーミング再接続",
 | 
			
		||||
    "lang_layout_headercolor":"TLヘッダーカラー",
 | 
			
		||||
    "lang_layout_nodata":"[ここにトゥートはありません。]<br>F5/⌘+Rで再読込できます。",
 | 
			
		||||
    "lang_layout_dm":"ダイレクトメッセージ",
 | 
			
		||||
    "lang_layout_webviewmode":"WebView優先",
 | 
			
		||||
    "lang_excluded":"除外する通知",
 | 
			
		||||
    "lang_layout_excludingbt":"BT表示(OFF/BT除外/BTのみ)",
 | 
			
		||||
    "lang_layout_leftFold":"左へ重ねる",
 | 
			
		||||
    "lang_layout_leftUnfold":"右へ出す",
 | 
			
		||||
//ui/sort.js
 | 
			
		||||
    "lang_sort_gothis":"このカラムへ",
 | 
			
		||||
    "lang_sort_remthis":"このカラムを削除",
 | 
			
		||||
//ui/spotify.js
 | 
			
		||||
    "lang_spotify_img":"アルバムアートワークを添付します。",
 | 
			
		||||
    "lang_spotify_imgno":"アルバムアートワークを添付しません。",
 | 
			
		||||
    "lang_spotify_acct":"アカウント連携をしてください。",
 | 
			
		||||
    "lang_spotify_np":"NowPlaying文書を更新しました。",
 | 
			
		||||
    "lang_setting_npprovide":"NowPlayingのソースを{{set}}に設定しました。",
 | 
			
		||||
//userdata/his-data.js
 | 
			
		||||
    "lang_hisdata_frcreq":"Mastodon 2.4.3~が必要です",
 | 
			
		||||
    "lang_hisdata_frcwarn":"非フォローだけど絡みがある時に表示されます。",
 | 
			
		||||
    "lang_hisdata_taketime":"30秒から数分かかります",
 | 
			
		||||
    "lang_hisdata_notonmisskey":"このシステムはMisskeyにはありません。",
 | 
			
		||||
//userdata/showOnTL.js
 | 
			
		||||
    "lang_showontl_movetxt":"このアカウントは移行しています",
 | 
			
		||||
    "lang_showontl_movebtn":"移行先を見る",
 | 
			
		||||
    "lang_showontl_botacct":"botアカウント",
 | 
			
		||||
    "lang_showontl_followed":"フォローされています",
 | 
			
		||||
    "lang_showontl_notf":"通知",
 | 
			
		||||
    "lang_showontl_domain":"ドメイン",
 | 
			
		||||
    "lang_showontl_listwarn":"リストに追加するためにはフォローが必要です。",
 | 
			
		||||
//parse
 | 
			
		||||
   "lang_parse_mentioned":"が返信しました",
 | 
			
		||||
    "lang_parse_faved":"がお気に入り登録しました",
 | 
			
		||||
    "lang_parse_bted":"がブーストしました",
 | 
			
		||||
    "lang_parse_btedsimple":"がブースト",
 | 
			
		||||
    "lang_parse_notftime":"通知された時間",
 | 
			
		||||
    "lang_parse_cwshow":"見る",
 | 
			
		||||
    "lang_parse_fulltext":"以下全文",
 | 
			
		||||
    "lang_parse_autofold":"自動折り畳み",
 | 
			
		||||
    "lang_parse_more":"続き...",
 | 
			
		||||
    "lang_parse_url":"URL解析",
 | 
			
		||||
    "lang_parse_tagTL":"{{tag}}のタイムライン",
 | 
			
		||||
    "lang_parse_tagtoot":"{{tag}}でトゥート",
 | 
			
		||||
    "lang_parse_tagpin":"{{tag}}をよく使うタグへ",
 | 
			
		||||
    "lang_parse_public":"公開",
 | 
			
		||||
    "lang_parse_unlisted":"未収載",
 | 
			
		||||
    "lang_parse_private":"非公開",
 | 
			
		||||
    "lang_parse_direct":"ダイレクト",
 | 
			
		||||
    "lang_parse_clickcopy":"クリックして本文をコピー",
 | 
			
		||||
    "lang_parse_clickcopyurl":"クリックしてトゥートURLをコピー",
 | 
			
		||||
    "lang_parse_trans":"このトゥートを日本語に翻訳",
 | 
			
		||||
    "lang_parse_replyto":"このトゥートに返信",
 | 
			
		||||
    "lang_parse_bt":"このトゥートをブースト",
 | 
			
		||||
    "lang_parse_fav":"このトゥートをお気に入り登録",
 | 
			
		||||
    "lang_parse_quote":"このトゥートを引用",
 | 
			
		||||
    "lang_parse_del":"このトゥートを削除",
 | 
			
		||||
    "lang_parse_pin":"このトゥートをピン留め",
 | 
			
		||||
    "lang_parse_det":"詳細(メインアカウント経由)",
 | 
			
		||||
    "lang_parse_redraft":"このトゥートを削除して再編集",
 | 
			
		||||
    "lang_parse_followed":"フォローされました。",
 | 
			
		||||
    "lang_parse_clientop":"クライアント処理",
 | 
			
		||||
    "lang_parse_clienttxt":"に対する処理を選択してください。",
 | 
			
		||||
    "lang_parse_clientno":"何もしない",
 | 
			
		||||
    "lang_parse_clientemp":"強調表示/解除",
 | 
			
		||||
    "lang_parse_clientmute":"ミュート",
 | 
			
		||||
    "lang_parse_mute":"ミュートします。設定から解除できます。",
 | 
			
		||||
    "lang_parse_voted":"投票済みです",
 | 
			
		||||
    "lang_parse_vote":"投票",
 | 
			
		||||
    "lang_parse_unvoted":"結果だけ見る",
 | 
			
		||||
    "lang_parse_endedvote":"終了済み",
 | 
			
		||||
    "lang_parse_thread":"会話を表示",
 | 
			
		||||
    //misskey
 | 
			
		||||
    "lang_misskeyparse_renote":"再投稿",
 | 
			
		||||
    "lang_misskeyparse_renoteqt":"引用",
 | 
			
		||||
    "lang_misskeyparse_reaction":"リアクション",
 | 
			
		||||
    "lang_misskeyparse_tagnostr":"タグTLはストリーミング非対応です。",
 | 
			
		||||
    "lang_misskeyparse_listnostr":"リストTLはストリーミング非対応です。",
 | 
			
		||||
    "lang_misskeyparse_home":"ホーム",
 | 
			
		||||
    "lang_misskeyparse_followers":"フォロワー",
 | 
			
		||||
    "lang_misskeyparse_specified":"ユーザー指定",
 | 
			
		||||
    "lang_misskeyparse_qt":"MisskeyのRenote(引用モード)中:Ctrl+Shift+Cでクリア",
 | 
			
		||||
    "lang_misskeyparse_renoted":"がRepost",
 | 
			
		||||
    "lang_misskeyparse_quoted":"が引用",
 | 
			
		||||
    "lang_misskeyparse_reacted":"がリアクション",
 | 
			
		||||
//setting
 | 
			
		||||
    "lang_setting_time":"時間設定を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_theme":"テーマ設定を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_nsfw":"画像表示設定を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_cw":"テキスト表示設定を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_cwtext":"デフォルトの警告文を「{{set}}」に設定しました。",
 | 
			
		||||
    "lang_setting_cws":"標準でCW:{{set}}",
 | 
			
		||||
    "lang_setting_rp":"リプライ数表示:{{set}}",
 | 
			
		||||
    "lang_setting_vis":"デフォルトの公開設定を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_popup":"ポップアップお知らせを{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_off":"オフ",
 | 
			
		||||
    "lang_setting_s":"秒",
 | 
			
		||||
    "lang_setting_box":"デフォルトでのボックスの挙動を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_gif":"アイコンアニメーション再生を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_selt":"{{set1}}行以上または{{set2}}文字以上でテキストを隠します。",
 | 
			
		||||
    "lang_setting_autocw":"{{set1}}行以上または{{set2}}文字以上で警告を表示します。",
 | 
			
		||||
    "lang_setting_width":"横幅最低を{{set}}pxに設定しました。",
 | 
			
		||||
    "lang_setting_fixwidth":"TweetDeckの横幅を{{set}}pxに設定しました。",
 | 
			
		||||
    "lang_setting_img":"画像投稿後の設定を「{{set}}」に設定しました。",
 | 
			
		||||
    "lang_setting_font":"フォントを{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_default":"デフォルト",
 | 
			
		||||
    "lang_setting_size":"フォントサイズを{{set}}pxに設定しました。",
 | 
			
		||||
    "lang_setting_imgheight":"画像高さを{{set}}pxに設定しました。",
 | 
			
		||||
    "lang_setting_ticker":"#InstanceTicker使用を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_animation":"アニメーションを{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_tag":"タグの取得範囲を「{{set}}」に設定しました。",
 | 
			
		||||
    "lang_setting_boxConfirm":"投稿ボックスを{{set}}",
 | 
			
		||||
    "lang_setting_ul":"独自ロケール設定を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_notf":"ネイティブ通知を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_quote":"引用形式を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_via":"via表示を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_mov":"アクションボタン非表示を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_setasread":"通知カラム存在時新着非表示を{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_main":"起動時・投稿時のアカウントを{{set}}に設定しました。",
 | 
			
		||||
    "lang_setting_sec":"セカンダリートゥートボタン:{{set}}",
 | 
			
		||||
    "lang_setting_ksref":"キーボードショートカットが更新されました。",
 | 
			
		||||
    "lang_setting_nomuting":"ミュートしているクライアントはありません。",
 | 
			
		||||
    "lang_setting_notftest":"通知テスト",
 | 
			
		||||
    "lang_setting_notftestprof":"アイコンはあなたのアカウントのものです。",
 | 
			
		||||
    "lang_setting_exportwarn":"重要なデータのみエクスポートされます。エクスポートされたデータは外部に公開しないでください。全ての認証データが含まれています。",
 | 
			
		||||
    "lang_setting_importwarn":"全てのデータがリセットされます。"
 | 
			
		||||
}
 | 
			
		||||
@@ -1,110 +1,86 @@
 | 
			
		||||
//インスタンスリスト
 | 
			
		||||
var idata={
 | 
			
		||||
	"kirishima.cloud":"instance",
 | 
			
		||||
	"kirishima.cloud_name":"アスタルテ",
 | 
			
		||||
	"kirishima.cloud_letters":"6229",
 | 
			
		||||
	"kirishima.cloud_bbcode":"enabled",
 | 
			
		||||
	"kirishima.cloud_markdown":"enabled",
 | 
			
		||||
	"kirishima.cloud_glitch":"enabled",
 | 
			
		||||
	"kirishima.cloud_public":"パブリックタイムライン",
 | 
			
		||||
	"minohdon.jp":"instance",
 | 
			
		||||
	"minohdon.jp_name":"箕面丼",
 | 
			
		||||
	"minohdon.jp_letters":"500",
 | 
			
		||||
	"minohdon.jp_bbcode":"disabled",
 | 
			
		||||
	"minohdon.jp_markdown":"disabled",
 | 
			
		||||
	"minohdon.jp_glitch":"disabled",
 | 
			
		||||
	"knzk.me":"instance",
 | 
			
		||||
	"knzk.me_name":"神崎丼",
 | 
			
		||||
	"knzk.me_letters":"5000",
 | 
			
		||||
	"knzk.me_bbcode":"disabled",
 | 
			
		||||
	"knzk.me_markdown":"disabled",
 | 
			
		||||
	"knzk.me_glitch":"enabled",
 | 
			
		||||
	"mastodos.com":"instance",
 | 
			
		||||
	"mastodos.com_name":"マストどす",
 | 
			
		||||
	"mastodos.com_letters":"500",
 | 
			
		||||
	"mastodos.com_bbcode":"disabled",
 | 
			
		||||
	"mastodos.com_markdown":"disabled",
 | 
			
		||||
	"mastodos.com_glitch":"disabled",
 | 
			
		||||
	"dev.kirishima.cloud":"hidden",
 | 
			
		||||
	"dev.kirishima.cloud_name":"アスタルテ(Dev)",
 | 
			
		||||
	"dev.kirishima.cloud_letters":"6229",
 | 
			
		||||
	"dev.kirishima.cloud_bbcode":"enabled",
 | 
			
		||||
	"dev.kirishima.cloud_markdown":"enabled",
 | 
			
		||||
	"dev.kirishima.cloud_glitch":"enabled",
 | 
			
		||||
	"mstdn.y-zu.org":"instance",
 | 
			
		||||
	"mstdn.y-zu.org_name":"Yづドン!(502 BadGateway)",
 | 
			
		||||
	"mstdn.y-zu.org_letters":"500",
 | 
			
		||||
	"mstdn.y-zu.org_bbcode":"disabled",
 | 
			
		||||
	"mstdn.y-zu.org_markdown":"enabled",
 | 
			
		||||
	"mstdn.y-zu.org_glitch":"disabled",
 | 
			
		||||
	"imastodon.net":"instance",
 | 
			
		||||
	"imastodon.net_name":"im@stodon",
 | 
			
		||||
	"imastodon.net_letters":"500",
 | 
			
		||||
	"imastodon.net_bbcode":"disabled",
 | 
			
		||||
	"imastodon.net_markdown":"disabled",
 | 
			
		||||
	"imastodon.net_home":"オフィス",
 | 
			
		||||
	"imastodon.net_local":"楽屋",
 | 
			
		||||
	"imastodon.net_notification":"ホワイトボード",
 | 
			
		||||
	"imastodon.net_public":"ライブステージ",
 | 
			
		||||
	"imastodon.net_post":"あふぅ",
 | 
			
		||||
	"imastodon.net_fav":"の頭にティンときたようです",
 | 
			
		||||
	"imastodon.net_bt":":「わかるわ」",
 | 
			
		||||
	"imastodon.net_follow":"名刺をいただきました",
 | 
			
		||||
	"imastodon.net_glitch":"disabled",
 | 
			
		||||
	"mstdn.osaka":"instance",
 | 
			
		||||
	"mstdn.osaka_name":"大阪丼",
 | 
			
		||||
	"mstdn.osaka_letters":"500",
 | 
			
		||||
	"mstdn.osaka_bbcode":"disabled",
 | 
			
		||||
	"mstdn.osaka_markdown":"disabled",
 | 
			
		||||
	"mstdn.osaka_home":"ウチ",
 | 
			
		||||
	"mstdn.osaka_local":"近所",
 | 
			
		||||
	"mstdn.osaka_notification":"あめちゃん",
 | 
			
		||||
	"mstdn.osaka_public":"新世界",
 | 
			
		||||
	"mstdn.osaka_post":"なんや!",
 | 
			
		||||
	"mstdn.osaka_fav":"がええやん言いました",
 | 
			
		||||
	"mstdn.osaka_bt":"がしばいた",
 | 
			
		||||
	"mstdn.osaka_follow":"ツルまれました",
 | 
			
		||||
	"mstdn.osaka_glitch":"disabled",
 | 
			
		||||
	"mstdn.kemono-friends.info":"instance",
 | 
			
		||||
	"mstdn.kemono-friends.info_name":"ますとどんちほー",
 | 
			
		||||
	"mstdn.kemono-friends.info_letters":"1024",
 | 
			
		||||
	"mstdn.kemono-friends.info_bbcode":"disabled",
 | 
			
		||||
	"mstdn.kemono-friends.info_markdown":"disabled",
 | 
			
		||||
	"mstdn.kemono-friends.info_home":"なわばり",
 | 
			
		||||
	"mstdn.kemono-friends.info_local":"ますとどんちほー",
 | 
			
		||||
	"mstdn.kemono-friends.info_notification":"ねえねえ!",
 | 
			
		||||
	"mstdn.kemono-friends.info_public":"ジャパリパーク",
 | 
			
		||||
	"mstdn.kemono-friends.info_post":"がおー!",
 | 
			
		||||
	"mstdn.kemono-friends.info_fav":":「すごーい」",
 | 
			
		||||
	"mstdn.kemono-friends.info_bt":":「たーのしー」",
 | 
			
		||||
	"mstdn.kemono-friends.info_glitch":"disabled",
 | 
			
		||||
	"itabashi.0j0.jp":"instance",
 | 
			
		||||
	"itabashi.0j0.jp_name":"板橋丼",
 | 
			
		||||
	"itabashi.0j0.jp_letters":"1024",
 | 
			
		||||
	"itabashi.0j0.jp_bbcode":"disabled",
 | 
			
		||||
	"itabashi.0j0.jp_markdown":"disabled",
 | 
			
		||||
	"itabashi.0j0.jp_glitch":"disabled",
 | 
			
		||||
	"theboss.tech":"instance",
 | 
			
		||||
	"theboss.tech_name":"theboss.tech",
 | 
			
		||||
	"theboss.tech_letters":"1000",
 | 
			
		||||
	"theboss.tech_bbcode":"disabled",
 | 
			
		||||
	"theboss.tech_markdown":"disabled",
 | 
			
		||||
	"theboss.tech_glitch":"disabled",
 | 
			
		||||
	"dtp-mstdn.jp":"instance",
 | 
			
		||||
	"dtp-mstdn.jp_name":"DTP鯖",
 | 
			
		||||
	"dtp-mstdn.jp_letters":"500",
 | 
			
		||||
	"dtp-mstdn.jp_bbcode":"disabled",
 | 
			
		||||
	"dtp-mstdn.jp_markdown":"disabled",
 | 
			
		||||
	"dtp-mstdn.jp_glitch":"disabled",
 | 
			
		||||
	"misskey.xyz":"instance",
 | 
			
		||||
	"misskey.xyz_name":"Misskey",
 | 
			
		||||
	"misskey.xyz_letters":"1000",
 | 
			
		||||
	"misskey.xyz_bbcode":"disabled",
 | 
			
		||||
	"misskey.xyz_markdown":"enabled",
 | 
			
		||||
	"misskey.xyz_public":"Global",
 | 
			
		||||
	"misskey.xyz_post":"Post",
 | 
			
		||||
	"misskey.xyz_fav":" reacted your post.",
 | 
			
		||||
	"misskey.xyz_bt":" reposted your post.",
 | 
			
		||||
const idata = {
 | 
			
		||||
	"kirishima.cloud": "instance",
 | 
			
		||||
	"kirishima.cloud_name": "アスタルテ",
 | 
			
		||||
	"kirishima.cloud_letters": "6229",
 | 
			
		||||
	"kirishima.cloud_bbcode": "enabled",
 | 
			
		||||
	"kirishima.cloud_markdown": "enabled",
 | 
			
		||||
	"kirishima.cloud_glitch": "enabled",
 | 
			
		||||
	"kirishima.cloud_public": "パブリックタイムライン",
 | 
			
		||||
	"minohdon.jp": "instance",
 | 
			
		||||
	"minohdon.jp_name": "箕面どん",
 | 
			
		||||
	"fedibird.com":"instance",
 | 
			
		||||
	"fedibird.com_name":"Fedibird",
 | 
			
		||||
	"fedibird.com_quote":"enabled",
 | 
			
		||||
	"mastodos.com": "instance",
 | 
			
		||||
	"mastodos.com_name": "マストどす",
 | 
			
		||||
	"dev.kirishima.cloud": "hidden",
 | 
			
		||||
	"dev.kirishima.cloud_name": "アスタルテ(Dev)",
 | 
			
		||||
	"dev.kirishima.cloud_letters": "6229",
 | 
			
		||||
	"dev.kirishima.cloud_bbcode": "enabled",
 | 
			
		||||
	"dev.kirishima.cloud_markdown": "enabled",
 | 
			
		||||
	"dev.kirishima.cloud_glitch": "enabled",
 | 
			
		||||
	"mstdn.y-zu.org": "instance",
 | 
			
		||||
	"mstdn.y-zu.org_name": "Yづドン(Y-zuDon)",
 | 
			
		||||
	"imastodon.net": "instance",
 | 
			
		||||
	"imastodon.net_name": "im@stodon",
 | 
			
		||||
	"imastodon.net_home": "オフィス",
 | 
			
		||||
	"imastodon.net_local": "楽屋",
 | 
			
		||||
	"imastodon.net_notification": "ホワイトボード",
 | 
			
		||||
	"imastodon.net_public": "ライブステージ",
 | 
			
		||||
	"imastodon.net_post": "あふぅ",
 | 
			
		||||
	"imastodon.net_fav": "の頭にティンときたようです",
 | 
			
		||||
	"imastodon.net_bt": ":「わかるわ」",
 | 
			
		||||
	"imastodon.net_follow": "名刺をいただきました",
 | 
			
		||||
	"mstdn.osaka_home": "ウチ",
 | 
			
		||||
	"mstdn.osaka_local": "近所",
 | 
			
		||||
	"mstdn.osaka_notification": "あめちゃん",
 | 
			
		||||
	"mstdn.osaka_public": "新世界",
 | 
			
		||||
	"mstdn.osaka_post": "なんや!",
 | 
			
		||||
	"mstdn.osaka_fav": "がええやん言いました",
 | 
			
		||||
	"mstdn.osaka_bt": "がしばいた",
 | 
			
		||||
	"mstdn.osaka_follow": "ツルまれました",
 | 
			
		||||
	"mstdn.kemono-friends.info": "instance",
 | 
			
		||||
	"mstdn.kemono-friends.info_name": "ますとどんちほー",
 | 
			
		||||
	"mstdn.kemono-friends.info_letters": "1024",
 | 
			
		||||
	"mstdn.kemono-friends.info_home": "なわばり",
 | 
			
		||||
	"mstdn.kemono-friends.info_local": "ますとどんちほー",
 | 
			
		||||
	"mstdn.kemono-friends.info_notification": "ねえねえ!",
 | 
			
		||||
	"mstdn.kemono-friends.info_public": "ジャパリパーク",
 | 
			
		||||
	"mstdn.kemono-friends.info_post": "がおー!",
 | 
			
		||||
	"mstdn.kemono-friends.info_fav": ":「すごーい」",
 | 
			
		||||
	"mstdn.kemono-friends.info_bt": ":「たーのしー」",
 | 
			
		||||
	"itabashi.0j0.jp": "instance",
 | 
			
		||||
	"itabashi.0j0.jp_name": "板橋丼",
 | 
			
		||||
	"itabashi.0j0.jp_letters": "1024",
 | 
			
		||||
	"itabashi.0j0.jp_quote":"enabled",
 | 
			
		||||
	"dtp-mstdn.jp": "instance",
 | 
			
		||||
	"dtp-mstdn.jp_name": "dtp-mstdn.jp",
 | 
			
		||||
	"dtp-mstdn.jp_quote":"enabled",
 | 
			
		||||
	"misskey.io": "misskey",
 | 
			
		||||
	"misskey.io_name": "misskey.io",
 | 
			
		||||
	"misskey.io_letters": "1000",
 | 
			
		||||
	"misskey.io_bbcode": "disabled",
 | 
			
		||||
	"misskey.io_markdown": "enabled",
 | 
			
		||||
	"misskey.io_public": "Global",
 | 
			
		||||
	"misskey.io_post": "Post",
 | 
			
		||||
	"misskey.io_fav": " reacted your post.",
 | 
			
		||||
	"misskey.io_bt": " reposted your post.",
 | 
			
		||||
	"misskey.dev": "misskey",
 | 
			
		||||
	"misskey.dev_name": "misskey.dev",
 | 
			
		||||
	"misskey.dev_letters": "1024",
 | 
			
		||||
	"misskey.dev_bbcode": "disabled",
 | 
			
		||||
	"misskey.dev_markdown": "enabled",
 | 
			
		||||
	"misskey.dev_public": "Global",
 | 
			
		||||
	"misskey.dev_post": "Post",
 | 
			
		||||
	"misskey.dev_fav": " reacted your post.",
 | 
			
		||||
	"misskey.dev_bt": " reposted your post.",
 | 
			
		||||
	"precure.ml": "instance",
 | 
			
		||||
	"precure.ml_name": "キュアスタ!",
 | 
			
		||||
	"precure.ml_letters": "1024",
 | 
			
		||||
	"precure.ml_post": "キュア!",
 | 
			
		||||
	"odakyu.app_quote":"enabled",
 | 
			
		||||
	"nitiasa.com_quote":"enabled",
 | 
			
		||||
	"biwakodon.com_quote":"enabled",
 | 
			
		||||
	"comm.cx_quote":"enabled"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
localStorage.setItem("instance", JSON.stringify(idata));
 | 
			
		||||
 
 | 
			
		||||
@@ -1,557 +1,276 @@
 | 
			
		||||
/*ログイン処理・認証までのJS*/
 | 
			
		||||
//最初に読むやつ
 | 
			
		||||
//アスタルテ判定初期化
 | 
			
		||||
 | 
			
		||||
localStorage.removeItem("kirishima")
 | 
			
		||||
localStorage.removeItem("imas")
 | 
			
		||||
localStorage.removeItem("image");
 | 
			
		||||
localStorage.removeItem("stable")
 | 
			
		||||
localStorage.setItem("mode_misskey.xyz","misskey")
 | 
			
		||||
function ck() {
 | 
			
		||||
	var main = localStorage.getItem("main");
 | 
			
		||||
	if(!main){
 | 
			
		||||
		localStorage.setItem("main",0)
 | 
			
		||||
	}
 | 
			
		||||
	var domainz = localStorage.getItem("domain_0");
 | 
			
		||||
	var at = localStorage.getItem("acct_0_at");
 | 
			
		||||
	var oldat = localStorage.getItem(domainz + "_at");
 | 
			
		||||
	if(oldat){
 | 
			
		||||
		console.log("Move to New Account Management System")
 | 
			
		||||
		var multi = localStorage.getItem("multi");
 | 
			
		||||
		if (!multi) {
 | 
			
		||||
			var acctlen=1;
 | 
			
		||||
		} else {
 | 
			
		||||
			var obj = JSON.parse(multi);
 | 
			
		||||
			var acctlen=obj.length;
 | 
			
		||||
		}
 | 
			
		||||
		for(i=0;acctlen>i;i++){
 | 
			
		||||
			var domain = localStorage.getItem("domain_"+i);
 | 
			
		||||
			var oldat = localStorage.getItem(domain + "_at");
 | 
			
		||||
			var newat = localStorage.setItem("acct_"+ i + "_at",oldat);
 | 
			
		||||
			localStorage.removeItem(domain + "_at");
 | 
			
		||||
		}
 | 
			
		||||
localStorage.removeItem('kirishima')
 | 
			
		||||
localStorage.removeItem('quoters')
 | 
			
		||||
localStorage.removeItem('imas')
 | 
			
		||||
//stable, 固定タグのことらしい。ふざけるな。
 | 
			
		||||
localStorage.removeItem('stable')
 | 
			
		||||
const acctList = JSON.parse(localStorage.getItem('multi'))
 | 
			
		||||
 | 
			
		||||
async function ck() {
 | 
			
		||||
	const main = localStorage.getItem('main')
 | 
			
		||||
	if (!main) {
 | 
			
		||||
		localStorage.setItem('main', '0')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//コード受信
 | 
			
		||||
	if(location.search){
 | 
			
		||||
		var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
 | 
			
		||||
		var mode=m[1];
 | 
			
		||||
		var codex=m[2];
 | 
			
		||||
		if(mode=="manager" || mode=="login"){
 | 
			
		||||
			code(codex,mode);
 | 
			
		||||
		}else{	
 | 
			
		||||
	if (location.search) {
 | 
			
		||||
		const m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/)
 | 
			
		||||
		const mode = m[1]
 | 
			
		||||
		const codex = m[2]
 | 
			
		||||
		if (mode == 'manager' || mode == 'login') {
 | 
			
		||||
			code(codex, mode)
 | 
			
		||||
		} else {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var multi = localStorage.getItem("multi");
 | 
			
		||||
	if (!multi) {
 | 
			
		||||
		var obj = [];
 | 
			
		||||
		var json = JSON.stringify(obj);
 | 
			
		||||
		localStorage.setItem("multi", json);
 | 
			
		||||
	const multi = localStorage.getItem('multi')
 | 
			
		||||
	if (!multi || multi == '[]') {
 | 
			
		||||
		const date = new Date()
 | 
			
		||||
		localStorage.setItem('showSupportMe', date.getMonth() + 2)
 | 
			
		||||
		location.href = 'acct.html?mode=first&code=true'
 | 
			
		||||
	} else {
 | 
			
		||||
		var obj = JSON.parse(multi);
 | 
			
		||||
	}
 | 
			
		||||
	Object.keys(obj).forEach(function(key) {
 | 
			
		||||
		var acct=obj[key];
 | 
			
		||||
		if(acct.domain){
 | 
			
		||||
			refresh(key,true)
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
	console.log(obj);
 | 
			
		||||
	if (obj[0].domain) {
 | 
			
		||||
		$("#tl").show();
 | 
			
		||||
		ticker();
 | 
			
		||||
		multiSelector();
 | 
			
		||||
	} else {
 | 
			
		||||
		$("#tl").show();
 | 
			
		||||
		$("#post-box").hide();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
ck();
 | 
			
		||||
//ログインポップアップ
 | 
			
		||||
function login(url) {
 | 
			
		||||
	if($('#linux:checked').val()=="on"){
 | 
			
		||||
		var red = "urn:ietf:wg:oauth:2.0:oob"
 | 
			
		||||
	}else{
 | 
			
		||||
		var red = 'thedesk://login';
 | 
			
		||||
	}
 | 
			
		||||
	localStorage.setItem("redirect", red);
 | 
			
		||||
	var start = "https://" + url + "/api/v1/apps";
 | 
			
		||||
	var httpreq = new XMLHttpRequest();
 | 
			
		||||
	httpreq.open('POST', start, true);
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json');
 | 
			
		||||
	httpreq.responseType = "json";
 | 
			
		||||
	httpreq.send(JSON.stringify({
 | 
			
		||||
		scopes: 'read write follow',
 | 
			
		||||
		client_name: "TheDesk(PC)",
 | 
			
		||||
		redirect_uris: red,
 | 
			
		||||
		website: "https://thedesk.top"
 | 
			
		||||
	}));
 | 
			
		||||
    httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
			var json = httpreq.response;
 | 
			
		||||
			console.log(json);
 | 
			
		||||
			var auth = "https://" + url + "/oauth/authorize?client_id=" + json[
 | 
			
		||||
				"client_id"] + "&client_secret=" + json["client_secret"] +
 | 
			
		||||
			"&response_type=code&redirect_uri="+red+"&scope=read+write+follow";
 | 
			
		||||
		localStorage.setItem("domain_" + acct_id, url);
 | 
			
		||||
		localStorage.setItem("client_id", json["client_id"]);
 | 
			
		||||
		localStorage.setItem("client_secret", json["client_secret"]);
 | 
			
		||||
		$("#auth").show();
 | 
			
		||||
		$("#masara").hide();
 | 
			
		||||
		const { shell } = require('electron');
 | 
			
		||||
 | 
			
		||||
		  shell.openExternal(auth);
 | 
			
		||||
		  
 | 
			
		||||
		  if($('#linux:checked').val()=="on"){
 | 
			
		||||
		}else{
 | 
			
		||||
			var electron = require("electron");
 | 
			
		||||
			var ipc = electron.ipcRenderer;
 | 
			
		||||
			ipc.send('quit', 'go');
 | 
			
		||||
		}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//テキストボックスにURL入れた
 | 
			
		||||
function instance() {
 | 
			
		||||
	var url = $("#url").val();
 | 
			
		||||
	login(url);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//コードを入れた後認証
 | 
			
		||||
function code(code,mode) {
 | 
			
		||||
	var red = localStorage.getItem("redirect");
 | 
			
		||||
	localStorage.removeItem("redirect")
 | 
			
		||||
	if(!code){
 | 
			
		||||
		var code = $("#code").val();
 | 
			
		||||
	}
 | 
			
		||||
	if(localStorage.getItem("domain_tmp")){
 | 
			
		||||
		var url = localStorage.getItem("domain_tmp");
 | 
			
		||||
	}else{
 | 
			
		||||
		var url = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	}
 | 
			
		||||
	var start = "https://" + url + "/oauth/token";
 | 
			
		||||
	var id = localStorage.getItem("client_id");
 | 
			
		||||
	var secret = localStorage.getItem("client_secret");
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'POST',
 | 
			
		||||
		headers: {
 | 
			
		||||
			'content-type': 'application/json'
 | 
			
		||||
		},
 | 
			
		||||
		body: JSON.stringify({
 | 
			
		||||
			grant_type: "authorization_code",
 | 
			
		||||
			redirect_uri: red,
 | 
			
		||||
			client_id: id,
 | 
			
		||||
			client_secret: secret,
 | 
			
		||||
			code: code
 | 
			
		||||
		})
 | 
			
		||||
	}).then(function(response) {
 | 
			
		||||
		return response.json();
 | 
			
		||||
	}).catch(function(error) {
 | 
			
		||||
		todo(error);
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}).then(function(json) {
 | 
			
		||||
		todo(json);
 | 
			
		||||
		if (json["access_token"]) {
 | 
			
		||||
			localStorage.setItem(url + "_at", json["access_token"]);
 | 
			
		||||
			if(mode=="manager"){
 | 
			
		||||
				getdataAdv(url, json["access_token"]);
 | 
			
		||||
			}else{
 | 
			
		||||
				getdata();
 | 
			
		||||
		const obj = JSON.parse(multi)
 | 
			
		||||
		const keymap = Object.keys(obj)
 | 
			
		||||
		let req = false
 | 
			
		||||
		for (let i = 0; i < keymap.length; i++) {
 | 
			
		||||
			const key = keymap[i]
 | 
			
		||||
			const acct = obj[key]
 | 
			
		||||
			if (acct.domain) {
 | 
			
		||||
				let refreshed = await refresh(key, true)
 | 
			
		||||
				if (refreshed) req = true
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//ユーザーデータ取得(最初)
 | 
			
		||||
function getdata() {
 | 
			
		||||
	var acct_id = 0;
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
	var start = "https://" + domain + "/api/v1/accounts/verify_credentials";
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'GET',
 | 
			
		||||
		headers: {
 | 
			
		||||
			'content-type': 'application/json',
 | 
			
		||||
			'Authorization': 'Bearer ' + at
 | 
			
		||||
		},
 | 
			
		||||
	}).then(function(response) {
 | 
			
		||||
		return response.json();
 | 
			
		||||
	}).catch(function(error) {
 | 
			
		||||
		todo(error);
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}).then(function(json) {
 | 
			
		||||
		console.log(json);
 | 
			
		||||
		if (json.error) {
 | 
			
		||||
			console.error("Error:" + json.error);
 | 
			
		||||
			Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
 | 
			
		||||
				5000);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		var avatar=json["avatar"];
 | 
			
		||||
		//missingがmissingなやつ
 | 
			
		||||
		if(avatar=="/avatars/original/missing.png"){
 | 
			
		||||
			avatar="./img/missing.svg";
 | 
			
		||||
		}
 | 
			
		||||
		var obj = [{
 | 
			
		||||
			at: at,
 | 
			
		||||
			name: json["display_name"],
 | 
			
		||||
			domain: domain,
 | 
			
		||||
			user: json["acct"],
 | 
			
		||||
			prof: avatar,
 | 
			
		||||
			id: json["id"],
 | 
			
		||||
			vis: json["source"]["privacy"]
 | 
			
		||||
		}];
 | 
			
		||||
		var json = JSON.stringify(obj);
 | 
			
		||||
		console.log(obj);
 | 
			
		||||
		localStorage.setItem("multi", json);
 | 
			
		||||
		localStorage.setItem("name_" + acct_id, json["display_name"]);
 | 
			
		||||
		localStorage.setItem("user_" + acct_id, json["acct"]);
 | 
			
		||||
		localStorage.setItem("user-id_" + acct_id, json["id"]);
 | 
			
		||||
		localStorage.setItem("prof_" + acct_id, avatar);
 | 
			
		||||
		$("#masara").hide();
 | 
			
		||||
		$("#auth").hide();
 | 
			
		||||
		$("#tl").show();
 | 
			
		||||
		parseColumn()
 | 
			
		||||
		ckdb();
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
//ユーザーデータ取得(追加)
 | 
			
		||||
function getdataAdv(domain, at) {
 | 
			
		||||
	var start = "https://" + domain + "/api/v1/accounts/verify_credentials";
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'GET',
 | 
			
		||||
		headers: {
 | 
			
		||||
			'content-type': 'application/json',
 | 
			
		||||
			'Authorization': 'Bearer ' + at
 | 
			
		||||
		},
 | 
			
		||||
	}).then(function(response) {
 | 
			
		||||
		return response.json();
 | 
			
		||||
	}).catch(function(error) {
 | 
			
		||||
		todo(error);
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}).then(function(json) {
 | 
			
		||||
		console.log(json);
 | 
			
		||||
		if (json.error) {
 | 
			
		||||
			console.error("Error:" + json.error);
 | 
			
		||||
			Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
 | 
			
		||||
				5000);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		var avatar=json["avatar"];
 | 
			
		||||
		//missingがmissingなやつ
 | 
			
		||||
		if(avatar=="/avatars/original/missing.png"){
 | 
			
		||||
			avatar="../../img/missing.svg";
 | 
			
		||||
		}
 | 
			
		||||
		if(json["source"]["privacy"]){
 | 
			
		||||
			var priv=json["source"]["privacy"];
 | 
			
		||||
		}else{
 | 
			
		||||
			var priv="public";
 | 
			
		||||
		}
 | 
			
		||||
		var add = {
 | 
			
		||||
			at: at,
 | 
			
		||||
			name: json["display_name"],
 | 
			
		||||
			domain: domain,
 | 
			
		||||
			user: json["acct"],
 | 
			
		||||
			prof: avatar,
 | 
			
		||||
			id: json["id"],
 | 
			
		||||
			vis: priv
 | 
			
		||||
		};
 | 
			
		||||
		var multi = localStorage.getItem("multi");
 | 
			
		||||
		var obj = JSON.parse(multi);
 | 
			
		||||
		var target = obj.lengtth;
 | 
			
		||||
		obj.push(add);
 | 
			
		||||
		localStorage.setItem("name_" + target, json["display_name"]);
 | 
			
		||||
		localStorage.setItem("user_" + target, json["acct"]);
 | 
			
		||||
		localStorage.setItem("user-id_" + target, json["id"]);
 | 
			
		||||
		localStorage.setItem("prof_" + target, avatar);
 | 
			
		||||
		console.log(obj);
 | 
			
		||||
		var json = JSON.stringify(obj);
 | 
			
		||||
		localStorage.setItem("multi", json);
 | 
			
		||||
		location.href="index.html";
 | 
			
		||||
	});
 | 
			
		||||
		if (req) {
 | 
			
		||||
			Swal.fire({
 | 
			
		||||
				title: 'Reload required',
 | 
			
		||||
				text: lang.lang_login_changedData,
 | 
			
		||||
				type: 'info',
 | 
			
		||||
				showCancelButton: true,
 | 
			
		||||
				confirmButtonText: lang.lang_no,
 | 
			
		||||
				cancelButtonText: lang.lang_yesno
 | 
			
		||||
			}).then(result => {
 | 
			
		||||
				if (result) location.reload()
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
		if (obj[0].domain) {
 | 
			
		||||
			showElm('#tl')
 | 
			
		||||
			ticker()
 | 
			
		||||
			parseColumn()
 | 
			
		||||
			verck(ver)
 | 
			
		||||
			showElm('.stw')
 | 
			
		||||
			const tipsType = localStorage.getItem('tips')
 | 
			
		||||
			if (tipsType) {
 | 
			
		||||
				tips(tipsType)
 | 
			
		||||
			}
 | 
			
		||||
			document.querySelector('#something-wrong img').setAttribute('src', '../../img/thinking.svg')
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
ck()
 | 
			
		||||
//ユーザーデータ更新
 | 
			
		||||
function refresh(target,loadskip) {
 | 
			
		||||
	var multi = localStorage.getItem("multi");
 | 
			
		||||
	var obj = JSON.parse(multi);
 | 
			
		||||
	if(obj[target].mode=="misskey"){
 | 
			
		||||
async function refresh(target, loadskip) {
 | 
			
		||||
	let obj = acctList
 | 
			
		||||
	let requireReload = false
 | 
			
		||||
	const { mode, domain, at, background, text, name, prof, vis } = obj[target]
 | 
			
		||||
	if (mode == 'misskey') {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	var start = "https://" + obj[target].domain +
 | 
			
		||||
		"/api/v1/accounts/verify_credentials";
 | 
			
		||||
		console.log(start);
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'GET',
 | 
			
		||||
		headers: {
 | 
			
		||||
			'content-type': 'application/json',
 | 
			
		||||
			'Authorization': 'Bearer ' + obj[target].at
 | 
			
		||||
		},
 | 
			
		||||
	}).then(function(response) {
 | 
			
		||||
		return response.json();
 | 
			
		||||
	}).catch(function(error) {
 | 
			
		||||
		todo(error);
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}).then(function(json) {
 | 
			
		||||
		console.log(json);
 | 
			
		||||
		if (json.error) {
 | 
			
		||||
			console.error("Error:" + json.error);
 | 
			
		||||
			Materialize.toast(lang.lang_fatalerroroccured+"Error:" + json.error,
 | 
			
		||||
				5000);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		var avatar=json["avatar"];
 | 
			
		||||
		//missingがmissingなやつ
 | 
			
		||||
		if(avatar=="/avatars/original/missing.png" || !avatar){
 | 
			
		||||
			avatar="./img/missing.svg";
 | 
			
		||||
		}
 | 
			
		||||
		var ref = {
 | 
			
		||||
			at: obj[target].at,
 | 
			
		||||
			name: json["display_name"],
 | 
			
		||||
			domain: obj[target].domain,
 | 
			
		||||
			user: json["acct"],
 | 
			
		||||
	const start = `https://${domain}/api/v1/accounts/verify_credentials`
 | 
			
		||||
	let json
 | 
			
		||||
	try {
 | 
			
		||||
		json = await getApi(start, at)
 | 
			
		||||
	} catch {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	if (json.error) {
 | 
			
		||||
		console.error('Error:' + json.error)
 | 
			
		||||
		M.toast({ html: lang.lang_fatalerroroccured + 'Error:' + json.error, displayLength: 5000 })
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if (!json) return false
 | 
			
		||||
	let avatar = json['avatar']
 | 
			
		||||
	//missingがmissingなやつ
 | 
			
		||||
	if (avatar == '/avatars/original/missing.png' || !avatar) {
 | 
			
		||||
		avatar = './img/missing.svg'
 | 
			
		||||
	}
 | 
			
		||||
	const newName = json.display_name
 | 
			
		||||
	const newProf = avatar
 | 
			
		||||
	const newVis = json.source.privacy
 | 
			
		||||
	if (newName != name || newProf != prof || newVis != vis) {
 | 
			
		||||
		let ref = {
 | 
			
		||||
			at: at,
 | 
			
		||||
			name: newName,
 | 
			
		||||
			domain: domain,
 | 
			
		||||
			user: json['acct'],
 | 
			
		||||
			prof: avatar,
 | 
			
		||||
			id: json["id"],
 | 
			
		||||
			vis: json["source"]["privacy"]
 | 
			
		||||
		};
 | 
			
		||||
		localStorage.setItem("name_" + target, json["display_name"]);
 | 
			
		||||
		localStorage.setItem("user_" + target, json["acct"]);
 | 
			
		||||
		localStorage.setItem("user-id_" + target, json["id"]);
 | 
			
		||||
		console.log("user-id_" + target+":"+json["id"])
 | 
			
		||||
		console.log(localStorage.getItem("user-id_"+target));
 | 
			
		||||
		localStorage.setItem("prof_" + target, avatar);
 | 
			
		||||
		localStorage.setItem("follow_" + target, json["following_count"]);
 | 
			
		||||
		obj[target] = ref;
 | 
			
		||||
		var json = JSON.stringify(obj);
 | 
			
		||||
		localStorage.setItem("multi", json);
 | 
			
		||||
		if(!loadskip){
 | 
			
		||||
			load();
 | 
			
		||||
			id: json['id'],
 | 
			
		||||
			vis: newVis
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
		if (background) {
 | 
			
		||||
			ref.background = background
 | 
			
		||||
		}
 | 
			
		||||
		if (text) {
 | 
			
		||||
			ref.text = text
 | 
			
		||||
		}
 | 
			
		||||
		if (json['source']['sensitive']) {
 | 
			
		||||
			localStorage.setItem('nsfw_' + target, true)
 | 
			
		||||
		} else {
 | 
			
		||||
			localStorage.removeItem('nsfw_' + target)
 | 
			
		||||
		}
 | 
			
		||||
		obj[target] = ref
 | 
			
		||||
		const save = JSON.stringify(obj)
 | 
			
		||||
		localStorage.setItem('multi', save)
 | 
			
		||||
		requireReload = true
 | 
			
		||||
	}
 | 
			
		||||
	if (!loadskip) {
 | 
			
		||||
		load()
 | 
			
		||||
	} else {
 | 
			
		||||
		return requireReload
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//MarkdownやBBCodeの対応、文字数制限をチェック
 | 
			
		||||
//絶対ストリーミングを閉じさせないマン
 | 
			
		||||
function ckdb(acct_id) {
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("home_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("bb_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("md_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("local_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("public_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("notification_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("post_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("fav_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("bt_" + acct_id);
 | 
			
		||||
	localStorage.removeItem("followlocale_" + acct_id);
 | 
			
		||||
	if(domain=="kirishima.cloud"){
 | 
			
		||||
		localStorage.setItem("kirishima", "true");
 | 
			
		||||
		$("#ranking-btn").show();
 | 
			
		||||
	}else if(domain=="imastodon.net"){
 | 
			
		||||
		localStorage.setItem("imas", "true");
 | 
			
		||||
		$(".imasonly").show();
 | 
			
		||||
async function ckdb(acct_id) {
 | 
			
		||||
	const domain = localStorage.getItem(`domain_${acct_id}`)
 | 
			
		||||
	if (domain == 'kirishima.cloud') {
 | 
			
		||||
		localStorage.setItem('kirishima', true)
 | 
			
		||||
	} else if (domain == 'imastodon.net') {
 | 
			
		||||
		localStorage.setItem('imas', true)
 | 
			
		||||
		showElm('.imasonly')
 | 
			
		||||
	}
 | 
			
		||||
	var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
	var bbcode = domain + "_bbcode";
 | 
			
		||||
	var letters = domain + "_letters";
 | 
			
		||||
	if(localStorage.getItem("instance")){
 | 
			
		||||
		var json=JSON.parse(localStorage.getItem("instance"));
 | 
			
		||||
			if (json[bbcode]) {
 | 
			
		||||
				if (json[bbcode] == "enabled") {
 | 
			
		||||
					localStorage.setItem("bb_" + acct_id, "true");
 | 
			
		||||
				} else {
 | 
			
		||||
					localStorage.removeItem("bb_" + acct_id);
 | 
			
		||||
					$("[data-activates='bbcode']").addClass("disabled");
 | 
			
		||||
					$("[data-activates='bbcode']").prop("disabled", true);
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				localStorage.removeItem("bb_" + acct_id);
 | 
			
		||||
				$("[data-activates='bbcode']").addClass("disabled");
 | 
			
		||||
				$("[data-activates='bbcode']").addClass("disabled", true);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			if (json[domain + "_markdown"] == "enabled") {
 | 
			
		||||
				localStorage.setItem("md_" + acct_id, "true");
 | 
			
		||||
				$(".markdown").show();
 | 
			
		||||
			}else{
 | 
			
		||||
				$(".anti-markdown").hide();
 | 
			
		||||
				$(".markdown").hide();
 | 
			
		||||
				localStorage.removeItem("bb_" + acct_id);
 | 
			
		||||
			}
 | 
			
		||||
			if(json[domain + "_home"]){
 | 
			
		||||
				console.log("unique name:"+json[domain + "_home"]);
 | 
			
		||||
				localStorage.setItem("home_" + acct_id, json[domain + "_home"]);
 | 
			
		||||
			}
 | 
			
		||||
			if(json[domain + "_local"]){
 | 
			
		||||
				localStorage.setItem("local_" + acct_id, json[domain + "_local"]);
 | 
			
		||||
			}
 | 
			
		||||
			if(json[domain + "_public"]){
 | 
			
		||||
				localStorage.setItem("public_" + acct_id, json[domain + "_public"]);
 | 
			
		||||
			}
 | 
			
		||||
			if(json[domain + "_notification"]){
 | 
			
		||||
				localStorage.setItem("notification_" + acct_id, json[domain + "_notification"]);
 | 
			
		||||
			}
 | 
			
		||||
			if(json[domain + "_post"]){
 | 
			
		||||
				localStorage.setItem("post_" + acct_id, json[domain + "_post"]);
 | 
			
		||||
			}
 | 
			
		||||
			if(json[domain + "_fav"]){
 | 
			
		||||
				localStorage.setItem("fav_" + acct_id, json[domain + "_fav"]);
 | 
			
		||||
			}
 | 
			
		||||
			if(json[domain + "_bt"]){
 | 
			
		||||
				localStorage.setItem("bt_" + acct_id, json[domain + "_bt"]);
 | 
			
		||||
			}
 | 
			
		||||
			if(json[domain + "_follow"]){
 | 
			
		||||
				localStorage.setItem("followlocale_" + acct_id, json[domain + "_follow"]);
 | 
			
		||||
			}
 | 
			
		||||
	}
 | 
			
		||||
	if(localStorage.getItem("mode_" + domain)!="misskey"){
 | 
			
		||||
		var start = "https://" + domain + "/api/v1/instance";
 | 
			
		||||
		fetch(start, {
 | 
			
		||||
			method: 'GET',
 | 
			
		||||
			headers: {
 | 
			
		||||
				'content-type': 'application/json'
 | 
			
		||||
			},
 | 
			
		||||
		}).then(function(response) {
 | 
			
		||||
			return response.json();
 | 
			
		||||
		}).catch(function(error) {
 | 
			
		||||
			console.error(error);
 | 
			
		||||
		}).then(function(json) {
 | 
			
		||||
			console.log(json);
 | 
			
		||||
			if (json.error) {
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			if(json){
 | 
			
		||||
				if(json["max_toot_chars"]){
 | 
			
		||||
					localStorage.setItem("letters_" + acct_id, json["max_toot_chars"]);
 | 
			
		||||
				}
 | 
			
		||||
				if(json["urls"]["streaming_api"]){
 | 
			
		||||
					localStorage.setItem("streaming_" + acct_id, json["urls"]["streaming_api"]);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
		
 | 
			
		||||
	}else{
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	const at = localStorage.getItem(`acct_${acct_id}_at`)
 | 
			
		||||
	const letters = `${domain}_letters`
 | 
			
		||||
	const quoteMarker = `${domain}_quote`
 | 
			
		||||
 | 
			
		||||
	if (idata) {
 | 
			
		||||
		//check and replace json to idata
 | 
			
		||||
		const json = idata
 | 
			
		||||
		if (json[quoteMarker] == 'enabled') {
 | 
			
		||||
			localStorage.setItem('quoters', true)
 | 
			
		||||
			localStorage.setItem(quoteMarker, true)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (!isMisskey(domain)) {
 | 
			
		||||
		const start = `https://${domain}/api/v1/instance`
 | 
			
		||||
		let json
 | 
			
		||||
		try {
 | 
			
		||||
			json = await getApi(start, null)
 | 
			
		||||
		} catch {
 | 
			
		||||
			return null
 | 
			
		||||
		}
 | 
			
		||||
		if (!json || json.error) {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		const mtc = json['max_toot_chars']
 | 
			
		||||
		if (mtc) {
 | 
			
		||||
			localStorage.setItem(letters, mtc)
 | 
			
		||||
		}
 | 
			
		||||
		if (json['feature_quote']) {
 | 
			
		||||
			localStorage.setItem(quoteMarker, true)
 | 
			
		||||
		}
 | 
			
		||||
		const str = json['urls']['streaming_api']
 | 
			
		||||
		if (str) {
 | 
			
		||||
			localStorage.setItem(`streaming_${domain}`, str)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//アカウントを選択…を実装
 | 
			
		||||
function multiSelector() {
 | 
			
		||||
	var multi = localStorage.getItem("multi");
 | 
			
		||||
	if (!multi) {
 | 
			
		||||
		var obj = [];
 | 
			
		||||
		var json = JSON.stringify(obj);
 | 
			
		||||
		localStorage.setItem("multi", json);
 | 
			
		||||
	} else {
 | 
			
		||||
		var obj = JSON.parse(multi);
 | 
			
		||||
	}
 | 
			
		||||
	var templete;
 | 
			
		||||
	if(localStorage.getItem("mainuse")=="main"){
 | 
			
		||||
		var last = localStorage.getItem("main");
 | 
			
		||||
	}else if(localStorage.getItem("last-use")){
 | 
			
		||||
		var last = localStorage.getItem("last-use");
 | 
			
		||||
	}else{
 | 
			
		||||
		var last=0;
 | 
			
		||||
	}
 | 
			
		||||
	var sel;
 | 
			
		||||
	if(obj.length<1){
 | 
			
		||||
		$("#src-acct-sel").html('<option value="tootsearch">Tootsearch</option>');
 | 
			
		||||
		$("#add-acct-sel").html('<option value="noauth">'+lang.lang_login_noauth+'</option>');
 | 
			
		||||
	}else{
 | 
			
		||||
	Object.keys(obj).forEach(function(key) {
 | 
			
		||||
		var acct = obj[key];
 | 
			
		||||
		var list = key * 1 + 1;
 | 
			
		||||
		if (key == last) {
 | 
			
		||||
			sel = "selected";
 | 
			
		||||
			var domain = acct.domain;
 | 
			
		||||
			localStorage.setItem("domain_" + key, domain);
 | 
			
		||||
			if(idata[domain+"_letters"]){
 | 
			
		||||
				$("#textarea").attr("data-length", idata[domain+"_letters"])
 | 
			
		||||
			}else{
 | 
			
		||||
				var maxletters = localStorage.getItem("letters_" + key);
 | 
			
		||||
				if(maxletters>0){
 | 
			
		||||
					$("#textarea").attr("data-length", maxletters)
 | 
			
		||||
				}else{
 | 
			
		||||
					$("#textarea").attr("data-length", 500)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if(idata[domain+"_glitch"]){
 | 
			
		||||
				$("#local-button").removeClass("hide")
 | 
			
		||||
			}
 | 
			
		||||
			var profimg = acct.prof;
 | 
			
		||||
			localStorage.setItem("prof_" + key, profimg);
 | 
			
		||||
			console.log(profimg);
 | 
			
		||||
			if(!profimg){
 | 
			
		||||
				profimg="../../img/missing.svg";
 | 
			
		||||
			}
 | 
			
		||||
			$("#acct-sel-prof").attr("src",profimg);
 | 
			
		||||
			console.log(domain);
 | 
			
		||||
			if(domain){
 | 
			
		||||
				var cc="("+domain+")";
 | 
			
		||||
			}else{
 | 
			
		||||
				var cc="";
 | 
			
		||||
			}
 | 
			
		||||
			$("#toot-post-btn").text(lang.lang_toot+cc);
 | 
			
		||||
			if(acct.background && acct.background!="def" && acct.text && acct.text!="def"){
 | 
			
		||||
				$("#toot-post-btn").removeClass("indigo");
 | 
			
		||||
				$("#toot-post-btn").css("background-color","#"+acct.background);
 | 
			
		||||
				$("#toot-post-btn").css("color",acct.text);
 | 
			
		||||
			}else{
 | 
			
		||||
			}
 | 
			
		||||
			if(domain=="kirishima.cloud"){
 | 
			
		||||
				$("#faicon-btn").show();
 | 
			
		||||
			}else{
 | 
			
		||||
				$("#faicon-btn").hide();
 | 
			
		||||
			}
 | 
			
		||||
			if(domain=="imastodon.net"){
 | 
			
		||||
				trendTag();
 | 
			
		||||
			}else{
 | 
			
		||||
				$("#trendtag").html("");
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			sel = "";
 | 
			
		||||
	let obj = acctList
 | 
			
		||||
	//if (!obj) obj = JSON.parse(localStorage.getItem('multi'))
 | 
			
		||||
	let template = ''
 | 
			
		||||
	//StringなのはlocalStorageがStringしか返さないから
 | 
			
		||||
	let lastUsed = '0'
 | 
			
		||||
	if (localStorage.getItem('mainuse') == 'main') {
 | 
			
		||||
		lastUsed = localStorage.getItem('main')
 | 
			
		||||
	} else if (localStorage.getItem('last-use')) {
 | 
			
		||||
		lastUsed = localStorage.getItem('last-use')
 | 
			
		||||
		if (lastUsed == 'webview' || lastUsed == 'noauth') {
 | 
			
		||||
			lastUsed = '0'
 | 
			
		||||
		}
 | 
			
		||||
		templete = '<option value="' + key + '" data-icon="' + acct.prof +
 | 
			
		||||
			'" class="left circle" ' + sel + '>' + acct.user + '@' + acct.domain +
 | 
			
		||||
			'</option>';
 | 
			
		||||
		$(".acct-sel").append(templete);
 | 
			
		||||
		
 | 
			
		||||
	});
 | 
			
		||||
		$("#src-acct-sel").append('<option value="tootsearch">Tootsearch</option>');
 | 
			
		||||
		$("#add-acct-sel").append('<option value="noauth">'+lang.lang_login_noauth+'</option><option value="webview">Twitter</option>');
 | 
			
		||||
	} else {
 | 
			
		||||
		lastUsed = '0'
 | 
			
		||||
	}
 | 
			
		||||
	$('select').material_select('update');
 | 
			
		||||
	parseColumn();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//バージョンエンコ
 | 
			
		||||
function enc(ver){
 | 
			
		||||
    var ver = ver.replace( /\s/g , "" );
 | 
			
		||||
    var ver = ver.replace( /\(/g , "-" );
 | 
			
		||||
    var ver = ver.replace( /\)/g , "" );
 | 
			
		||||
    var ver = ver.replace( /\[/g , "_" );
 | 
			
		||||
    var ver = ver.replace( /\]/g , "" );
 | 
			
		||||
    return ver;
 | 
			
		||||
	let sel
 | 
			
		||||
	if (obj.length < 1) {
 | 
			
		||||
		document.querySelector('#src-acct-sel').innerHTML = '<option value="tootsearch">Tootsearch</option>'
 | 
			
		||||
		document.querySelector('#add-acct-sel').innerHTML = `<option value="noauth">${lang.lang_login_noauth}</option>`
 | 
			
		||||
	} else {
 | 
			
		||||
		for (let i = 0; i < obj.length; i++) {
 | 
			
		||||
			const acct = obj[i]
 | 
			
		||||
			const strKey = i.toString()
 | 
			
		||||
			if (strKey == lastUsed) {
 | 
			
		||||
				sel = 'selected'
 | 
			
		||||
				const domain = acct.domain
 | 
			
		||||
				const letters = idata[`${domain}_letters`]
 | 
			
		||||
				const textarea = document.querySelector('#textarea')
 | 
			
		||||
				if (letters) {
 | 
			
		||||
					textarea.setAttribute('data-length', letters)
 | 
			
		||||
				} else {
 | 
			
		||||
					//手動でアカマネで変えれちゃうから
 | 
			
		||||
					const maxLetters = localStorage.getItem(`${domain}_letters`)
 | 
			
		||||
					if (maxLetters > 0) {
 | 
			
		||||
						textarea.setAttribute('data-length', maxLetters)
 | 
			
		||||
					} else {
 | 
			
		||||
						textarea.setAttribute('data-length', 500)
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				if (idata[`${domain}_glitch`]) {
 | 
			
		||||
					document.querySelector('#local-button').classList.remove('hide')
 | 
			
		||||
				}
 | 
			
		||||
				let profimg = acct.prof
 | 
			
		||||
				if (!profimg) {
 | 
			
		||||
					profimg = '../../img/missing.svg'
 | 
			
		||||
				}
 | 
			
		||||
				document.querySelector('#acct-sel-prof').setAttribute('src', profimg)
 | 
			
		||||
				let cc = ''
 | 
			
		||||
				if (domain) {
 | 
			
		||||
					cc = `(${domain})`
 | 
			
		||||
				}
 | 
			
		||||
				const tpb = document.querySelector('#toot-post-btn')
 | 
			
		||||
				tpb.innerText = lang.lang_toot + cc
 | 
			
		||||
				if (acct.background && acct.background != 'def' && acct.text && acct.text != 'def') {
 | 
			
		||||
					tpb.classList.remove('indigo')
 | 
			
		||||
					tpb.style.backgroundColor = `#${acct.background}`
 | 
			
		||||
					tpb.style.color = `#${acct.text}`
 | 
			
		||||
				}
 | 
			
		||||
				if (domain == 'imastodon.net') {
 | 
			
		||||
					trendTag()
 | 
			
		||||
				} else {
 | 
			
		||||
					if (document.querySelector('#trendtag')) document.querySelector('#trendtag').innerHTML = ''
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				sel = ''
 | 
			
		||||
			}
 | 
			
		||||
			template = template + `
 | 
			
		||||
			<option value="${strKey}" data-icon="${acct.prof}" class="left circle" ${sel}>@${acct.user}@${acct.domain}
 | 
			
		||||
			</option>
 | 
			
		||||
			`
 | 
			
		||||
		}
 | 
			
		||||
		const forSrc = template + '<option value="tootsearch">Tootsearch</option>'
 | 
			
		||||
		const forAdd = template + `
 | 
			
		||||
			<option value="noauth">${lang.lang_login_noauth}</option>
 | 
			
		||||
			<option value="webview">Twitter</option>
 | 
			
		||||
		`
 | 
			
		||||
		const forDir = template + `<option value="noauth">${lang.lang_login_noauth}</option>`
 | 
			
		||||
		document.querySelector('#post-acct-sel').innerHTML = template
 | 
			
		||||
		document.querySelector('#list-acct-sel').innerHTML = template
 | 
			
		||||
		document.querySelector('#filter-acct-sel').innerHTML = template
 | 
			
		||||
		document.querySelector('#src-acct-sel').innerHTML = forSrc
 | 
			
		||||
		document.querySelector('#add-acct-sel').innerHTML = forAdd
 | 
			
		||||
		document.querySelector('#dir-acct-sel').innerHTML = forDir
 | 
			
		||||
	}
 | 
			
		||||
	const elems = document.querySelectorAll('select')
 | 
			
		||||
	M.FormSelect.init(elems, null)
 | 
			
		||||
}
 | 
			
		||||
//インスタンスティッカー
 | 
			
		||||
function ticker() {
 | 
			
		||||
	var start = "https://toot.app/toot/";
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'GET',
 | 
			
		||||
		headers: {
 | 
			
		||||
			'content-type': 'application/json'
 | 
			
		||||
		},
 | 
			
		||||
	}).then(function(response) {
 | 
			
		||||
		return response.json();
 | 
			
		||||
	}).catch(function(error) {
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}).then(function(json) {
 | 
			
		||||
		if (json.error) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		if(json){
 | 
			
		||||
			localStorage.setItem("ticker", JSON.stringify(json));
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
async function ticker() {
 | 
			
		||||
	const start = 'https://toot-app.thedesk.top/toot/index.php'
 | 
			
		||||
	const json = await getApi(start, null)
 | 
			
		||||
	if (json) localStorage.setItem('ticker', JSON.stringify(json))
 | 
			
		||||
}
 | 
			
		||||
function isMisskey(domain) {
 | 
			
		||||
	return localStorage.getItem(`mode_${domain}`) == 'misskey'
 | 
			
		||||
}
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
//ログアウトします
 | 
			
		||||
function logout(){
 | 
			
		||||
	localStorage.removeItem("acct_"+ acct_id + "_at");
 | 
			
		||||
	localStorage.removeItem("domain_"+acct_id);
 | 
			
		||||
	location.href="index.html";
 | 
			
		||||
	todc();
 | 
			
		||||
}
 | 
			
		||||
function logout() {
 | 
			
		||||
	localStorage.removeItem(`acct_${acct_id}_at`)
 | 
			
		||||
	localStorage.removeItem(`domain_${acct_id}`)
 | 
			
		||||
	location.href = 'index.html'
 | 
			
		||||
	todc()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,180 +1,224 @@
 | 
			
		||||
//プラットフォーム別 最後に読むやつ
 | 
			
		||||
//リンクを外部で開くか内部で出すか 
 | 
			
		||||
 $(document).on('click', 'a', e => {
 | 
			
		||||
  	var $a = $(e.target);
 | 
			
		||||
  	var url = $a.attr('href');
 | 
			
		||||
  	if (!url) {
 | 
			
		||||
  		var url = $a.parent().attr('href');
 | 
			
		||||
	  }
 | 
			
		||||
	  var urls=[];
 | 
			
		||||
	  if(url){
 | 
			
		||||
		urls = url.match(/https?:\/\/(.+)/);
 | 
			
		||||
//リンクを外部で開くか内部で出すか
 | 
			
		||||
$(document).on('click', 'a', e => {
 | 
			
		||||
	var $a = $(e.target)
 | 
			
		||||
	var url = $a.attr('href')
 | 
			
		||||
	if (!url) {
 | 
			
		||||
		var url = $a.parent().attr('href')
 | 
			
		||||
	}
 | 
			
		||||
	var urls = []
 | 
			
		||||
	if (url) {
 | 
			
		||||
		urls = url.match(/https?:\/\/(.+)/)
 | 
			
		||||
		//トゥートのURLぽかったら
 | 
			
		||||
		toot = url.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
 | 
			
		||||
		//タグのURLぽかったら
 | 
			
		||||
			var tags=[];
 | 
			
		||||
			tags = url.match(
 | 
			
		||||
				/https:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
 | 
			
		||||
			);
 | 
			
		||||
		//メンションっぽかったら
 | 
			
		||||
		var ats=[];
 | 
			
		||||
			ats = url.match(
 | 
			
		||||
				/https:\/\/([-a-zA-Z0-9@.]+)\/@([-_.!~*\'()a-zA-Z0-9;\/?:\&=+\$,%#]+)/
 | 
			
		||||
			);
 | 
			
		||||
		console.log(toot);
 | 
			
		||||
		if(toot){
 | 
			
		||||
			if(toot[1]){
 | 
			
		||||
				var acct_id=$a.parent().attr("data-acct");
 | 
			
		||||
				if(!acct_id){
 | 
			
		||||
					acct_id=0;
 | 
			
		||||
				}
 | 
			
		||||
				$a.parent().addClass("loadp")
 | 
			
		||||
				$a.parent().text("Loading...")
 | 
			
		||||
				detEx(url,acct_id);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		}else if(tags){
 | 
			
		||||
			if(tags[2]){
 | 
			
		||||
				tagShow(tags[2]);
 | 
			
		||||
				Materialize.toast('<a class="btn-flat toast-action" href="detEx(\''+url+'\')">Open in browser</a>', 86400);
 | 
			
		||||
			}
 | 
			
		||||
		}else if(ats){
 | 
			
		||||
			console.log(ats);
 | 
			
		||||
			if(ats[2]){
 | 
			
		||||
				if(ats[1]!="quesdon.rinsuki.net"){
 | 
			
		||||
					udgEx(ats[2]+"@"+ats[1],"main");
 | 
			
		||||
					return false
 | 
			
		||||
				}else{
 | 
			
		||||
					const {
 | 
			
		||||
						shell
 | 
			
		||||
					} = require('electron');
 | 
			
		||||
		  
 | 
			
		||||
					shell.openExternal(url);
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				
 | 
			
		||||
			}
 | 
			
		||||
		}else{
 | 
			
		||||
		//hrefがhttp/httpsならブラウザで
 | 
			
		||||
		if(urls){
 | 
			
		||||
		if (urls[0]) {
 | 
			
		||||
			const {shell} = require('electron');
 | 
			
		||||
			if(~url.indexOf("thedeks.top")){
 | 
			
		||||
				//alert("If you recieve this alert, let the developer(Cutls@kirishima.cloud) know it with a screenshot.");
 | 
			
		||||
				url="https://thedesk.top";
 | 
			
		||||
			}
 | 
			
		||||
			shell.openExternal(url);
 | 
			
		||||
		} else {
 | 
			
		||||
  
 | 
			
		||||
			location.href = url;
 | 
			
		||||
		toot = url.match(/https:\/\/([^+_]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/)
 | 
			
		||||
		if (!toot) {
 | 
			
		||||
			//Pleroma対策
 | 
			
		||||
			toot = url.match(/https:\/\/([^+_]+)\/users\/([a-zA-Z0-9_]+)\/statuses\/([0-9]+)/)
 | 
			
		||||
		}
 | 
			
		||||
		//タグのURLぽかったら
 | 
			
		||||
		var tags = []
 | 
			
		||||
		tags = url.match(/https:\/\/([^+_]+)\/tags\/([_a-zA-Z0-9\&=+\%]+)/)
 | 
			
		||||
		//メンションっぽかったら
 | 
			
		||||
		var ats = []
 | 
			
		||||
		ats = url.match(/https:\/\/([^+_]+)\/@([_a-zA-Z0-9\&=+\%]+)/)
 | 
			
		||||
		if (toot) {
 | 
			
		||||
			if (toot[1]) {
 | 
			
		||||
				var acct_id = $a.parent().attr('data-acct')
 | 
			
		||||
				if (!acct_id) {
 | 
			
		||||
					acct_id = 0
 | 
			
		||||
				}
 | 
			
		||||
				$a.parent().addClass('loadp')
 | 
			
		||||
				$a.parent().text('Loading...')
 | 
			
		||||
				detEx(url, acct_id)
 | 
			
		||||
			}
 | 
			
		||||
		} else if (tags) {
 | 
			
		||||
			if (tags[2]) {
 | 
			
		||||
				var acct_id = $a.parent().attr('data-acct')
 | 
			
		||||
				if (!acct_id) {
 | 
			
		||||
					acct_id = 0
 | 
			
		||||
				}
 | 
			
		||||
				tl('tag', decodeURI(tags[2]), acct_id, 'add')
 | 
			
		||||
			}
 | 
			
		||||
		} else if (ats) {
 | 
			
		||||
			if (ats[2]) {
 | 
			
		||||
				//Quesdon判定
 | 
			
		||||
				if (!~ats[2].indexOf('@')) {
 | 
			
		||||
					udgEx(url, 'main')
 | 
			
		||||
					return false
 | 
			
		||||
				} else {
 | 
			
		||||
					if(pwa) {
 | 
			
		||||
						return true
 | 
			
		||||
					} else {
 | 
			
		||||
						postMessage(['openUrl', url], '*')
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			if(pwa) {
 | 
			
		||||
				return true
 | 
			
		||||
			}
 | 
			
		||||
			//hrefがhttp/httpsならブラウザで
 | 
			
		||||
			if (urls) {
 | 
			
		||||
				if (urls[0]) {
 | 
			
		||||
					if (~url.indexOf('thedeks.top')) {
 | 
			
		||||
						//alert("If you recieve this alert, let the developer(Cutls@kirishima.cloud) know it with a screenshot.");
 | 
			
		||||
						url = 'https://thedesk.top'
 | 
			
		||||
					}
 | 
			
		||||
					postMessage(['openUrl', url], '*')
 | 
			
		||||
				} else {
 | 
			
		||||
					location.href = url
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				location.href = url
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}else{
 | 
			
		||||
		location.href = url;
 | 
			
		||||
	}
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
  	return false;
 | 
			
		||||
  });
 | 
			
		||||
  
 | 
			
		||||
  //よく使うライブラリ
 | 
			
		||||
  /*マルチバイト用切り出し*/
 | 
			
		||||
  $.isSurrogatePear = function(upper, lower) {
 | 
			
		||||
  	return 0xD800 <= upper && upper <= 0xDBFF && 0xDC00 <= lower && lower <= 0xDFFF;
 | 
			
		||||
  };
 | 
			
		||||
  $.mb_strlen = function(str) {
 | 
			
		||||
  	var ret = 0;
 | 
			
		||||
  	for (var i = 0; i < str.length; i++, ret++) {
 | 
			
		||||
  		var upper = str.charCodeAt(i);
 | 
			
		||||
  		var lower = str.length > (i + 1) ? str.charCodeAt(i + 1) : 0;
 | 
			
		||||
  		if ($.isSurrogatePear(upper, lower)) {
 | 
			
		||||
  			i++;
 | 
			
		||||
  		}
 | 
			
		||||
  	}
 | 
			
		||||
  	return ret;
 | 
			
		||||
  };
 | 
			
		||||
  $.mb_substr = function(str, begin, end) {
 | 
			
		||||
  	var ret = '';
 | 
			
		||||
  	for (var i = 0, len = 0; i < str.length; i++, len++) {
 | 
			
		||||
  		var upper = str.charCodeAt(i);
 | 
			
		||||
  		var lower = str.length > (i + 1) ? str.charCodeAt(i + 1) : 0;
 | 
			
		||||
  		var s = '';
 | 
			
		||||
  		if ($.isSurrogatePear(upper, lower)) {
 | 
			
		||||
  			i++;
 | 
			
		||||
  			s = String.fromCharCode(upper, lower);
 | 
			
		||||
  		} else {
 | 
			
		||||
  			s = String.fromCharCode(upper);
 | 
			
		||||
  		}
 | 
			
		||||
  		if (begin <= len && len < end) {
 | 
			
		||||
  			ret += s;
 | 
			
		||||
  		}
 | 
			
		||||
  	}
 | 
			
		||||
  	return ret;
 | 
			
		||||
  };
 | 
			
		||||
	return false
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
  //コピー
 | 
			
		||||
  function execCopy(string){
 | 
			
		||||
	var temp = $("#copy");
 | 
			
		||||
	temp.val(string);
 | 
			
		||||
	temp.select();
 | 
			
		||||
	var result = document.execCommand('copy');
 | 
			
		||||
	return result;
 | 
			
		||||
  }
 | 
			
		||||
  //Nano
 | 
			
		||||
function nano(){
 | 
			
		||||
    var electron = require("electron");
 | 
			
		||||
    var ipc = electron.ipcRenderer;
 | 
			
		||||
    ipc.send('nano', "");
 | 
			
		||||
//よく使うライブラリ
 | 
			
		||||
 | 
			
		||||
//コピー
 | 
			
		||||
function execCopy(string) {
 | 
			
		||||
	postMessage(['copy', string], '*')
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
function progshow(e) {
 | 
			
		||||
	if (e.lengthComputable) {
 | 
			
		||||
	  var percent = e.loaded / e.total;
 | 
			
		||||
	  console.log(percent * 100);
 | 
			
		||||
	  $("#imgsel").hide();
 | 
			
		||||
	  if(percent<1){
 | 
			
		||||
		 $("#imgup").text(Math.floor(percent*100)+"%");
 | 
			
		||||
	  }else{
 | 
			
		||||
		$("#imgup").text(lang.lang_progress);
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var electron = require("electron");
 | 
			
		||||
  var ipc = electron.ipcRenderer;
 | 
			
		||||
  ipc.on('reload', function (event, arg) {
 | 
			
		||||
	location.reload();
 | 
			
		||||
})
 | 
			
		||||
ipc.on('mess', function (event, arg) {
 | 
			
		||||
    if(arg=="unzip"){
 | 
			
		||||
		if(lang=="ja"){
 | 
			
		||||
			$("body").text("アップデートを展開中です。");
 | 
			
		||||
		}else{
 | 
			
		||||
			$("body").text("Unzipping...");
 | 
			
		||||
		var percent = e.loaded / e.total
 | 
			
		||||
		console.log('Progress: ' + percent * 100)
 | 
			
		||||
		$('#imgsel').hide()
 | 
			
		||||
		if (percent < 1) {
 | 
			
		||||
			$('#imgup').text(Math.floor(percent * 100) + '%')
 | 
			
		||||
		} else {
 | 
			
		||||
			$('#imgup').text(lang.lang_progress)
 | 
			
		||||
		}
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
//Native Notf
 | 
			
		||||
ipc.on('shownotf', function (event, args) {
 | 
			
		||||
    if(args["type"]=="toot"){
 | 
			
		||||
		details(id, acct_id)
 | 
			
		||||
	}else  if(args["type"]=="userdata"){
 | 
			
		||||
		udg(user, acct_id)
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
function opendev(){
 | 
			
		||||
	var webview = document.getElementById("webview");
 | 
			
		||||
	webview.openDevTools();
 | 
			
		||||
}
 | 
			
		||||
function opendev() {
 | 
			
		||||
	var webview = document.getElementById('webview')
 | 
			
		||||
	webview.openDevTools()
 | 
			
		||||
	/*webview.sendInputEvent({
 | 
			
		||||
		type: "keyDown",
 | 
			
		||||
		keyCode: '2'
 | 
			
		||||
	  });
 | 
			
		||||
	  */
 | 
			
		||||
}
 | 
			
		||||
var soundFile
 | 
			
		||||
function playSound() {
 | 
			
		||||
	window.AudioContext = window.AudioContext || window.webkitAudioContext
 | 
			
		||||
	if (soundFile) {
 | 
			
		||||
		soundFile.stop()
 | 
			
		||||
	}
 | 
			
		||||
	context = new AudioContext()
 | 
			
		||||
	context.createBufferSource().start(0)
 | 
			
		||||
	context.decodeAudioData(request.response, function(buf) {
 | 
			
		||||
		//console.log("Playing:" , source)
 | 
			
		||||
		source.buffer = buf
 | 
			
		||||
		source.loop = false
 | 
			
		||||
	})
 | 
			
		||||
	source = context.createBufferSource()
 | 
			
		||||
	volumeControl = context.createGain()
 | 
			
		||||
	source.connect(volumeControl)
 | 
			
		||||
	volumeControl.connect(context.destination)
 | 
			
		||||
	var cvol = localStorage.getItem('customVol')
 | 
			
		||||
	if (cvol) {
 | 
			
		||||
		vol = cvol
 | 
			
		||||
	} else {
 | 
			
		||||
		vol = 0.8
 | 
			
		||||
	}
 | 
			
		||||
	volumeControl.gain.value = vol
 | 
			
		||||
	source.start(0)
 | 
			
		||||
	soundFile = source
 | 
			
		||||
 | 
			
		||||
var webviewDom = document.getElementById('webview');
 | 
			
		||||
const {
 | 
			
		||||
	shell
 | 
			
		||||
} = require('electron');
 | 
			
		||||
webviewDom.addEventListener('new-window', function(e) {
 | 
			
		||||
    shell.openExternal(e.url);
 | 
			
		||||
});
 | 
			
		||||
	function newFunction() {
 | 
			
		||||
		var source
 | 
			
		||||
		return source
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function nano() {
 | 
			
		||||
	postMessage(['nano', null], '*')
 | 
			
		||||
}
 | 
			
		||||
onmessage = function(e) {
 | 
			
		||||
	console.log(e)
 | 
			
		||||
	if (e.data[0] == 'details') {
 | 
			
		||||
		details(e.data[1][0], e.data[1][1])
 | 
			
		||||
	} else if (e.data[0] == 'udg') {
 | 
			
		||||
		udg(e.data[1][0], e.data[1][1])
 | 
			
		||||
	} else if (e.data[0] == 'media') {
 | 
			
		||||
		media(e.data[1][0], e.data[1][1], e.data[1][2], e.data[1][3])
 | 
			
		||||
	} else if (e.data[0] == 'post') {
 | 
			
		||||
		post('pass')
 | 
			
		||||
	} else if (e.data[0] == 'toastSaved') {
 | 
			
		||||
		var showTxt = `${lang.lang_img_DLDone}${
 | 
			
		||||
			e.data[1][0]
 | 
			
		||||
		}<button class="btn-flat toast-action" onclick="openFinder('${e.data[1][1]}')">Show</button>`
 | 
			
		||||
		M.toast({ html: showTxt, displayLength: 5000 })
 | 
			
		||||
	} else if (e.data[0] == 'parseColumn') {
 | 
			
		||||
		parseColumn(e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'exportSettingsCore') {
 | 
			
		||||
		var exp = exportSettingsCore()
 | 
			
		||||
		postMessage(['exportSettingsCoreComplete', [e.data[1], exp]], '*')
 | 
			
		||||
	} else if (e.data[0] == 'importSettingsCore') {
 | 
			
		||||
		importSettingsCore(e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'fontList') {
 | 
			
		||||
		fontList(e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'customSoundSave') {
 | 
			
		||||
		customSoundSave(e.data[1][0], e.data[1][1])
 | 
			
		||||
	} else if (e.data[0] == 'ctLoadCore') {
 | 
			
		||||
		ctLoadCore(e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'ctLoad') {
 | 
			
		||||
		ctLoad()
 | 
			
		||||
	} else if (e.data[0] == 'customConnect') {
 | 
			
		||||
		customConnect(e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'clearCustomImport') {
 | 
			
		||||
		clearCustomImport()
 | 
			
		||||
	} else if (e.data[0] == 'npCore') {
 | 
			
		||||
		npCore(e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'renderMem') {
 | 
			
		||||
		renderMem(e.data[1][0], e.data[1][1], e.data[1][2])
 | 
			
		||||
	} else if (e.data[0] == 'updateProg') {
 | 
			
		||||
		updateProg(e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'updateMess') {
 | 
			
		||||
		updateMess(e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'renderAbout') {
 | 
			
		||||
		renderAbout(e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'asRead') {
 | 
			
		||||
		asRead()
 | 
			
		||||
	} else if (e.data[0] == 'asReadEnd') {
 | 
			
		||||
		asReadEnd()
 | 
			
		||||
	} else if (e.data[0] == 'accessibility') {
 | 
			
		||||
		console.log('atrue')
 | 
			
		||||
		$('body').addClass('accessibility')
 | 
			
		||||
		$('.window-title').before('<div class="accessMark">Screen Reader Optimized</div>')
 | 
			
		||||
	} else if (e.data[0] == 'logData') {
 | 
			
		||||
		$('#logs').val(e.data[1])
 | 
			
		||||
		var obj = document.getElementById('logs')
 | 
			
		||||
		obj.scrollTop = obj.scrollHeight
 | 
			
		||||
	} else if (e.data[0] == 'alert') {
 | 
			
		||||
		Swal.fire({
 | 
			
		||||
			type: 'info',
 | 
			
		||||
			title: e.data[1]
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/* PWA */
 | 
			
		||||
if(pwa) {
 | 
			
		||||
	function postMessage(e) {
 | 
			
		||||
		if (e[0] == 'openUrl') {
 | 
			
		||||
			urls = e[1].match(/https?:\/\/(.+)/)
 | 
			
		||||
			if (urls) {
 | 
			
		||||
				Swal.fire({
 | 
			
		||||
					title: 'Open URL',
 | 
			
		||||
					icon: 'info',
 | 
			
		||||
					html:
 | 
			
		||||
					  `If you are OK, click: <a href="${urls[0]}" target="_blank" class="btn waves-effect">Here</a>`,
 | 
			
		||||
					showCloseButton: false,
 | 
			
		||||
					showCancelButton: true,
 | 
			
		||||
					focusConfirm: false,
 | 
			
		||||
					confirmButtonText: 'Close'
 | 
			
		||||
				  })
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,3 +1 @@
 | 
			
		||||
//jQuery読む
 | 
			
		||||
window.jQuery = window.$ = require('./js/common/jquery.js');
 | 
			
		||||
var Hammer = require('./js/common/hammer.min.js');
 | 
			
		||||
@@ -1,160 +1,321 @@
 | 
			
		||||
//jQuery読む
 | 
			
		||||
window.jQuery = window.$ = require('../../js/common/jquery.js');
 | 
			
		||||
var Hammer = require('../../js/common/hammer.min.js');
 | 
			
		||||
$.strip_tags = function(str, allowed) {
 | 
			
		||||
	if(!str){
 | 
			
		||||
		return "";
 | 
			
		||||
$.strip_tags = function (str, allowed) {
 | 
			
		||||
	if (!str) {
 | 
			
		||||
		return ''
 | 
			
		||||
	}
 | 
			
		||||
  	allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || [])
 | 
			
		||||
  		.join('');
 | 
			
		||||
  	var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
 | 
			
		||||
  		commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
 | 
			
		||||
  	return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
 | 
			
		||||
  		return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
 | 
			
		||||
  	});
 | 
			
		||||
  };
 | 
			
		||||
  function escapeHTML(str) {
 | 
			
		||||
	  if(!str){
 | 
			
		||||
		  return "";
 | 
			
		||||
	  }
 | 
			
		||||
	return str.replace(/&/g, '&')
 | 
			
		||||
			  .replace(/</g, '<')
 | 
			
		||||
			  .replace(/>/g, '>')
 | 
			
		||||
			  .replace(/"/g, '"')
 | 
			
		||||
			  .replace(/'/g, ''');
 | 
			
		||||
  }
 | 
			
		||||
  //PHPのnl2brと同様
 | 
			
		||||
	allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('')
 | 
			
		||||
	var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>?/gi,
 | 
			
		||||
		commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi
 | 
			
		||||
	return str.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
 | 
			
		||||
		return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
function escapeHTML(str) {
 | 
			
		||||
	if (!str) {
 | 
			
		||||
		return ''
 | 
			
		||||
	}
 | 
			
		||||
	return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''')
 | 
			
		||||
}
 | 
			
		||||
//PHPのnl2brと同様
 | 
			
		||||
function nl2br(str) {
 | 
			
		||||
	if(!str){
 | 
			
		||||
		return "";
 | 
			
		||||
	if (!str) {
 | 
			
		||||
		return ''
 | 
			
		||||
	}
 | 
			
		||||
    str = str.replace(/\r\n/g, "<br />");
 | 
			
		||||
	str = str.replace(/(\n|\r)/g, "<br />");
 | 
			
		||||
    return str;
 | 
			
		||||
	str = str.replace(/\r\n/g, '<br />')
 | 
			
		||||
	str = str.replace(/(\n|\r)/g, '<br />')
 | 
			
		||||
	return str
 | 
			
		||||
}
 | 
			
		||||
function formattime(date){
 | 
			
		||||
	var str=date.getFullYear()+"-";
 | 
			
		||||
	if(date.getMonth()+1<10){
 | 
			
		||||
		str=str+"0"+(date.getMonth()+1)+"-";
 | 
			
		||||
	}else{
 | 
			
		||||
		str=str+(date.getMonth()+1)+"-";
 | 
			
		||||
function br2nl(str) {
 | 
			
		||||
	if (!str) {
 | 
			
		||||
		return ''
 | 
			
		||||
	}
 | 
			
		||||
	if(date.getDate()<10){
 | 
			
		||||
		str=str+"0"+date.getDate()
 | 
			
		||||
	}else{
 | 
			
		||||
		str=str+date.getDate()
 | 
			
		||||
	}
 | 
			
		||||
	str=str+"T";
 | 
			
		||||
	if(date.getHours()<10){
 | 
			
		||||
		str=str+"0"+date.getHours()+":"
 | 
			
		||||
	}else{
 | 
			
		||||
		str=str+date.getHours()+":"
 | 
			
		||||
	}
 | 
			
		||||
	if(date.getMinutes()<10){
 | 
			
		||||
		str=str+"0"+date.getMinutes()
 | 
			
		||||
	}else{
 | 
			
		||||
		str=str+date.getMinutes()
 | 
			
		||||
	}
 | 
			
		||||
	return str;
 | 
			
		||||
	str = str.replace(/<br \/>/g, '\r\n')
 | 
			
		||||
	return str
 | 
			
		||||
}
 | 
			
		||||
function formattimeutc(date){
 | 
			
		||||
	var str=date.getUTCFullYear()+"-";
 | 
			
		||||
	if(date.getUTCMonth()+1<10){
 | 
			
		||||
		str=str+"0"+(date.getUTCMonth()+1)+"-";
 | 
			
		||||
	}else{
 | 
			
		||||
		str=str+(date.getUTCMonth()+1)+"-";
 | 
			
		||||
function formattime(date) {
 | 
			
		||||
	var str = date.getFullYear() + '-'
 | 
			
		||||
	if (date.getMonth() + 1 < 10) {
 | 
			
		||||
		str = str + '0' + (date.getMonth() + 1) + '-'
 | 
			
		||||
	} else {
 | 
			
		||||
		str = str + (date.getMonth() + 1) + '-'
 | 
			
		||||
	}
 | 
			
		||||
	if(date.getUTCDate()<10){
 | 
			
		||||
		str=str+"0"+date.getUTCDate()
 | 
			
		||||
	}else{
 | 
			
		||||
		str=str+date.getUTCDate()
 | 
			
		||||
	if (date.getDate() < 10) {
 | 
			
		||||
		str = str + '0' + date.getDate()
 | 
			
		||||
	} else {
 | 
			
		||||
		str = str + date.getDate()
 | 
			
		||||
	}
 | 
			
		||||
	str=str+"T";
 | 
			
		||||
	if(date.getUTCHours()<10){
 | 
			
		||||
		str=str+"0"+date.getUTCHours()+":"
 | 
			
		||||
	}else{
 | 
			
		||||
		str=str+date.getUTCHours()+":"
 | 
			
		||||
	str = str + 'T'
 | 
			
		||||
	if (date.getHours() < 10) {
 | 
			
		||||
		str = str + '0' + date.getHours() + ':'
 | 
			
		||||
	} else {
 | 
			
		||||
		str = str + date.getHours() + ':'
 | 
			
		||||
	}
 | 
			
		||||
	if(date.getUTCMinutes()<10){
 | 
			
		||||
		str=str+"0"+date.getUTCMinutes()
 | 
			
		||||
	}else{
 | 
			
		||||
		str=str+date.getUTCMinutes()
 | 
			
		||||
	if (date.getMinutes() < 10) {
 | 
			
		||||
		str = str + '0' + date.getMinutes()
 | 
			
		||||
	} else {
 | 
			
		||||
		str = str + date.getMinutes()
 | 
			
		||||
	}
 | 
			
		||||
	return str;
 | 
			
		||||
	return escapeHTML(str)
 | 
			
		||||
}
 | 
			
		||||
var electron = require("electron");
 | 
			
		||||
var ipc = electron.ipcRenderer;
 | 
			
		||||
ipc.send('custom-css-request', "");
 | 
			
		||||
ipc.on('custom-css-response', function (event, arg) {
 | 
			
		||||
	if(arg==""){ return false; }
 | 
			
		||||
	var styleNode = document.createElement("style");
 | 
			
		||||
	styleNode.setAttribute("type","text/css")
 | 
			
		||||
 | 
			
		||||
	var content = document.createTextNode(arg)
 | 
			
		||||
	styleNode.append(content)
 | 
			
		||||
	document.getElementsByTagName("head")[0].append(styleNode)
 | 
			
		||||
})
 | 
			
		||||
ipc.on('theme-css-response', function (event, arg) {
 | 
			
		||||
	if(arg==""){ return false; }
 | 
			
		||||
	var styleNode = document.createElement("style");
 | 
			
		||||
	styleNode.setAttribute("type","text/css")
 | 
			
		||||
 | 
			
		||||
	var content = document.createTextNode(arg)
 | 
			
		||||
	styleNode.append(content)
 | 
			
		||||
	document.getElementsByTagName("head")[0].append(styleNode)
 | 
			
		||||
})
 | 
			
		||||
function makeCID(){
 | 
			
		||||
	return randomStr(8)+"-"+randomStr(4)+"-"+randomStr(4)+"-"+randomStr(4)+"-"+randomStr(12);
 | 
			
		||||
function formattimeutc(date) {
 | 
			
		||||
	var str = date.getUTCFullYear() + '-'
 | 
			
		||||
	if (date.getUTCMonth() + 1 < 10) {
 | 
			
		||||
		str = str + '0' + (date.getUTCMonth() + 1) + '-'
 | 
			
		||||
	} else {
 | 
			
		||||
		str = str + (date.getUTCMonth() + 1) + '-'
 | 
			
		||||
	}
 | 
			
		||||
	if (date.getUTCDate() < 10) {
 | 
			
		||||
		str = str + '0' + date.getUTCDate()
 | 
			
		||||
	} else {
 | 
			
		||||
		str = str + date.getUTCDate()
 | 
			
		||||
	}
 | 
			
		||||
	str = str + 'T'
 | 
			
		||||
	if (date.getUTCHours() < 10) {
 | 
			
		||||
		str = str + '0' + date.getUTCHours() + ':'
 | 
			
		||||
	} else {
 | 
			
		||||
		str = str + date.getUTCHours() + ':'
 | 
			
		||||
	}
 | 
			
		||||
	if (date.getUTCMinutes() < 10) {
 | 
			
		||||
		str = str + '0' + date.getUTCMinutes()
 | 
			
		||||
	} else {
 | 
			
		||||
		str = str + date.getUTCMinutes()
 | 
			
		||||
	}
 | 
			
		||||
	return escapeHTML(str)
 | 
			
		||||
}
 | 
			
		||||
function randomStr(l){
 | 
			
		||||
postMessage(['sendSinmpleIpc', 'custom-css-request'], '*')
 | 
			
		||||
function makeCID() {
 | 
			
		||||
	let chars = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.split('')
 | 
			
		||||
	for (let i = 0, len = chars.length; i < len; i++) {
 | 
			
		||||
		switch (chars[i]) {
 | 
			
		||||
			case 'x':
 | 
			
		||||
				chars[i] = Math.floor(Math.random() * 16).toString(16)
 | 
			
		||||
				break
 | 
			
		||||
			case 'y':
 | 
			
		||||
				chars[i] = (Math.floor(Math.random() * 4) + 8).toString(16)
 | 
			
		||||
				break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return chars.join('')
 | 
			
		||||
}
 | 
			
		||||
function randomStr(l) {
 | 
			
		||||
	// 生成する文字列に含める文字セット
 | 
			
		||||
	var c = "abcdefghijklmnopqrstuvwxyz0123456789";
 | 
			
		||||
	var cl = c.length;
 | 
			
		||||
	var r = "";
 | 
			
		||||
	for(var i=0; i<l; i++){
 | 
			
		||||
    	r += c[Math.floor(Math.random()*cl)];
 | 
			
		||||
	var c = 'abcdefghijklmnopqrstuvwxyz0123456789'
 | 
			
		||||
	var cl = c.length
 | 
			
		||||
	var r = ''
 | 
			
		||||
	for (var i = 0; i < l; i++) {
 | 
			
		||||
		r += c[Math.floor(Math.random() * cl)]
 | 
			
		||||
	}
 | 
			
		||||
	return r;
 | 
			
		||||
	return r
 | 
			
		||||
}
 | 
			
		||||
function rgbToHex(color)
 | 
			
		||||
{
 | 
			
		||||
  // HEXに変換したものを代入する変数
 | 
			
		||||
  var hex = '';
 | 
			
		||||
  
 | 
			
		||||
  // 第1引数がHEXのとき変換処理は必要ないのでそのままreturn
 | 
			
		||||
  // IE8の場合はjQueryのcss()関数でHEXを返すので除外
 | 
			
		||||
  if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i))
 | 
			
		||||
  {
 | 
			
		||||
    return color;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  // 正規表現
 | 
			
		||||
  var regex = color.match(/^rgb\(([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)$/);
 | 
			
		||||
  
 | 
			
		||||
  // 正規表現でマッチしたとき
 | 
			
		||||
  if (regex)
 | 
			
		||||
  {
 | 
			
		||||
    var rgb =
 | 
			
		||||
    [
 | 
			
		||||
      // RGBからHEXへ変換
 | 
			
		||||
      parseInt(regex[1]).toString(16),
 | 
			
		||||
      parseInt(regex[2]).toString(16),
 | 
			
		||||
      parseInt(regex[3]).toString(16)
 | 
			
		||||
    ];
 | 
			
		||||
    
 | 
			
		||||
    for (var i = 0; i < rgb.length; ++i)
 | 
			
		||||
    {
 | 
			
		||||
      // rgb(1,1,1)のようなときHEXに変換すると1桁になる
 | 
			
		||||
      // 1桁のときは前に0を足す
 | 
			
		||||
      if (rgb[i].length == 1)
 | 
			
		||||
      {
 | 
			
		||||
        rgb[i] = '0' + rgb[i];
 | 
			
		||||
      }
 | 
			
		||||
      hex += rgb[i];
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return hex;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  console.error(color+':第1引数はRGB形式で入力');
 | 
			
		||||
}
 | 
			
		||||
function rgbToHex(color) {
 | 
			
		||||
	// HEXに変換したものを代入する変数
 | 
			
		||||
	var hex = ''
 | 
			
		||||
 | 
			
		||||
	// 第1引数がHEXのとき変換処理は必要ないのでそのままreturn
 | 
			
		||||
	// IE8の場合はjQueryのcss()関数でHEXを返すので除外
 | 
			
		||||
	if (color.match(/^#[a-f\d]{3}$|^#[a-f\d]{6}$/i)) {
 | 
			
		||||
		return color
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 正規表現
 | 
			
		||||
	var regex = color.match(/^rgb\(([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)$/)
 | 
			
		||||
 | 
			
		||||
	// 正規表現でマッチしたとき
 | 
			
		||||
	if (regex) {
 | 
			
		||||
		var rgb = [
 | 
			
		||||
			// RGBからHEXへ変換
 | 
			
		||||
			parseInt(regex[1]).toString(16),
 | 
			
		||||
			parseInt(regex[2]).toString(16),
 | 
			
		||||
			parseInt(regex[3]).toString(16),
 | 
			
		||||
		]
 | 
			
		||||
 | 
			
		||||
		for (var i = 0; i < rgb.length; ++i) {
 | 
			
		||||
			// rgb(1,1,1)のようなときHEXに変換すると1桁になる
 | 
			
		||||
			// 1桁のときは前に0を足す
 | 
			
		||||
			if (rgb[i].length == 1) {
 | 
			
		||||
				rgb[i] = '0' + rgb[i]
 | 
			
		||||
			}
 | 
			
		||||
			hex += rgb[i]
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return hex
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	console.error(color + ':第1引数はRGB形式で入力')
 | 
			
		||||
}
 | 
			
		||||
/*マルチバイト用切り出し*/
 | 
			
		||||
$.isSurrogatePear = function (upper, lower) {
 | 
			
		||||
	return 0xd800 <= upper && upper <= 0xdbff && 0xdc00 <= lower && lower <= 0xdfff
 | 
			
		||||
}
 | 
			
		||||
$.mb_strlen = function (str) {
 | 
			
		||||
	var splitter = new GraphemeSplitter()
 | 
			
		||||
	var arr = splitter.splitGraphemes(str)
 | 
			
		||||
	return arr.length
 | 
			
		||||
}
 | 
			
		||||
$.mb_substr = function (str, begin, end) {
 | 
			
		||||
	//配列にする
 | 
			
		||||
	var splitter = new GraphemeSplitter()
 | 
			
		||||
	var arr = splitter.splitGraphemes(str)
 | 
			
		||||
	var newarr = []
 | 
			
		||||
	for (var i = 0; i < arr.length; i++) {
 | 
			
		||||
		if (i >= begin && i <= end) {
 | 
			
		||||
			newarr.push(arr[i])
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return newarr.join('')
 | 
			
		||||
}
 | 
			
		||||
//ソートするやつ
 | 
			
		||||
function object_array_sort(data, key, order, fn) {
 | 
			
		||||
	var num_a = -1
 | 
			
		||||
	var num_b = 1
 | 
			
		||||
	if (order === 'asc') {
 | 
			
		||||
		num_a = 1
 | 
			
		||||
		num_b = -1
 | 
			
		||||
	}
 | 
			
		||||
	data = data.sort(function (a, b) {
 | 
			
		||||
		var x = a[key]
 | 
			
		||||
		var y = b[key]
 | 
			
		||||
		if (x > y) return num_a
 | 
			
		||||
		if (x < y) return num_b
 | 
			
		||||
		return 0
 | 
			
		||||
	})
 | 
			
		||||
	var arrObj = {}
 | 
			
		||||
	for (var i = 0; i < data.length; i++) {
 | 
			
		||||
		arrObj[data[i]['family']] = data[i]
 | 
			
		||||
	}
 | 
			
		||||
	data = []
 | 
			
		||||
	for (var key in arrObj) {
 | 
			
		||||
		data.push(arrObj[key])
 | 
			
		||||
	}
 | 
			
		||||
	fn(data)
 | 
			
		||||
}
 | 
			
		||||
function setLog(txt1, txt2, txt3) {
 | 
			
		||||
	//url,statuscode,responsetext
 | 
			
		||||
	var text = new Date().toUTCString()
 | 
			
		||||
	text = text + ',' + txt1 + ',' + txt2 + ',' + escapeCsv(txt3)
 | 
			
		||||
	console.error(text)
 | 
			
		||||
	postMessage(['log', text], '*')
 | 
			
		||||
}
 | 
			
		||||
function escapeCsv(str) {
 | 
			
		||||
	if (!str) {
 | 
			
		||||
		return str
 | 
			
		||||
	}
 | 
			
		||||
	var result
 | 
			
		||||
	result = str.toString().replace(/\"/g, '""')
 | 
			
		||||
	if (result.indexOf(',') >= 0) {
 | 
			
		||||
		result = '"' + result + '"'
 | 
			
		||||
	}
 | 
			
		||||
	return result
 | 
			
		||||
}
 | 
			
		||||
function evalAttr(json, attr, lenCk) {
 | 
			
		||||
	if (json[attr]) {
 | 
			
		||||
		if (lenCk) {
 | 
			
		||||
			if (json[attr][0]) {
 | 
			
		||||
				return true
 | 
			
		||||
			} else {
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function statusModel(now) {
 | 
			
		||||
	if (!now) {
 | 
			
		||||
		var now = new Date().toString()
 | 
			
		||||
	}
 | 
			
		||||
	return {
 | 
			
		||||
		id: '',
 | 
			
		||||
		created_at: now,
 | 
			
		||||
		in_reply_to_id: null,
 | 
			
		||||
		in_reply_to_account_id: null,
 | 
			
		||||
		sensitive: false,
 | 
			
		||||
		spoiler_text: '',
 | 
			
		||||
		visibility: 'public',
 | 
			
		||||
		language: 'en',
 | 
			
		||||
		uri: '',
 | 
			
		||||
		url: '',
 | 
			
		||||
		replies_count: 0,
 | 
			
		||||
		reblogs_count: 0,
 | 
			
		||||
		favourites_count: 0,
 | 
			
		||||
		favourited: false,
 | 
			
		||||
		reblogged: false,
 | 
			
		||||
		muted: false,
 | 
			
		||||
		bookmarked: false,
 | 
			
		||||
		pinned: false,
 | 
			
		||||
		content: '<p><i>No status here</i></p>',
 | 
			
		||||
		reblog: null,
 | 
			
		||||
		application: {
 | 
			
		||||
			name: null,
 | 
			
		||||
			website: null,
 | 
			
		||||
		},
 | 
			
		||||
		account: {
 | 
			
		||||
			id: '',
 | 
			
		||||
			username: '',
 | 
			
		||||
			acct: '',
 | 
			
		||||
			display_name: '',
 | 
			
		||||
			locked: false,
 | 
			
		||||
			bot: false,
 | 
			
		||||
			created_at: now,
 | 
			
		||||
			note: '',
 | 
			
		||||
			url: '',
 | 
			
		||||
			avatar: '',
 | 
			
		||||
			avatar_static: '',
 | 
			
		||||
			header: '',
 | 
			
		||||
			header_static: '',
 | 
			
		||||
			followers_count: 0,
 | 
			
		||||
			following_count: 0,
 | 
			
		||||
			statuses_count: 0,
 | 
			
		||||
			last_status_at: now,
 | 
			
		||||
			emojis: [],
 | 
			
		||||
			fields: [],
 | 
			
		||||
		},
 | 
			
		||||
		media_attachments: [],
 | 
			
		||||
		mentions: [],
 | 
			
		||||
		tags: [],
 | 
			
		||||
		card: null,
 | 
			
		||||
		poll: null,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function isFocused(query) {
 | 
			
		||||
	const allTarget = document.querySelectorAll(query)
 | 
			
		||||
	const active = document.activeElement
 | 
			
		||||
	let is = false
 | 
			
		||||
	for (let i = 0; i < allTarget.length; i++) {
 | 
			
		||||
		if (allTarget[i] == active) {
 | 
			
		||||
			is = true
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return is
 | 
			
		||||
}
 | 
			
		||||
function getHeight(query) {
 | 
			
		||||
	const elm = document.querySelector(query)
 | 
			
		||||
	return parseFloat(getComputedStyle(elm, null).height.replace('px', ''))
 | 
			
		||||
}
 | 
			
		||||
function showElm(query) {
 | 
			
		||||
	const allTarget = document.querySelectorAll(query)
 | 
			
		||||
	for (let i = 0; i < allTarget.length; i++) {
 | 
			
		||||
		const target = allTarget[i]
 | 
			
		||||
		target.style.display = 'inherit'
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function setAllClasses(query, className, action) {
 | 
			
		||||
	const allTarget = document.querySelectorAll(query)
 | 
			
		||||
	for (let i = 0; i < allTarget.length; i++) {
 | 
			
		||||
		const target = allTarget[i]
 | 
			
		||||
		if (action == 'add') target.classList.add(className)
 | 
			
		||||
		if (action == 'remove') target.classList.remove(className)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function appendPrepend(query, elm, action) {
 | 
			
		||||
	const allTarget = document.querySelectorAll(query)
 | 
			
		||||
	for (let i = 0; i < allTarget.length; i++) {
 | 
			
		||||
		const target = allTarget[i]
 | 
			
		||||
		if (action == 'prepend') target.insertBefore(elm, target.firstChild)
 | 
			
		||||
		if (action == 'append') target.appendChild(document.createTextNode(elm))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
const sleep = (msec) => new Promise((resolve) => setTimeout(resolve, msec))
 | 
			
		||||
 
 | 
			
		||||
@@ -1,143 +1,263 @@
 | 
			
		||||
 | 
			
		||||
//TL取得
 | 
			
		||||
var websocket
 | 
			
		||||
function tl(data) {
 | 
			
		||||
    var tlid=0;
 | 
			
		||||
    var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
    var type = $("#type-sel").val();
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	var tlid = 0
 | 
			
		||||
	if (websocket) {
 | 
			
		||||
		websocket.close()
 | 
			
		||||
	}
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	var type = $('#type-sel').val()
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	//タグの場合はカラム追加して描画
 | 
			
		||||
		if (!type) {
 | 
			
		||||
			//デフォルト
 | 
			
		||||
			var type = "local";
 | 
			
		||||
		}
 | 
			
		||||
	var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
	$("#notice_nano").text(cap(type, data) + " TL(" + localStorage.getItem(
 | 
			
		||||
		"user_" + acct_id) + "@" + domain + ")");
 | 
			
		||||
	var start = "https://" + domain + "/api/v1/timelines/" + com(type, data);
 | 
			
		||||
	console.log(start);
 | 
			
		||||
	if (!type) {
 | 
			
		||||
		//デフォルト
 | 
			
		||||
		var type = 'local'
 | 
			
		||||
	}
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	$('#notice_nano').text(
 | 
			
		||||
		cap(type, data) + ' TL(' + localStorage.getItem('user_' + acct_id) + '@' + domain + ')'
 | 
			
		||||
	)
 | 
			
		||||
	var start = 'https://' + domain + '/api/v1/timelines/' + com(type, data)
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'GET',
 | 
			
		||||
		headers: {
 | 
			
		||||
			'content-type': 'application/json',
 | 
			
		||||
			'Authorization': 'Bearer ' + at
 | 
			
		||||
		},
 | 
			
		||||
	}).then(function(response) {
 | 
			
		||||
		return response.json();
 | 
			
		||||
	}).catch(function(error) {
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}).then(function(json) {
 | 
			
		||||
		var templete = parse([json[0]], '', acct_id, tlid);
 | 
			
		||||
		$("#timeline_nano").html(templete);
 | 
			
		||||
		jQuery("time.timeago").timeago();
 | 
			
		||||
	});
 | 
			
		||||
//Streaming接続
 | 
			
		||||
var websocket=[];
 | 
			
		||||
    var tlid=0;
 | 
			
		||||
	if (type == "home") {
 | 
			
		||||
		var start = "wss://" + domain +
 | 
			
		||||
			"/api/v1/streaming/?stream=user&access_token=" + at;
 | 
			
		||||
	} else if (type == "pub") {
 | 
			
		||||
		var start = "wss://" + domain +
 | 
			
		||||
			"/api/v1/streaming/?stream=public&access_token=" + at;
 | 
			
		||||
	} else if (type == "local") {
 | 
			
		||||
		var start = "wss://" + domain +
 | 
			
		||||
			"/api/v1/streaming/?stream=public:local&access_token=" + at;
 | 
			
		||||
	} else if (type == "tag") {
 | 
			
		||||
		var start = "wss://" + domain +
 | 
			
		||||
			"/api/v1/streaming/?stream=hashtag&tag=" + data +"&access_token=" + at;
 | 
			
		||||
	} 
 | 
			
		||||
	console.log(start);
 | 
			
		||||
	var wsid = websocket.length;
 | 
			
		||||
	websocket[wsid] = new WebSocket(start);
 | 
			
		||||
	websocket[wsid].onopen = function(mess) {
 | 
			
		||||
		console.log(tlid + ":Connect Streaming API:" + type);
 | 
			
		||||
		console.log(mess);
 | 
			
		||||
		$("#notice_icon_" + tlid).removeClass("red-text");
 | 
			
		||||
	}
 | 
			
		||||
	websocket[wsid].onmessage = function(mess) {
 | 
			
		||||
		console.log(tlid + ":Receive Streaming API:");
 | 
			
		||||
		console.log(websocket[wsid]);
 | 
			
		||||
		var typeA = JSON.parse(mess.data).event;
 | 
			
		||||
		if (typeA == "delete") {
 | 
			
		||||
			var obj = JSON.parse(mess.data).payload;
 | 
			
		||||
			$("[toot-id=" + JSON.parse(mess.data).payload + "]").hide();
 | 
			
		||||
			$("[toot-id=" + JSON.parse(mess.data).payload + "]").remove();
 | 
			
		||||
		} else if (typeA == "update") {
 | 
			
		||||
			var obj = JSON.parse(JSON.parse(mess.data).payload);
 | 
			
		||||
			console.log(obj);
 | 
			
		||||
            var templete = parse([obj], '', acct_id, tlid);
 | 
			
		||||
            $("#timeline_nano").html(templete);
 | 
			
		||||
			Authorization: 'Bearer ' + at
 | 
			
		||||
		}
 | 
			
		||||
		websocket[wsid].onclose = function(mess) {
 | 
			
		||||
			console.log("Close Streaming API:" + type);
 | 
			
		||||
	})
 | 
			
		||||
		.then(function(response) {
 | 
			
		||||
			if (!response.ok) {
 | 
			
		||||
				response.text().then(function(text) {
 | 
			
		||||
					setLog(response.url, response.status, text)
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
			return response.json()
 | 
			
		||||
		})
 | 
			
		||||
		.catch(function(error) {
 | 
			
		||||
			console.error(error)
 | 
			
		||||
		})
 | 
			
		||||
		.then(function(json) {
 | 
			
		||||
			var templete = parse([json[0]], '', acct_id, tlid)
 | 
			
		||||
			$('#timeline_nano').html(templete)
 | 
			
		||||
			jQuery('time.timeago').timeago()
 | 
			
		||||
			$('#menu').addClass('hide')
 | 
			
		||||
		})
 | 
			
		||||
	//Streaming接続
 | 
			
		||||
	var tlid = 0
 | 
			
		||||
	if (type == 'home') {
 | 
			
		||||
		var start = 'wss://' + domain + '/api/v1/streaming/?stream=user&access_token=' + at
 | 
			
		||||
	} else if (type == 'pub') {
 | 
			
		||||
		var start = 'wss://' + domain + '/api/v1/streaming/?stream=public&access_token=' + at
 | 
			
		||||
	} else if (type == 'local') {
 | 
			
		||||
		var start = 'wss://' + domain + '/api/v1/streaming/?stream=public:local&access_token=' + at
 | 
			
		||||
	} else if (type == 'tag') {
 | 
			
		||||
		var start =
 | 
			
		||||
			'wss://' + domain + '/api/v1/streaming/?stream=hashtag&tag=' + data + '&access_token=' + at
 | 
			
		||||
	}
 | 
			
		||||
	websocket = new WebSocket(start)
 | 
			
		||||
	websocket.onopen = function(mess) {
 | 
			
		||||
		$('#notice_icon_' + tlid).removeClass('red-text')
 | 
			
		||||
	}
 | 
			
		||||
	websocket.onmessage = function(mess) {
 | 
			
		||||
		var typeA = JSON.parse(mess.data).event
 | 
			
		||||
		if (typeA == 'update') {
 | 
			
		||||
			var obj = JSON.parse(JSON.parse(mess.data).payload)
 | 
			
		||||
			var templete = parse([obj], '', acct_id, tlid)
 | 
			
		||||
			jQuery('time.timeago').timeago()
 | 
			
		||||
			$('#timeline_nano').html(templete)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	websocket[wsid].onerror = function(error) {
 | 
			
		||||
		console.error('WebSocket Error ' + error);
 | 
			
		||||
	};
 | 
			
		||||
	websocket.onerror = function(error) {
 | 
			
		||||
		console.error('WebSocket Error ' + error)
 | 
			
		||||
	}
 | 
			
		||||
	websocket.onclose = function(mess) {
 | 
			
		||||
		console.error('Close Streaming API:' + type)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//TLのタイトル
 | 
			
		||||
function cap(type, data) {
 | 
			
		||||
	if (type == "home") {
 | 
			
		||||
		return "Home"
 | 
			
		||||
	} else if (type == "local") {
 | 
			
		||||
		return "Local"
 | 
			
		||||
	} else if (type == "pub") {
 | 
			
		||||
		return "Public"
 | 
			
		||||
	} else if (type == "tag") {
 | 
			
		||||
		return "#" + data
 | 
			
		||||
	} else if (type == "list") {
 | 
			
		||||
		return "List(id:" + data + ")"
 | 
			
		||||
	} else if (type == "notf") {
 | 
			
		||||
		return "Notification"
 | 
			
		||||
	if (type == 'home') {
 | 
			
		||||
		return 'Home'
 | 
			
		||||
	} else if (type == 'local') {
 | 
			
		||||
		return 'Local'
 | 
			
		||||
	} else if (type == 'pub') {
 | 
			
		||||
		return 'Public'
 | 
			
		||||
	} else if (type == 'tag') {
 | 
			
		||||
		return '#' + data
 | 
			
		||||
	} else if (type == 'list') {
 | 
			
		||||
		return 'List(id:' + data + ')'
 | 
			
		||||
	} else if (type == 'notf') {
 | 
			
		||||
		return 'Notification'
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//TLのURL
 | 
			
		||||
function com(type, data) {
 | 
			
		||||
	if (type == "home") {
 | 
			
		||||
		return "home?"
 | 
			
		||||
	} else if (type == "local") {
 | 
			
		||||
		return "public?local=true&"
 | 
			
		||||
	} else if (type == "pub") {
 | 
			
		||||
		return "public?"
 | 
			
		||||
	} else if (type == "tag") {
 | 
			
		||||
		return "tag/" + data + "?"
 | 
			
		||||
	if (type == 'home') {
 | 
			
		||||
		return 'home?'
 | 
			
		||||
	} else if (type == 'local') {
 | 
			
		||||
		return 'public?local=true&'
 | 
			
		||||
	} else if (type == 'pub') {
 | 
			
		||||
		return 'public?'
 | 
			
		||||
	} else if (type == 'tag') {
 | 
			
		||||
		return 'tag/' + data + '?'
 | 
			
		||||
	}
 | 
			
		||||
	if (type == "list") {
 | 
			
		||||
		return "list/" + data + "?"
 | 
			
		||||
	if (type == 'list') {
 | 
			
		||||
		return 'list/' + data + '?'
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//TLのアイコン
 | 
			
		||||
function icon(type) {
 | 
			
		||||
	if (type == "home") {
 | 
			
		||||
		return "home"
 | 
			
		||||
	} else if (type == "local") {
 | 
			
		||||
		return "people_outline"
 | 
			
		||||
	} else if (type == "pub") {
 | 
			
		||||
		return "language"
 | 
			
		||||
	} else if (type == "tag") {
 | 
			
		||||
		return "search"
 | 
			
		||||
	if (type == 'home') {
 | 
			
		||||
		return 'home'
 | 
			
		||||
	} else if (type == 'local') {
 | 
			
		||||
		return 'people_outline'
 | 
			
		||||
	} else if (type == 'pub') {
 | 
			
		||||
		return 'language'
 | 
			
		||||
	} else if (type == 'tag') {
 | 
			
		||||
		return 'search'
 | 
			
		||||
	}
 | 
			
		||||
	if (type == "list") {
 | 
			
		||||
		return "subject"
 | 
			
		||||
	if (type == 'list') {
 | 
			
		||||
		return 'subject'
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function todo(){}
 | 
			
		||||
function todc(){}
 | 
			
		||||
function hide(){}
 | 
			
		||||
function todo() {}
 | 
			
		||||
function todc() {}
 | 
			
		||||
function hide() {}
 | 
			
		||||
$(function($) {
 | 
			
		||||
	//キーボードショートカット
 | 
			
		||||
	$(window).keydown(function(e) {
 | 
			
		||||
		var hasFocus = $('input').is(':focus');
 | 
			
		||||
		var hasFocus2 = $('textarea').is(':focus');
 | 
			
		||||
		var hasFocus = $('input').is(':focus')
 | 
			
		||||
		var hasFocus2 = $('textarea').is(':focus')
 | 
			
		||||
		//Ctrl+Enter:投稿
 | 
			
		||||
		if (event.ctrlKey) {
 | 
			
		||||
			if (e.keyCode === 13) {
 | 
			
		||||
				post();
 | 
			
		||||
				return false;
 | 
			
		||||
				post()
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
	})
 | 
			
		||||
})
 | 
			
		||||
function set() {
 | 
			
		||||
	$('#menu').toggleClass('hide')
 | 
			
		||||
	if ($('#menu').hasClass('hide')) {
 | 
			
		||||
		$('#setting').text('Setting')
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#setting').text('Close')
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var multi = localStorage.getItem('multi')
 | 
			
		||||
if (!multi) {
 | 
			
		||||
	var obj = [
 | 
			
		||||
		{
 | 
			
		||||
			at: localStorage.getItem(localStorage.getItem('domain_' + acct_id) + '_at'),
 | 
			
		||||
			name: localStorage.getItem('name_' + acct_id),
 | 
			
		||||
			domain: localStorage.getItem('domain_' + acct_id),
 | 
			
		||||
			user: localStorage.getItem('user_' + acct_id),
 | 
			
		||||
			prof: localStorage.getItem('prof_' + acct_id)
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
	var json = JSON.stringify(obj)
 | 
			
		||||
	localStorage.setItem('multi', json)
 | 
			
		||||
} else {
 | 
			
		||||
	var obj = JSON.parse(multi)
 | 
			
		||||
}
 | 
			
		||||
var templete
 | 
			
		||||
var last = localStorage.getItem('last-use')
 | 
			
		||||
var sel
 | 
			
		||||
Object.keys(obj).forEach(function(key) {
 | 
			
		||||
	var acct = obj[key]
 | 
			
		||||
	var list = key * 1 + 1
 | 
			
		||||
	if (key == last) {
 | 
			
		||||
		sel = 'selected'
 | 
			
		||||
	} else {
 | 
			
		||||
		sel = ''
 | 
			
		||||
	}
 | 
			
		||||
	templete = `<option value="${key}" ${sel}>${acct.user}@${acct.domain}</option>`
 | 
			
		||||
	$('#post-acct-sel').append(templete)
 | 
			
		||||
})
 | 
			
		||||
function mov() {
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
function resetmv() {
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
function post() {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var start = 'https://' + domain + '/api/v1/statuses'
 | 
			
		||||
	var str = $('#textarea').val()
 | 
			
		||||
	var toot = {
 | 
			
		||||
		status: str
 | 
			
		||||
	}
 | 
			
		||||
	var vis = loadVis(acct_id)
 | 
			
		||||
	toot.visibility = vis
 | 
			
		||||
	var httpreq = new XMLHttpRequest()
 | 
			
		||||
	httpreq.open('POST', start, true)
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json')
 | 
			
		||||
	httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
 | 
			
		||||
	httpreq.responseType = 'json'
 | 
			
		||||
	httpreq.send(JSON.stringify(toot))
 | 
			
		||||
	httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
			if (this.status !== 200) {
 | 
			
		||||
				setLog(start, this.status, this.response)
 | 
			
		||||
			}
 | 
			
		||||
			$('#textarea').val('')
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function loadVis(acct_id) {
 | 
			
		||||
	var vist = localStorage.getItem('vis')
 | 
			
		||||
	if (!vist) {
 | 
			
		||||
		return 'public'
 | 
			
		||||
	} else {
 | 
			
		||||
		if (vist == 'memory') {
 | 
			
		||||
			var memory = localStorage.getItem('vis-memory-' + acct_id)
 | 
			
		||||
			if (!memory) {
 | 
			
		||||
				memory = 'public'
 | 
			
		||||
			}
 | 
			
		||||
			return memory
 | 
			
		||||
		} else if (vist == 'server' || vist == 'useapi') {
 | 
			
		||||
			var multi = localStorage.getItem('multi')
 | 
			
		||||
			var obj = JSON.parse(multi)
 | 
			
		||||
			var memory = obj[acct_id]['vis']
 | 
			
		||||
			if (!memory) {
 | 
			
		||||
				memory = 'public'
 | 
			
		||||
			}
 | 
			
		||||
			return memory
 | 
			
		||||
		} else {
 | 
			
		||||
			return vist
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function loader() {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	console.log(loadVis(acct_id))
 | 
			
		||||
	$('#vis-sel').val(loadVis(acct_id))
 | 
			
		||||
}
 | 
			
		||||
loader()
 | 
			
		||||
$('textarea').height(15) //init
 | 
			
		||||
$('textarea').css('lineHeight', '1rem') //init
 | 
			
		||||
 | 
			
		||||
$('textarea').on('input', function(evt) {
 | 
			
		||||
	if (evt.target.scrollHeight > evt.target.offsetHeight) {
 | 
			
		||||
		$(evt.target).height(evt.target.scrollHeight)
 | 
			
		||||
	} else {
 | 
			
		||||
		var lineHeight = Number(
 | 
			
		||||
			$(evt.target)
 | 
			
		||||
				.css('lineHeight')
 | 
			
		||||
				.split('px')[0]
 | 
			
		||||
		)
 | 
			
		||||
		while (true) {
 | 
			
		||||
			$(evt.target).height($(evt.target).height() - lineHeight)
 | 
			
		||||
			if (evt.target.scrollHeight > evt.target.offsetHeight) {
 | 
			
		||||
				$(evt.target).height(evt.target.scrollHeight)
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										250
									
								
								app/js/platform/preload.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,250 @@
 | 
			
		||||
var electron = require('electron')
 | 
			
		||||
const shell = electron.shell
 | 
			
		||||
var ipc = electron.ipcRenderer
 | 
			
		||||
//title bar
 | 
			
		||||
const customTitlebar = require('custom-electron-titlebar')
 | 
			
		||||
window.addEventListener('DOMContentLoaded', () => {
 | 
			
		||||
	document.title = 'TheDesk'
 | 
			
		||||
	ipc.send('acsCheck', '')
 | 
			
		||||
	ipc.send('frameCheck', '')
 | 
			
		||||
	ipc.on('frame', function(event, args) {
 | 
			
		||||
		const file = location.href.substr(-10)
 | 
			
		||||
		if (
 | 
			
		||||
			file == 'index.html' ||
 | 
			
		||||
			file == '/acct.html' ||
 | 
			
		||||
			file == 'tting.html'
 | 
			
		||||
		) {
 | 
			
		||||
			new customTitlebar.Titlebar({
 | 
			
		||||
				backgroundColor: customTitlebar.Color.fromHex('#000'),
 | 
			
		||||
				titleHorizontalAlignment: 'right',
 | 
			
		||||
				icon: '../../img/desk.png'
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
		})
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
onmessage = function(e) {
 | 
			
		||||
	if (e.data[0] == 'openUrl') {
 | 
			
		||||
		urls = e.data[1].match(/https?:\/\/(.+)/)
 | 
			
		||||
		if (urls) {
 | 
			
		||||
			shell.openExternal(e.data[1])
 | 
			
		||||
		}
 | 
			
		||||
	} else if (e.data[0] == 'sendSinmpleIpc') {
 | 
			
		||||
		ipc.send(e.data[1], '')
 | 
			
		||||
	} else if (e.data[0] == 'dialogStore') {
 | 
			
		||||
		ipc.send('dialogStore', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'bmpImage') {
 | 
			
		||||
		ipc.send('bmp-image', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'resizeImage') {
 | 
			
		||||
		ipc.send('resize-image', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'stampImage') {
 | 
			
		||||
		ipc.send('stamp-image', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'dialogCW') {
 | 
			
		||||
		ipc.send('dialogCW', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'nativeNotf') {
 | 
			
		||||
		console.log(e.data[1])
 | 
			
		||||
		ipc.send('native-notf', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'dialogClient') {
 | 
			
		||||
		ipc.send('dialogClient', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'generalDL') {
 | 
			
		||||
		ipc.send('general-dl', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'openFinder') {
 | 
			
		||||
		ipc.send('openFinder', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'columnDel') {
 | 
			
		||||
		ipc.send('column-del', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'lang') {
 | 
			
		||||
		ipc.send('lang', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'exportSettings') {
 | 
			
		||||
		ipc.send('exportSettings', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'exportSettingsCoreComplete') {
 | 
			
		||||
		ipc.send('export', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'importSettings') {
 | 
			
		||||
		ipc.send('importSettings', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'customSound') {
 | 
			
		||||
		ipc.send('customSound', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'themeJsonDelete') {
 | 
			
		||||
		ipc.send('theme-json-delete', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'themeJsonCreate') {
 | 
			
		||||
		ipc.send('theme-json-create', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'themeJsonRequest') {
 | 
			
		||||
		ipc.send('theme-json-request', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'ha') {
 | 
			
		||||
		ipc.send('ha', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'frameSet') {
 | 
			
		||||
		ipc.send('frameSet', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'ua') {
 | 
			
		||||
		ipc.send('ua', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'aboutData') {
 | 
			
		||||
		ipc.send('aboutData', '')
 | 
			
		||||
	} else if (e.data[0] == 'itunes') {
 | 
			
		||||
		console.log('NowPlaying')
 | 
			
		||||
		ipc.send('itunes', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'themeCSSRequest') {
 | 
			
		||||
		ipc.send('theme-css-request', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'customCSSRequest') {
 | 
			
		||||
		ipc.send('custom-css-request', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'downloadButton') {
 | 
			
		||||
		ipc.send('download-btn', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'nano') {
 | 
			
		||||
		ipc.send('nano', null)
 | 
			
		||||
	} else if (e.data[0] == 'asReadComp') {
 | 
			
		||||
		ipc.send('sendMarkersComplete', null)
 | 
			
		||||
	} else if (e.data[0] == 'copy') {
 | 
			
		||||
		ipc.send('copy', e.data[1])
 | 
			
		||||
	} else if (e.data[0] == 'log') {
 | 
			
		||||
		ipc.send('log', e.data[1])
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//version.js
 | 
			
		||||
ipc.send('getPlatform', '')
 | 
			
		||||
ipc.on('platform', function(event, args) {
 | 
			
		||||
	localStorage.setItem('platform', args[0])
 | 
			
		||||
	localStorage.setItem('bit', args[1])
 | 
			
		||||
	localStorage.setItem('about', JSON.stringify([args[2], args[3], args[4], args[5]]))
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
ipc.on('reload', function(event, arg) {
 | 
			
		||||
	location.reload()
 | 
			
		||||
})
 | 
			
		||||
//Native Notf
 | 
			
		||||
ipc.on('shownotf', function(event, args) {
 | 
			
		||||
	if (args['type'] == 'toot') {
 | 
			
		||||
		postMessage(['details', [id, acct_id]], '*')
 | 
			
		||||
	} else if (args['type'] == 'userdata') {
 | 
			
		||||
		postMessage(['udg', [user, acct_id]], '*')
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
//first.js
 | 
			
		||||
ipc.on('custom-css-response', function(event, arg) {
 | 
			
		||||
	if (arg == '') {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var styleNode = document.createElement('style')
 | 
			
		||||
	styleNode.setAttribute('type', 'text/css')
 | 
			
		||||
 | 
			
		||||
	var content = document.createTextNode(arg)
 | 
			
		||||
	styleNode.append(content)
 | 
			
		||||
	document.getElementsByTagName('head')[0].append(styleNode)
 | 
			
		||||
})
 | 
			
		||||
ipc.on('theme-css-response', function(event, arg) {
 | 
			
		||||
	if (arg == '') {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var styleNode = document.createElement('style')
 | 
			
		||||
	styleNode.setAttribute('type', 'text/css')
 | 
			
		||||
 | 
			
		||||
	var content = document.createTextNode(arg)
 | 
			
		||||
	styleNode.append(content)
 | 
			
		||||
	document.getElementsByTagName('head')[0].append(styleNode)
 | 
			
		||||
})
 | 
			
		||||
//img.js
 | 
			
		||||
ipc.on('bmp-img-comp', function(event, b64) {
 | 
			
		||||
	if (b64[2]) {
 | 
			
		||||
		var stamped = true
 | 
			
		||||
	} else {
 | 
			
		||||
		var stamped = false
 | 
			
		||||
	}
 | 
			
		||||
	postMessage(['media', [b64[0], 'image/png', b64[1], stamped]], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('resizeJudgement', function(event, b64) {
 | 
			
		||||
	var resize = localStorage.getItem('uploadCrop') * 1
 | 
			
		||||
	if (resize > 0) {
 | 
			
		||||
		var element = new Image()
 | 
			
		||||
		var width
 | 
			
		||||
		element.onload = function() {
 | 
			
		||||
			var width = element.naturalWidth
 | 
			
		||||
			var height = element.naturalHeight
 | 
			
		||||
			if (width > resize || height > resize) {
 | 
			
		||||
				ipc.send('resize-image', [b64[0], resize])
 | 
			
		||||
			} else {
 | 
			
		||||
				postMessage(['media', [b64[0], 'image/png', b64[1]]], '*')
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		element.src = 'data:image/png;base64,' + b64[0]
 | 
			
		||||
	} else {
 | 
			
		||||
		postMessage(['media', [b64[0], 'image/png', b64[1]]], '*')
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
//ui,img.js
 | 
			
		||||
ipc.on('general-dl-prog', function(event, arg) {
 | 
			
		||||
	console.log('Progress: ' + arg)
 | 
			
		||||
})
 | 
			
		||||
ipc.on('general-dl-message', function(event, arg) {
 | 
			
		||||
	var argC = arg.replace(/\\/g, '\\\\')
 | 
			
		||||
	console.log('saved')
 | 
			
		||||
	postMessage(['toastSaved', [arg, argC]], '*')
 | 
			
		||||
})
 | 
			
		||||
//setting.js
 | 
			
		||||
ipc.on('langres', function(event, arg) {
 | 
			
		||||
	location.href = '../' + arg + '/setting.html'
 | 
			
		||||
})
 | 
			
		||||
ipc.on('exportSettingsFile', function(event, arg) {
 | 
			
		||||
	postMessage(['exportSettingsCore', arg], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('exportAllComplete', function(event, arg) {
 | 
			
		||||
	postMessage(['alert', 'Complete'], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('config', function(event, arg) {
 | 
			
		||||
	postMessage(['importSettingsCore', arg], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('savefolder', function(event, arg) {
 | 
			
		||||
	localStorage.setItem('savefolder', arg)
 | 
			
		||||
})
 | 
			
		||||
ipc.on('font-list', function(event, arg) {
 | 
			
		||||
	postMessage(['fontList', arg], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('customSoundRender', function(event, args) {
 | 
			
		||||
	postMessage(['customSoundSave', [args[0], args[1]]], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('theme-json-list-response', function(event, args) {
 | 
			
		||||
	postMessage(['ctLoadCore', args], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('theme-json-delete-complete', function(event, args) {
 | 
			
		||||
	postMessage(['ctLoad', ''], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('theme-json-response', function(event, args) {
 | 
			
		||||
	postMessage(['customConnect', args], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('theme-json-create-complete', function(event, args) {
 | 
			
		||||
	postMessage(['clearCustomImport', ''], '*')
 | 
			
		||||
	postMessage(['ctLoad', ''], '*')
 | 
			
		||||
})
 | 
			
		||||
//spotify.js
 | 
			
		||||
ipc.on('itunes-np', function(event, arg) {
 | 
			
		||||
	postMessage(['npCore', arg], '*')
 | 
			
		||||
})
 | 
			
		||||
//tips.js
 | 
			
		||||
ipc.on('memory', function(event, arg) {
 | 
			
		||||
	var use = arg[0]
 | 
			
		||||
	var cpu = arg[1]
 | 
			
		||||
	var total = arg[2]
 | 
			
		||||
	postMessage(['renderMem', [use, cpu, total]], '*')
 | 
			
		||||
})
 | 
			
		||||
//log
 | 
			
		||||
ipc.on('logData', function(event, args) {
 | 
			
		||||
	postMessage(['logData', args], '*')
 | 
			
		||||
})
 | 
			
		||||
//update.html
 | 
			
		||||
ipc.on('prog', function(event, arg) {
 | 
			
		||||
	postMessage(['updateProg', arg], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('mess', function(event, arg) {
 | 
			
		||||
	postMessage(['updateMess', arg], '*')
 | 
			
		||||
})
 | 
			
		||||
//misc
 | 
			
		||||
ipc.on('asRead', function(event, arg) {
 | 
			
		||||
	postMessage(['asRead', ''], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('asReadEnd', function(event, arg) {
 | 
			
		||||
	postMessage(['asReadEnd', ''], '*')
 | 
			
		||||
})
 | 
			
		||||
ipc.on('accessibility', function(event, arg) {
 | 
			
		||||
	postMessage(['accessibility', 'true'], '*')
 | 
			
		||||
})
 | 
			
		||||
var webviewDom = document.getElementById('webview')
 | 
			
		||||
if (webviewDom) {
 | 
			
		||||
	webviewDom.addEventListener('new-window', function(e) {
 | 
			
		||||
		shell.openExternal(e.url)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										508
									
								
								app/js/platform/punycode.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,508 @@
 | 
			
		||||
/*! https://mths.be/punycode v1.4.1 by @mathias */
 | 
			
		||||
;(function(root) {
 | 
			
		||||
	/** Detect free variables */
 | 
			
		||||
	var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports
 | 
			
		||||
	var freeModule = typeof module == 'object' && module && !module.nodeType && module
 | 
			
		||||
	var freeGlobal = typeof global == 'object' && global
 | 
			
		||||
	if (
 | 
			
		||||
		freeGlobal.global === freeGlobal ||
 | 
			
		||||
		freeGlobal.window === freeGlobal ||
 | 
			
		||||
		freeGlobal.self === freeGlobal
 | 
			
		||||
	) {
 | 
			
		||||
		root = freeGlobal
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * The `punycode` object.
 | 
			
		||||
	 * @name punycode
 | 
			
		||||
	 * @type Object
 | 
			
		||||
	 */
 | 
			
		||||
	var punycode,
 | 
			
		||||
		/** Highest positive signed 32-bit float value */
 | 
			
		||||
		maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
 | 
			
		||||
		/** Bootstring parameters */
 | 
			
		||||
		base = 36,
 | 
			
		||||
		tMin = 1,
 | 
			
		||||
		tMax = 26,
 | 
			
		||||
		skew = 38,
 | 
			
		||||
		damp = 700,
 | 
			
		||||
		initialBias = 72,
 | 
			
		||||
		initialN = 128, // 0x80
 | 
			
		||||
		delimiter = '-', // '\x2D'
 | 
			
		||||
		/** Regular expressions */
 | 
			
		||||
		regexPunycode = /^xn--/,
 | 
			
		||||
		regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
 | 
			
		||||
		regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
 | 
			
		||||
		/** Error messages */
 | 
			
		||||
		errors = {
 | 
			
		||||
			overflow: 'Overflow: input needs wider integers to process',
 | 
			
		||||
			'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
 | 
			
		||||
			'invalid-input': 'Invalid input'
 | 
			
		||||
		},
 | 
			
		||||
		/** Convenience shortcuts */
 | 
			
		||||
		baseMinusTMin = base - tMin,
 | 
			
		||||
		floor = Math.floor,
 | 
			
		||||
		stringFromCharCode = String.fromCharCode,
 | 
			
		||||
		/** Temporary variable */
 | 
			
		||||
		key
 | 
			
		||||
 | 
			
		||||
	/*--------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * A generic error utility function.
 | 
			
		||||
	 * @private
 | 
			
		||||
	 * @param {String} type The error type.
 | 
			
		||||
	 * @returns {Error} Throws a `RangeError` with the applicable error message.
 | 
			
		||||
	 */
 | 
			
		||||
	function error(type) {
 | 
			
		||||
		throw new RangeError(errors[type])
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * A generic `Array#map` utility function.
 | 
			
		||||
	 * @private
 | 
			
		||||
	 * @param {Array} array The array to iterate over.
 | 
			
		||||
	 * @param {Function} callback The function that gets called for every array
 | 
			
		||||
	 * item.
 | 
			
		||||
	 * @returns {Array} A new array of values returned by the callback function.
 | 
			
		||||
	 */
 | 
			
		||||
	function map(array, fn) {
 | 
			
		||||
		var length = array.length
 | 
			
		||||
		var result = []
 | 
			
		||||
		while (length--) {
 | 
			
		||||
			result[length] = fn(array[length])
 | 
			
		||||
		}
 | 
			
		||||
		return result
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * A simple `Array#map`-like wrapper to work with domain name strings or email
 | 
			
		||||
	 * addresses.
 | 
			
		||||
	 * @private
 | 
			
		||||
	 * @param {String} domain The domain name or email address.
 | 
			
		||||
	 * @param {Function} callback The function that gets called for every
 | 
			
		||||
	 * character.
 | 
			
		||||
	 * @returns {Array} A new string of characters returned by the callback
 | 
			
		||||
	 * function.
 | 
			
		||||
	 */
 | 
			
		||||
	function mapDomain(string, fn) {
 | 
			
		||||
		var parts = string.split('@')
 | 
			
		||||
		var result = ''
 | 
			
		||||
		if (parts.length > 1) {
 | 
			
		||||
			// In email addresses, only the domain name should be punycoded. Leave
 | 
			
		||||
			// the local part (i.e. everything up to `@`) intact.
 | 
			
		||||
			result = parts[0] + '@'
 | 
			
		||||
			string = parts[1]
 | 
			
		||||
		}
 | 
			
		||||
		// Avoid `split(regex)` for IE8 compatibility. See #17.
 | 
			
		||||
		string = string.replace(regexSeparators, '\x2E')
 | 
			
		||||
		var labels = string.split('.')
 | 
			
		||||
		var encoded = map(labels, fn).join('.')
 | 
			
		||||
		return result + encoded
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Creates an array containing the numeric code points of each Unicode
 | 
			
		||||
	 * character in the string. While JavaScript uses UCS-2 internally,
 | 
			
		||||
	 * this function will convert a pair of surrogate halves (each of which
 | 
			
		||||
	 * UCS-2 exposes as separate characters) into a single code point,
 | 
			
		||||
	 * matching UTF-16.
 | 
			
		||||
	 * @see `punycode.ucs2.encode`
 | 
			
		||||
	 * @see <https://mathiasbynens.be/notes/javascript-encoding>
 | 
			
		||||
	 * @memberOf punycode.ucs2
 | 
			
		||||
	 * @name decode
 | 
			
		||||
	 * @param {String} string The Unicode input string (UCS-2).
 | 
			
		||||
	 * @returns {Array} The new array of code points.
 | 
			
		||||
	 */
 | 
			
		||||
	function ucs2decode(string) {
 | 
			
		||||
		var output = [],
 | 
			
		||||
			counter = 0,
 | 
			
		||||
			length = string.length,
 | 
			
		||||
			value,
 | 
			
		||||
			extra
 | 
			
		||||
		while (counter < length) {
 | 
			
		||||
			value = string.charCodeAt(counter++)
 | 
			
		||||
			if (value >= 0xd800 && value <= 0xdbff && counter < length) {
 | 
			
		||||
				// high surrogate, and there is a next character
 | 
			
		||||
				extra = string.charCodeAt(counter++)
 | 
			
		||||
				if ((extra & 0xfc00) == 0xdc00) {
 | 
			
		||||
					// low surrogate
 | 
			
		||||
					output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000)
 | 
			
		||||
				} else {
 | 
			
		||||
					// unmatched surrogate; only append this code unit, in case the next
 | 
			
		||||
					// code unit is the high surrogate of a surrogate pair
 | 
			
		||||
					output.push(value)
 | 
			
		||||
					counter--
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				output.push(value)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return output
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Creates a string based on an array of numeric code points.
 | 
			
		||||
	 * @see `punycode.ucs2.decode`
 | 
			
		||||
	 * @memberOf punycode.ucs2
 | 
			
		||||
	 * @name encode
 | 
			
		||||
	 * @param {Array} codePoints The array of numeric code points.
 | 
			
		||||
	 * @returns {String} The new Unicode string (UCS-2).
 | 
			
		||||
	 */
 | 
			
		||||
	function ucs2encode(array) {
 | 
			
		||||
		return map(array, function(value) {
 | 
			
		||||
			var output = ''
 | 
			
		||||
			if (value > 0xffff) {
 | 
			
		||||
				value -= 0x10000
 | 
			
		||||
				output += stringFromCharCode(((value >>> 10) & 0x3ff) | 0xd800)
 | 
			
		||||
				value = 0xdc00 | (value & 0x3ff)
 | 
			
		||||
			}
 | 
			
		||||
			output += stringFromCharCode(value)
 | 
			
		||||
			return output
 | 
			
		||||
		}).join('')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Converts a basic code point into a digit/integer.
 | 
			
		||||
	 * @see `digitToBasic()`
 | 
			
		||||
	 * @private
 | 
			
		||||
	 * @param {Number} codePoint The basic numeric code point value.
 | 
			
		||||
	 * @returns {Number} The numeric value of a basic code point (for use in
 | 
			
		||||
	 * representing integers) in the range `0` to `base - 1`, or `base` if
 | 
			
		||||
	 * the code point does not represent a value.
 | 
			
		||||
	 */
 | 
			
		||||
	function basicToDigit(codePoint) {
 | 
			
		||||
		if (codePoint - 48 < 10) {
 | 
			
		||||
			return codePoint - 22
 | 
			
		||||
		}
 | 
			
		||||
		if (codePoint - 65 < 26) {
 | 
			
		||||
			return codePoint - 65
 | 
			
		||||
		}
 | 
			
		||||
		if (codePoint - 97 < 26) {
 | 
			
		||||
			return codePoint - 97
 | 
			
		||||
		}
 | 
			
		||||
		return base
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Converts a digit/integer into a basic code point.
 | 
			
		||||
	 * @see `basicToDigit()`
 | 
			
		||||
	 * @private
 | 
			
		||||
	 * @param {Number} digit The numeric value of a basic code point.
 | 
			
		||||
	 * @returns {Number} The basic code point whose value (when used for
 | 
			
		||||
	 * representing integers) is `digit`, which needs to be in the range
 | 
			
		||||
	 * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
 | 
			
		||||
	 * used; else, the lowercase form is used. The behavior is undefined
 | 
			
		||||
	 * if `flag` is non-zero and `digit` has no uppercase form.
 | 
			
		||||
	 */
 | 
			
		||||
	function digitToBasic(digit, flag) {
 | 
			
		||||
		//  0..25 map to ASCII a..z or A..Z
 | 
			
		||||
		// 26..35 map to ASCII 0..9
 | 
			
		||||
		return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Bias adaptation function as per section 3.4 of RFC 3492.
 | 
			
		||||
	 * https://tools.ietf.org/html/rfc3492#section-3.4
 | 
			
		||||
	 * @private
 | 
			
		||||
	 */
 | 
			
		||||
	function adapt(delta, numPoints, firstTime) {
 | 
			
		||||
		var k = 0
 | 
			
		||||
		delta = firstTime ? floor(delta / damp) : delta >> 1
 | 
			
		||||
		delta += floor(delta / numPoints)
 | 
			
		||||
		for (; /* no initialization */ delta > (baseMinusTMin * tMax) >> 1; k += base) {
 | 
			
		||||
			delta = floor(delta / baseMinusTMin)
 | 
			
		||||
		}
 | 
			
		||||
		return floor(k + ((baseMinusTMin + 1) * delta) / (delta + skew))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Converts a Punycode string of ASCII-only symbols to a string of Unicode
 | 
			
		||||
	 * symbols.
 | 
			
		||||
	 * @memberOf punycode
 | 
			
		||||
	 * @param {String} input The Punycode string of ASCII-only symbols.
 | 
			
		||||
	 * @returns {String} The resulting string of Unicode symbols.
 | 
			
		||||
	 */
 | 
			
		||||
	function decode(input) {
 | 
			
		||||
		// Don't use UCS-2
 | 
			
		||||
		var output = [],
 | 
			
		||||
			inputLength = input.length,
 | 
			
		||||
			out,
 | 
			
		||||
			i = 0,
 | 
			
		||||
			n = initialN,
 | 
			
		||||
			bias = initialBias,
 | 
			
		||||
			basic,
 | 
			
		||||
			j,
 | 
			
		||||
			index,
 | 
			
		||||
			oldi,
 | 
			
		||||
			w,
 | 
			
		||||
			k,
 | 
			
		||||
			digit,
 | 
			
		||||
			t,
 | 
			
		||||
			/** Cached calculation results */
 | 
			
		||||
			baseMinusT
 | 
			
		||||
 | 
			
		||||
		// Handle the basic code points: let `basic` be the number of input code
 | 
			
		||||
		// points before the last delimiter, or `0` if there is none, then copy
 | 
			
		||||
		// the first basic code points to the output.
 | 
			
		||||
 | 
			
		||||
		basic = input.lastIndexOf(delimiter)
 | 
			
		||||
		if (basic < 0) {
 | 
			
		||||
			basic = 0
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for (j = 0; j < basic; ++j) {
 | 
			
		||||
			// if it's not a basic code point
 | 
			
		||||
			if (input.charCodeAt(j) >= 0x80) {
 | 
			
		||||
				error('not-basic')
 | 
			
		||||
			}
 | 
			
		||||
			output.push(input.charCodeAt(j))
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Main decoding loop: start just after the last delimiter if any basic code
 | 
			
		||||
		// points were copied; start at the beginning otherwise.
 | 
			
		||||
 | 
			
		||||
		for (index = basic > 0 ? basic + 1 : 0; index < inputLength /* no final expression */; ) {
 | 
			
		||||
			// `index` is the index of the next character to be consumed.
 | 
			
		||||
			// Decode a generalized variable-length integer into `delta`,
 | 
			
		||||
			// which gets added to `i`. The overflow checking is easier
 | 
			
		||||
			// if we increase `i` as we go, then subtract off its starting
 | 
			
		||||
			// value at the end to obtain `delta`.
 | 
			
		||||
			for (oldi = i, w = 1, k = base /* no condition */; ; k += base) {
 | 
			
		||||
				if (index >= inputLength) {
 | 
			
		||||
					error('invalid-input')
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				digit = basicToDigit(input.charCodeAt(index++))
 | 
			
		||||
 | 
			
		||||
				if (digit >= base || digit > floor((maxInt - i) / w)) {
 | 
			
		||||
					error('overflow')
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				i += digit * w
 | 
			
		||||
				t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias
 | 
			
		||||
 | 
			
		||||
				if (digit < t) {
 | 
			
		||||
					break
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				baseMinusT = base - t
 | 
			
		||||
				if (w > floor(maxInt / baseMinusT)) {
 | 
			
		||||
					error('overflow')
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				w *= baseMinusT
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			out = output.length + 1
 | 
			
		||||
			bias = adapt(i - oldi, out, oldi == 0)
 | 
			
		||||
 | 
			
		||||
			// `i` was supposed to wrap around from `out` to `0`,
 | 
			
		||||
			// incrementing `n` each time, so we'll fix that now:
 | 
			
		||||
			if (floor(i / out) > maxInt - n) {
 | 
			
		||||
				error('overflow')
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			n += floor(i / out)
 | 
			
		||||
			i %= out
 | 
			
		||||
 | 
			
		||||
			// Insert `n` at position `i` of the output
 | 
			
		||||
			output.splice(i++, 0, n)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return ucs2encode(output)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Converts a string of Unicode symbols (e.g. a domain name label) to a
 | 
			
		||||
	 * Punycode string of ASCII-only symbols.
 | 
			
		||||
	 * @memberOf punycode
 | 
			
		||||
	 * @param {String} input The string of Unicode symbols.
 | 
			
		||||
	 * @returns {String} The resulting Punycode string of ASCII-only symbols.
 | 
			
		||||
	 */
 | 
			
		||||
	function encode(input) {
 | 
			
		||||
		var n,
 | 
			
		||||
			delta,
 | 
			
		||||
			handledCPCount,
 | 
			
		||||
			basicLength,
 | 
			
		||||
			bias,
 | 
			
		||||
			j,
 | 
			
		||||
			m,
 | 
			
		||||
			q,
 | 
			
		||||
			k,
 | 
			
		||||
			t,
 | 
			
		||||
			currentValue,
 | 
			
		||||
			output = [],
 | 
			
		||||
			/** `inputLength` will hold the number of code points in `input`. */
 | 
			
		||||
			inputLength,
 | 
			
		||||
			/** Cached calculation results */
 | 
			
		||||
			handledCPCountPlusOne,
 | 
			
		||||
			baseMinusT,
 | 
			
		||||
			qMinusT
 | 
			
		||||
 | 
			
		||||
		// Convert the input in UCS-2 to Unicode
 | 
			
		||||
		input = ucs2decode(input)
 | 
			
		||||
 | 
			
		||||
		// Cache the length
 | 
			
		||||
		inputLength = input.length
 | 
			
		||||
 | 
			
		||||
		// Initialize the state
 | 
			
		||||
		n = initialN
 | 
			
		||||
		delta = 0
 | 
			
		||||
		bias = initialBias
 | 
			
		||||
 | 
			
		||||
		// Handle the basic code points
 | 
			
		||||
		for (j = 0; j < inputLength; ++j) {
 | 
			
		||||
			currentValue = input[j]
 | 
			
		||||
			if (currentValue < 0x80) {
 | 
			
		||||
				output.push(stringFromCharCode(currentValue))
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		handledCPCount = basicLength = output.length
 | 
			
		||||
 | 
			
		||||
		// `handledCPCount` is the number of code points that have been handled;
 | 
			
		||||
		// `basicLength` is the number of basic code points.
 | 
			
		||||
 | 
			
		||||
		// Finish the basic string - if it is not empty - with a delimiter
 | 
			
		||||
		if (basicLength) {
 | 
			
		||||
			output.push(delimiter)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Main encoding loop:
 | 
			
		||||
		while (handledCPCount < inputLength) {
 | 
			
		||||
			// All non-basic code points < n have been handled already. Find the next
 | 
			
		||||
			// larger one:
 | 
			
		||||
			for (m = maxInt, j = 0; j < inputLength; ++j) {
 | 
			
		||||
				currentValue = input[j]
 | 
			
		||||
				if (currentValue >= n && currentValue < m) {
 | 
			
		||||
					m = currentValue
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
 | 
			
		||||
			// but guard against overflow
 | 
			
		||||
			handledCPCountPlusOne = handledCPCount + 1
 | 
			
		||||
			if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
 | 
			
		||||
				error('overflow')
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			delta += (m - n) * handledCPCountPlusOne
 | 
			
		||||
			n = m
 | 
			
		||||
 | 
			
		||||
			for (j = 0; j < inputLength; ++j) {
 | 
			
		||||
				currentValue = input[j]
 | 
			
		||||
 | 
			
		||||
				if (currentValue < n && ++delta > maxInt) {
 | 
			
		||||
					error('overflow')
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if (currentValue == n) {
 | 
			
		||||
					// Represent delta as a generalized variable-length integer
 | 
			
		||||
					for (q = delta, k = base /* no condition */; ; k += base) {
 | 
			
		||||
						t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias
 | 
			
		||||
						if (q < t) {
 | 
			
		||||
							break
 | 
			
		||||
						}
 | 
			
		||||
						qMinusT = q - t
 | 
			
		||||
						baseMinusT = base - t
 | 
			
		||||
						output.push(stringFromCharCode(digitToBasic(t + (qMinusT % baseMinusT), 0)))
 | 
			
		||||
						q = floor(qMinusT / baseMinusT)
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					output.push(stringFromCharCode(digitToBasic(q, 0)))
 | 
			
		||||
					bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength)
 | 
			
		||||
					delta = 0
 | 
			
		||||
					++handledCPCount
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			++delta
 | 
			
		||||
			++n
 | 
			
		||||
		}
 | 
			
		||||
		return output.join('')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Converts a Punycode string representing a domain name or an email address
 | 
			
		||||
	 * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
 | 
			
		||||
	 * it doesn't matter if you call it on a string that has already been
 | 
			
		||||
	 * converted to Unicode.
 | 
			
		||||
	 * @memberOf punycode
 | 
			
		||||
	 * @param {String} input The Punycoded domain name or email address to
 | 
			
		||||
	 * convert to Unicode.
 | 
			
		||||
	 * @returns {String} The Unicode representation of the given Punycode
 | 
			
		||||
	 * string.
 | 
			
		||||
	 */
 | 
			
		||||
	function toUnicode(input) {
 | 
			
		||||
		return mapDomain(input, function(string) {
 | 
			
		||||
			return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Converts a Unicode string representing a domain name or an email address to
 | 
			
		||||
	 * Punycode. Only the non-ASCII parts of the domain name will be converted,
 | 
			
		||||
	 * i.e. it doesn't matter if you call it with a domain that's already in
 | 
			
		||||
	 * ASCII.
 | 
			
		||||
	 * @memberOf punycode
 | 
			
		||||
	 * @param {String} input The domain name or email address to convert, as a
 | 
			
		||||
	 * Unicode string.
 | 
			
		||||
	 * @returns {String} The Punycode representation of the given domain name or
 | 
			
		||||
	 * email address.
 | 
			
		||||
	 */
 | 
			
		||||
	function toASCII(input) {
 | 
			
		||||
		return mapDomain(input, function(string) {
 | 
			
		||||
			return regexNonASCII.test(string) ? 'xn--' + encode(string) : string
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*--------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
	/** Define the public API */
 | 
			
		||||
	punycode = {
 | 
			
		||||
		/**
 | 
			
		||||
		 * A string representing the current Punycode.js version number.
 | 
			
		||||
		 * @memberOf punycode
 | 
			
		||||
		 * @type String
 | 
			
		||||
		 */
 | 
			
		||||
		version: '1.4.1',
 | 
			
		||||
		/**
 | 
			
		||||
		 * An object of methods to convert from JavaScript's internal character
 | 
			
		||||
		 * representation (UCS-2) to Unicode code points, and back.
 | 
			
		||||
		 * @see <https://mathiasbynens.be/notes/javascript-encoding>
 | 
			
		||||
		 * @memberOf punycode
 | 
			
		||||
		 * @type Object
 | 
			
		||||
		 */
 | 
			
		||||
		ucs2: {
 | 
			
		||||
			decode: ucs2decode,
 | 
			
		||||
			encode: ucs2encode
 | 
			
		||||
		},
 | 
			
		||||
		decode: decode,
 | 
			
		||||
		encode: encode,
 | 
			
		||||
		toASCII: toASCII,
 | 
			
		||||
		toUnicode: toUnicode
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/** Expose `punycode` */
 | 
			
		||||
	// Some AMD build optimizers, like r.js, check for specific condition patterns
 | 
			
		||||
	// like the following:
 | 
			
		||||
	if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
 | 
			
		||||
		define('punycode', function() {
 | 
			
		||||
			return punycode
 | 
			
		||||
		})
 | 
			
		||||
	} else if (freeExports && freeModule) {
 | 
			
		||||
		if (module.exports == freeExports) {
 | 
			
		||||
			// in Node.js, io.js, or RingoJS v0.8.0+
 | 
			
		||||
			freeModule.exports = punycode
 | 
			
		||||
		} else {
 | 
			
		||||
			// in Narwhal or RingoJS v0.7.0-
 | 
			
		||||
			for (key in punycode) {
 | 
			
		||||
				punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key])
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		// in Rhino or a web browser
 | 
			
		||||
		root.punycode = punycode
 | 
			
		||||
	}
 | 
			
		||||
})(this)
 | 
			
		||||
@@ -1,51 +0,0 @@
 | 
			
		||||
var electron = require("electron");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const os = require('os')
 | 
			
		||||
const shell = electron.shell;
 | 
			
		||||
const path = require('path')
 | 
			
		||||
function shot(){
 | 
			
		||||
    //screenshotMsg.textContent = 'Gathering screens...'
 | 
			
		||||
    $(window).height
 | 
			
		||||
	let options = {
 | 
			
		||||
        types: ['screen'],
 | 
			
		||||
        thumbnailSize: {
 | 
			
		||||
            width: window.parent.screen.width,
 | 
			
		||||
            height: window.parent.screen.height
 | 
			
		||||
          }
 | 
			
		||||
	}
 | 
			
		||||
	const desktopCapturer = electron.desktopCapturer;
 | 
			
		||||
	desktopCapturer.getSources(options, function(error, sources) {
 | 
			
		||||
		if (error) return console.log(error)
 | 
			
		||||
 | 
			
		||||
		sources.forEach(function(source) {
 | 
			
		||||
			if(location.search){
 | 
			
		||||
                var m = location.search.match(/\?id=([a-zA-Z-0-9]+)/);
 | 
			
		||||
                var title=m[1];
 | 
			
		||||
            }else{
 | 
			
		||||
                var title="screenshot";
 | 
			
		||||
            }
 | 
			
		||||
			if (source.name === 'Screen 1' || source.name === 'TheDesk') {
 | 
			
		||||
                var durl=source.thumbnail.toDataURL();
 | 
			
		||||
                var b64 = durl.match(
 | 
			
		||||
                    /data:image\/png;base64,(.+)/
 | 
			
		||||
                );
 | 
			
		||||
                const screenshotPath = path.join(os.tmpdir(), 'screenshot.png');
 | 
			
		||||
                const savePath = path.join(os.tmpdir(), 'screenshot.png');
 | 
			
		||||
                    var ipc = electron.ipcRenderer;
 | 
			
		||||
                    var h = $(window).height()-150;
 | 
			
		||||
                    var w = $(window).width();
 | 
			
		||||
                    ipc.send('shot', ['file://' + screenshotPath,w,h,b64[1],title]);
 | 
			
		||||
                    if($(".img-parsed").length>0){
 | 
			
		||||
                        for(i=0;i<$(".img-parsed").length;i++){
 | 
			
		||||
                            var url=$(".img-parsed").eq(i).attr("data-url");
 | 
			
		||||
                            ipc.send('shot-img-dl', [url,title+"_img"+i+".png"]);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    window.close();
 | 
			
		||||
                    return;
 | 
			
		||||
					const message = `Saved screenshot to: ${screenshotPath}`
 | 
			
		||||
					//screenshotMsg.textContent = message
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	})
 | 
			
		||||
      }
 | 
			
		||||
@@ -1,316 +1,347 @@
 | 
			
		||||
//BBCodeとMarkdownの入力・パーサー
 | 
			
		||||
//アカウント変えた時にBBとかMDとか
 | 
			
		||||
function mdCheck(){
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	var profimg=localStorage.getItem("prof_"+acct_id);
 | 
			
		||||
	if(!profimg){
 | 
			
		||||
		profimg="../../img/missing.svg";
 | 
			
		||||
function mdCheck() {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	/*var profimg = localStorage.getItem('prof_' + acct_id)
 | 
			
		||||
	if (!profimg) {
 | 
			
		||||
		profimg = '../../img/missing.svg'
 | 
			
		||||
	}
 | 
			
		||||
	$("#acct-sel-prof").attr("src",profimg);
 | 
			
		||||
		if(localStorage.getItem("post_" + acct_id)){
 | 
			
		||||
			$("#toot-post-btn").text(localStorage.getItem("post_" + acct_id)+"("+localStorage.getItem("domain_"+acct_id)+")");
 | 
			
		||||
		}else{
 | 
			
		||||
			$("#toot-post-btn").text(lang.lang_toot+"("+localStorage.getItem("domain_"+acct_id)+")");
 | 
			
		||||
	$('#acct-sel-prof').attr('src', profimg)
 | 
			
		||||
	*/
 | 
			
		||||
	if (localStorage.getItem('post_' + acct_id)) {
 | 
			
		||||
		$('#toot-post-btn').text(
 | 
			
		||||
			localStorage.getItem('post_' + acct_id) +
 | 
			
		||||
				'(' +
 | 
			
		||||
				localStorage.getItem('domain_' + acct_id) +
 | 
			
		||||
				')'
 | 
			
		||||
		)
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#toot-post-btn').text(lang.lang_toot + '(' + localStorage.getItem('domain_' + acct_id) + ')')
 | 
			
		||||
	}
 | 
			
		||||
	if (!localStorage.getItem('bb_' + acct_id) && !localStorage.getItem('md_' + acct_id)) {
 | 
			
		||||
		$('.markdown').addClass('hide')
 | 
			
		||||
		$('.anti-markdown').addClass('hide')
 | 
			
		||||
	} else {
 | 
			
		||||
		$('.anti-markdown').removeClass('hide')
 | 
			
		||||
	}
 | 
			
		||||
	if ($('.markdown').hasClass('hide')) {
 | 
			
		||||
		localStorage.setItem('md', 'hide')
 | 
			
		||||
	} else {
 | 
			
		||||
		localStorage.removeItem('md')
 | 
			
		||||
	}
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	if (domain == 'itabashi.0j0.jp') {
 | 
			
		||||
		$('#limited-button').removeClass('hide')
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#limited-button').addClass('hide')
 | 
			
		||||
	}
 | 
			
		||||
	if (domain == 'kirishima.cloud') {
 | 
			
		||||
		$('#faicon-btn').show()
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#faicon-btn').hide()
 | 
			
		||||
	}
 | 
			
		||||
	if (domain == 'imastodon.net') {
 | 
			
		||||
		trendTag()
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#trendtag').html('')
 | 
			
		||||
	}
 | 
			
		||||
	if (localStorage.getItem('mode_' + domain) == 'misskey') {
 | 
			
		||||
		M.toast({ html: lang.lang_bbmd_misskey, displayLength: 5000 })
 | 
			
		||||
	}
 | 
			
		||||
	if (idata[domain + '_letters']) {
 | 
			
		||||
		$('#textarea').attr('data-length', idata[domain + '_letters'])
 | 
			
		||||
	} else {
 | 
			
		||||
		var maxletters = localStorage.getItem(domain + 'letters_')
 | 
			
		||||
		if (maxletters > 0) {
 | 
			
		||||
			$('#textarea').attr('data-length', maxletters)
 | 
			
		||||
		} else {
 | 
			
		||||
			$('#textarea').attr('data-length', 500)
 | 
			
		||||
		}
 | 
			
		||||
	  if(!localStorage.getItem("bb_"+acct_id) && !localStorage.getItem("md_"+acct_id)){
 | 
			
		||||
		 $(".markdown").addClass("hide");
 | 
			
		||||
		$(".anti-markdown").addClass("hide");
 | 
			
		||||
	  }else{
 | 
			
		||||
		$(".anti-markdown").removeClass("hide");
 | 
			
		||||
	  }
 | 
			
		||||
	  if($(".markdown").hasClass("hide")){
 | 
			
		||||
		localStorage.setItem("md","hide");
 | 
			
		||||
	}else{
 | 
			
		||||
		localStorage.removeItem("md");
 | 
			
		||||
	}
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	if(domain=="itabashi.0j0.jp"){
 | 
			
		||||
		$("#limited-button").removeClass("hide");
 | 
			
		||||
	}else{
 | 
			
		||||
		$("#limited-button").addClass("hide");
 | 
			
		||||
	if (idata[domain + '_glitch'] === 'true') {
 | 
			
		||||
		$('#local-button').removeClass('hide')
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#local-button').addClass('hide')
 | 
			
		||||
	}
 | 
			
		||||
	if(domain=="kirishima.cloud"){
 | 
			
		||||
		$("#faicon-btn").show();
 | 
			
		||||
	}else{
 | 
			
		||||
		$("#faicon-btn").hide();
 | 
			
		||||
	}
 | 
			
		||||
	if(domain=="imastodon.net"){
 | 
			
		||||
		trendTag();
 | 
			
		||||
	}else{
 | 
			
		||||
		$("#trendtag").html("");
 | 
			
		||||
	}
 | 
			
		||||
	if(localStorage.getItem("mode_" + domain)=="misskey"){
 | 
			
		||||
		Materialize.toast(lang.lang_bbmd_misskey, 5000);
 | 
			
		||||
	}
 | 
			
		||||
	if(idata[domain+"_letters"]){
 | 
			
		||||
		$("#textarea").attr("data-length", idata[domain+"_letters"])
 | 
			
		||||
	}else{
 | 
			
		||||
		$("#textarea").attr("data-length", 500)
 | 
			
		||||
	}
 | 
			
		||||
	if(idata[domain+"_glitch"]==="true"){
 | 
			
		||||
		$("#local-button").removeClass("hide");
 | 
			
		||||
	}else{
 | 
			
		||||
		$("#local-button").addClass("hide");
 | 
			
		||||
	}
 | 
			
		||||
	var multi = localStorage.getItem("multi");
 | 
			
		||||
	var multi = localStorage.getItem('multi')
 | 
			
		||||
	if (multi) {
 | 
			
		||||
		var obj = JSON.parse(multi);
 | 
			
		||||
		if(obj[acct_id].background && obj[acct_id].background!="def" && obj[acct_id].text && obj[acct_id].text!="def"){
 | 
			
		||||
			$("#toot-post-btn").removeClass("indigo");
 | 
			
		||||
			$("#toot-post-btn").css("background-color","#"+obj[acct_id].background);
 | 
			
		||||
			$("#toot-post-btn").css("color",obj[acct_id].text);
 | 
			
		||||
		}else{
 | 
			
		||||
			$("#toot-post-btn").css("background-color","");
 | 
			
		||||
			$("#toot-post-btn").css("color","");
 | 
			
		||||
			$("#toot-post-btn").addClass("indigo");
 | 
			
		||||
 | 
			
		||||
		var obj = JSON.parse(multi)
 | 
			
		||||
		if (
 | 
			
		||||
			obj[acct_id].background &&
 | 
			
		||||
			obj[acct_id].background != 'def' &&
 | 
			
		||||
			obj[acct_id].text &&
 | 
			
		||||
			obj[acct_id].text != 'def'
 | 
			
		||||
		) {
 | 
			
		||||
			$('#toot-post-btn').removeClass('indigo')
 | 
			
		||||
			$('#toot-post-btn').css('background-color', '#' + obj[acct_id].background)
 | 
			
		||||
			$('#toot-post-btn').css('color', obj[acct_id].text)
 | 
			
		||||
		} else {
 | 
			
		||||
			$('#toot-post-btn').css('background-color', '')
 | 
			
		||||
			$('#toot-post-btn').css('color', '')
 | 
			
		||||
			$('#toot-post-btn').addClass('indigo')
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	loadVis();
 | 
			
		||||
	loadVis()
 | 
			
		||||
}
 | 
			
		||||
//BOXのトグルボタン
 | 
			
		||||
function mdToggle(){
 | 
			
		||||
	$(".markdown").toggleClass("hide");
 | 
			
		||||
	$(".anti-markdown").toggleClass("hide");
 | 
			
		||||
	if($(".markdown").hasClass("hide")){
 | 
			
		||||
		localStorage.setItem("md","hide");
 | 
			
		||||
	}else{
 | 
			
		||||
		localStorage.removeItem("md");
 | 
			
		||||
function mdToggle() {
 | 
			
		||||
	$('.markdown').toggleClass('hide')
 | 
			
		||||
	$('.anti-markdown').toggleClass('hide')
 | 
			
		||||
	if ($('.markdown').hasClass('hide')) {
 | 
			
		||||
		localStorage.setItem('md', 'hide')
 | 
			
		||||
	} else {
 | 
			
		||||
		localStorage.removeItem('md')
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
//最初に読み込みます(MD対応インスタンスかチェック)
 | 
			
		||||
if(localStorage.getItem("md")=="hide"){
 | 
			
		||||
	$(".markdown").addClass("hide");
 | 
			
		||||
	$(".anti-markdown").removeClass("hide");
 | 
			
		||||
if (localStorage.getItem('md') == 'hide') {
 | 
			
		||||
	$('.markdown').addClass('hide')
 | 
			
		||||
	$('.anti-markdown').removeClass('hide')
 | 
			
		||||
}
 | 
			
		||||
//タグを選んだ時に(BB版)
 | 
			
		||||
  function tagsel(tag){
 | 
			
		||||
	  var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	  if(!localStorage.getItem("bb_"+acct_id)){
 | 
			
		||||
		  return false;
 | 
			
		||||
	  }
 | 
			
		||||
		if(tag=="large" || tag=="size" || tag=="color" || tag=="colorhex"){
 | 
			
		||||
			var sub=$("#"+tag).val();
 | 
			
		||||
			var sub = sub.replace( /#/g , "" ) ;
 | 
			
		||||
			surroundHTML(tag+"="+sub,tag);
 | 
			
		||||
		}else if(tag=="flip=vertical" || tag=="flip=horizontal"){
 | 
			
		||||
			surroundHTML(tag,"flip");
 | 
			
		||||
		}else{
 | 
			
		||||
			surroundHTML(tag,tag);
 | 
			
		||||
		}
 | 
			
		||||
		$("#textarea").focus();
 | 
			
		||||
  }
 | 
			
		||||
  //HTMLをエスケープしてXSSを防ぐ
 | 
			
		||||
  function escape_html (string) {
 | 
			
		||||
  if(typeof string !== 'string') {
 | 
			
		||||
    return string;
 | 
			
		||||
  }
 | 
			
		||||
  return string.replace(/[&'`"<>]/g, function(match) {
 | 
			
		||||
    return {
 | 
			
		||||
      '&': '&',
 | 
			
		||||
      "'": ''',
 | 
			
		||||
      '`': '`',
 | 
			
		||||
      '"': '"',
 | 
			
		||||
      '<': '<',
 | 
			
		||||
      '>': '>',
 | 
			
		||||
    }[match]
 | 
			
		||||
  });
 | 
			
		||||
function tagsel(tag) {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	if (!localStorage.getItem('bb_' + acct_id)) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	if (tag == 'large' || tag == 'size' || tag == 'color' || tag == 'colorhex') {
 | 
			
		||||
		var sub = $('#' + tag).val()
 | 
			
		||||
		var sub = sub.replace(/#/g, '')
 | 
			
		||||
		surroundHTML(tag + '=' + sub, tag)
 | 
			
		||||
	} else if (tag == 'flip=vertical' || tag == 'flip=horizontal') {
 | 
			
		||||
		surroundHTML(tag, 'flip')
 | 
			
		||||
	} else {
 | 
			
		||||
		surroundHTML(tag, tag)
 | 
			
		||||
	}
 | 
			
		||||
	$('#textarea').focus()
 | 
			
		||||
}
 | 
			
		||||
//HTMLをエスケープしてXSSを防ぐ
 | 
			
		||||
function escape_html(string) {
 | 
			
		||||
	if (typeof string !== 'string') {
 | 
			
		||||
		return string
 | 
			
		||||
	}
 | 
			
		||||
	return string.replace(/[&'`"<>]/g, function(match) {
 | 
			
		||||
		return {
 | 
			
		||||
			'&': '&',
 | 
			
		||||
			"'": ''',
 | 
			
		||||
			'`': '`',
 | 
			
		||||
			'"': '"',
 | 
			
		||||
			'<': '<',
 | 
			
		||||
			'>': '>'
 | 
			
		||||
		}[match]
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
//テキストボックスで選択したやつをタグで囲む(BB版)
 | 
			
		||||
function surroundHTML(tagS,tagE) {
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	  if(!localStorage.getItem("bb_"+acct_id)){
 | 
			
		||||
		  return false;
 | 
			
		||||
	  }
 | 
			
		||||
	var target = document.getElementById("textarea");
 | 
			
		||||
	var pos = getAreaRange(target);
 | 
			
		||||
 | 
			
		||||
	var val = target.value;
 | 
			
		||||
	var range = val.slice(pos.start, pos.end);
 | 
			
		||||
    var beforeNode = val.slice(0, pos.start);
 | 
			
		||||
    var afterNode  = val.slice(pos.end);
 | 
			
		||||
	var insertNode;
 | 
			
		||||
    if (range || pos.start != pos.end) {
 | 
			
		||||
       	insertNode = '[' + tagS + ']' + range + '[/' + tagE + ']';
 | 
			
		||||
       	target.value = beforeNode + insertNode + afterNode;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    else if (pos.start == pos.end) {
 | 
			
		||||
       	insertNode = '[' + tagS + ']' + '[/' + tagE + ']';
 | 
			
		||||
       	target.value = beforeNode + insertNode + afterNode;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
  function markdown(tag,ck,br,space){
 | 
			
		||||
			if(space=="before"){
 | 
			
		||||
				tagE=tag;
 | 
			
		||||
				tag=" "+tag;
 | 
			
		||||
			}else{
 | 
			
		||||
				tagE=tag;
 | 
			
		||||
			}
 | 
			
		||||
			surroundMD(tag,tagE,ck,br);
 | 
			
		||||
			$("#textarea").focus();
 | 
			
		||||
  }
 | 
			
		||||
function surroundMD(tagS,tagE,ck,br) {
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	  if(!localStorage.getItem("md_"+acct_id)){
 | 
			
		||||
		  return false;
 | 
			
		||||
	  }
 | 
			
		||||
	var target = document.getElementById("textarea");
 | 
			
		||||
	var pos = getAreaRange(target);
 | 
			
		||||
 | 
			
		||||
	var val = target.value;
 | 
			
		||||
	var range = val.slice(pos.start, pos.end);
 | 
			
		||||
    var beforeNode = val.slice(0, pos.start);
 | 
			
		||||
    var afterNode  = val.slice(pos.end);
 | 
			
		||||
	var insertNode;
 | 
			
		||||
	if(br=="yes"){
 | 
			
		||||
		var br="\n";
 | 
			
		||||
	}else{
 | 
			
		||||
		var br="";
 | 
			
		||||
function surroundHTML(tagS, tagE) {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	if (!localStorage.getItem('bb_' + acct_id)) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var target = document.getElementById('textarea')
 | 
			
		||||
	var pos = getAreaRange(target)
 | 
			
		||||
 | 
			
		||||
	var val = target.value
 | 
			
		||||
	var range = val.slice(pos.start, pos.end)
 | 
			
		||||
	var beforeNode = val.slice(0, pos.start)
 | 
			
		||||
	var afterNode = val.slice(pos.end)
 | 
			
		||||
	var insertNode
 | 
			
		||||
	if (range || pos.start != pos.end) {
 | 
			
		||||
		insertNode = '[' + tagS + ']' + range + '[/' + tagE + ']'
 | 
			
		||||
		target.value = beforeNode + insertNode + afterNode
 | 
			
		||||
	} else if (pos.start == pos.end) {
 | 
			
		||||
		insertNode = '[' + tagS + ']' + '[/' + tagE + ']'
 | 
			
		||||
		target.value = beforeNode + insertNode + afterNode
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function markdown(tag, ck, br, space) {
 | 
			
		||||
	if (space == 'before') {
 | 
			
		||||
		tagE = tag
 | 
			
		||||
		tag = ' ' + tag
 | 
			
		||||
	} else {
 | 
			
		||||
		tagE = tag
 | 
			
		||||
	}
 | 
			
		||||
	surroundMD(tag, tagE, ck, br)
 | 
			
		||||
	$('#textarea').focus()
 | 
			
		||||
}
 | 
			
		||||
function surroundMD(tagS, tagE, ck, br) {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	if (!localStorage.getItem('md_' + acct_id)) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var target = document.getElementById('textarea')
 | 
			
		||||
	var pos = getAreaRange(target)
 | 
			
		||||
 | 
			
		||||
	var val = target.value
 | 
			
		||||
	var range = val.slice(pos.start, pos.end)
 | 
			
		||||
	var beforeNode = val.slice(0, pos.start)
 | 
			
		||||
	var afterNode = val.slice(pos.end)
 | 
			
		||||
	var insertNode
 | 
			
		||||
	if (br == 'yes') {
 | 
			
		||||
		var br = '\n'
 | 
			
		||||
	} else {
 | 
			
		||||
		var br = ''
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((range || pos.start != pos.end) && ck == 'yes') {
 | 
			
		||||
		insertNode = tagS + range + tagE
 | 
			
		||||
		target.value = beforeNode + insertNode + br + afterNode
 | 
			
		||||
	} else if (pos.start == pos.end || ck == 'no') {
 | 
			
		||||
		insertNode = tagS + range
 | 
			
		||||
		target.value = beforeNode + insertNode + br + afterNode
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
    if ((range || pos.start != pos.end )&& ck=="yes") {
 | 
			
		||||
       	insertNode = tagS + range  + tagE ;
 | 
			
		||||
       	target.value = beforeNode + insertNode + br + afterNode;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    else if (pos.start == pos.end || ck=="no") {
 | 
			
		||||
       	insertNode = tagS + range;
 | 
			
		||||
       	target.value = beforeNode + insertNode + br + afterNode;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//テキストボックスの前後チェック
 | 
			
		||||
function getAreaRange(obj) {
 | 
			
		||||
	var pos = new Object();
 | 
			
		||||
	if(window.getSelection()) {
 | 
			
		||||
		pos.start = obj.selectionStart;
 | 
			
		||||
		pos.end   = obj.selectionEnd;
 | 
			
		||||
	var pos = new Object()
 | 
			
		||||
	if (window.getSelection()) {
 | 
			
		||||
		pos.start = obj.selectionStart
 | 
			
		||||
		pos.end = obj.selectionEnd
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return pos;
 | 
			
		||||
	return pos
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Markdownのリンク挿入
 | 
			
		||||
function markdownLink(){
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	  if(!localStorage.getItem("md_"+acct_id)){
 | 
			
		||||
		  return false;
 | 
			
		||||
	  }
 | 
			
		||||
	var linkIns="["+$("#linkt").val()+"]"+"("+$("#link2").val()+")";
 | 
			
		||||
	if(linkIns!="[]()"){
 | 
			
		||||
	$("#textarea").val($("#textarea").val()+linkIns);
 | 
			
		||||
	$("#linkt").val("");
 | 
			
		||||
	$("#link2").val("");
 | 
			
		||||
	$("#textarea").focus();
 | 
			
		||||
function markdownLink() {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	if (!localStorage.getItem('md_' + acct_id)) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var linkIns = '[' + $('#linkt').val() + ']' + '(' + $('#link2').val() + ')'
 | 
			
		||||
	if (linkIns != '[]()') {
 | 
			
		||||
		$('#textarea').val($('#textarea').val() + linkIns)
 | 
			
		||||
		$('#linkt').val('')
 | 
			
		||||
		$('#link2').val('')
 | 
			
		||||
		$('#textarea').focus()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//Markdownのimg挿入
 | 
			
		||||
function markdownImage(){
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	  if(!localStorage.getItem("md_"+acct_id)){
 | 
			
		||||
		  return false;
 | 
			
		||||
	  }
 | 
			
		||||
	var imgIns="!["+$("#image").val()+"]"+"("+$("#image2").val()+")";
 | 
			
		||||
	if(imgIns!="![]()"){
 | 
			
		||||
	$("#textarea").val($("#textarea").val()+imgIns);
 | 
			
		||||
	$("#image").val("");
 | 
			
		||||
	$("#image2").val("");
 | 
			
		||||
	$("#textarea").focus();
 | 
			
		||||
function markdownImage() {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	if (!localStorage.getItem('md_' + acct_id)) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var imgIns = '![' + $('#image').val() + ']' + '(' + $('#image2').val() + ')'
 | 
			
		||||
	if (imgIns != '![]()') {
 | 
			
		||||
		$('#textarea').val($('#textarea').val() + imgIns)
 | 
			
		||||
		$('#image').val('')
 | 
			
		||||
		$('#image2').val('')
 | 
			
		||||
		$('#textarea').focus()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//文字数をチェック(hタグ用)
 | 
			
		||||
function str_count(all, part) {
 | 
			
		||||
    return (all.match(new RegExp(part, "g")) || []).length;
 | 
			
		||||
	return (all.match(new RegExp(part, 'g')) || []).length
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//プレビュー
 | 
			
		||||
function preview(){
 | 
			
		||||
	  $("#preview-field").show();
 | 
			
		||||
	  $("#toot-field").hide();
 | 
			
		||||
	  $("#preview-btn").hide();
 | 
			
		||||
	var bb=escape_html($("#textarea").val());
 | 
			
		||||
function preview() {
 | 
			
		||||
	$('#preview-field').show()
 | 
			
		||||
	$('#toot-field').hide()
 | 
			
		||||
	$('#preview-btn').hide()
 | 
			
		||||
	var bb = escape_html($('#textarea').val())
 | 
			
		||||
	//quote
 | 
			
		||||
	var bb=bb.replace(/>(.+)$/g,'<blockquote>$1<\/blockquote>');
 | 
			
		||||
	var bb = bb.replace(/>(.+)$/g, '<blockquote>$1</blockquote>')
 | 
			
		||||
	//spin
 | 
			
		||||
	var bb=bb.replace(/\[spin\](.+)\[\/spin\]/g,'<span class="fa fa-spin">$1<\/span>');
 | 
			
		||||
	var bb = bb.replace(/\[spin\](.+)\[\/spin\]/g, '<span class="fa fa-spin">$1</span>')
 | 
			
		||||
	//pulse
 | 
			
		||||
	var bb=bb.replace(/\[pulse\](.+)\[\/pulse\]/g,'<span class="bbcode-pulse-loading">$1<\/span>');
 | 
			
		||||
	var bb = bb.replace(/\[pulse\](.+)\[\/pulse\]/g, '<span class="bbcode-pulse-loading">$1</span>')
 | 
			
		||||
	//large
 | 
			
		||||
	var bb=bb.replace(/\[large=([0-9]{1,2})x\](.+)\[\/large\]/g,'<span class="fa fa-$1x">$2<\/span>');
 | 
			
		||||
	var bb = bb.replace(
 | 
			
		||||
		/\[large=([0-9]{1,2})x\](.+)\[\/large\]/g,
 | 
			
		||||
		'<span class="fa fa-$1x">$2</span>'
 | 
			
		||||
	)
 | 
			
		||||
	//vertical
 | 
			
		||||
	var bb=bb.replace(/\[flip=vertical\](.+)\[\/flip\]/g,'<span class="fa fa-flip-vertical">$1<\/span>');
 | 
			
		||||
	var bb = bb.replace(
 | 
			
		||||
		/\[flip=vertical\](.+)\[\/flip\]/g,
 | 
			
		||||
		'<span class="fa fa-flip-vertical">$1</span>'
 | 
			
		||||
	)
 | 
			
		||||
	//horizontal
 | 
			
		||||
	var bb=bb.replace(/\[flip=horizontal\](.+)\[\/flip\]/g,'<span class="fa fa-flip-horizontal">$1<\/span>');
 | 
			
		||||
	var bb = bb.replace(
 | 
			
		||||
		/\[flip=horizontal\](.+)\[\/flip\]/g,
 | 
			
		||||
		'<span class="fa fa-flip-horizontal">$1</span>'
 | 
			
		||||
	)
 | 
			
		||||
	//b
 | 
			
		||||
	var bb=bb.replace(/\[b\](.+)\[\/b\]/g,'<b>$1<\/b>');
 | 
			
		||||
	var bb = bb.replace(/\[b\](.+)\[\/b\]/g, '<b>$1</b>')
 | 
			
		||||
	//i
 | 
			
		||||
	var bb=bb.replace(/\[i\](.+)\[\/i\]/g,'<i>$1<\/i>');
 | 
			
		||||
	var bb = bb.replace(/\[i\](.+)\[\/i\]/g, '<i>$1</i>')
 | 
			
		||||
	//u
 | 
			
		||||
	var bb=bb.replace(/\[u\](.+)\[\/u\]/g,'<u>$1<\/u>');
 | 
			
		||||
	var bb = bb.replace(/\[u\](.+)\[\/u\]/g, '<u>$1</u>')
 | 
			
		||||
	//s
 | 
			
		||||
	var bb=bb.replace(/\[s\](.+)\[\/s\]/g,'<s>$1<\/s>');
 | 
			
		||||
	var bb = bb.replace(/\[s\](.+)\[\/s\]/g, '<s>$1</s>')
 | 
			
		||||
	//size
 | 
			
		||||
	var bb=bb.replace(/\[size=([0-9]{1,2})\](.+)\[\/size\]/g,'<span style="font-size:$1px">$2<\/span>');
 | 
			
		||||
	var bb = bb.replace(
 | 
			
		||||
		/\[size=([0-9]{1,2})\](.+)\[\/size\]/g,
 | 
			
		||||
		'<span style="font-size:$1px">$2</span>'
 | 
			
		||||
	)
 | 
			
		||||
	//colorhex
 | 
			
		||||
	var bb=bb.replace(/\[colorhex=([A-Fa-f0-9]+)\](.+)\[\/colorhex\]/g,'<span style="color:#$1">$2<\/span>');
 | 
			
		||||
	var bb = bb.replace(
 | 
			
		||||
		/\[colorhex=([A-Fa-f0-9]+)\](.+)\[\/colorhex\]/g,
 | 
			
		||||
		'<span style="color:#$1">$2</span>'
 | 
			
		||||
	)
 | 
			
		||||
	//code
 | 
			
		||||
	var bb=bb.replace(/`(.+)`/g,'<code>$1<\/code>');
 | 
			
		||||
	var bb = bb.replace(/`(.+)`/g, '<code>$1</code>')
 | 
			
		||||
	//head
 | 
			
		||||
	var m;
 | 
			
		||||
	m=bb.match(/^#{1,6}(.+)$/gm);
 | 
			
		||||
	if(m){
 | 
			
		||||
	for(let i = 0; i < m.length; i++) {
 | 
			
		||||
		var t=m[i].match(/^#{1,6}(.+)$/);
 | 
			
		||||
		var indexct='<h'+str_count(m[i],"#")+'>'+t[1]+'</h'+str_count(m[i],"#")+'>';
 | 
			
		||||
		var bb=bb.replace(new RegExp(m[i], ""),indexct);
 | 
			
		||||
	}
 | 
			
		||||
	var m
 | 
			
		||||
	m = bb.match(/^#{1,6}(.+)$/gm)
 | 
			
		||||
	if (m) {
 | 
			
		||||
		for (let i = 0; i < m.length; i++) {
 | 
			
		||||
			var t = m[i].match(/^#{1,6}(.+)$/)
 | 
			
		||||
			var indexct = '<h' + str_count(m[i], '#') + '>' + t[1] + '</h' + str_count(m[i], '#') + '>'
 | 
			
		||||
			var bb = bb.replace(new RegExp(m[i], ''), indexct)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	//list(ul)
 | 
			
		||||
	var li;
 | 
			
		||||
	li=bb.match(/^\- (.+)$/gm);
 | 
			
		||||
	if(li){
 | 
			
		||||
	for(let l = 0; l < li.length; l++) {
 | 
			
		||||
		var u=li[l].match(/^\- (.+)$/);
 | 
			
		||||
		var listUl='<li>'+u[1]+'</li>';
 | 
			
		||||
		if(l == 0){
 | 
			
		||||
			listUl='<ul>'+listUl;
 | 
			
		||||
	var li
 | 
			
		||||
	li = bb.match(/^\- (.+)$/gm)
 | 
			
		||||
	if (li) {
 | 
			
		||||
		for (let l = 0; l < li.length; l++) {
 | 
			
		||||
			var u = li[l].match(/^\- (.+)$/)
 | 
			
		||||
			var listUl = '<li>' + u[1] + '</li>'
 | 
			
		||||
			if (l == 0) {
 | 
			
		||||
				listUl = '<ul>' + listUl
 | 
			
		||||
			}
 | 
			
		||||
			if (l == li.length - 1) {
 | 
			
		||||
				listUl = listUl + '</ul>'
 | 
			
		||||
			}
 | 
			
		||||
			var bb = bb.replace(new RegExp(li[l], ''), listUl)
 | 
			
		||||
		}
 | 
			
		||||
		if(l==li.length-1){
 | 
			
		||||
			listUl=listUl+'</ul>';
 | 
			
		||||
		}
 | 
			
		||||
		var bb=bb.replace(new RegExp(li[l], ""),listUl);
 | 
			
		||||
	}
 | 
			
		||||
	}
 | 
			
		||||
	//list(ol)
 | 
			
		||||
	var li;
 | 
			
		||||
	li=bb.match(/^1\. (.+)$/gm);
 | 
			
		||||
	if(li){
 | 
			
		||||
	for(let l = 0; l < li.length; l++) {
 | 
			
		||||
		var u=li[l].match(/^1\. (.+)$/);
 | 
			
		||||
		var listUl='<li>'+u[1]+'</li>';
 | 
			
		||||
		if(l === 0){
 | 
			
		||||
			listUl='<ol>'+listUl;
 | 
			
		||||
	var li
 | 
			
		||||
	li = bb.match(/^1\. (.+)$/gm)
 | 
			
		||||
	if (li) {
 | 
			
		||||
		for (let l = 0; l < li.length; l++) {
 | 
			
		||||
			var u = li[l].match(/^1\. (.+)$/)
 | 
			
		||||
			var listUl = '<li>' + u[1] + '</li>'
 | 
			
		||||
			if (l === 0) {
 | 
			
		||||
				listUl = '<ol>' + listUl
 | 
			
		||||
			}
 | 
			
		||||
			if (l === li.length - 1) {
 | 
			
		||||
				listUl = listUl + '</ol>'
 | 
			
		||||
			}
 | 
			
		||||
			var bb = bb.replace(new RegExp(li[l], ''), listUl)
 | 
			
		||||
		}
 | 
			
		||||
		if(l===li.length-1){
 | 
			
		||||
			listUl=listUl+'</ol>';
 | 
			
		||||
		}
 | 
			
		||||
		var bb=bb.replace(new RegExp(li[l], ""),listUl);
 | 
			
		||||
	}
 | 
			
		||||
	}
 | 
			
		||||
	//img
 | 
			
		||||
	var bb=bb.replace(/!\[(.+)\]\((https:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g,'<img src="$2" text="$1" style="width:100%">');
 | 
			
		||||
	var bb = bb.replace(
 | 
			
		||||
		/!\[(.+)\]\((https:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g,
 | 
			
		||||
		'<img src="$2" text="$1" style="width:100%">'
 | 
			
		||||
	)
 | 
			
		||||
	//link
 | 
			
		||||
	var bb=bb.replace(/\[(.+)\]\((https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g,'<a href="$2" target="_blank">$1<\/a>');
 | 
			
		||||
	bb=nl2br(bb);
 | 
			
		||||
	bb=bb.replace(new RegExp("</li><br />", "g"),"");
 | 
			
		||||
	$("#md-preview").html(bb);
 | 
			
		||||
  }
 | 
			
		||||
  //Editで戻る
 | 
			
		||||
  function previewEdit(){
 | 
			
		||||
	   $("#preview-field").hide();
 | 
			
		||||
	  $("#toot-field").show();
 | 
			
		||||
	  $("#preview-btn").show();
 | 
			
		||||
	  $("#md-preview").html("");
 | 
			
		||||
  }
 | 
			
		||||
	var bb = bb.replace(
 | 
			
		||||
		/\[(.+)\]\((https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\)/g,
 | 
			
		||||
		'<a href="$2" target="_blank">$1</a>'
 | 
			
		||||
	)
 | 
			
		||||
	bb = nl2br(bb)
 | 
			
		||||
	bb = bb.replace(new RegExp('</li><br />', 'g'), '')
 | 
			
		||||
	$('#md-preview').html(bb)
 | 
			
		||||
}
 | 
			
		||||
//Editで戻る
 | 
			
		||||
function previewEdit() {
 | 
			
		||||
	$('#preview-field').hide()
 | 
			
		||||
	$('#toot-field').show()
 | 
			
		||||
	$('#preview-btn').show()
 | 
			
		||||
	$('#md-preview').html('')
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,151 +1,349 @@
 | 
			
		||||
//絵文字ピッカー
 | 
			
		||||
//最初に読み込む
 | 
			
		||||
$("#emoji-before").addClass("disabled");
 | 
			
		||||
$("#emoji-next").addClass("disabled");
 | 
			
		||||
$('#emoji-before').addClass('disabled')
 | 
			
		||||
$('#emoji-next').addClass('disabled')
 | 
			
		||||
 | 
			
		||||
//絵文字ボタンのトグル
 | 
			
		||||
function emojiToggle() {
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	var selin = $("#textarea").prop('selectionStart');
 | 
			
		||||
	if(!selin){
 | 
			
		||||
		selin=0;
 | 
			
		||||
function emojiToggle(reaction) {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	var selin = $('#textarea').prop('selectionStart')
 | 
			
		||||
	if (!selin) {
 | 
			
		||||
		selin = 0
 | 
			
		||||
	}
 | 
			
		||||
	localStorage.setItem("cursor", selin);
 | 
			
		||||
 | 
			
		||||
	if ($("#emoji").hasClass("hide")) {
 | 
			
		||||
		$("#emoji").removeClass("hide")
 | 
			
		||||
		$("#right-side").show()
 | 
			
		||||
		$("#suggest").html("");
 | 
			
		||||
		if (!localStorage.getItem("emoji_" + acct_id)) {
 | 
			
		||||
			var html =
 | 
			
		||||
				'<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet(\'true\');">'+lang.lang_emoji_get+'</button>';
 | 
			
		||||
			$("#emoji-list").html(html);
 | 
			
		||||
	if ($('#emoji').hasClass('hide')) {
 | 
			
		||||
		$('#emoji').removeClass('hide')
 | 
			
		||||
		$('#right-side').show()
 | 
			
		||||
		$('#right-side').css('width', '300px')
 | 
			
		||||
		$('#left-side').css('width', 'calc(100% - 300px)')
 | 
			
		||||
		var width = localStorage.getItem('postbox-width')
 | 
			
		||||
		if (width) {
 | 
			
		||||
			width = width.replace('px', '') * 1 + 300
 | 
			
		||||
		} else {
 | 
			
		||||
			emojiList('home');
 | 
			
		||||
			width = 600
 | 
			
		||||
		}
 | 
			
		||||
		$('#post-box').css('width', width + 'px')
 | 
			
		||||
		$('#suggest').html('')
 | 
			
		||||
		if (!localStorage.getItem('emojis_' + acct_id)) {
 | 
			
		||||
			var html = `<button class="btn waves-effect green" style="width:100%; padding:0; margin-top:0;" onclick="emojiGet('true');">${lang.lang_emoji_get}</button>`
 | 
			
		||||
			$('#emoji-list').html(html)
 | 
			
		||||
		} else {
 | 
			
		||||
			emojiList('home', reaction)
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		$("#poll").addClass("hide")
 | 
			
		||||
		$("#emoji").addClass("hide")
 | 
			
		||||
		$("#suggest").html("");
 | 
			
		||||
		$("#right-side").hide()
 | 
			
		||||
		$('#poll').addClass('hide')
 | 
			
		||||
		$('#right-side').hide()
 | 
			
		||||
		$('#right-side').css('width', '300px')
 | 
			
		||||
		$('#emoji').addClass('hide')
 | 
			
		||||
		$('#suggest').html('')
 | 
			
		||||
		$('#left-side').css('width', '100%')
 | 
			
		||||
		var width = localStorage.getItem('postbox-width')
 | 
			
		||||
		if (width) {
 | 
			
		||||
			width = width.replace('px', '') * 1
 | 
			
		||||
		} else {
 | 
			
		||||
			width = 300
 | 
			
		||||
		}
 | 
			
		||||
		$('#post-box').css('width', width + 'px')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//絵文字リスト挿入
 | 
			
		||||
function emojiGet(parse) {
 | 
			
		||||
	$('#emoji-list').html('Loading...');
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	var start = "https://" + domain + "/api/v1/custom_emojis";
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'GET',
 | 
			
		||||
		headers: {
 | 
			
		||||
			'content-type': 'application/json'
 | 
			
		||||
		},
 | 
			
		||||
	}).then(function(response) {
 | 
			
		||||
		return response.json();
 | 
			
		||||
	}).catch(function(error) {
 | 
			
		||||
		todo(error);
 | 
			
		||||
		console.error(error);
 | 
			
		||||
	}).then(function(json) {
 | 
			
		||||
		if (parse == "true") {
 | 
			
		||||
			$('#emoji-list').html('Parsing...');
 | 
			
		||||
			//絵文字をマストドン公式と同順にソート
 | 
			
		||||
			json.sort(function(a, b) {
 | 
			
		||||
				if (a.shortcode < b.shortcode) return -1;
 | 
			
		||||
				if (a.shortcode > b.shortcode) return 1;
 | 
			
		||||
				return 0;
 | 
			
		||||
			});
 | 
			
		||||
			localStorage.setItem("emoji_" + acct_id, JSON.stringify(json));
 | 
			
		||||
		} else {
 | 
			
		||||
			localStorage.setItem("emoji_" + acct_id, JSON.stringify(json));
 | 
			
		||||
		}
 | 
			
		||||
		localStorage.setItem("emojiseek", 0);
 | 
			
		||||
		emojiList('home')
 | 
			
		||||
	});
 | 
			
		||||
function emojiGet(parse, started) {
 | 
			
		||||
	$('#emoji-list').text('Loading...')
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	if (localStorage.getItem('mode_' + domain) != 'misskey') {
 | 
			
		||||
		var start = 'https://' + domain + '/api/v1/custom_emojis'
 | 
			
		||||
		fetch(start, {
 | 
			
		||||
			method: 'GET',
 | 
			
		||||
			headers: {
 | 
			
		||||
				'content-type': 'application/json'
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
			.then(function(response) {
 | 
			
		||||
				if (!response.ok) {
 | 
			
		||||
					response.text().then(function(text) {
 | 
			
		||||
						setLog(response.url, response.status, text)
 | 
			
		||||
					})
 | 
			
		||||
				}
 | 
			
		||||
				return response.json()
 | 
			
		||||
			})
 | 
			
		||||
			.catch(function(error) {
 | 
			
		||||
				todo(error)
 | 
			
		||||
				setLog(start, 'JSON', error)
 | 
			
		||||
				console.error(error)
 | 
			
		||||
			})
 | 
			
		||||
			.then(function(json) {
 | 
			
		||||
				if (parse == 'true') {
 | 
			
		||||
					$('#emoji-list').text('Parsing...')
 | 
			
		||||
					var md = {
 | 
			
		||||
						categorized: {},
 | 
			
		||||
						uncategorized: []
 | 
			
		||||
					}
 | 
			
		||||
					var if_categorized = false
 | 
			
		||||
					Object.keys(json).forEach(function(key) {
 | 
			
		||||
						var emoji = json[key]
 | 
			
		||||
						if (emoji.visible_in_picker) {
 | 
			
		||||
							var listed = true
 | 
			
		||||
						} else {
 | 
			
		||||
							var listed = false
 | 
			
		||||
						}
 | 
			
		||||
						if (emoji.category) {
 | 
			
		||||
							var cat = emoji.category
 | 
			
		||||
							if (!md['categorized'][cat]) {
 | 
			
		||||
								md['categorized'][cat] = []
 | 
			
		||||
							}
 | 
			
		||||
							md['categorized'][cat].push({
 | 
			
		||||
								shortcode: emoji.shortcode,
 | 
			
		||||
								url: emoji.url,
 | 
			
		||||
								listed: listed
 | 
			
		||||
							})
 | 
			
		||||
							if_categorized = true
 | 
			
		||||
						} else {
 | 
			
		||||
							md['uncategorized'].push({
 | 
			
		||||
								shortcode: emoji.shortcode,
 | 
			
		||||
								url: emoji.url,
 | 
			
		||||
								listed: listed
 | 
			
		||||
							})
 | 
			
		||||
						}
 | 
			
		||||
					})
 | 
			
		||||
					console.log(md)
 | 
			
		||||
					//絵文字をマストドン公式と同順にソート
 | 
			
		||||
					md['uncategorized'].sort(function(a, b) {
 | 
			
		||||
						if (a.shortcode < b.shortcode) return -1
 | 
			
		||||
						if (a.shortcode > b.shortcode) return 1
 | 
			
		||||
						return 0
 | 
			
		||||
					})
 | 
			
		||||
					Object.keys(md['categorized']).forEach(function(key) {
 | 
			
		||||
						md['categorized'][key].sort(function(a, b) {
 | 
			
		||||
							if (a.shortcode < b.shortcode) return -1
 | 
			
		||||
							if (a.shortcode > b.shortcode) return 1
 | 
			
		||||
							return 0
 | 
			
		||||
						})
 | 
			
		||||
					})
 | 
			
		||||
 | 
			
		||||
					md['if_categorized'] = if_categorized
 | 
			
		||||
					localStorage.setItem('emojis_' + acct_id, JSON.stringify(md))
 | 
			
		||||
				} else {
 | 
			
		||||
					localStorage.setItem('emojis_' + acct_id, JSON.stringify(md))
 | 
			
		||||
				}
 | 
			
		||||
				localStorage.setItem('emojiseek', 0)
 | 
			
		||||
				if (!started) {
 | 
			
		||||
					emojiList('home')
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
	} else {
 | 
			
		||||
		var start = 'https://' + domain + '/api/meta'
 | 
			
		||||
		fetch(start, {
 | 
			
		||||
			method: 'POST',
 | 
			
		||||
			headers: {
 | 
			
		||||
				'content-type': 'application/json'
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
			.then(function(response) {
 | 
			
		||||
				if (!response.ok) {
 | 
			
		||||
					response.text().then(function(text) {
 | 
			
		||||
						setLog(response.url, response.status, text)
 | 
			
		||||
					})
 | 
			
		||||
				}
 | 
			
		||||
				return response.json()
 | 
			
		||||
			})
 | 
			
		||||
			.catch(function(error) {
 | 
			
		||||
				todo(error)
 | 
			
		||||
				setLog(start, 'JSON', error)
 | 
			
		||||
				console.error(error)
 | 
			
		||||
			})
 | 
			
		||||
			.then(function(json) {
 | 
			
		||||
				if (json.enableEmojiReaction) {
 | 
			
		||||
					localStorage.setItem('emojiReaction_' + acct_id, 'true')
 | 
			
		||||
				} else {
 | 
			
		||||
					localStorage.setItem('emojiReaction_' + acct_id, 'disabled')
 | 
			
		||||
				}
 | 
			
		||||
				var emojis = json.emojis
 | 
			
		||||
				var md = { uncategorized: [] }
 | 
			
		||||
				Object.keys(emojis).forEach(function(key) {
 | 
			
		||||
					var emoji = emojis[key]
 | 
			
		||||
					md['uncategorized'].push({
 | 
			
		||||
						shortcode: emoji.name,
 | 
			
		||||
						url: emoji.url,
 | 
			
		||||
						listed: true
 | 
			
		||||
					})
 | 
			
		||||
				})
 | 
			
		||||
				md['if_categorized'] = false
 | 
			
		||||
				if (parse == 'true') {
 | 
			
		||||
					$('#emoji-list').text('Parsing...')
 | 
			
		||||
					//絵文字をマストドン公式と同順にソート
 | 
			
		||||
					md['uncategorized'].sort(function(a, b) {
 | 
			
		||||
						if (a.shortcode < b.shortcode) return -1
 | 
			
		||||
						if (a.shortcode > b.shortcode) return 1
 | 
			
		||||
						return 0
 | 
			
		||||
					})
 | 
			
		||||
					localStorage.setItem('emojis_' + acct_id, JSON.stringify(md))
 | 
			
		||||
				} else {
 | 
			
		||||
					localStorage.setItem('emojis_' + acct_id, JSON.stringify(md))
 | 
			
		||||
				}
 | 
			
		||||
				localStorage.setItem('emojiseek', 0)
 | 
			
		||||
				if (!started) {
 | 
			
		||||
					emojiList('home')
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//リストの描画
 | 
			
		||||
function emojiList(target) {
 | 
			
		||||
	$("#now-emoji").text(lang.lang_emoji_custom);
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	var start = localStorage.getItem("emojiseek");
 | 
			
		||||
	if (target == "next") {
 | 
			
		||||
		var start = start * 1 + 127;
 | 
			
		||||
		localStorage.setItem("emojiseek", start);
 | 
			
		||||
	} else if (target == "before") {
 | 
			
		||||
		var start = start - 127;
 | 
			
		||||
		localStorage.setItem("emojiseek", start);
 | 
			
		||||
function emojiList(target, reaction) {
 | 
			
		||||
	$('#now-emoji').text(lang.lang_emoji_custom)
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	if(reaction && $('#media').val() == 'misskey') {
 | 
			
		||||
		var misskeyReact = true
 | 
			
		||||
	} else {
 | 
			
		||||
		var start = 0;
 | 
			
		||||
		localStorage.getItem("emojiseek", 0)
 | 
			
		||||
		var misskeyReact = false
 | 
			
		||||
	}
 | 
			
		||||
	var html = '';
 | 
			
		||||
	var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
 | 
			
		||||
	var num = obj.length;
 | 
			
		||||
	if (
 | 
			
		||||
		misskeyReact &&
 | 
			
		||||
		localStorage.getItem('emojiReaction_' + acct_id) != 'true'
 | 
			
		||||
	) {
 | 
			
		||||
		console.error('Disabled')
 | 
			
		||||
		clear()
 | 
			
		||||
		hide()
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var start = localStorage.getItem('emojiseek')
 | 
			
		||||
	if (target == 'next') {
 | 
			
		||||
		var start = start * 1 + 127
 | 
			
		||||
		localStorage.setItem('emojiseek', start)
 | 
			
		||||
	} else if (target == 'before') {
 | 
			
		||||
		var start = start - 127
 | 
			
		||||
		localStorage.setItem('emojiseek', start)
 | 
			
		||||
	} else {
 | 
			
		||||
		var start = 0
 | 
			
		||||
		localStorage.getItem('emojiseek', 0)
 | 
			
		||||
	}
 | 
			
		||||
	var html = ''
 | 
			
		||||
	var raw = JSON.parse(localStorage.getItem('emojis_' + acct_id))
 | 
			
		||||
	console.log(raw)
 | 
			
		||||
	if (raw.if_categorized) {
 | 
			
		||||
		var obj = [
 | 
			
		||||
			{
 | 
			
		||||
				divider: true,
 | 
			
		||||
				cat: lang.lang_emoji_uncat
 | 
			
		||||
			}
 | 
			
		||||
		]
 | 
			
		||||
		var cats = raw['uncategorized']
 | 
			
		||||
		obj = obj.concat(cats)
 | 
			
		||||
		Object.keys(raw['categorized']).forEach(function(key) {
 | 
			
		||||
			var cats = raw['categorized'][key]
 | 
			
		||||
			obj = obj.concat([
 | 
			
		||||
				{
 | 
			
		||||
					divider: true,
 | 
			
		||||
					cat: key
 | 
			
		||||
				}
 | 
			
		||||
			])
 | 
			
		||||
			obj = obj.concat(cats)
 | 
			
		||||
		})
 | 
			
		||||
	} else {
 | 
			
		||||
		var obj = raw['uncategorized']
 | 
			
		||||
	}
 | 
			
		||||
	console.log(obj)
 | 
			
		||||
 | 
			
		||||
	var num = obj.length
 | 
			
		||||
	if (num < start) {
 | 
			
		||||
		var start = 0;
 | 
			
		||||
		localStorage.setItem("emojiseek", start);
 | 
			
		||||
		var start = 0
 | 
			
		||||
		localStorage.setItem('emojiseek', start)
 | 
			
		||||
	}
 | 
			
		||||
	var page = Math.ceil(num / 126);
 | 
			
		||||
	$("#emoji-sum").text(page);
 | 
			
		||||
	var ct = Math.ceil(start / 126);
 | 
			
		||||
	var page = Math.ceil(num / 126)
 | 
			
		||||
	$('#emoji-sum').text(page)
 | 
			
		||||
	var ct = Math.ceil(start / 126)
 | 
			
		||||
	if (ct === 0) {
 | 
			
		||||
		var ct = 1;
 | 
			
		||||
		$("#emoji-before").addClass("disabled");
 | 
			
		||||
		if (num > 0) {
 | 
			
		||||
			var ct = 1
 | 
			
		||||
		}
 | 
			
		||||
		$('#emoji-before').addClass('disabled')
 | 
			
		||||
	} else {
 | 
			
		||||
		$("#emoji-before").removeClass("disabled");
 | 
			
		||||
		$('#emoji-before').removeClass('disabled')
 | 
			
		||||
	}
 | 
			
		||||
	$("#emoji-next").removeClass("disabled");
 | 
			
		||||
	$("#emoji-count").text(ct);
 | 
			
		||||
	if (page != 1) {
 | 
			
		||||
		$('#emoji-next').removeClass('disabled')
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#emoji-next').addClass('disabled')
 | 
			
		||||
	}
 | 
			
		||||
	$('#emoji-count').text(ct)
 | 
			
		||||
	for (i = start; i < start + 126; i++) {
 | 
			
		||||
		var emoji = obj[i];
 | 
			
		||||
		var emoji = obj[i]
 | 
			
		||||
		if (emoji) {
 | 
			
		||||
			html = html + '<a onclick="emojiInsert(\':' + emoji.shortcode +
 | 
			
		||||
				': \')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
 | 
			
		||||
			if (reaction) {
 | 
			
		||||
				if (emoji.divider) {
 | 
			
		||||
					html = html + '<p style="margin-bottom:0">' + emoji.cat + '</p>'
 | 
			
		||||
				} else {
 | 
			
		||||
					if (emoji.listed) {
 | 
			
		||||
						if(misskeyReact) {
 | 
			
		||||
							var shortcode = `:${emoji.shortcode}:`
 | 
			
		||||
						} else {
 | 
			
		||||
							var shortcode = emoji.shortcode
 | 
			
		||||
						}
 | 
			
		||||
						html =
 | 
			
		||||
							html +
 | 
			
		||||
							`<a onclick="emojiReaction('${shortcode}')" class="pointer"><img src="${emoji.url}" width="20" title="${emoji.shortcode}"></a>`
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				if (emoji.divider) {
 | 
			
		||||
					html = html + '<p style="margin-bottom:0">' + emoji.cat + '</p>'
 | 
			
		||||
				} else {
 | 
			
		||||
					if (emoji.listed) {
 | 
			
		||||
						html =
 | 
			
		||||
							html +
 | 
			
		||||
							`<a onclick="emojiInsert(':${emoji.shortcode}:')" class="pointer"><img src="${emoji.url}" width="20" title="${emoji.shortcode}"></a>`
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	$("#emoji-list").html(html);
 | 
			
		||||
	$('#emoji-list').html(html)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//絵文字など様々なものをテキストボックスに挿入
 | 
			
		||||
function emojiInsert(code, del) {
 | 
			
		||||
	var now = $("#textarea").val();
 | 
			
		||||
	var selin = localStorage.getItem("cursor");
 | 
			
		||||
	console.log(selin);
 | 
			
		||||
	var now = $("#textarea").val();
 | 
			
		||||
	if(selin>0){
 | 
			
		||||
		var before   = now.substr(0, selin);
 | 
			
		||||
		var after    = now.substr(selin, now.length);
 | 
			
		||||
		newt = before + " "+ code+" " + after;
 | 
			
		||||
	}else{
 | 
			
		||||
		newt = code+" ";
 | 
			
		||||
	}
 | 
			
		||||
	if (!del) {
 | 
			
		||||
		$("#textarea").val(newt);
 | 
			
		||||
		//emoji();
 | 
			
		||||
	if (localStorage.getItem('emoji-zero-width') == 'yes') {
 | 
			
		||||
		var blankBefore = ''
 | 
			
		||||
		var blankAfter = ''
 | 
			
		||||
	} else {
 | 
			
		||||
		var regExp = new RegExp(del, "g");
 | 
			
		||||
		var now = now.replace(regExp, "");
 | 
			
		||||
		$("#textarea").val(now + " " + code);
 | 
			
		||||
		var blankBefore = ' '
 | 
			
		||||
		var blankAfter = ' '
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	$("#textarea").focus();
 | 
			
		||||
	var selin = $("#textarea").prop('selectionStart');
 | 
			
		||||
	if(!selin){
 | 
			
		||||
		selin=0;
 | 
			
		||||
	var textarea = document.querySelector('#textarea')
 | 
			
		||||
	var sentence = textarea.value
 | 
			
		||||
	var len = sentence.length
 | 
			
		||||
	var pos = textarea.selectionStart
 | 
			
		||||
	if (del) {
 | 
			
		||||
		var delLen = del.length
 | 
			
		||||
	} else {
 | 
			
		||||
		var delLen = 0
 | 
			
		||||
	}
 | 
			
		||||
	localStorage.setItem("cursor", selin);
 | 
			
		||||
	var before = sentence.substr(0, pos - delLen)
 | 
			
		||||
	var last = before.substr(-1, 1)
 | 
			
		||||
	if (last == ' ') blankBefore = ''
 | 
			
		||||
	var after = sentence.substr(pos, len)
 | 
			
		||||
	var start = after.substr(0, 1)
 | 
			
		||||
	if (start == ' ') blankAfter = ''
 | 
			
		||||
	if (len == 0) {
 | 
			
		||||
		var word = code
 | 
			
		||||
	} else if (len == pos) {
 | 
			
		||||
		var word = blankBefore + code
 | 
			
		||||
	} else if (pos == 0) {
 | 
			
		||||
		var word = code + blankAfter
 | 
			
		||||
	} else {
 | 
			
		||||
		var word = blankBefore + code + blankAfter
 | 
			
		||||
	}
 | 
			
		||||
	sentence = before + word + after
 | 
			
		||||
	textarea.value = sentence
 | 
			
		||||
}
 | 
			
		||||
//改行挿入
 | 
			
		||||
function brInsert(code) {
 | 
			
		||||
	if(!$('#post-box').hasClass("appear")){
 | 
			
		||||
		localStorage.setItem("nohide",true);
 | 
			
		||||
		show();
 | 
			
		||||
	if (!$('#post-box').hasClass('appear')) {
 | 
			
		||||
		localStorage.setItem('nohide', true)
 | 
			
		||||
		show()
 | 
			
		||||
	}
 | 
			
		||||
	var now = $("#textarea").val();
 | 
			
		||||
	$("#textarea").val(now + code);
 | 
			
		||||
	$("#textarea").focus();
 | 
			
		||||
	var now = $('#textarea').val()
 | 
			
		||||
	$('#textarea').val(now + code)
 | 
			
		||||
	$('#textarea').focus()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,242 +1,425 @@
 | 
			
		||||
//ドラッグ・アンド・ドロップからアップロードまで。uiのimg.jsとは異なります。
 | 
			
		||||
var obj = $("body");
 | 
			
		||||
var system;
 | 
			
		||||
var obj = $('body')
 | 
			
		||||
var system
 | 
			
		||||
//ドラッグスタート
 | 
			
		||||
obj.on('dragstart', function(e) {
 | 
			
		||||
	system = "locked"
 | 
			
		||||
});
 | 
			
		||||
	system = 'locked'
 | 
			
		||||
})
 | 
			
		||||
//何もなくファイルが通過
 | 
			
		||||
obj.on('dragend', function(e) {
 | 
			
		||||
	system = "";
 | 
			
		||||
});
 | 
			
		||||
	system = ''
 | 
			
		||||
})
 | 
			
		||||
//ドラッグファイルが画面上に
 | 
			
		||||
obj.on('dragenter', function(e) {
 | 
			
		||||
	if (system != "locked") {
 | 
			
		||||
		$("#drag").css('display', 'flex');
 | 
			
		||||
	if (system != 'locked') {
 | 
			
		||||
		$('#drag').css('display', 'flex')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
$("body").on('dragover', function(e) {
 | 
			
		||||
	e.stopPropagation();
 | 
			
		||||
	e.preventDefault();
 | 
			
		||||
});
 | 
			
		||||
})
 | 
			
		||||
$('body').on('dragover', function(e) {
 | 
			
		||||
	e.stopPropagation()
 | 
			
		||||
	e.preventDefault()
 | 
			
		||||
})
 | 
			
		||||
//ドロップした
 | 
			
		||||
$("body").on('drop', function(e) {
 | 
			
		||||
	if (system != "locked") {
 | 
			
		||||
		$("#drag").css('display', 'none');
 | 
			
		||||
		e.preventDefault();
 | 
			
		||||
		var files = e.originalEvent.dataTransfer.files;
 | 
			
		||||
		pimg(files);
 | 
			
		||||
$('body').on('drop', function(e) {
 | 
			
		||||
	if (system != 'locked') {
 | 
			
		||||
		$('#drag').css('display', 'none')
 | 
			
		||||
		e.preventDefault()
 | 
			
		||||
		var files = e.originalEvent.dataTransfer.files
 | 
			
		||||
		pimg(files)
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
})
 | 
			
		||||
//何もなくファイルが通過
 | 
			
		||||
$("#drag").on('dragleave', function(e) {
 | 
			
		||||
	$("#drag").css('display', 'none');
 | 
			
		||||
});
 | 
			
		||||
$('#drag').on('dragleave', function(e) {
 | 
			
		||||
	$('#drag').css('display', 'none')
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
//複数アップ
 | 
			
		||||
function pimg(files) {
 | 
			
		||||
	console.log(files);
 | 
			
		||||
	console.table(files)
 | 
			
		||||
	for (i = 0; i < files.length; i++) {
 | 
			
		||||
		var dot=files[i].path.match(/\.(.+)$/)[1];
 | 
			
		||||
		if(dot=="bmp" || dot=="BMP"){
 | 
			
		||||
			var electron = require("electron");
 | 
			
		||||
		  	var ipc = electron.ipcRenderer;
 | 
			
		||||
			  ipc.send('bmp-image', [files[i].path,i]);
 | 
			
		||||
			  todo(lang.lang_progress);
 | 
			
		||||
			  
 | 
			
		||||
		}else{
 | 
			
		||||
			handleFileUpload(files[i], obj,i);
 | 
			
		||||
		var dot = files[i].path.match(/\.(.+)$/)[1]
 | 
			
		||||
		if (dot == 'bmp' || dot == 'BMP') {
 | 
			
		||||
			postMessage(['bmpImage', [files[i].path, i]], '*')
 | 
			
		||||
			todo(lang.lang_progress)
 | 
			
		||||
		} else {
 | 
			
		||||
			handleFileUpload(files[i], obj, i)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
var electron = require("electron");
 | 
			
		||||
var ipc = electron.ipcRenderer;
 | 
			
		||||
ipc.on('bmp-img-comp', function (event, b64) {
 | 
			
		||||
	media(b64[0],"image/png",b64[1]);
 | 
			
		||||
  });
 | 
			
		||||
//ドラッグ・アンド・ドロップを終了
 | 
			
		||||
function closedrop() {
 | 
			
		||||
	$("#drag").css('display', 'none');
 | 
			
		||||
	$('#drag').css('display', 'none')
 | 
			
		||||
}
 | 
			
		||||
//ファイル選択
 | 
			
		||||
function fileselect() {
 | 
			
		||||
	ipc.send('file-select', "");
 | 
			
		||||
	postMessage(['sendSinmpleIpc', 'file-select'], '*')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//ファイル読み込み
 | 
			
		||||
function handleFileUpload(files, obj, no) {
 | 
			
		||||
	var fr = new FileReader();
 | 
			
		||||
	var fr = new FileReader()
 | 
			
		||||
	fr.onload = function(evt) {
 | 
			
		||||
		var b64 = evt.target.result;
 | 
			
		||||
		$('#b64-box').val(b64);
 | 
			
		||||
		var ret = media(b64, files["type"], no)
 | 
			
		||||
		var b64 = evt.target.result
 | 
			
		||||
		var resize = localStorage.getItem('uploadCrop') * 1
 | 
			
		||||
		if (resize > 0) {
 | 
			
		||||
			var element = new Image()
 | 
			
		||||
			var width
 | 
			
		||||
			element.onload = function() {
 | 
			
		||||
				var width = element.naturalWidth
 | 
			
		||||
				var height = element.naturalHeight
 | 
			
		||||
				if (width > resize || height > resize) {
 | 
			
		||||
					postMessage(['resizeImage', [b64, resize]], '*')
 | 
			
		||||
					return false
 | 
			
		||||
				} else {
 | 
			
		||||
					$('#b64-box').val(b64)
 | 
			
		||||
					var ret = media(b64, files['type'], no)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			element.src = b64
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
		$('#b64-box').val(b64)
 | 
			
		||||
		var ret = media(b64, files['type'], no)
 | 
			
		||||
	}
 | 
			
		||||
	fr.readAsDataURL(files);
 | 
			
		||||
	$("#mec").append(files["name"] + "/");
 | 
			
		||||
	fr.readAsDataURL(files)
 | 
			
		||||
	$('#mec').append(files['name'] + '/')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//ファイルアップロード
 | 
			
		||||
function media(b64, type, no) {
 | 
			
		||||
	var l = 4;
 | 
			
		||||
	var c = "abcdefghijklmnopqrstuvwxyz0123456789";
 | 
			
		||||
	var cl = c.length;
 | 
			
		||||
	var r = "";
 | 
			
		||||
	for(var i=0; i<l; i++){
 | 
			
		||||
  		r += c[Math.floor(Math.random()*cl)];
 | 
			
		||||
async function media(b64, type, no, stamped) {
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var user = localStorage.getItem('user_' + acct_id)
 | 
			
		||||
	if ($('#stamp').hasClass('stamp-avail') && !stamped) {
 | 
			
		||||
		postMessage(['stampImage', [b64, user + '@' + domain]], '*')
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	if ($("#media").val()) {
 | 
			
		||||
		$("#media").val($("#media").val() + ',' + "tmp_"+r);
 | 
			
		||||
	var l = 4
 | 
			
		||||
	var c = 'abcdefghijklmnopqrstuvwxyz0123456789'
 | 
			
		||||
	var cl = c.length
 | 
			
		||||
	var r = ''
 | 
			
		||||
	for (var i = 0; i < l; i++) {
 | 
			
		||||
		r += c[Math.floor(Math.random() * cl)]
 | 
			
		||||
	}
 | 
			
		||||
	if ($('#media').val()) {
 | 
			
		||||
		$('#media').val($('#media').val() + ',' + 'tmp_' + r)
 | 
			
		||||
	} else {
 | 
			
		||||
		$("#media").val("tmp_"+r);
 | 
			
		||||
		$('#media').val('tmp_' + r)
 | 
			
		||||
	}
 | 
			
		||||
	$(".toot-btn-group").prop("disabled", true);
 | 
			
		||||
	$("#post-acct-sel").prop("disabled", true);
 | 
			
		||||
	localStorage.setItem("image","busy");
 | 
			
		||||
	todo("Image Upload...");
 | 
			
		||||
	var media = toBlob(b64, type);
 | 
			
		||||
	console.log(media);
 | 
			
		||||
	var fd = new FormData();
 | 
			
		||||
	fd.append('file', media);
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
	var httpreq = new XMLHttpRequest();
 | 
			
		||||
	if(localStorage.getItem("mode_" + domain)=="misskey"){
 | 
			
		||||
		var start = "https://" + domain + "/api/drive/files/create";
 | 
			
		||||
		httpreq.open('POST', start, true);
 | 
			
		||||
		httpreq.upload.addEventListener("progress", progshow, false);
 | 
			
		||||
		httpreq.responseType = "json";
 | 
			
		||||
		if ($("#nsfw").hasClass("nsfw-avail")) {
 | 
			
		||||
			var nsfw = true;
 | 
			
		||||
	$('.toot-btn-group').prop('disabled', true)
 | 
			
		||||
	$('#post-acct-sel').prop('disabled', true)
 | 
			
		||||
	todo('Image Upload...')
 | 
			
		||||
	var media = toBlob(b64, type)
 | 
			
		||||
	var fd = new FormData()
 | 
			
		||||
	fd.append('file', media)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var httpreq = new XMLHttpRequest()
 | 
			
		||||
	if (localStorage.getItem('mode_' + domain) == 'misskey') {
 | 
			
		||||
		var start = 'https://' + domain + '/api/drive/files/create'
 | 
			
		||||
		httpreq.open('POST', start, true)
 | 
			
		||||
		httpreq.upload.addEventListener('progress', progshow, false)
 | 
			
		||||
		httpreq.responseType = 'json'
 | 
			
		||||
		if ($('#nsfw').hasClass('nsfw-avail')) {
 | 
			
		||||
			var nsfw = true
 | 
			
		||||
		} else {
 | 
			
		||||
			var nsfw = false;
 | 
			
		||||
			var nsfw = false
 | 
			
		||||
		}
 | 
			
		||||
		var previewer="url"
 | 
			
		||||
		fd.append('i', at);
 | 
			
		||||
		//fd.append('isSensitive', nsfw);
 | 
			
		||||
		httpreq.send(fd);
 | 
			
		||||
	}else{
 | 
			
		||||
		var previewer="preview_url"
 | 
			
		||||
		var start = "https://" + domain + "/api/v1/media";
 | 
			
		||||
		httpreq.open('POST', start, true);
 | 
			
		||||
		httpreq.upload.addEventListener("progress", progshow, false);
 | 
			
		||||
		httpreq.responseType = "json";
 | 
			
		||||
		httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
 | 
			
		||||
		httpreq.send(fd);
 | 
			
		||||
	}
 | 
			
		||||
    httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
			var json = httpreq.response;
 | 
			
		||||
			console.log(json);
 | 
			
		||||
			var img = localStorage.getItem("img");
 | 
			
		||||
			if (json.type.indexOf("image")!=-1) {
 | 
			
		||||
				var html = '<img src="' + json[previewer] + '" class="preview-img pointer" data-media="'+json["id"]+'" onclick="deleteImage(\''+json["id"]+'\')" title="'+lang.lang_postimg_delete+'">';
 | 
			
		||||
				$('#preview').append(html);
 | 
			
		||||
		var previewer = 'url'
 | 
			
		||||
		fd.append('i', at)
 | 
			
		||||
		httpreq.send(fd)
 | 
			
		||||
	} else {
 | 
			
		||||
		var previewer = 'preview_url'
 | 
			
		||||
		//v2/media
 | 
			
		||||
		try {
 | 
			
		||||
			var id = await v2MediaUpload(domain, at, fd)
 | 
			
		||||
			if(!id) {
 | 
			
		||||
				var start = 'https://' + domain + '/api/v1/media'
 | 
			
		||||
				httpreq.open('POST', start, true)
 | 
			
		||||
				httpreq.upload.addEventListener('progress', progshow, false)
 | 
			
		||||
				httpreq.responseType = 'json'
 | 
			
		||||
				httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
 | 
			
		||||
				httpreq.send(fd)
 | 
			
		||||
			} else {
 | 
			
		||||
				$('#preview').append(lang.lang_postimg_previewdis);
 | 
			
		||||
				var mediav = $('#media').val()
 | 
			
		||||
				var regExp = new RegExp('tmp_' + r, 'g')
 | 
			
		||||
				mediav = mediav.replace(regExp, id)
 | 
			
		||||
				$('#media').val(mediav)
 | 
			
		||||
				var html = `<img src="../../img/picture.svg" class="preview-img pointer unknown" data-media="${id}" oncontextmenu="deleteImage('${id}')" onclick="altImage('${acct_id}','${id}')" title="${lang.lang_postimg_delete}">`
 | 
			
		||||
				$('#preview').append(html)
 | 
			
		||||
				todc()
 | 
			
		||||
				if (localStorage.getItem('nsfw_' + acct_id)) {
 | 
			
		||||
					$('#nsfw').addClass('yellow-text')
 | 
			
		||||
					$('#nsfw').html('visibility')
 | 
			
		||||
					$('#nsfw').addClass('nsfw-avail')
 | 
			
		||||
				}
 | 
			
		||||
				$('.toot-btn-group').prop('disabled', false)
 | 
			
		||||
				$('select').formSelect()
 | 
			
		||||
				$('#mec').text(lang.lang_there)
 | 
			
		||||
				M.toast({ html: '<span>' + lang.lang_postimg_sync + '</span><button class="btn-flat toast-action" onclick="syncDetail()">Click</button>', displayLength: 3000 })
 | 
			
		||||
				$('#imgup').text('')
 | 
			
		||||
				$('#imgsel').show()
 | 
			
		||||
			} 
 | 
			
		||||
		} catch {
 | 
			
		||||
			var start = 'https://' + domain + '/api/v1/media'
 | 
			
		||||
			httpreq.open('POST', start, true)
 | 
			
		||||
			httpreq.upload.addEventListener('progress', progshow, false)
 | 
			
		||||
			httpreq.responseType = 'json'
 | 
			
		||||
			httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
 | 
			
		||||
			httpreq.send(fd)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
			var json = httpreq.response
 | 
			
		||||
			if (this.status !== 200) {
 | 
			
		||||
				setLog(start, this.status, json)
 | 
			
		||||
				$('.toot-btn-group').prop('disabled', false)
 | 
			
		||||
				$('select').formSelect()
 | 
			
		||||
				$('#mec').text(lang.lang_there)
 | 
			
		||||
				M.toast({ html: this.status + ':' +json, displayLength: 2000 })
 | 
			
		||||
				$('#imgup').text('')
 | 
			
		||||
				$('#imgsel').show()
 | 
			
		||||
			}
 | 
			
		||||
			if (!json.id) {
 | 
			
		||||
				todc()
 | 
			
		||||
				$('#imgup').text('')
 | 
			
		||||
				$('.toot-btn-group').prop('disabled', false)
 | 
			
		||||
				$('#post-acct-sel').prop('disabled', false)
 | 
			
		||||
				$('select').formSelect()
 | 
			
		||||
				$('#imgsel').show()
 | 
			
		||||
				M.toast({ html: lang.lang_postimg_failupload, displayLength: 5000 })
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			$('#imgup').text('')
 | 
			
		||||
			$('.toot-btn-group').prop('disabled', false)
 | 
			
		||||
			$('select').formSelect()
 | 
			
		||||
			$('#imgsel').show()
 | 
			
		||||
			var img = localStorage.getItem('img')
 | 
			
		||||
			if (json.type.indexOf('image') != -1) {
 | 
			
		||||
				var html = `<img src="${json[previewer]}" class="preview-img pointer" data-media="${json['id']}" oncontextmenu="deleteImage('${json['id']}')" onclick="altImage('${acct_id}','${json['id']}')" title="${lang.lang_postimg_delete}">`
 | 
			
		||||
				$('#preview').append(html)
 | 
			
		||||
			} else {
 | 
			
		||||
				$('#preview').append(lang.lang_postimg_previewdis)
 | 
			
		||||
			}
 | 
			
		||||
			if (!img) {
 | 
			
		||||
				var img = "no-act";
 | 
			
		||||
				var img = 'no-act'
 | 
			
		||||
			}
 | 
			
		||||
			if (img != "inline") {
 | 
			
		||||
				var mediav=$("#media").val();
 | 
			
		||||
				var regExp = new RegExp("tmp_"+r, "g");
 | 
			
		||||
				mediav = mediav.replace(regExp, json["id"]);
 | 
			
		||||
				$("#media").val(mediav);
 | 
			
		||||
				
 | 
			
		||||
			if (img != 'inline') {
 | 
			
		||||
				var mediav = $('#media').val()
 | 
			
		||||
				var regExp = new RegExp('tmp_' + r, 'g')
 | 
			
		||||
				mediav = mediav.replace(regExp, json['id'])
 | 
			
		||||
				$('#media').val(mediav)
 | 
			
		||||
			}
 | 
			
		||||
			if (img == "url") {
 | 
			
		||||
				$("#textarea").val($("#textarea").val() + " " + json["text_url"])
 | 
			
		||||
			if (img == 'url' && json['text_url']) {
 | 
			
		||||
				$('#textarea').val($('#textarea').val() + ' ' + json['text_url'])
 | 
			
		||||
			}
 | 
			
		||||
			todc();
 | 
			
		||||
			$(".toot-btn-group").prop("disabled", false);
 | 
			
		||||
			$('select').material_select();
 | 
			
		||||
			$("#mec").text(lang.lang_there);
 | 
			
		||||
			Materialize.toast(lang.lang_postimg_aftupload, 1000);
 | 
			
		||||
			$("#imgup").text("");
 | 
			
		||||
			$("#imgsel").show();
 | 
			
		||||
			uploadnow=false;
 | 
			
		||||
			localStorage.removeItem("image");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Base64からBlobへ
 | 
			
		||||
function toBlob(base64, type) {
 | 
			
		||||
	var bin = atob(base64.replace(/^.*,/, ''));
 | 
			
		||||
	var buffer = new Uint8Array(bin.length);
 | 
			
		||||
	var bin = atob(base64.replace(/^.*,/, ''))
 | 
			
		||||
	var buffer = new Uint8Array(bin.length)
 | 
			
		||||
	for (var i = 0; i < bin.length; i++) {
 | 
			
		||||
		buffer[i] = bin.charCodeAt(i);
 | 
			
		||||
		buffer[i] = bin.charCodeAt(i)
 | 
			
		||||
	}
 | 
			
		||||
	// Blobを作成
 | 
			
		||||
	try {
 | 
			
		||||
		var blob = new Blob([new Uint8Array(buffer)], {
 | 
			
		||||
			type: type
 | 
			
		||||
		});
 | 
			
		||||
		})
 | 
			
		||||
	} catch (e) {
 | 
			
		||||
		return false;
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return blob;
 | 
			
		||||
	return blob
 | 
			
		||||
}
 | 
			
		||||
//画像を貼り付けたら…
 | 
			
		||||
var element =  document.querySelector("#textarea");
 | 
			
		||||
element.addEventListener("paste", function(e){
 | 
			
		||||
	console.log(e)
 | 
			
		||||
    // 画像の場合
 | 
			
		||||
    // e.clipboardData.types.length == 0
 | 
			
		||||
    // かつ
 | 
			
		||||
    // e.clipboardData.types[0] == "Files"
 | 
			
		||||
    // となっているので、それ以外を弾く
 | 
			
		||||
    if (!e.clipboardData 
 | 
			
		||||
            || !e.clipboardData.types
 | 
			
		||||
            || (e.clipboardData.types.length != 1)
 | 
			
		||||
            || (e.clipboardData.types[0] != "Files")) {
 | 
			
		||||
				console.log("not image")
 | 
			
		||||
            return true;
 | 
			
		||||
    }
 | 
			
		||||
var element = document.querySelector('#textarea')
 | 
			
		||||
element.addEventListener('paste', function(e) {
 | 
			
		||||
	if (!e.clipboardData || !e.clipboardData.items) {
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
	// DataTransferItemList に画像が含まれいない場合は終了する
 | 
			
		||||
	var imageItems = [...e.clipboardData.items].filter(i => i.type.startsWith('image'))
 | 
			
		||||
	if (imageItems.length == 0) {
 | 
			
		||||
		console.warn('it is not image')
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    // ファイルとして得る
 | 
			
		||||
    // (なぜかgetAsStringでは上手くいかなかった)
 | 
			
		||||
    var imageFile = e.clipboardData.items[0].getAsFile();
 | 
			
		||||
	// ファイルとして得る
 | 
			
		||||
	// DataTransferItem の kind は file なので getAsString ではなく getAsFile を呼ぶ
 | 
			
		||||
	var imageFile = imageItems[0].getAsFile()
 | 
			
		||||
	var imageType = imageItems[0].type
 | 
			
		||||
 | 
			
		||||
    // FileReaderで読み込む
 | 
			
		||||
    var fr = new FileReader();
 | 
			
		||||
    fr.onload = function(e) {
 | 
			
		||||
        // onload内ではe.target.resultにbase64が入っているのであとは煮るなり焼くなり
 | 
			
		||||
		var base64 = e.target.result;
 | 
			
		||||
		var mediav = $("#media").val();
 | 
			
		||||
		if(mediav){
 | 
			
		||||
			var i=mediav.split(",").length;
 | 
			
		||||
	// FileReaderで読み込む
 | 
			
		||||
	var fr = new FileReader()
 | 
			
		||||
	fr.onload = function(e) {
 | 
			
		||||
		// onload内ではe.target.resultにbase64が入っているのであとは煮るなり焼くなり
 | 
			
		||||
		var base64 = e.target.result
 | 
			
		||||
		var mediav = $('#media').val()
 | 
			
		||||
		if (mediav) {
 | 
			
		||||
			var i = mediav.split(',').length
 | 
			
		||||
		}
 | 
			
		||||
		media(base64, "image/png", i)
 | 
			
		||||
    };
 | 
			
		||||
    fr.readAsDataURL(imageFile);
 | 
			
		||||
		// DataTransferItem の type に mime tipes があるのでそれを使う
 | 
			
		||||
		media(base64, imageType, i)
 | 
			
		||||
	}
 | 
			
		||||
	fr.readAsDataURL(imageFile)
 | 
			
		||||
 | 
			
		||||
    // 画像以外がペーストされたときのために、元に戻しておく
 | 
			
		||||
});
 | 
			
		||||
//Adobeフォトエディタ
 | 
			
		||||
function adobe(){
 | 
			
		||||
	var agree = localStorage.getItem("adobeagree");
 | 
			
		||||
	ipc.send('adobe', agree);
 | 
			
		||||
	// 画像以外がペーストされたときのために、元に戻しておく
 | 
			
		||||
})
 | 
			
		||||
function deleteImage(key) {
 | 
			
		||||
	Swal.fire({
 | 
			
		||||
		title: lang.lang_postimg_delete,
 | 
			
		||||
		type: 'warning',
 | 
			
		||||
		showCancelButton: true,
 | 
			
		||||
		confirmButtonColor: '#3085d6',
 | 
			
		||||
		cancelButtonColor: '#d33',
 | 
			
		||||
		confirmButtonText: lang.lang_yesno,
 | 
			
		||||
		cancelButtonText: lang.lang_no
 | 
			
		||||
	}).then(result => {
 | 
			
		||||
		if (result.value) {
 | 
			
		||||
			var media = $('#media').val()
 | 
			
		||||
			var arr = media.split(',')
 | 
			
		||||
			for (var i = 0; i < media.length; i++) {
 | 
			
		||||
				if (arr[i] == key) {
 | 
			
		||||
					arr.splice(i, 1)
 | 
			
		||||
					break
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			$('#media').val(arr.join(','))
 | 
			
		||||
			$('#preview [data-media=' + key + ']').remove()
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
ipc.on('adobeagree', function (event, arg) {
 | 
			
		||||
	localStorage.setItem("adobeagree",arg);
 | 
			
		||||
	});
 | 
			
		||||
function deleteImage(key){
 | 
			
		||||
	console.log(key);
 | 
			
		||||
	if(!confirm(lang.lang_postimg_delete)){
 | 
			
		||||
		return false;
 | 
			
		||||
function altImage(acct_id, id) {
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var start = 'https://' + domain + '/api/v1/media/' + id
 | 
			
		||||
	if($('[data-media=' + id + ']').hasClass('unknown')) {
 | 
			
		||||
		fetch(start, {
 | 
			
		||||
			method: 'GET',
 | 
			
		||||
			headers: {
 | 
			
		||||
				'content-type': 'application/json',
 | 
			
		||||
				Authorization: 'Bearer ' + at
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
		.then(function(response) {
 | 
			
		||||
			if (!response.ok) {
 | 
			
		||||
				response.text().then(function(text) {
 | 
			
		||||
					setLog(response.url, response.status, text)
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
			return response.json()
 | 
			
		||||
		})
 | 
			
		||||
		.catch(function(error) {
 | 
			
		||||
			todo(error)
 | 
			
		||||
			setLog(start, 'JSON', error)
 | 
			
		||||
			console.error(error)
 | 
			
		||||
		})
 | 
			
		||||
		.then(function(json) {
 | 
			
		||||
			console.log(json)
 | 
			
		||||
			$('[data-media=' + id + ']').removeClass('unknown')
 | 
			
		||||
			if(json.preview_url) {
 | 
			
		||||
				$('[data-media=' + id + ']').attr('src', json.preview_url)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	} else {
 | 
			
		||||
		Swal.fire({
 | 
			
		||||
			title: lang.lang_postimg_desc,
 | 
			
		||||
			text: lang.lang_postimg_leadContext,
 | 
			
		||||
			input: 'text',
 | 
			
		||||
			inputAttributes: {
 | 
			
		||||
				autocapitalize: 'off'
 | 
			
		||||
			},
 | 
			
		||||
			showCancelButton: true,
 | 
			
		||||
			confirmButtonText: 'Post',
 | 
			
		||||
			showLoaderOnConfirm: true,
 | 
			
		||||
			preConfirm: data => {
 | 
			
		||||
				return fetch(start, {
 | 
			
		||||
					method: 'PUT',
 | 
			
		||||
					headers: {
 | 
			
		||||
						'content-type': 'application/json',
 | 
			
		||||
						Authorization: 'Bearer ' + at
 | 
			
		||||
					},
 | 
			
		||||
					body: JSON.stringify({
 | 
			
		||||
						description: data
 | 
			
		||||
					})
 | 
			
		||||
				})
 | 
			
		||||
					.then(function(response) {
 | 
			
		||||
						if (!response.ok) {
 | 
			
		||||
							response.text().then(function(text) {
 | 
			
		||||
								setLog(response.url, response.status, text)
 | 
			
		||||
							})
 | 
			
		||||
						}
 | 
			
		||||
						return response.json()
 | 
			
		||||
					})
 | 
			
		||||
					.catch(function(error) {
 | 
			
		||||
						todo(error)
 | 
			
		||||
						setLog(start, 'JSON', error)
 | 
			
		||||
						console.error(error)
 | 
			
		||||
					})
 | 
			
		||||
					.then(function(json) {
 | 
			
		||||
						console.log(json)
 | 
			
		||||
						$('[data-media=' + id + ']').attr('title', data)
 | 
			
		||||
					})
 | 
			
		||||
			},
 | 
			
		||||
			allowOutsideClick: () => !Swal.isLoading()
 | 
			
		||||
		}).then(result => {
 | 
			
		||||
			if (result.value) {
 | 
			
		||||
				Swal.fire({
 | 
			
		||||
					title: 'Complete'
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	var media = $("#media").val();
 | 
			
		||||
	var arr=media.split(",");
 | 
			
		||||
	for(var i=0;i<media.length;i++){
 | 
			
		||||
		if(arr[i]==key){
 | 
			
		||||
				arr.splice(i, 1);
 | 
			
		||||
				break;
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
function stamp() {
 | 
			
		||||
	if ($('#stamp').hasClass('stamp-avail')) {
 | 
			
		||||
		$('#stamp').html('Off')
 | 
			
		||||
		$('#stamp').removeClass('stamp-avail')
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#stamp').html('On')
 | 
			
		||||
		$('#stamp').addClass('stamp-avail')
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//v2/media対応
 | 
			
		||||
async function v2MediaUpload(domain, at, fd) {
 | 
			
		||||
	var start = 'https://' + domain + '/api/v2/media'
 | 
			
		||||
	let promise = await fetch(start, {
 | 
			
		||||
		method: 'POST',
 | 
			
		||||
		headers: {
 | 
			
		||||
			Authorization:
 | 
			
		||||
				'Bearer ' + at
 | 
			
		||||
		},
 | 
			
		||||
		body: fd
 | 
			
		||||
	})
 | 
			
		||||
	var json = await promise.json()
 | 
			
		||||
	if(json.id) {
 | 
			
		||||
		return json.id
 | 
			
		||||
	} else {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function alertProcessUnfinished() {
 | 
			
		||||
	Swal.fire({
 | 
			
		||||
		title: lang.lang_post_unfinishedMedia,
 | 
			
		||||
		type: 'error',
 | 
			
		||||
		showCancelButton: true,
 | 
			
		||||
		confirmButtonText: lang.lang_post_retry,
 | 
			
		||||
		cancelButtonText: lang.lang_no
 | 
			
		||||
	}).then(result => {
 | 
			
		||||
		if (result.value) {
 | 
			
		||||
			post()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	$("#media").val(arr.join(","));
 | 
			
		||||
	$('#preview [data-media='+key+']').remove();
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
function syncDetail() {
 | 
			
		||||
	Swal.fire({
 | 
			
		||||
		title: lang.lang_post_syncDetail,
 | 
			
		||||
		text: lang.lang_post_syncDetailText,
 | 
			
		||||
		type: 'info'
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
@@ -1,217 +1,278 @@
 | 
			
		||||
//Renpost
 | 
			
		||||
function renote(id, acct_id, remote) {
 | 
			
		||||
	if ($("#pub_" + id).hasClass("rted")) {
 | 
			
		||||
		return false;
 | 
			
		||||
	if ($('#pub_' + id).hasClass('rted')) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
    var start = "https://" + domain + "/api/notes/create";
 | 
			
		||||
    if(localStorage.getItem("mode_" + domain)!="misskey"){
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
	var httpreq = new XMLHttpRequest();
 | 
			
		||||
	httpreq.open('POST', start, true);
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json');
 | 
			
		||||
    httpreq.responseType = "json";
 | 
			
		||||
	httpreq.send(JSON.stringify({i:at,renoteId:id}));
 | 
			
		||||
    httpreq.onreadystatechange = function() {
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var start = 'https://' + domain + '/api/notes/create'
 | 
			
		||||
	if (localStorage.getItem('mode_' + domain) != 'misskey') {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var httpreq = new XMLHttpRequest()
 | 
			
		||||
	httpreq.open('POST', start, true)
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json')
 | 
			
		||||
	httpreq.responseType = 'json'
 | 
			
		||||
	httpreq.send(JSON.stringify({ i: at, renoteId: id }))
 | 
			
		||||
	httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
            var json = httpreq.response;
 | 
			
		||||
            console.log(json);
 | 
			
		||||
            $("[toot-id=" + id + "]").addClass("rted");
 | 
			
		||||
            $(".rt_"+id).toggleClass("teal-text");
 | 
			
		||||
			var json = httpreq.response
 | 
			
		||||
			if (this.status !== 200) {
 | 
			
		||||
				setLog(start, this.status, json)
 | 
			
		||||
			}
 | 
			
		||||
			console.log(['Success: renote', json])
 | 
			
		||||
			$('[toot-id=' + id + ']').addClass('rted')
 | 
			
		||||
			$('.rt_' + id).toggleClass('teal-text')
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//Renote
 | 
			
		||||
function renoteqt(id, acct_id) {
 | 
			
		||||
    localStorage.setItem("nohide",true);
 | 
			
		||||
	show();
 | 
			
		||||
	$("#reply").val("renote_"+id);
 | 
			
		||||
	$("#rec").text("Renote");
 | 
			
		||||
	$("#post-acct-sel").val(acct_id);
 | 
			
		||||
	$("#post-acct-sel").prop("disabled", true);
 | 
			
		||||
	$('select').material_select();
 | 
			
		||||
	$("#textarea").attr("placeholder",lang.lang_misskeyparse_qt);
 | 
			
		||||
	$("#textarea").focus();
 | 
			
		||||
	localStorage.setItem('nohide', true)
 | 
			
		||||
	show()
 | 
			
		||||
	$('#reply').val('renote_' + id)
 | 
			
		||||
	$('#rec').text('Renote')
 | 
			
		||||
	$('#post-acct-sel').val(acct_id)
 | 
			
		||||
	$('#post-acct-sel').prop('disabled', true)
 | 
			
		||||
	$('select').formSelect()
 | 
			
		||||
	$('#textarea').attr('placeholder', lang.lang_misskeyparse_qt)
 | 
			
		||||
	$('#textarea').focus()
 | 
			
		||||
}
 | 
			
		||||
//Reply
 | 
			
		||||
function misskeyreply(id, acct_id) {
 | 
			
		||||
    localStorage.setItem("nohide",true);
 | 
			
		||||
	show();
 | 
			
		||||
	$("#reply").val(id);
 | 
			
		||||
	$("#rec").text("Renote");
 | 
			
		||||
	$("#post-acct-sel").val(acct_id);
 | 
			
		||||
	$("#post-acct-sel").prop("disabled", true);
 | 
			
		||||
	$('select').material_select();
 | 
			
		||||
	$("#textarea").attr("placeholder",lang.lang_misskeyparse_qt);
 | 
			
		||||
	$("#textarea").focus();
 | 
			
		||||
	localStorage.setItem('nohide', true)
 | 
			
		||||
	show()
 | 
			
		||||
	$('#reply').val(id)
 | 
			
		||||
	$('#rec').text('Renote')
 | 
			
		||||
	$('#post-acct-sel').val(acct_id)
 | 
			
		||||
	$('#post-acct-sel').prop('disabled', true)
 | 
			
		||||
	$('select').formSelect()
 | 
			
		||||
	$('#textarea').attr('placeholder', lang.lang_misskeyparse_qt)
 | 
			
		||||
	$('#textarea').focus()
 | 
			
		||||
}
 | 
			
		||||
//Reaction
 | 
			
		||||
function reactiontoggle(id,acct_id,tlid){
 | 
			
		||||
    var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
    var start = "https://" + domain + "/api/notes/show";
 | 
			
		||||
    if(localStorage.getItem("mode_" + domain)!="misskey"){
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
	var httpreq = new XMLHttpRequest();
 | 
			
		||||
	httpreq.open('POST', start, true);
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json');
 | 
			
		||||
    httpreq.responseType = "json";
 | 
			
		||||
	httpreq.send(JSON.stringify({i:at,noteId:id}));
 | 
			
		||||
    httpreq.onreadystatechange = function() {
 | 
			
		||||
function reactiontoggle(id, acct_id, tlid) {
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var start = 'https://' + domain + '/api/notes/show'
 | 
			
		||||
	if (localStorage.getItem('mode_' + domain) != 'misskey') {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var httpreq = new XMLHttpRequest()
 | 
			
		||||
	httpreq.open('POST', start, true)
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json')
 | 
			
		||||
	httpreq.responseType = 'json'
 | 
			
		||||
	httpreq.send(JSON.stringify({ i: at, noteId: id }))
 | 
			
		||||
	httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
            var json = httpreq.response;
 | 
			
		||||
            console.log(json);
 | 
			
		||||
            if(json.reactionCounts){
 | 
			
		||||
                var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
 | 
			
		||||
                for(var i=0;i<reactions.length;i++){
 | 
			
		||||
                    if(json.reactionCounts[reactions[i]]){
 | 
			
		||||
                        $("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
 | 
			
		||||
                        $("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
 | 
			
		||||
                    }else{
 | 
			
		||||
                        $("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
 | 
			
		||||
                        if($("#pub_" + id +" .reactions").hasClass("fullreact")){
 | 
			
		||||
                            $("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
 | 
			
		||||
                        }else{
 | 
			
		||||
                            $("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
 | 
			
		||||
                        }
 | 
			
		||||
                        $("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                $("#pub_" + id +" .reactions").removeClass("hide");
 | 
			
		||||
                $("#pub_" + id +" .reactions").toggleClass("fullreact")
 | 
			
		||||
            }else{
 | 
			
		||||
                if($("#pub_" + id +" .reactions").hasClass("fullreact")){
 | 
			
		||||
                    $("#pub_" + id +" .reactions").addClass("hide")
 | 
			
		||||
                    $("#pub_" + id +" .reactions").removeClass("fullreact")
 | 
			
		||||
                }else{
 | 
			
		||||
                    $("#pub_" + id +" .reactions").removeClass("hide");
 | 
			
		||||
                    $("#pub_" + id +" .reaction").removeClass("hide");
 | 
			
		||||
                    $("#pub_" + id +" .reactions").addClass("fullreact");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
			var json = httpreq.response
 | 
			
		||||
			if (this.status !== 200) {
 | 
			
		||||
				setLog(start, this.status, json)
 | 
			
		||||
			}
 | 
			
		||||
			console.log(['Success: reaction', json])
 | 
			
		||||
			if (json.reactions) {
 | 
			
		||||
				var reactions = [
 | 
			
		||||
					'like',
 | 
			
		||||
					'love',
 | 
			
		||||
					'laugh',
 | 
			
		||||
					'hmm',
 | 
			
		||||
					'surprise',
 | 
			
		||||
					'congrats',
 | 
			
		||||
					'angry',
 | 
			
		||||
					'confused',
 | 
			
		||||
					'pudding',
 | 
			
		||||
					'rip'
 | 
			
		||||
				]
 | 
			
		||||
				for (var i = 0; i < reactions.length; i++) {
 | 
			
		||||
					if (json.reactions[reactions[i]]) {
 | 
			
		||||
						$('#pub_' + id + ' .re-' + reactions[i] + 'ct').text(json.reactions[reactions[i]])
 | 
			
		||||
						$('#pub_' + id + ' .re-' + reactions[i]).removeClass('hide')
 | 
			
		||||
					} else {
 | 
			
		||||
						$('#pub_' + id + ' .re-' + reactions[i] + 'ct').text(0)
 | 
			
		||||
						if ($('#pub_' + id + ' .reactions').hasClass('fullreact')) {
 | 
			
		||||
							$('#pub_' + id + ' .re-' + reactions[i]).addClass('hide')
 | 
			
		||||
						} else {
 | 
			
		||||
							$('#pub_' + id + ' .re-' + reactions[i]).removeClass('hide')
 | 
			
		||||
						}
 | 
			
		||||
						$('#pub_' + id + ' .re-' + reactions[i] + 'ct').text(json.reactions[reactions[i]])
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				$('#pub_' + id + ' .reactions').removeClass('hide')
 | 
			
		||||
				$('#pub_' + id + ' .reactions').toggleClass('fullreact')
 | 
			
		||||
			} else {
 | 
			
		||||
				if ($('#pub_' + id + ' .reactions').hasClass('fullreact')) {
 | 
			
		||||
					$('#pub_' + id + ' .reactions').addClass('hide')
 | 
			
		||||
					$('#pub_' + id + ' .reactions').removeClass('fullreact')
 | 
			
		||||
				} else {
 | 
			
		||||
					$('#pub_' + id + ' .reactions').removeClass('hide')
 | 
			
		||||
					$('#pub_' + id + ' .reaction').removeClass('hide')
 | 
			
		||||
					$('#pub_' + id + ' .reactions').addClass('fullreact')
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	$('#pub_' + id + ' .freeReact').toggleClass('hide')
 | 
			
		||||
}
 | 
			
		||||
function reactRefresh(acct_id,id){
 | 
			
		||||
    var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
    var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
    var start = "https://" + domain + "/api/notes/show";
 | 
			
		||||
   
 | 
			
		||||
    var req={};
 | 
			
		||||
    req.i=at;
 | 
			
		||||
    req.noteId=id;
 | 
			
		||||
    var i={
 | 
			
		||||
        method: "POST",
 | 
			
		||||
        body: JSON.stringify(req),
 | 
			
		||||
    }
 | 
			
		||||
    console.log(req)
 | 
			
		||||
    fetch(start, i,
 | 
			
		||||
    ).then(function(response) {
 | 
			
		||||
        return response.json();
 | 
			
		||||
    }).catch(function(error) {
 | 
			
		||||
        todo(error);
 | 
			
		||||
        console.error(error);
 | 
			
		||||
    }).then(function(json) {
 | 
			
		||||
        if(!json){
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        var poll="";
 | 
			
		||||
        console.log(json);
 | 
			
		||||
        reactRefreshCore(json)
 | 
			
		||||
    });
 | 
			
		||||
//reactioncustom
 | 
			
		||||
function reactioncustom(acct_id, id) {
 | 
			
		||||
	$('#reply').val(id)
 | 
			
		||||
	$('#media').val('misskey')
 | 
			
		||||
	$('#unreact').hide()
 | 
			
		||||
	$('#addreact').removeClass('hide')
 | 
			
		||||
	$('#post-acct-sel').val(acct_id)
 | 
			
		||||
	$('select').formSelect()
 | 
			
		||||
	localStorage.setItem('nohide', true)
 | 
			
		||||
	show()
 | 
			
		||||
	emojiToggle(true)
 | 
			
		||||
	$('#left-side').hide()
 | 
			
		||||
	$('#default-emoji').hide()
 | 
			
		||||
}
 | 
			
		||||
function reactRefreshCore(json){
 | 
			
		||||
    var id=json.id;
 | 
			
		||||
    if(json.reactionCounts){
 | 
			
		||||
        var reactions=["like","love","laugh","hmm","surprise","congrats","angry","confused","pudding"];
 | 
			
		||||
        $("#pub_" + id +" .reactions").removeClass("hide")
 | 
			
		||||
        for(var i=0;i<reactions.length;i++){
 | 
			
		||||
            if(json.reactionCounts[reactions[i]]){
 | 
			
		||||
                console.log(json.reactionCounts[reactions[i]])
 | 
			
		||||
                $("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
 | 
			
		||||
                $("#pub_" + id +" .re-"+reactions[i]).removeClass("hide")
 | 
			
		||||
            }else{
 | 
			
		||||
                $("#pub_" + id +" .re-"+reactions[i]+"ct").text(0)
 | 
			
		||||
                if($("#pub_" + id +" .reactions").hasClass("fullreact")){
 | 
			
		||||
                    $("#pub_" + id +" .re-"+reactions[i]).addClass("hide")
 | 
			
		||||
                }
 | 
			
		||||
                $("#pub_" + id +" .re-"+reactions[i]+"ct").text(json.reactionCounts[reactions[i]])
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
function reactRefresh(acct_id, id) {
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var start = 'https://' + domain + '/api/notes/show'
 | 
			
		||||
 | 
			
		||||
	var req = {}
 | 
			
		||||
	req.i = at
 | 
			
		||||
	req.noteId = id
 | 
			
		||||
	var i = {
 | 
			
		||||
		method: 'POST',
 | 
			
		||||
		body: JSON.stringify(req)
 | 
			
		||||
	}
 | 
			
		||||
	fetch(start, i)
 | 
			
		||||
		.then(function(response) {
 | 
			
		||||
			if (!response.ok) {
 | 
			
		||||
				response.text().then(function(text) {
 | 
			
		||||
					setLog(response.url, response.status, text)
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
			return response.json()
 | 
			
		||||
		})
 | 
			
		||||
		.catch(function(error) {
 | 
			
		||||
			todo(error)
 | 
			
		||||
			setLog(start, 'JSON', error)
 | 
			
		||||
			console.error(error)
 | 
			
		||||
		})
 | 
			
		||||
		.then(function(json) {
 | 
			
		||||
			if (!json) {
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			var poll = ''
 | 
			
		||||
			if (json.error) {
 | 
			
		||||
				$('[toot-id=' + id + ']').hide()
 | 
			
		||||
				$('[toot-id=' + id + ']').remove()
 | 
			
		||||
			} else {
 | 
			
		||||
				reactRefreshCore(json)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
}
 | 
			
		||||
function reaction(mode,id,acct_id,tlid){
 | 
			
		||||
    var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
    var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
    if($(".fav_"+id).hasClass("yellow-text")){
 | 
			
		||||
        var flag="delete";
 | 
			
		||||
    }else{
 | 
			
		||||
        var flag="create";
 | 
			
		||||
    }
 | 
			
		||||
    var start = "https://" + domain + "/api/notes/reactions/"+flag;
 | 
			
		||||
    if(localStorage.getItem("mode_" + domain)!="misskey"){
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
	var httpreq = new XMLHttpRequest();
 | 
			
		||||
	httpreq.open('POST', start, true);
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json');
 | 
			
		||||
    httpreq.responseType = "json";
 | 
			
		||||
	httpreq.send(JSON.stringify({i:at,noteId:id,reaction:mode}));
 | 
			
		||||
    httpreq.onreadystatechange = function() {
 | 
			
		||||
function reactRefreshCore(json) {
 | 
			
		||||
	var id = json.id
 | 
			
		||||
	if (json.reactions) {
 | 
			
		||||
		$('#pub_' + id + ' .reactions').removeClass('hide')
 | 
			
		||||
		var regExp = new RegExp(':', 'g')
 | 
			
		||||
		Object.keys(json.reactions).forEach(function(keye) {
 | 
			
		||||
			keyeClass = keye.replace(regExp, '')
 | 
			
		||||
			if (json.reactions[keye]) {
 | 
			
		||||
				$('#pub_' + id + ' .re-' + keyeClass + 'ct').text(json.reactions[keye])
 | 
			
		||||
				$('#pub_' + id + ' .re-' + keyeClass).removeClass('hide')
 | 
			
		||||
			} else {
 | 
			
		||||
				$('#pub_' + id + ' .re-' + keyeClass + 'ct').text(0)
 | 
			
		||||
				if ($('#pub_' + id + ' .reactions').hasClass('fullreact')) {
 | 
			
		||||
					$('#pub_' + id + ' .re-' + keyeClass).addClass('hide')
 | 
			
		||||
				}
 | 
			
		||||
				$('#pub_' + id + ' .re-' + keyeClass + 'ct').text(json.reactions[keye])
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function emojiReaction(emoji) {
 | 
			
		||||
	var media = $('#media').val()
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	var id = $('#reply').val()
 | 
			
		||||
	if(media == 'announcement') {
 | 
			
		||||
		announReaction(id, acct_id, 0, false, emoji)
 | 
			
		||||
	} else {
 | 
			
		||||
		reaction(emoji, id, acct_id, null)
 | 
			
		||||
	}
 | 
			
		||||
	clear()
 | 
			
		||||
	hide()
 | 
			
		||||
}
 | 
			
		||||
function reaction(mode, id, acct_id, tlid) {
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	if ($('.fav_' + id).hasClass('yellow-text')) {
 | 
			
		||||
		var flag = 'delete'
 | 
			
		||||
	} else {
 | 
			
		||||
		var flag = 'create'
 | 
			
		||||
	}
 | 
			
		||||
	var start = 'https://' + domain + '/api/notes/reactions/' + flag
 | 
			
		||||
	if (localStorage.getItem('mode_' + domain) != 'misskey') {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var httpreq = new XMLHttpRequest()
 | 
			
		||||
	httpreq.open('POST', start, true)
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json')
 | 
			
		||||
	httpreq.responseType = 'json'
 | 
			
		||||
	httpreq.send(JSON.stringify({ i: at, noteId: id, reaction: mode }))
 | 
			
		||||
	httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
            $(".fav_"+id).toggleClass("yellow-text");
 | 
			
		||||
			if (this.status !== 200) {
 | 
			
		||||
				setLog(start, this.status, this.response)
 | 
			
		||||
			}
 | 
			
		||||
			$('.fav_' + id).toggleClass('yellow-text')
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//Vote
 | 
			
		||||
function vote(acct_id,id,to){
 | 
			
		||||
    var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
    var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
    var start = "https://" + domain + "/api/notes/polls/vote";
 | 
			
		||||
    if(localStorage.getItem("mode_" + domain)!="misskey"){
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
	var httpreq = new XMLHttpRequest();
 | 
			
		||||
	httpreq.open('POST', start, true);
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json');
 | 
			
		||||
    httpreq.responseType = "json";
 | 
			
		||||
	httpreq.send(JSON.stringify({i:at,noteId:id,choice:to}));
 | 
			
		||||
    httpreq.onreadystatechange = function() {
 | 
			
		||||
		voterefresh(acct_id,id)
 | 
			
		||||
function vote(acct_id, id, to) {
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var start = 'https://' + domain + '/api/notes/polls/vote'
 | 
			
		||||
	if (localStorage.getItem('mode_' + domain) != 'misskey') {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var httpreq = new XMLHttpRequest()
 | 
			
		||||
	httpreq.open('POST', start, true)
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json')
 | 
			
		||||
	httpreq.responseType = 'json'
 | 
			
		||||
	httpreq.send(JSON.stringify({ i: at, noteId: id, choice: to }))
 | 
			
		||||
	httpreq.onreadystatechange = function() {
 | 
			
		||||
		voterefresh(acct_id, id)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function voterefresh(acct_id,id){
 | 
			
		||||
    var httpreqd = new XMLHttpRequest();
 | 
			
		||||
    var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
    var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
    var start = "https://" + domain + "/api/notes/show";
 | 
			
		||||
	httpreqd.open('POST', start, true);
 | 
			
		||||
	httpreqd.setRequestHeader('Content-Type', 'application/json');
 | 
			
		||||
    httpreqd.responseType = 'json';
 | 
			
		||||
	httpreqd.send(JSON.stringify({i:at,noteId:id}));
 | 
			
		||||
    httpreqd.onreadystatechange = function() {
 | 
			
		||||
function voterefresh(acct_id, id) {
 | 
			
		||||
	var httpreqd = new XMLHttpRequest()
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var start = 'https://' + domain + '/api/notes/show'
 | 
			
		||||
	httpreqd.open('POST', start, true)
 | 
			
		||||
	httpreqd.setRequestHeader('Content-Type', 'application/json')
 | 
			
		||||
	httpreqd.responseType = 'json'
 | 
			
		||||
	httpreqd.send(JSON.stringify({ i: at, noteId: id }))
 | 
			
		||||
	httpreqd.onreadystatechange = function() {
 | 
			
		||||
		if (httpreqd.readyState == 4) {
 | 
			
		||||
            var json = httpreqd.response;
 | 
			
		||||
            if(!json){
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            var poll="";
 | 
			
		||||
		    if(json.poll){
 | 
			
		||||
			    var choices=json.poll.choices;
 | 
			
		||||
			    Object.keys(choices).forEach(function(keyc) {
 | 
			
		||||
                    var choice = choices[keyc];
 | 
			
		||||
                    if(choice.isVoted){
 | 
			
		||||
                        var myvote=twemoji.parse("✅");
 | 
			
		||||
                    }else{
 | 
			
		||||
                           var myvote="";
 | 
			
		||||
                    }
 | 
			
		||||
                    poll=poll+'<div class="pointer vote" onclick="vote(\''+acct_id+'\',\''+json.id+'\','+choice.id+')">'+choice.text+'('+choice.votes+''+myvote+')</div>';
 | 
			
		||||
                });
 | 
			
		||||
                $(".vote_"+json.id).html(poll)
 | 
			
		||||
		    }
 | 
			
		||||
			var json = httpreqd.response
 | 
			
		||||
			if (this.status !== 200) {
 | 
			
		||||
				setLog(start, this.status, json)
 | 
			
		||||
			}
 | 
			
		||||
			if (!json) {
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
			var poll = ''
 | 
			
		||||
			if (json.poll) {
 | 
			
		||||
				var choices = json.poll.choices
 | 
			
		||||
				Object.keys(choices).forEach(function(keyc) {
 | 
			
		||||
					var choice = choices[keyc]
 | 
			
		||||
					if (choice.isVoted) {
 | 
			
		||||
						var myvote = twemoji.parse('✅')
 | 
			
		||||
					} else {
 | 
			
		||||
						var myvote = ''
 | 
			
		||||
					}
 | 
			
		||||
					poll = poll + `<div class="pointer vote" onclick="vote('${acct_id}','${json.id}',"${choice.id}')">${escapeHTML(choice.text)}(${choice.votes})${myvote})</div>`
 | 
			
		||||
				})
 | 
			
		||||
				$('.vote_' + json.id).html(poll)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,310 +1,364 @@
 | 
			
		||||
/*投稿系*/ 
 | 
			
		||||
/*投稿系*/
 | 
			
		||||
//投稿
 | 
			
		||||
function sec(){
 | 
			
		||||
	var mode=localStorage.getItem("sec");
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	if(~domain.indexOf("kirishima.cloud")>=0 && mode=="local"){
 | 
			
		||||
		mode="unlisted";
 | 
			
		||||
function sec() {
 | 
			
		||||
	var mode = localStorage.getItem('sec')
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	if (~domain.indexOf('kirishima.cloud') >= 0 && mode == 'local') {
 | 
			
		||||
		mode = 'unlisted'
 | 
			
		||||
	}
 | 
			
		||||
	post(null,mode);
 | 
			
		||||
	post(null, mode)
 | 
			
		||||
}
 | 
			
		||||
function post(mode,postvis) {
 | 
			
		||||
	if($("#toot-post-btn").prop("disabled")){
 | 
			
		||||
		return false;
 | 
			
		||||
function post(mode, postvis) {
 | 
			
		||||
	if ($('#toot-post-btn').prop('disabled')) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	var str = $("#textarea").val();
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	localStorage.setItem("last-use", acct_id);
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	if(domain=="theboss.tech"){
 | 
			
		||||
		if(~str.indexOf("#")){
 | 
			
		||||
			if(str.indexOf("#theboss_tech")=="-1"){
 | 
			
		||||
				if(!confirm(lang.lang_post_tagTL)){
 | 
			
		||||
					return false;
 | 
			
		||||
	var str = $('#textarea').val()
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	localStorage.setItem('last-use', acct_id)
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	if ($('#ideKey').val() != '') {
 | 
			
		||||
		var ideKey = $('#ideKey').val()
 | 
			
		||||
	} else {
 | 
			
		||||
		var user = localStorage.getItem('user_' + acct_id)
 | 
			
		||||
		var ideKey = Math.floor(Date.now() / 1000) + '/TheDesk/' + user + '@' + domain
 | 
			
		||||
		$('#ideKey').val(ideKey)
 | 
			
		||||
	}
 | 
			
		||||
	if (!localStorage.getItem('cw_sentence')) {
 | 
			
		||||
		var cw_sent = 500
 | 
			
		||||
	} else {
 | 
			
		||||
		var cw_sent = localStorage.getItem('cw_sentence')
 | 
			
		||||
	}
 | 
			
		||||
	if (!localStorage.getItem('cw_letters')) {
 | 
			
		||||
		var cw_ltres = 7000
 | 
			
		||||
	} else {
 | 
			
		||||
		var cw_ltres = localStorage.getItem('cw_letters')
 | 
			
		||||
	}
 | 
			
		||||
	if (domain != 'kirishima.cloud') {
 | 
			
		||||
		if (
 | 
			
		||||
			mode != 'pass' &&
 | 
			
		||||
			!$('#cw').hasClass('cw-avail') &&
 | 
			
		||||
			(str.length > cw_sent || str.split('\n').length - 1 > cw_ltres)
 | 
			
		||||
		) {
 | 
			
		||||
			var plus = str.replace(/\n/g, '').slice(0, 10) + '...'
 | 
			
		||||
			Swal.fire({
 | 
			
		||||
				title: lang.lang_post_cwtitle,
 | 
			
		||||
				text: lang.lang_post_cwtxt + plus,
 | 
			
		||||
				type: 'info',
 | 
			
		||||
				showCancelButton: true,
 | 
			
		||||
				confirmButtonColor: '#3085d6',
 | 
			
		||||
				cancelButtonColor: '#3085d6',
 | 
			
		||||
				confirmButtonText: lang.lang_post_btn2,
 | 
			
		||||
				cancelButtonText: lang.lang_post_btn3,
 | 
			
		||||
				showCloseButton: true,
 | 
			
		||||
				focusConfirm: false
 | 
			
		||||
			}).then(result => {
 | 
			
		||||
				if (result.dismiss == 'cancel') {
 | 
			
		||||
					//btn3:sonomama
 | 
			
		||||
					post('pass')
 | 
			
		||||
				} else if (result.value) {
 | 
			
		||||
					//btn2:auto-CW
 | 
			
		||||
					$('#cw-text').show()
 | 
			
		||||
					$('#cw').addClass('yellow-text')
 | 
			
		||||
					$('#cw').addClass('cw-avail')
 | 
			
		||||
					$('#cw-text').val(plus)
 | 
			
		||||
					post('pass')
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			})
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if(domain=="dtp-mstdn.jp"){
 | 
			
		||||
		if(~str.indexOf("#")){
 | 
			
		||||
			if(str.indexOf("#dtp")=="-1"){
 | 
			
		||||
				if(!confirm(lang.lang_post_tagTL)){
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (localStorage.getItem('mode_' + domain) == 'misskey') {
 | 
			
		||||
		misskeyPost()
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if(!localStorage.getItem("cw_sentence")){
 | 
			
		||||
		var cw_sent=500;
 | 
			
		||||
	}else{
 | 
			
		||||
		var cw_sent=localStorage.getItem("cw_sentence");
 | 
			
		||||
	$('.toot-btn-group').prop('disabled', true)
 | 
			
		||||
	todo('Posting')
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var start = 'https://' + domain + '/api/v1/statuses'
 | 
			
		||||
	var reply = $('#reply').val()
 | 
			
		||||
	if (str.indexOf(localStorage.getItem('stable')) == -1) {
 | 
			
		||||
		str + ' #' + localStorage.getItem('stable')
 | 
			
		||||
	}
 | 
			
		||||
	if(!localStorage.getItem("cw_letters")){
 | 
			
		||||
		var cw_ltres=500;
 | 
			
		||||
	}else{
 | 
			
		||||
		var cw_ltres=localStorage.getItem("cw_letters");
 | 
			
		||||
	}
 | 
			
		||||
	if(domain!="kirishima.cloud"){
 | 
			
		||||
	if(mode!="pass" && !$("#cw").hasClass("cw-avail") && (str.length>cw_sent || (str.split("\n").length - 1)>cw_ltres)){
 | 
			
		||||
		var electron = require("electron");
 | 
			
		||||
		var remote=electron.remote;
 | 
			
		||||
		var dialog=remote.dialog;
 | 
			
		||||
		var plus=str.replace(/\n/g,"").slice(0,10)+"...";
 | 
			
		||||
		const options = {
 | 
			
		||||
			type: 'info',
 | 
			
		||||
			title: lang.lang_post_cwtitle,
 | 
			
		||||
			message: lang.lang_post_cwtxt+plus,
 | 
			
		||||
			buttons: [lang.lang_post_btn1,lang.lang_post_btn2, lang.lang_post_btn3]
 | 
			
		||||
	  }
 | 
			
		||||
	  dialog.showMessageBox(options, function(arg) {
 | 
			
		||||
			if(arg===1){
 | 
			
		||||
				$("#cw-text").show();
 | 
			
		||||
				$("#cw").addClass("yellow-text");
 | 
			
		||||
				$("#cw").addClass("cw-avail");
 | 
			
		||||
				$("#cw-text").val(plus);
 | 
			
		||||
				post("pass");
 | 
			
		||||
			}else if(arg===2){
 | 
			
		||||
				post("pass");
 | 
			
		||||
			}
 | 
			
		||||
	  	})
 | 
			
		||||
		  return false;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
	if(localStorage.getItem("mode_" + domain)=="misskey"){
 | 
			
		||||
		misskeyPost();
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	$(".toot-btn-group").prop("disabled", true);
 | 
			
		||||
	todo("Posting");
 | 
			
		||||
	var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
	var start = "https://" + domain + "/api/v1/statuses";
 | 
			
		||||
	var reply = $("#reply").val();
 | 
			
		||||
	if(str.indexOf(localStorage.getItem("stable"))==-1){
 | 
			
		||||
		str+" #"+localStorage.getItem("stable");
 | 
			
		||||
	}
 | 
			
		||||
	var toot={
 | 
			
		||||
	var toot = {
 | 
			
		||||
		status: str
 | 
			
		||||
	}
 | 
			
		||||
	if(reply){
 | 
			
		||||
		toot.in_reply_to_id=reply
 | 
			
		||||
	if (reply) {
 | 
			
		||||
		toot.in_reply_to_id = reply
 | 
			
		||||
	}
 | 
			
		||||
	var media = $("#media").val();
 | 
			
		||||
	if(media){
 | 
			
		||||
		toot.media_ids=media.split(",");
 | 
			
		||||
	var media = $('#media').val()
 | 
			
		||||
	if (media) {
 | 
			
		||||
		toot.media_ids = media.split(',')
 | 
			
		||||
	}
 | 
			
		||||
	if ($("#nsfw").hasClass("nsfw-avail")) {
 | 
			
		||||
		var nsfw = "true";
 | 
			
		||||
		toot.sensitive=nsfw;
 | 
			
		||||
	var quote = $('#quote').val()
 | 
			
		||||
	if (quote) {
 | 
			
		||||
		toot.quote_id = quote
 | 
			
		||||
	}
 | 
			
		||||
	if ($('#nsfw').hasClass('nsfw-avail')) {
 | 
			
		||||
		var nsfw = 'true'
 | 
			
		||||
		toot.sensitive = nsfw
 | 
			
		||||
	} else {
 | 
			
		||||
		var nsfw = "false";
 | 
			
		||||
		var nsfw = 'false'
 | 
			
		||||
	}
 | 
			
		||||
	if(postvis){
 | 
			
		||||
		var vis = postvis;
 | 
			
		||||
	}else{
 | 
			
		||||
		var vis = $("#vis").text();
 | 
			
		||||
	if (postvis) {
 | 
			
		||||
		var vis = postvis
 | 
			
		||||
	} else {
 | 
			
		||||
		var vis = $('#vis').text()
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if(vis!="inherit" && vis!="local"){
 | 
			
		||||
		toot.visibility=vis;
 | 
			
		||||
	}else if(vis=="local"){
 | 
			
		||||
		toot.status=str+"👁️";
 | 
			
		||||
	if (vis != 'inherit' && vis != 'local') {
 | 
			
		||||
		toot.visibility = vis
 | 
			
		||||
	} else if (vis == 'local') {
 | 
			
		||||
		toot.status = str + '👁️'
 | 
			
		||||
	}
 | 
			
		||||
	//ここに非公開・未収載タグについてwarn
 | 
			
		||||
	if(domain!="kirishima.cloud" && domain!="imastodon.net"){
 | 
			
		||||
	if(~str.indexOf("#")){
 | 
			
		||||
		if(vis == "local" || vis=="unlisted" || vis=="direct" || vis=="private"){
 | 
			
		||||
			if(!confirm(lang.lang_post_tagVis)){
 | 
			
		||||
				return false;
 | 
			
		||||
	if ($('#cw').hasClass('cw-avail')) {
 | 
			
		||||
		var spo = $('#cw-text').val()
 | 
			
		||||
		cw()
 | 
			
		||||
		toot.spoiler_text = spo
 | 
			
		||||
	} else {
 | 
			
		||||
		var spo = ''
 | 
			
		||||
	}
 | 
			
		||||
	if ($('#sch-box').hasClass('sch-avail')) {
 | 
			
		||||
		var scheduled = formattimeutc(new Date(Date.parse($('#sch-date').val())))
 | 
			
		||||
		console.log('This toot will be posted at:' + scheduled)
 | 
			
		||||
		schedule()
 | 
			
		||||
		toot.scheduled_at = scheduled
 | 
			
		||||
		if($('#sch-box').hasClass('expire')) {
 | 
			
		||||
			toot.scheduled_at = null
 | 
			
		||||
			toot.expires_at = scheduled
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		var scheduled = ''
 | 
			
		||||
	}
 | 
			
		||||
	if (!$('#poll').hasClass('hide')) {
 | 
			
		||||
		var options = []
 | 
			
		||||
		$('.mastodon-choice').map(function() {
 | 
			
		||||
			var choice = $(this).val()
 | 
			
		||||
			if (choice != '') {
 | 
			
		||||
				options.push(choice)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
		if ($('#poll-multiple:checked').val() == '1') {
 | 
			
		||||
			var mul = true
 | 
			
		||||
		} else {
 | 
			
		||||
			var mul = false
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
	if ($("#cw").hasClass("cw-avail")) {
 | 
			
		||||
		var spo = $("#cw-text").val();
 | 
			
		||||
		cw();
 | 
			
		||||
		toot.spoiler_text=spo;
 | 
			
		||||
	} else {
 | 
			
		||||
		var spo = "";
 | 
			
		||||
	}
 | 
			
		||||
	if ($("#sch-box").hasClass("sch-avail")) {
 | 
			
		||||
		var scheduled=formattimeutc(new Date(Date.parse($("#sch-date").val())))
 | 
			
		||||
		console.log(scheduled)
 | 
			
		||||
		schedule();
 | 
			
		||||
		toot.scheduled_at=scheduled;
 | 
			
		||||
	} else {
 | 
			
		||||
		var scheduled = "";
 | 
			
		||||
	}
 | 
			
		||||
	if ($("#poll-sel").val()=="mastodon-poll") {
 | 
			
		||||
		var options=[];
 | 
			
		||||
		$(".mastodon-choice").map(function() {
 | 
			
		||||
			var choice=$(this).val();
 | 
			
		||||
			if(choice!=""){
 | 
			
		||||
				options.push(choice);
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
		if($("#poll-multiple:checked").val()=="1"){
 | 
			
		||||
			var mul=true;
 | 
			
		||||
		}else{
 | 
			
		||||
			var mul=false;
 | 
			
		||||
		if ($('#poll-until:checked').val() == '1') {
 | 
			
		||||
			var htt = true
 | 
			
		||||
		} else {
 | 
			
		||||
			var htt = false
 | 
			
		||||
		}
 | 
			
		||||
		if($("#poll-until:checked").val()=="1"){
 | 
			
		||||
			var htt=true;
 | 
			
		||||
		}else{
 | 
			
		||||
			var htt=false;
 | 
			
		||||
		var exin = pollCalc()
 | 
			
		||||
		if (!exin) {
 | 
			
		||||
			todc('Error: Poll expires_in param')
 | 
			
		||||
		}
 | 
			
		||||
		var exin=pollCalc();
 | 
			
		||||
		if(!exin){
 | 
			
		||||
			todc("Error: Poll expires_in param")
 | 
			
		||||
		}
 | 
			
		||||
		toot.poll={
 | 
			
		||||
		toot.poll = {
 | 
			
		||||
			options: options,
 | 
			
		||||
			expires_in: exin,
 | 
			
		||||
			multiple: mul,
 | 
			
		||||
			hide_totals: htt
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	console.log(toot);
 | 
			
		||||
	var httpreq = new XMLHttpRequest();
 | 
			
		||||
	httpreq.open('POST', start, true);
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json');
 | 
			
		||||
	httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
 | 
			
		||||
	httpreq.responseType = "json";
 | 
			
		||||
	httpreq.send(JSON.stringify(toot));
 | 
			
		||||
    httpreq.onreadystatechange = function() {
 | 
			
		||||
	console.table(toot)
 | 
			
		||||
	var httpreq = new XMLHttpRequest()
 | 
			
		||||
	httpreq.open('POST', start, true)
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json')
 | 
			
		||||
	httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
 | 
			
		||||
	httpreq.setRequestHeader('Idempotency-Key', ideKey)
 | 
			
		||||
	httpreq.responseType = 'json'
 | 
			
		||||
	httpreq.send(JSON.stringify(toot))
 | 
			
		||||
	httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
			var json = httpreq.response;
 | 
			
		||||
			var box = localStorage.getItem("box");
 | 
			
		||||
			if (box == "yes" || !box) {
 | 
			
		||||
				$("#textarea").blur();
 | 
			
		||||
				hide();
 | 
			
		||||
			var json = httpreq.response
 | 
			
		||||
			if (this.status !== 200) {
 | 
			
		||||
				if(media && this.status == 422) {
 | 
			
		||||
					$('#ideKey').val('')
 | 
			
		||||
					$('.toot-btn-group').prop('disabled', false)
 | 
			
		||||
					alertProcessUnfinished()
 | 
			
		||||
				} else {
 | 
			
		||||
					setLog(start, this.status, json)
 | 
			
		||||
					var box = localStorage.getItem('box')
 | 
			
		||||
					if (box == 'yes' || !box) {
 | 
			
		||||
						$('#textarea').blur()
 | 
			
		||||
						hide()
 | 
			
		||||
					}
 | 
			
		||||
					$('.toot-btn-group').prop('disabled', false)
 | 
			
		||||
					todc()
 | 
			
		||||
					clear()
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				$('#ideKey').val('')
 | 
			
		||||
				var box = localStorage.getItem('box')
 | 
			
		||||
				if (box == 'yes' || !box) {
 | 
			
		||||
					$('#textarea').blur()
 | 
			
		||||
					hide()
 | 
			
		||||
				}
 | 
			
		||||
				$('.toot-btn-group').prop('disabled', false)
 | 
			
		||||
				todc()
 | 
			
		||||
				clear()
 | 
			
		||||
			}
 | 
			
		||||
			$(".toot-btn-group").prop("disabled", false);
 | 
			
		||||
			todc();
 | 
			
		||||
			clear();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function misskeyPost(){
 | 
			
		||||
	var str = $("#textarea").val();
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	localStorage.setItem("last-use", acct_id);
 | 
			
		||||
	var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
	$(".toot-btn-group").prop("disabled", true);
 | 
			
		||||
	todo("Posting");
 | 
			
		||||
	var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
	var start = "https://" + domain + "/api/notes/create";
 | 
			
		||||
	var reply = $("#reply").val();
 | 
			
		||||
	var toot={
 | 
			
		||||
function expPostMode() {
 | 
			
		||||
	$('#sch-box').toggleClass('expire')
 | 
			
		||||
	if($('#sch-box').hasClass('expire')) {
 | 
			
		||||
		Swal.fire({
 | 
			
		||||
			type: 'info',
 | 
			
		||||
			title: 'Expiring toot On'
 | 
			
		||||
		})
 | 
			
		||||
	} else {
 | 
			
		||||
		Swal.fire({
 | 
			
		||||
			type: 'info',
 | 
			
		||||
			title: 'Expireing toot Off'
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function misskeyPost() {
 | 
			
		||||
	var str = $('#textarea').val()
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	localStorage.setItem('last-use', acct_id)
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	$('.toot-btn-group').prop('disabled', true)
 | 
			
		||||
	todo('Posting')
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var start = 'https://' + domain + '/api/notes/create'
 | 
			
		||||
	var reply = $('#reply').val()
 | 
			
		||||
	var toot = {
 | 
			
		||||
		text: str
 | 
			
		||||
	}
 | 
			
		||||
	if(reply){
 | 
			
		||||
		if(reply.indexOf("renote")!== -1){
 | 
			
		||||
			toot.renoteId=reply.replace("renote_","")
 | 
			
		||||
		}else{
 | 
			
		||||
			toot.replyId=reply
 | 
			
		||||
	if (reply) {
 | 
			
		||||
		if (reply.indexOf('renote') !== -1) {
 | 
			
		||||
			toot.renoteId = reply.replace('renote_', '')
 | 
			
		||||
		} else {
 | 
			
		||||
			toot.replyId = reply
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	var media = $("#media").val();
 | 
			
		||||
	if(media){
 | 
			
		||||
		toot.mediaIds=media.split(",");
 | 
			
		||||
 | 
			
		||||
	var media = $('#media').val()
 | 
			
		||||
	if (media) {
 | 
			
		||||
		toot.mediaIds = media.split(',')
 | 
			
		||||
	}
 | 
			
		||||
	if ($("#nsfw").hasClass("nsfw-avail")) {
 | 
			
		||||
		var nsfw = "true";
 | 
			
		||||
		toot.sensitive=nsfw;
 | 
			
		||||
	if ($('#nsfw').hasClass('nsfw-avail')) {
 | 
			
		||||
		var nsfw = 'true'
 | 
			
		||||
		toot.sensitive = nsfw
 | 
			
		||||
	} else {
 | 
			
		||||
		var nsfw = "false";
 | 
			
		||||
		var nsfw = 'false'
 | 
			
		||||
	}
 | 
			
		||||
	var vis = $("#vis").text();
 | 
			
		||||
	if(vis=="unlisted"){
 | 
			
		||||
		vis=="home"
 | 
			
		||||
	}else if(vis=="direct"){
 | 
			
		||||
		vis=="specified";
 | 
			
		||||
		toot.visibleUserIds=str.match(/@([a-zA-Z0-9_@.-]+)(\s|$)/g).join('').split("@");
 | 
			
		||||
	var vis = $('#vis').text()
 | 
			
		||||
	if (vis == 'unlisted') {
 | 
			
		||||
		vis = 'home'
 | 
			
		||||
	} else if (vis == 'direct') {
 | 
			
		||||
		vis = 'specified'
 | 
			
		||||
		toot.visibleUserIds = str
 | 
			
		||||
			.match(/@([a-zA-Z0-9_@.-]+)(\s|$)/g)
 | 
			
		||||
			.join('')
 | 
			
		||||
			.split('@')
 | 
			
		||||
	}
 | 
			
		||||
	if(vis!="inherit"){
 | 
			
		||||
		toot.visibility=vis;
 | 
			
		||||
	if (vis != 'inherit') {
 | 
			
		||||
		toot.visibility = vis
 | 
			
		||||
	}
 | 
			
		||||
	if ($("#cw").hasClass("cw-avail")) {
 | 
			
		||||
		var spo = $("#cw-text").val();
 | 
			
		||||
		cw();
 | 
			
		||||
		toot.cw=spo;
 | 
			
		||||
	if ($('#cw').hasClass('cw-avail')) {
 | 
			
		||||
		var spo = $('#cw-text').val()
 | 
			
		||||
		cw()
 | 
			
		||||
		toot.cw = spo
 | 
			
		||||
	} else {
 | 
			
		||||
		var spo = "";
 | 
			
		||||
		var spo = ''
 | 
			
		||||
	}
 | 
			
		||||
	toot.i=at;
 | 
			
		||||
	var httpreq = new XMLHttpRequest();
 | 
			
		||||
	httpreq.open('POST', start, true);
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json');
 | 
			
		||||
	httpreq.responseType = "json";
 | 
			
		||||
	httpreq.send(JSON.stringify(toot));
 | 
			
		||||
    httpreq.onreadystatechange = function() {
 | 
			
		||||
	toot.i = at
 | 
			
		||||
	var httpreq = new XMLHttpRequest()
 | 
			
		||||
	httpreq.open('POST', start, true)
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json')
 | 
			
		||||
	httpreq.responseType = 'json'
 | 
			
		||||
	httpreq.send(JSON.stringify(toot))
 | 
			
		||||
	httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
			if(str.indexOf(localStorage.getItem("stable"))==-1){
 | 
			
		||||
				localStorage.removeItem("stable")
 | 
			
		||||
			if (str.indexOf(localStorage.getItem('stable')) == -1) {
 | 
			
		||||
				localStorage.removeItem('stable')
 | 
			
		||||
			}
 | 
			
		||||
			var json = httpreq.response;
 | 
			
		||||
			console.log(json);
 | 
			
		||||
			var box = localStorage.getItem("box");
 | 
			
		||||
			if (box == "yes") {
 | 
			
		||||
				hide();
 | 
			
		||||
			}else if (box == "hide"){
 | 
			
		||||
				$("body").addClass("mini-post");
 | 
			
		||||
				$(".mini-btn").text("expand_less");
 | 
			
		||||
			var json = httpreq.response
 | 
			
		||||
			if (this.status !== 200) {
 | 
			
		||||
				setLog(start, this.status, json)
 | 
			
		||||
			}
 | 
			
		||||
			$(".toot-btn-group").prop("disabled", false);
 | 
			
		||||
			todc();
 | 
			
		||||
			clear();
 | 
			
		||||
			console.log(['Success: toot', json])
 | 
			
		||||
			var box = localStorage.getItem('box')
 | 
			
		||||
			if (box == 'yes') {
 | 
			
		||||
				hide()
 | 
			
		||||
			} else if (box == 'hide') {
 | 
			
		||||
				$('body').addClass('mini-post')
 | 
			
		||||
				$('.mini-btn').text('expand_less')
 | 
			
		||||
			}
 | 
			
		||||
			$('.toot-btn-group').prop('disabled', false)
 | 
			
		||||
			todc()
 | 
			
		||||
			clear()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//クリア(Shift+C)
 | 
			
		||||
function clear() {
 | 
			
		||||
	$("#textarea").val("");
 | 
			
		||||
	if(localStorage.getItem("stable")){
 | 
			
		||||
		$("#textarea").val("#"+localStorage.getItem("stable")+" ")
 | 
			
		||||
	$('#textarea').val('')
 | 
			
		||||
	$('#ideKey').val('')
 | 
			
		||||
	if (localStorage.getItem('stable')) {
 | 
			
		||||
		$('#textarea').val('#' + localStorage.getItem('stable') + ' ')
 | 
			
		||||
	}
 | 
			
		||||
	$("#textarea").attr("placeholder", lang.lang_toot);
 | 
			
		||||
	$("#reply").val("");
 | 
			
		||||
	$("#media").val("");
 | 
			
		||||
	var cwt = localStorage.getItem("cw-text");
 | 
			
		||||
	$('#textarea').attr('placeholder', lang.lang_toot)
 | 
			
		||||
	$('#reply').val('')
 | 
			
		||||
	$('#quote').val('')
 | 
			
		||||
	$('#media').val('')
 | 
			
		||||
	var cwt = localStorage.getItem('cw-text')
 | 
			
		||||
	if (cwt) {
 | 
			
		||||
		$("#cw-text").val(cwt);
 | 
			
		||||
		$('#cw-text').val(cwt)
 | 
			
		||||
	} else {
 | 
			
		||||
		$("#cw-text").val("");
 | 
			
		||||
		$('#cw-text').val('')
 | 
			
		||||
	}
 | 
			
		||||
	var acw = localStorage.getItem("always-cw");
 | 
			
		||||
	if (acw != "yes") {
 | 
			
		||||
		$("#cw").removeClass("yellow-text");
 | 
			
		||||
		$("#cw").removeClass("cw-avail");
 | 
			
		||||
		$("#cw-text").hide();
 | 
			
		||||
	}else{
 | 
			
		||||
		$("#cw").addClass("yellow-text");
 | 
			
		||||
		$("#cw").addClass("cw-avail");
 | 
			
		||||
		$("#cw-text").show();
 | 
			
		||||
	var acw = localStorage.getItem('always-cw')
 | 
			
		||||
	if (acw != 'yes') {
 | 
			
		||||
		$('#cw').removeClass('yellow-text')
 | 
			
		||||
		$('#cw').removeClass('cw-avail')
 | 
			
		||||
		$('#cw-text').hide()
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#cw').addClass('yellow-text')
 | 
			
		||||
		$('#cw').addClass('cw-avail')
 | 
			
		||||
		$('#cw-text').show()
 | 
			
		||||
	}
 | 
			
		||||
	$("#rec").text(lang.lang_no);
 | 
			
		||||
	$("#mec").text(lang.lang_nothing);
 | 
			
		||||
	loadVis();
 | 
			
		||||
	$("#nsfw").removeClass("yellow-text");
 | 
			
		||||
	$("#nsfw").html("visibility_off");
 | 
			
		||||
	$("#nsfw").removeClass("nsfw-avail");
 | 
			
		||||
	$("#nsc").text(lang.lang_nothing);
 | 
			
		||||
	$("#drag").css("background-color", "#e0e0e0");
 | 
			
		||||
	$("#preview").html("");
 | 
			
		||||
	$(".toot-btn-group").prop("disabled", false);
 | 
			
		||||
	$("#post-acct-sel").prop("disabled", false);
 | 
			
		||||
	$("#days_poll").val(0);
 | 
			
		||||
  $("#hours_poll").val(0);
 | 
			
		||||
	$("#mins_poll").val(0);
 | 
			
		||||
	$(".mastodon-choice").map(function() {
 | 
			
		||||
		$(this).val("");
 | 
			
		||||
	});
 | 
			
		||||
	localStorage.removeItem("image");
 | 
			
		||||
	if(localStorage.getItem("mainuse")=="main"){
 | 
			
		||||
		$("#post-acct-sel").val(localStorage.getItem("main"));
 | 
			
		||||
	$('#rec').text(lang.lang_no)
 | 
			
		||||
	$('#mec').text(lang.lang_nothing)
 | 
			
		||||
	loadVis()
 | 
			
		||||
	$('#nsfw').removeClass('yellow-text')
 | 
			
		||||
	$('#nsfw').html('visibility_off')
 | 
			
		||||
	$('#nsfw').removeClass('nsfw-avail')
 | 
			
		||||
	$('#stamp').html('Off')
 | 
			
		||||
	$('#stamp').removeClass('stamp-avail')
 | 
			
		||||
	$('#nsc').text(lang.lang_nothing)
 | 
			
		||||
	$('#drag').css('background-color', '#e0e0e0')
 | 
			
		||||
	$('#preview').html('')
 | 
			
		||||
	$('.toot-btn-group').prop('disabled', false)
 | 
			
		||||
	$('#post-acct-sel').prop('disabled', false)
 | 
			
		||||
	$('#days_poll').val(0)
 | 
			
		||||
	$('#hours_poll').val(0)
 | 
			
		||||
	$('#mins_poll').val(6)
 | 
			
		||||
	$('#poll').addClass('hide')
 | 
			
		||||
	$('#pollsta').text(lang.lang_no)
 | 
			
		||||
	$('.mastodon-choice').map(function() {
 | 
			
		||||
		$(this).val('')
 | 
			
		||||
	})
 | 
			
		||||
	if (localStorage.getItem('mainuse') == 'main') {
 | 
			
		||||
		$('#post-acct-sel').val(localStorage.getItem('main'))
 | 
			
		||||
	}
 | 
			
		||||
	$('select').material_select();
 | 
			
		||||
}
 | 
			
		||||
	$('#emoji').addClass('hide')
 | 
			
		||||
	$('select').formSelect()
 | 
			
		||||
	$('#default-emoji').show()
 | 
			
		||||
	$('#unreact').show()
 | 
			
		||||
	$('#addreact').addClass('hide')
 | 
			
		||||
	$('#right-side').hide()
 | 
			
		||||
	$('#right-side').css('width', '300px')
 | 
			
		||||
	$('#left-side').css('width', '100%')
 | 
			
		||||
	var width = localStorage.getItem('postbox-width')
 | 
			
		||||
	if (width) {
 | 
			
		||||
		width = width.replace('px', '') * 1
 | 
			
		||||
	} else {
 | 
			
		||||
		width = 300
 | 
			
		||||
	}
 | 
			
		||||
	$('#post-box').css('width', width)
 | 
			
		||||
	mdCheck()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,129 +1,128 @@
 | 
			
		||||
/*保護系*/
 | 
			
		||||
//画像保護
 | 
			
		||||
function nsfw(){
 | 
			
		||||
	if($("#nsfw").hasClass("nsfw-avail")){
 | 
			
		||||
		$("#nsfw").removeClass("yellow-text");
 | 
			
		||||
		$("#nsfw").html("visibility_off");
 | 
			
		||||
		$("#nsfw").removeClass("nsfw-avail");
 | 
			
		||||
	}else{
 | 
			
		||||
		$("#nsfw").addClass("yellow-text");
 | 
			
		||||
		$("#nsfw").html("visibility");
 | 
			
		||||
		$("#nsfw").addClass("nsfw-avail");
 | 
			
		||||
function nsfw() {
 | 
			
		||||
	if ($('#nsfw').hasClass('nsfw-avail')) {
 | 
			
		||||
		$('#nsfw').removeClass('yellow-text')
 | 
			
		||||
		$('#nsfw').html('visibility_off')
 | 
			
		||||
		$('#nsfw').removeClass('nsfw-avail')
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#nsfw').addClass('yellow-text')
 | 
			
		||||
		$('#nsfw').html('visibility')
 | 
			
		||||
		$('#nsfw').addClass('nsfw-avail')
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//投稿公開範囲
 | 
			
		||||
function vis(set){
 | 
			
		||||
	$("#vis").text(set);
 | 
			
		||||
	$("#vis-icon").removeClass("red-text");
 | 
			
		||||
	$("#vis-icon").removeClass("orange-text");
 | 
			
		||||
	$("#vis-icon").removeClass("blue-text");
 | 
			
		||||
	$("#vis-icon").removeClass("purple-text");
 | 
			
		||||
	$("#vis-icon").removeClass("light-blue-text");
 | 
			
		||||
	$("#vis-icon").removeClass("teal-text");
 | 
			
		||||
	if(set=="public"){
 | 
			
		||||
		$("#vis-icon").text("public");
 | 
			
		||||
		$("#vis-icon").addClass("purple-text");
 | 
			
		||||
	}else if(set=="unlisted"){
 | 
			
		||||
		$("#vis-icon").text("lock_open");
 | 
			
		||||
		$("#vis-icon").addClass("blue-text");
 | 
			
		||||
	}else if(set=="private"){
 | 
			
		||||
		$("#vis-icon").text("lock");
 | 
			
		||||
		$("#vis-icon").addClass("orange-text");
 | 
			
		||||
	}else if(set=="direct"){
 | 
			
		||||
		$("#vis-icon").text("mail");
 | 
			
		||||
		$("#vis-icon").addClass("red-text");
 | 
			
		||||
	}else if(set=="limited"){
 | 
			
		||||
		$("#vis-icon").text("group");
 | 
			
		||||
		$("#vis-icon").addClass("teal-text");
 | 
			
		||||
	}else if(set=="local"){
 | 
			
		||||
		$("#vis-icon").text("visibility");
 | 
			
		||||
		$("#vis-icon").addClass("light-blue-text");
 | 
			
		||||
function vis(set) {
 | 
			
		||||
	$('#vis').text(set)
 | 
			
		||||
	$('#vis-icon').removeClass('red-text')
 | 
			
		||||
	$('#vis-icon').removeClass('orange-text')
 | 
			
		||||
	$('#vis-icon').removeClass('blue-text')
 | 
			
		||||
	$('#vis-icon').removeClass('purple-text')
 | 
			
		||||
	$('#vis-icon').removeClass('light-blue-text')
 | 
			
		||||
	$('#vis-icon').removeClass('teal-text')
 | 
			
		||||
	if (set == 'public') {
 | 
			
		||||
		$('#vis-icon').text('public')
 | 
			
		||||
		$('#vis-icon').addClass('purple-text')
 | 
			
		||||
	} else if (set == 'unlisted') {
 | 
			
		||||
		$('#vis-icon').text('lock_open')
 | 
			
		||||
		$('#vis-icon').addClass('blue-text')
 | 
			
		||||
	} else if (set == 'private') {
 | 
			
		||||
		$('#vis-icon').text('lock')
 | 
			
		||||
		$('#vis-icon').addClass('orange-text')
 | 
			
		||||
	} else if (set == 'direct') {
 | 
			
		||||
		$('#vis-icon').text('mail')
 | 
			
		||||
		$('#vis-icon').addClass('red-text')
 | 
			
		||||
	} else if (set == 'limited') {
 | 
			
		||||
		$('#vis-icon').text('group')
 | 
			
		||||
		$('#vis-icon').addClass('teal-text')
 | 
			
		||||
	} else if (set == 'local') {
 | 
			
		||||
		$('#vis-icon').text('visibility')
 | 
			
		||||
		$('#vis-icon').addClass('light-blue-text')
 | 
			
		||||
	}
 | 
			
		||||
	var vis = localStorage.getItem('vis')
 | 
			
		||||
	if (vis == 'memory') {
 | 
			
		||||
		var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
		localStorage.setItem('vis-memory-' + acct_id, set)
 | 
			
		||||
	}
 | 
			
		||||
	var ins = M.Dropdown.getInstance($('#dropdown1'))
 | 
			
		||||
	if (ins) {
 | 
			
		||||
		ins.close()
 | 
			
		||||
	}
 | 
			
		||||
	var vis=localStorage.getItem("vis");
 | 
			
		||||
		if(vis=="memory"){
 | 
			
		||||
			var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
			localStorage.setItem("vis-memory-"+acct_id,set);
 | 
			
		||||
		}
 | 
			
		||||
	$('.dropdown-button').dropdown('close');
 | 
			
		||||
}
 | 
			
		||||
function loadVis(){
 | 
			
		||||
		var vist = localStorage.getItem("vis");
 | 
			
		||||
		console.log(vist);
 | 
			
		||||
		if (!vist) {
 | 
			
		||||
			vis("public");
 | 
			
		||||
		} else {
 | 
			
		||||
			if (vist == "memory") {
 | 
			
		||||
				var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
				var memory = localStorage.getItem("vis-memory-"+acct_id);
 | 
			
		||||
				if (!memory) {
 | 
			
		||||
					memory = "public";
 | 
			
		||||
				}
 | 
			
		||||
				vis(memory);
 | 
			
		||||
			} else if(vist == "useapi") {
 | 
			
		||||
				var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
				var multi = localStorage.getItem("multi");
 | 
			
		||||
				var obj = JSON.parse(multi);
 | 
			
		||||
				var memory = obj[acct_id]["vis"];
 | 
			
		||||
				if (!memory) {
 | 
			
		||||
					memory = "public";
 | 
			
		||||
				}
 | 
			
		||||
				vis(memory);
 | 
			
		||||
			} else {
 | 
			
		||||
				vis(vist);
 | 
			
		||||
function loadVis() {
 | 
			
		||||
	var vist = localStorage.getItem('vis')
 | 
			
		||||
	if (!vist) {
 | 
			
		||||
		vis('public')
 | 
			
		||||
	} else {
 | 
			
		||||
		if (vist == 'memory') {
 | 
			
		||||
			var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
			var memory = localStorage.getItem('vis-memory-' + acct_id)
 | 
			
		||||
			if (!memory) {
 | 
			
		||||
				memory = 'public'
 | 
			
		||||
			}
 | 
			
		||||
			vis(memory)
 | 
			
		||||
		} else if (vist == 'useapi') {
 | 
			
		||||
			var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
			var multi = localStorage.getItem('multi')
 | 
			
		||||
			var obj = JSON.parse(multi)
 | 
			
		||||
			var memory = obj[acct_id]['vis']
 | 
			
		||||
			if (!memory) {
 | 
			
		||||
				memory = 'public'
 | 
			
		||||
			}
 | 
			
		||||
			vis(memory)
 | 
			
		||||
		} else {
 | 
			
		||||
			vis(vist)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
loadVis();
 | 
			
		||||
loadVis()
 | 
			
		||||
 | 
			
		||||
//コンテントワーニング
 | 
			
		||||
function cw(){
 | 
			
		||||
	if($("#cw").hasClass("cw-avail")){
 | 
			
		||||
		$("#cw-text").val();
 | 
			
		||||
		$("#cw-text").hide();
 | 
			
		||||
		$("#cw").removeClass("yellow-text");
 | 
			
		||||
		$("#cw").removeClass("cw-avail");
 | 
			
		||||
	}else{
 | 
			
		||||
		$("#cw-text").show();
 | 
			
		||||
		$("#cw").addClass("yellow-text");
 | 
			
		||||
		$("#cw").addClass("cw-avail");
 | 
			
		||||
		var cwt=localStorage.getItem("cw-text");
 | 
			
		||||
		if(cwt){
 | 
			
		||||
			$("#cw-text").val(cwt);
 | 
			
		||||
function cw() {
 | 
			
		||||
	if ($('#cw').hasClass('cw-avail')) {
 | 
			
		||||
		$('#cw-text').val()
 | 
			
		||||
		$('#cw-text').hide()
 | 
			
		||||
		$('#cw').removeClass('yellow-text')
 | 
			
		||||
		$('#cw').removeClass('cw-avail')
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#cw-text').show()
 | 
			
		||||
		$('#cw').addClass('yellow-text')
 | 
			
		||||
		$('#cw').addClass('cw-avail')
 | 
			
		||||
		var cwt = localStorage.getItem('cw-text')
 | 
			
		||||
		if (cwt) {
 | 
			
		||||
			$('#cw-text').val(cwt)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//TLでコンテントワーニングを表示トグル
 | 
			
		||||
function cw_show(id){
 | 
			
		||||
	$(".cw_hide_"+id).toggleClass("cw");
 | 
			
		||||
	$(".cw-long-"+id).toggleClass("hide");
 | 
			
		||||
function cw_show(e) {
 | 
			
		||||
	$(e).parent().parent().find('.cw_hide').toggleClass('cw')
 | 
			
		||||
	$(e).parent().find('.cw_long').toggleClass('hide')
 | 
			
		||||
}
 | 
			
		||||
$(function() {
 | 
			
		||||
	$('#cw-text').on('change', function(event) {
 | 
			
		||||
		var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
		var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
		var cwlen=$('#cw-text').val().length;
 | 
			
		||||
		var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
		var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
		var cwlen = $('#cw-text').val().length
 | 
			
		||||
 | 
			
		||||
		if(idata[domain+"_letters"]){
 | 
			
		||||
			$("#textarea").attr("data-length", idata[domain+"_letters"]-cwlen)
 | 
			
		||||
		}else{
 | 
			
		||||
			$("#textarea").attr("data-length", 500-cwlen)
 | 
			
		||||
		if (idata[domain + '_letters']) {
 | 
			
		||||
			$('#textarea').attr('data-length', idata[domain + '_letters'] - cwlen)
 | 
			
		||||
		} else {
 | 
			
		||||
			$('#textarea').attr('data-length', 500 - cwlen)
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	});
 | 
			
		||||
  });
 | 
			
		||||
	})
 | 
			
		||||
})
 | 
			
		||||
//スケジュール
 | 
			
		||||
function schedule(){
 | 
			
		||||
	if($("#sch-box").hasClass("sch-avail")){
 | 
			
		||||
		$("#sch-box").hide();
 | 
			
		||||
		$("#sch-box").removeClass("sch-avail");
 | 
			
		||||
	}else{
 | 
			
		||||
		var date = new Date();
 | 
			
		||||
		
 | 
			
		||||
		$("#sch-box").show();
 | 
			
		||||
		$("#sch-date").val(formattime(date));
 | 
			
		||||
		console.log(formattime(date));
 | 
			
		||||
		$("#sch-box").addClass("sch-avail");
 | 
			
		||||
function schedule() {
 | 
			
		||||
	if ($('#sch-box').hasClass('sch-avail')) {
 | 
			
		||||
		$('#sch-box').hide()
 | 
			
		||||
		$('#sch-box').removeClass('sch-avail')
 | 
			
		||||
	} else {
 | 
			
		||||
		var date = new Date()
 | 
			
		||||
 | 
			
		||||
		$('#sch-box').show()
 | 
			
		||||
		$('#sch-date').val(formattime(date))
 | 
			
		||||
		$('#sch-box').addClass('sch-avail')
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,189 +1,279 @@
 | 
			
		||||
//入力時にハッシュタグと@をサジェスト
 | 
			
		||||
var timer = null;
 | 
			
		||||
var timer = null
 | 
			
		||||
 | 
			
		||||
var input = document.getElementById("textarea");
 | 
			
		||||
var input = document.getElementById('textarea')
 | 
			
		||||
 | 
			
		||||
var prev_val = input.value;
 | 
			
		||||
var oldSuggest;
 | 
			
		||||
var suggest;
 | 
			
		||||
var prev_val = input.value
 | 
			
		||||
var oldSuggest
 | 
			
		||||
var suggest
 | 
			
		||||
 | 
			
		||||
input.addEventListener("focus", function() {
 | 
			
		||||
	var acct_id = $("#post-acct-sel").val();
 | 
			
		||||
	$("#suggest").html("");
 | 
			
		||||
	window.clearInterval(timer);
 | 
			
		||||
	timer = window.setInterval(function() {
 | 
			
		||||
		var new_val = input.value;
 | 
			
		||||
		if(new_val==""){
 | 
			
		||||
			$("#suggest").html("");
 | 
			
		||||
			if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
 | 
			
		||||
				$("#right-side").hide()
 | 
			
		||||
			}
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		if (prev_val != new_val) {
 | 
			
		||||
			var semoji = new_val.match(/:(\S{3,})/);
 | 
			
		||||
			if(semoji){
 | 
			
		||||
				var obj = JSON.parse(localStorage.getItem("emoji_" + acct_id));
 | 
			
		||||
				if(!obj){
 | 
			
		||||
					var ehtml=lang.lang_suggest_nodata;
 | 
			
		||||
				}else{
 | 
			
		||||
					var num = obj.length;
 | 
			
		||||
					var ehtml="";
 | 
			
		||||
					for (i = 0; i < num; i++) {
 | 
			
		||||
						var emoji = obj[i];
 | 
			
		||||
						if ( ~emoji.shortcode.indexOf(semoji[1])) {
 | 
			
		||||
							if (emoji) {
 | 
			
		||||
							ehtml =  ehtml+'<a onclick="emojiInsert(\':' + emoji.shortcode +
 | 
			
		||||
								': \',\':'+semoji[1]+'\')" class="pointer"><img src="' + emoji.url + '" width="20"></a>';
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						}
 | 
			
		||||
				}
 | 
			
		||||
				if(ehtml!=""){
 | 
			
		||||
					$("#right-side").show()
 | 
			
		||||
					$("#poll").addClass("hide")
 | 
			
		||||
					$("#emoji").addClass("hide")
 | 
			
		||||
				}else{
 | 
			
		||||
					if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
 | 
			
		||||
						$("#right-side").hide()
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				$("#suggest").html(ehtml);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			var tag = new_val.match(/#(\S{3,})/);
 | 
			
		||||
			var acct = new_val.match(/@(\S{3,})/);
 | 
			
		||||
			if(localStorage.getItem("imas")){
 | 
			
		||||
				//セルフNP
 | 
			
		||||
				var cpnp = new_val.match(/^(?!.*http)\/\/(\S{1,})/);
 | 
			
		||||
			}else{
 | 
			
		||||
				var cpnp=[];
 | 
			
		||||
			}
 | 
			
		||||
			if (cpnp && cpnp[1]) {
 | 
			
		||||
				var q = cpnp[1];
 | 
			
		||||
				cgNPs(q);
 | 
			
		||||
			} else if (tag && tag[1]) {
 | 
			
		||||
				var q = tag[1];
 | 
			
		||||
			} else if (acct && acct[1]) {
 | 
			
		||||
				var q = acct[1];
 | 
			
		||||
			}else  {
 | 
			
		||||
				$("#suggest").html("");
 | 
			
		||||
				if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
 | 
			
		||||
					$("#right-side").hide()
 | 
			
		||||
				}
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
			var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
			suggest = "https://" + domain + "/api/v1/search?q=" + q
 | 
			
		||||
			if (suggest != oldSuggest) {
 | 
			
		||||
				console.log(suggest)
 | 
			
		||||
				fetch(suggest, {
 | 
			
		||||
					method: 'GET',
 | 
			
		||||
					headers: {
 | 
			
		||||
						'content-type': 'application/json',
 | 
			
		||||
						'Authorization': 'Bearer ' + at
 | 
			
		||||
					},
 | 
			
		||||
				}).then(function(response) {
 | 
			
		||||
					return response.json();
 | 
			
		||||
				}).catch(function(error) {
 | 
			
		||||
					todo(error);
 | 
			
		||||
					console.error(error);
 | 
			
		||||
				}).then(function(json) {
 | 
			
		||||
					if (json.hashtags[0] && tag) {
 | 
			
		||||
						if(tag[1]){
 | 
			
		||||
						var tags = "";
 | 
			
		||||
						Object.keys(json.hashtags).forEach(function(key4) {
 | 
			
		||||
							var tag = json.hashtags[key4];
 | 
			
		||||
							if(tag!=q){
 | 
			
		||||
								tags = tags + '<a onclick="tagInsert(\'#' + tag + '\',\'#' + q +
 | 
			
		||||
								'\')" class="pointer">#' + tag + '</a><br>';
 | 
			
		||||
							}
 | 
			
		||||
						});
 | 
			
		||||
						$("#right-side").show()
 | 
			
		||||
						$("#suggest").html("Tags:<br>" + tags);
 | 
			
		||||
						$("#poll").addClass("hide")
 | 
			
		||||
						$("#emoji").addClass("hide")
 | 
			
		||||
						}
 | 
			
		||||
					} else if (json.accounts[0] && acct[1]) {
 | 
			
		||||
						var accts = "";
 | 
			
		||||
						Object.keys(json.accounts).forEach(function(key3) {
 | 
			
		||||
							var acct = json.accounts[key3];
 | 
			
		||||
							if(acct.acct!=q){
 | 
			
		||||
								accts = accts + '<a onclick="tagInsert(\'@' + acct.acct +
 | 
			
		||||
								'\',\'@' + q + '\')" class="pointer">@' + acct.acct + '</a><br>';
 | 
			
		||||
							}
 | 
			
		||||
						});
 | 
			
		||||
						$("#right-side").show()
 | 
			
		||||
						$("#suggest").html(accts);
 | 
			
		||||
						$("#poll").addClass("hide")
 | 
			
		||||
						$("#emoji").addClass("hide")
 | 
			
		||||
input.addEventListener(
 | 
			
		||||
	'focus',
 | 
			
		||||
	function() {
 | 
			
		||||
		localStorage.removeItem('cursor')
 | 
			
		||||
		var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
		$('#suggest').html('')
 | 
			
		||||
		window.clearInterval(timer)
 | 
			
		||||
		timer = window.setInterval(function() {
 | 
			
		||||
			var new_val = input.value
 | 
			
		||||
			if (new_val == '') {
 | 
			
		||||
				$('#suggest').html('')
 | 
			
		||||
				if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide')) {
 | 
			
		||||
					$('#right-side').hide()
 | 
			
		||||
					$('#right-side').css('width', '300px')
 | 
			
		||||
					$('#left-side').css('width', '100%')
 | 
			
		||||
					var width = localStorage.getItem('postbox-width')
 | 
			
		||||
					if (width) {
 | 
			
		||||
						width = width.replace('px', '') * 1
 | 
			
		||||
					} else {
 | 
			
		||||
						if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
 | 
			
		||||
							$("#right-side").hide()
 | 
			
		||||
						width = 300
 | 
			
		||||
					}
 | 
			
		||||
					$('#post-box').css('width', width + 'px')
 | 
			
		||||
				}
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			if (prev_val != new_val) {
 | 
			
		||||
				var tag = new_val.match(/#(\S{3,})/)
 | 
			
		||||
				var acct = new_val.match(/@(\S{3,})/)
 | 
			
		||||
				if (tag && tag[1]) {
 | 
			
		||||
					var q = tag[1]
 | 
			
		||||
				} else if (acct && acct[1]) {
 | 
			
		||||
					var q = acct[1]
 | 
			
		||||
				} else {
 | 
			
		||||
					$('#suggest').html('')
 | 
			
		||||
					if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide')) {
 | 
			
		||||
						$('#right-side').hide()
 | 
			
		||||
						$('#right-side').css('width', '300px')
 | 
			
		||||
						$('#left-side').css('width', '100%')
 | 
			
		||||
						var width = localStorage.getItem('postbox-width')
 | 
			
		||||
						if (width) {
 | 
			
		||||
							width = width.replace('px', '') * 1
 | 
			
		||||
						} else {
 | 
			
		||||
							width = 300
 | 
			
		||||
						}
 | 
			
		||||
						$('#post-box').css('width', width + 'px')
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
			}
 | 
			
		||||
		};
 | 
			
		||||
		oldSuggest = suggest;
 | 
			
		||||
		prev_value = new_val;
 | 
			
		||||
	}, 1000);
 | 
			
		||||
}, false);
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
				var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
				var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
				suggest = 'https://' + domain + '/api/v2/search?q=' + q
 | 
			
		||||
				if (suggest != oldSuggest) {
 | 
			
		||||
					console.log('Try to get suggest at ' + suggest)
 | 
			
		||||
					fetch(suggest, {
 | 
			
		||||
						method: 'GET',
 | 
			
		||||
						headers: {
 | 
			
		||||
							'content-type': 'application/json',
 | 
			
		||||
							Authorization: 'Bearer ' + at
 | 
			
		||||
						}
 | 
			
		||||
					})
 | 
			
		||||
						.then(function(response) {
 | 
			
		||||
							if (!response.ok) {
 | 
			
		||||
								response.text().then(function(text) {
 | 
			
		||||
									setLog(response.url, response.status, text)
 | 
			
		||||
								})
 | 
			
		||||
							}
 | 
			
		||||
							return response.json()
 | 
			
		||||
						})
 | 
			
		||||
						.catch(function(error) {
 | 
			
		||||
							todo(error)
 | 
			
		||||
							setLog(start, 'JSON', error)
 | 
			
		||||
							console.error(error)
 | 
			
		||||
						})
 | 
			
		||||
						.then(function(json) {
 | 
			
		||||
							console.log(['Search', json])
 | 
			
		||||
							//ハッシュタグ
 | 
			
		||||
							if (json.hashtags[0] && tag) {
 | 
			
		||||
								if (tag[1]) {
 | 
			
		||||
									var tags = []
 | 
			
		||||
									Object.keys(json.hashtags).forEach(function(key4) {
 | 
			
		||||
										var tag = json.hashtags[key4]
 | 
			
		||||
										var his = tag.history
 | 
			
		||||
										var uses =
 | 
			
		||||
											his[0].uses * 1 +
 | 
			
		||||
											his[1].uses * 1 +
 | 
			
		||||
											his[2].uses * 1 +
 | 
			
		||||
											his[3].uses * 1 +
 | 
			
		||||
											his[4].uses * 1 +
 | 
			
		||||
											his[5].uses * 1 +
 | 
			
		||||
											his[6].uses * 1
 | 
			
		||||
										tagHTML = `<br><a onclick="tagInsert('#${escapeHTML(
 | 
			
		||||
											tag.name
 | 
			
		||||
										)}','#${q}')" class="pointer">#${escapeHTML(tag.name)}</a> ${uses}toot(s)`
 | 
			
		||||
 | 
			
		||||
input.addEventListener("blur", function() {
 | 
			
		||||
	window.clearInterval(timer);
 | 
			
		||||
	favTag();
 | 
			
		||||
}, false);
 | 
			
		||||
function tagInsert(code, del) {
 | 
			
		||||
	var now = $("#textarea").val();
 | 
			
		||||
	var selin = $("#textarea").prop('selectionStart');
 | 
			
		||||
	if (!del) {
 | 
			
		||||
	} else {
 | 
			
		||||
		var regExp = new RegExp(del, "g");
 | 
			
		||||
		var now = now.replace(regExp, "");
 | 
			
		||||
		selin=selin-del.length;
 | 
			
		||||
	}
 | 
			
		||||
	if(selin>0){
 | 
			
		||||
		var before   = now.substr(0, selin);
 | 
			
		||||
		var after    = now.substr(selin, now.length);
 | 
			
		||||
		newt = before + " "+ code+" " + after;
 | 
			
		||||
	}else{
 | 
			
		||||
		newt = code+" "+now;
 | 
			
		||||
	}
 | 
			
		||||
	$("#textarea").val(newt);
 | 
			
		||||
	$("#textarea").focus();
 | 
			
		||||
	if($("#poll").hasClass("hide") && $("#emoji").hasClass("hide")){
 | 
			
		||||
		$("#right-side").hide()
 | 
			
		||||
	}
 | 
			
		||||
	$("#suggest").html("");
 | 
			
		||||
}
 | 
			
		||||
function cgNPs(q){
 | 
			
		||||
	suggest = "https://cg.toot.app/api/v1/search/light?q=" + q
 | 
			
		||||
			if (suggest != oldSuggest) {
 | 
			
		||||
				console.log(suggest)
 | 
			
		||||
				fetch(suggest, {
 | 
			
		||||
					method: 'GET',
 | 
			
		||||
					headers: {
 | 
			
		||||
						'content-type': 'application/json'
 | 
			
		||||
					},
 | 
			
		||||
				}).then(function(response) {
 | 
			
		||||
					return response.json();
 | 
			
		||||
				}).catch(function(error) {
 | 
			
		||||
					todo(error);
 | 
			
		||||
					console.error(error);
 | 
			
		||||
				}).then(function(json) {
 | 
			
		||||
					console.log(json);
 | 
			
		||||
					if (json[0]) {
 | 
			
		||||
						var tags = "";
 | 
			
		||||
						Object.keys(json).forEach(function(key4) {
 | 
			
		||||
							var tag = json[key4];
 | 
			
		||||
							tags = tags + '<a onclick="cgNP(\''+json[key4]+'\')" class="pointer">' + json[key4] + '</a>  ';
 | 
			
		||||
						});
 | 
			
		||||
						$("#suggest").html("Cinderella NowPlaying:" + tags);
 | 
			
		||||
					}else{
 | 
			
		||||
						$("#suggest").html("Cinderella NowPlaying:Not Found");
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
										var item = {
 | 
			
		||||
											uses: uses,
 | 
			
		||||
											html: tagHTML
 | 
			
		||||
										}
 | 
			
		||||
										tags.push(item)
 | 
			
		||||
									})
 | 
			
		||||
									var num_a = -1
 | 
			
		||||
									var num_b = 1
 | 
			
		||||
									tags = tags.sort(function(a, b) {
 | 
			
		||||
										var x = a['uses']
 | 
			
		||||
										var y = b['uses']
 | 
			
		||||
										if (x > y) return num_a
 | 
			
		||||
										if (x < y) return num_b
 | 
			
		||||
										return 0
 | 
			
		||||
									})
 | 
			
		||||
									var ins = ''
 | 
			
		||||
									var nev = false
 | 
			
		||||
									Object.keys(tags).forEach(function(key7) {
 | 
			
		||||
										ins = ins + tags[key7].html
 | 
			
		||||
										if (key7 <= 0 && !nev) {
 | 
			
		||||
											ins = ins + '<br>'
 | 
			
		||||
											nev = true
 | 
			
		||||
										}
 | 
			
		||||
									})
 | 
			
		||||
									$('#suggest').html(ins)
 | 
			
		||||
									$('#right-side').show()
 | 
			
		||||
									$('#right-side').css('width', '200px')
 | 
			
		||||
									$('#left-side').css('width', 'calc(100% - 200px)')
 | 
			
		||||
									var width = localStorage.getItem('postbox-width')
 | 
			
		||||
									if (width) {
 | 
			
		||||
										width = width.replace('px', '') * 1 + 200
 | 
			
		||||
									} else {
 | 
			
		||||
										width = 500
 | 
			
		||||
									}
 | 
			
		||||
									$('#post-box').css('width', width + 'px')
 | 
			
		||||
									$('#poll').addClass('hide')
 | 
			
		||||
									$('#emoji').addClass('hide')
 | 
			
		||||
								}
 | 
			
		||||
							} else if (json.accounts[0] && acct[1]) {
 | 
			
		||||
								var accts = ''
 | 
			
		||||
								Object.keys(json.accounts).forEach(function(key3) {
 | 
			
		||||
									var acct = json.accounts[key3]
 | 
			
		||||
									if (acct.acct != q) {
 | 
			
		||||
										//Instance Actorって…
 | 
			
		||||
										if (acct.username.indexOf('.') < 0) {
 | 
			
		||||
											accts =
 | 
			
		||||
												accts +
 | 
			
		||||
												`<a onclick="tagInsert('@${acct.acct}','@${q}')" class="pointer">@${acct.acct}</a><br>`
 | 
			
		||||
										}
 | 
			
		||||
									}
 | 
			
		||||
								})
 | 
			
		||||
								$('#right-side').show()
 | 
			
		||||
								$('#right-side').css('width', '200px')
 | 
			
		||||
								$('#left-side').css('width', 'calc(100% - 200px)')
 | 
			
		||||
								var width = localStorage.getItem('postbox-width')
 | 
			
		||||
								if (width) {
 | 
			
		||||
									width = width.replace('px', '') * 1 + 200
 | 
			
		||||
								} else {
 | 
			
		||||
									width = 500
 | 
			
		||||
								}
 | 
			
		||||
								$('#post-box').css('width', width + 'px')
 | 
			
		||||
								$('#suggest').html(accts)
 | 
			
		||||
								$('#poll').addClass('hide')
 | 
			
		||||
								$('#emoji').addClass('hide')
 | 
			
		||||
							} else {
 | 
			
		||||
								if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide')) {
 | 
			
		||||
									$('#right-side').hide()
 | 
			
		||||
									$('#right-side').css('width', '300px')
 | 
			
		||||
									$('#left-side').css('width', '100%')
 | 
			
		||||
									var width = localStorage.getItem('postbox-width')
 | 
			
		||||
									if (width) {
 | 
			
		||||
										width = width.replace('px', '') * 1
 | 
			
		||||
									} else {
 | 
			
		||||
										width = 300
 | 
			
		||||
									}
 | 
			
		||||
									$('#post-box').css('width', width + 'px')
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						})
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
}
 | 
			
		||||
			oldSuggest = suggest
 | 
			
		||||
			prev_value = new_val
 | 
			
		||||
		}, 1000)
 | 
			
		||||
	},
 | 
			
		||||
	false
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
input.addEventListener(
 | 
			
		||||
	'blur',
 | 
			
		||||
	function() {
 | 
			
		||||
		window.clearInterval(timer)
 | 
			
		||||
		favTag()
 | 
			
		||||
	},
 | 
			
		||||
	false
 | 
			
		||||
)
 | 
			
		||||
function tagInsert(code, del) {
 | 
			
		||||
	var blankBefore = ' '
 | 
			
		||||
	var blankAfter = ' '
 | 
			
		||||
	var textarea = document.querySelector('#textarea')
 | 
			
		||||
	var sentence = textarea.value
 | 
			
		||||
	var len = sentence.length
 | 
			
		||||
	var pos = textarea.selectionStart
 | 
			
		||||
	if (del) {
 | 
			
		||||
		var delLen = del.length
 | 
			
		||||
	} else {
 | 
			
		||||
		var delLen = 0
 | 
			
		||||
	}
 | 
			
		||||
	var before = sentence.substr(0, pos - delLen)
 | 
			
		||||
	var last = before.substr(-1, 1)
 | 
			
		||||
	if (last == ' ') blankBefore = ''
 | 
			
		||||
	var after = sentence.substr(pos, len)
 | 
			
		||||
	var start = after.substr(0, 1)
 | 
			
		||||
	if (start == ' ') blankAfter = ''
 | 
			
		||||
	if (len == 0) {
 | 
			
		||||
		var word = code
 | 
			
		||||
	} else if (len == pos) {
 | 
			
		||||
		var word = blankBefore + code
 | 
			
		||||
	} else if (pos == 0) {
 | 
			
		||||
		var word = code + blankAfter
 | 
			
		||||
	} else {
 | 
			
		||||
		var word = blankBefore + code + blankAfter
 | 
			
		||||
	}
 | 
			
		||||
	sentence = before + word + after
 | 
			
		||||
	textarea.value = sentence
 | 
			
		||||
	if ($('#poll').hasClass('hide') && $('#emoji').hasClass('hide')) {
 | 
			
		||||
		$('#right-side').hide()
 | 
			
		||||
		$('#right-side').css('width', '300px')
 | 
			
		||||
		$('#left-side').css('width', '50%')
 | 
			
		||||
		var width = localStorage.getItem('postbox-width').replace('px', '') * 1
 | 
			
		||||
		if (!width) {
 | 
			
		||||
			width = 300
 | 
			
		||||
		}
 | 
			
		||||
		$('#post-box').css('width', width + 'px')
 | 
			
		||||
	}
 | 
			
		||||
	$('#suggest').html('')
 | 
			
		||||
}
 | 
			
		||||
function cgNPs(q) {
 | 
			
		||||
	suggest = 'https://cg.toot.app/api/v1/search/light?q=' + q
 | 
			
		||||
	if (suggest != oldSuggest) {
 | 
			
		||||
		console.log('Try to get suggest at ' + suggest)
 | 
			
		||||
		fetch(suggest, {
 | 
			
		||||
			method: 'GET',
 | 
			
		||||
			headers: {
 | 
			
		||||
				'content-type': 'application/json'
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
			.then(function(response) {
 | 
			
		||||
				if (!response.ok) {
 | 
			
		||||
					response.text().then(function(text) {
 | 
			
		||||
						setLog(response.url, response.status, text)
 | 
			
		||||
					})
 | 
			
		||||
				}
 | 
			
		||||
				return response.json()
 | 
			
		||||
			})
 | 
			
		||||
			.catch(function(error) {
 | 
			
		||||
				todo(error)
 | 
			
		||||
				setLog(start, 'JSON', error)
 | 
			
		||||
				console.error(error)
 | 
			
		||||
			})
 | 
			
		||||
			.then(function(json) {
 | 
			
		||||
				if (json[0]) {
 | 
			
		||||
					var tags = ''
 | 
			
		||||
					Object.keys(json).forEach(function(key4) {
 | 
			
		||||
						var tag = json[key4]
 | 
			
		||||
						tags =
 | 
			
		||||
							tags +
 | 
			
		||||
							`<a onclick="cgNp('${json[key4]}')" class="pointer">${escapeHTML(json[key4])}</a>`
 | 
			
		||||
					})
 | 
			
		||||
					$('#suggest').html('Cinderella NowPlaying:' + tags)
 | 
			
		||||
				} else {
 | 
			
		||||
					$('#suggest').html('Cinderella NowPlaying:Not Found')
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,64 +1,81 @@
 | 
			
		||||
/*リプライ*/
 | 
			
		||||
function re(id,ats_cm,acct_id,mode){
 | 
			
		||||
	clear();
 | 
			
		||||
	var ats=ats_cm.split(',');
 | 
			
		||||
	localStorage.setItem("nohide",true);
 | 
			
		||||
	show();
 | 
			
		||||
	$("#reply").val(id);
 | 
			
		||||
	for(var i=0;i<ats.length;i++){
 | 
			
		||||
		var at=ats[i];
 | 
			
		||||
		var te=$("#textarea").val();
 | 
			
		||||
		if(at!=localStorage.getItem("user_"+acct_id)){
 | 
			
		||||
			$("#textarea").val("@"+at+" "+te);
 | 
			
		||||
function re(id, ats_cm, acct_id, mode) {
 | 
			
		||||
	clear()
 | 
			
		||||
	var ats = ats_cm.split(',')
 | 
			
		||||
	localStorage.setItem('nohide', true)
 | 
			
		||||
	show()
 | 
			
		||||
	$('#reply').val(id)
 | 
			
		||||
	for (var i = 0; i < ats.length; i++) {
 | 
			
		||||
		var at = ats[i]
 | 
			
		||||
		var te = $('#textarea').val()
 | 
			
		||||
		if (at != localStorage.getItem('user_' + acct_id)) {
 | 
			
		||||
			$('#textarea').val('@' + at + ' ' + te)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	$("#rec").text(lang.lang_yesno);
 | 
			
		||||
	$("#post-acct-sel").val(acct_id);
 | 
			
		||||
	$("#post-acct-sel").prop("disabled", true);
 | 
			
		||||
	$('select').material_select();
 | 
			
		||||
	$("#textarea").attr("placeholder",lang.lang_usetxtbox_reply);
 | 
			
		||||
	$("#textarea").focus();
 | 
			
		||||
	var profimg=localStorage.getItem("prof_"+acct_id);
 | 
			
		||||
	if(!profimg){
 | 
			
		||||
		profimg="../../img/missing.svg";
 | 
			
		||||
	$('#rec').text(lang.lang_yesno)
 | 
			
		||||
	$('#post-acct-sel').val(acct_id)
 | 
			
		||||
	$('#post-acct-sel').prop('disabled', true)
 | 
			
		||||
	$('select').formSelect()
 | 
			
		||||
	mdCheck()
 | 
			
		||||
	$('#textarea').attr('placeholder', lang.lang_usetxtbox_reply)
 | 
			
		||||
	$('#textarea').focus()
 | 
			
		||||
	var profimg = localStorage.getItem('prof_' + acct_id)
 | 
			
		||||
	if (!profimg) {
 | 
			
		||||
		profimg = '../../img/missing.svg'
 | 
			
		||||
	}
 | 
			
		||||
	$("#acct-sel-prof").attr("src",profimg);
 | 
			
		||||
	vis(mode);
 | 
			
		||||
	$('#acct-sel-prof').attr('src', profimg)
 | 
			
		||||
	vis(mode)
 | 
			
		||||
}
 | 
			
		||||
function reEx(id){
 | 
			
		||||
	$('#tootmodal').modal('close');
 | 
			
		||||
	var at=$("#tootmodal").attr("data-user");
 | 
			
		||||
	var acct_id = $("#status-acct-sel").val();
 | 
			
		||||
	var mode=$("#tootmodal .vis-data").attr("data-vis");
 | 
			
		||||
	re(id,at,acct_id,mode);
 | 
			
		||||
function reEx(id) {
 | 
			
		||||
	$('#tootmodal').modal('close')
 | 
			
		||||
	var at = $('#tootmodal').attr('data-user')
 | 
			
		||||
	var acct_id = $('#status-acct-sel').val()
 | 
			
		||||
	var mode = $('#tootmodal .vis-data').attr('data-vis')
 | 
			
		||||
	re(id, at, acct_id, mode)
 | 
			
		||||
}
 | 
			
		||||
//引用
 | 
			
		||||
function qt(id,acct_id,at,url){
 | 
			
		||||
	localStorage.setItem("nohide",true);
 | 
			
		||||
	var qt = localStorage.getItem("quote");
 | 
			
		||||
	if(!qt){
 | 
			
		||||
		var qt="simple";
 | 
			
		||||
function qt(id, acct_id, at, url) {
 | 
			
		||||
	localStorage.setItem('nohide', true)
 | 
			
		||||
	var qt = localStorage.getItem('quote')
 | 
			
		||||
	if (!qt) {
 | 
			
		||||
		var qt = 'simple'
 | 
			
		||||
	}
 | 
			
		||||
	if(qt=="nothing"){
 | 
			
		||||
		return false;
 | 
			
		||||
	if (qt == 'nothing') {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	if(qt=="simple"){
 | 
			
		||||
		show();
 | 
			
		||||
		$("#textarea").val("\n"+url);
 | 
			
		||||
	}else if(qt=="mention"){
 | 
			
		||||
		show();
 | 
			
		||||
		$("#textarea").val("\n"+url+" From:@"+at);
 | 
			
		||||
	}else if(qt=="full"){
 | 
			
		||||
		show();
 | 
			
		||||
		var html=$("[toot-id="+id+"] .toot").html();
 | 
			
		||||
		html = html.match(/^<p>(.+)<\/p>$/)[1];
 | 
			
		||||
		html = html.replace(/<br\s?\/?>/, "\n");
 | 
			
		||||
		html = html.replace(/<p>/, "\n");
 | 
			
		||||
		html = html.replace(/<\/p>/, "\n");
 | 
			
		||||
		html=$.strip_tags(html);
 | 
			
		||||
		$("#textarea").val("\n"+"@"+at+" "+html+"\n"+url);
 | 
			
		||||
	if (qt == 'simple') {
 | 
			
		||||
		show()
 | 
			
		||||
		$('#textarea').val('\n' + url)
 | 
			
		||||
	} else if (qt == 'mention') {
 | 
			
		||||
		show()
 | 
			
		||||
		$('#textarea').val('\n' + url + ' From:@' + at)
 | 
			
		||||
	} else if (qt == 'full') {
 | 
			
		||||
		show()
 | 
			
		||||
		var html = $('[toot-id=' + id + '] .toot').html()
 | 
			
		||||
		html = html.match(/^<p>(.+)<\/p>$/)[1]
 | 
			
		||||
		html = html.replace(/<br\s?\/?>/, '\n')
 | 
			
		||||
		html = html.replace(/<p>/, '\n')
 | 
			
		||||
		html = html.replace(/<\/p>/, '\n')
 | 
			
		||||
		html = $.strip_tags(html)
 | 
			
		||||
		$('#textarea').val('\n' + '@' + at + ' ' + html + '\n' + url)
 | 
			
		||||
	} else if (qt == 'apiQuote') {
 | 
			
		||||
		clear()
 | 
			
		||||
		localStorage.setItem('nohide', true)
 | 
			
		||||
		show()
 | 
			
		||||
		$('#quote').val(id)
 | 
			
		||||
		$('#post-acct-sel').val(acct_id)
 | 
			
		||||
		$('#post-acct-sel').prop('disabled', true)
 | 
			
		||||
		$('select').formSelect()
 | 
			
		||||
		$('#textarea').attr('placeholder', lang.lang_usetxtbox_reply)
 | 
			
		||||
		$('#textarea').focus()
 | 
			
		||||
		var profimg = localStorage.getItem('prof_' + acct_id)
 | 
			
		||||
		if (!profimg) {
 | 
			
		||||
			profimg = '../../img/missing.svg'
 | 
			
		||||
		}
 | 
			
		||||
		$('#acct-sel-prof').attr('src', profimg)
 | 
			
		||||
	}
 | 
			
		||||
	$("#textarea").focus();
 | 
			
		||||
	$("#post-acct-sel").val(acct_id);
 | 
			
		||||
	$('select').material_select();
 | 
			
		||||
}
 | 
			
		||||
	$('#post-acct-sel').val(acct_id)
 | 
			
		||||
	$('select').formSelect()
 | 
			
		||||
	mdCheck()
 | 
			
		||||
	$('#textarea').focus()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										145
									
								
								app/js/tl/announParse.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,145 @@
 | 
			
		||||
function announParse(obj, acct_id, tlid) {
 | 
			
		||||
	var template = ''
 | 
			
		||||
	var datetype = localStorage.getItem('datetype')
 | 
			
		||||
	var gif = localStorage.getItem('gif')
 | 
			
		||||
	//Ticker
 | 
			
		||||
	var tickerck = localStorage.getItem('ticker_ok')
 | 
			
		||||
	if (tickerck == 'yes') {
 | 
			
		||||
		var ticker = true
 | 
			
		||||
	} else if (!ticker || ticker == 'no') {
 | 
			
		||||
		var ticker = false
 | 
			
		||||
	}
 | 
			
		||||
	if (!datetype) {
 | 
			
		||||
		datetype = 'absolute'
 | 
			
		||||
	}
 | 
			
		||||
	if (!gif) {
 | 
			
		||||
		var gif = 'yes'
 | 
			
		||||
	}
 | 
			
		||||
	Object.keys(obj).forEach(function(key) {
 | 
			
		||||
		var toot = obj[key]
 | 
			
		||||
		var content = toot.content
 | 
			
		||||
		if (toot.emojis) {
 | 
			
		||||
			Object.keys(toot.emojis).forEach(function(key1) {
 | 
			
		||||
				var emoji = toot.emojis[key1]
 | 
			
		||||
				var shortcode = emoji.shortcode
 | 
			
		||||
				if (gif == 'yes') {
 | 
			
		||||
					var emoSource = emoji.url
 | 
			
		||||
				} else {
 | 
			
		||||
					var emoSource = emoji.static_url
 | 
			
		||||
				}
 | 
			
		||||
				var emoji_url = `
 | 
			
		||||
					<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}" 
 | 
			
		||||
						alt=" :${shortcode}: " title="${shortcode}" onclick="this.classList.toggle('bigemoji');">
 | 
			
		||||
				`
 | 
			
		||||
				var regExp = new RegExp(':' + shortcode + ':', 'g')
 | 
			
		||||
				content = content.replace(regExp, emoji_url)
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
		content = twemoji.parse(content)
 | 
			
		||||
		var reactions = ''
 | 
			
		||||
		//既存のリアクション
 | 
			
		||||
		if (toot.reactions) {
 | 
			
		||||
			Object.keys(toot.reactions).forEach(function(key2) {
 | 
			
		||||
				var reaction = toot.reactions[key2]
 | 
			
		||||
				//普通の絵文字 or カスタム絵文字 は文字数判断。ただしスコットランド国旗みたいなやべぇやつに注意
 | 
			
		||||
				var splitter = new GraphemeSplitter()
 | 
			
		||||
				if (splitter.splitGraphemes(reaction.name).length > 1) {
 | 
			
		||||
					//カスタム絵文字
 | 
			
		||||
					var shortcode = reaction.shortcode
 | 
			
		||||
					if (gif == 'yes') {
 | 
			
		||||
						var emoSource = reaction.url
 | 
			
		||||
					} else {
 | 
			
		||||
						var emoSource = reaction.static_url
 | 
			
		||||
					}
 | 
			
		||||
					var emoji_url = `
 | 
			
		||||
					<img draggable="false" src="${emoSource}" class="emoji-img" data-emoji="${shortcode}" 
 | 
			
		||||
                        alt=" :${shortcode}: " title="${shortcode}">`
 | 
			
		||||
				} else {
 | 
			
		||||
					emoji_url = twemoji.parse(reaction.name)
 | 
			
		||||
				}
 | 
			
		||||
				var addClass = ''
 | 
			
		||||
				if (reaction.me) {
 | 
			
		||||
					addClass = 'reactioned'
 | 
			
		||||
				}
 | 
			
		||||
				reactions =
 | 
			
		||||
					reactions +
 | 
			
		||||
                    `<div class="announReaction ${addClass}" onclick="announReaction('${toot.id}', '${acct_id}', '${tlid}', ${reaction.me},'${reaction.name}')">
 | 
			
		||||
                        ${emoji_url} ${reaction.count}
 | 
			
		||||
                    </div>`
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
		if (toot.ends_at) {
 | 
			
		||||
			var ended = `<div class="announReaction" title="${date(toot.ends_at, 'absolute')}" style="width: auto; cursor: default;">
 | 
			
		||||
            <i class="fas fa-arrow-right"></i>
 | 
			
		||||
            ${date(toot.ends_at, datetype)}
 | 
			
		||||
        </div>`
 | 
			
		||||
		} else {
 | 
			
		||||
			var ended = ''
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		template =
 | 
			
		||||
			template +
 | 
			
		||||
			`<div class="announcement" data-id="${toot.id}">
 | 
			
		||||
            ${content}
 | 
			
		||||
            <div class="reactionsPack">
 | 
			
		||||
                ${reactions}
 | 
			
		||||
                <div class="announReaction add" onclick="announReactionNew('${toot.id}', '${acct_id}', '${tlid}')"><i class="fas fa-plus"></i></div>
 | 
			
		||||
                ${ended}
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>`
 | 
			
		||||
	})
 | 
			
		||||
	return template
 | 
			
		||||
}
 | 
			
		||||
function announReaction(id, acct_id, tlid, del, name) {
 | 
			
		||||
    var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var start = 'https://' + domain + '/api/v1/announcements/' + id + '/reactions/' + encodeURIComponent(name)
 | 
			
		||||
    var httpreq = new XMLHttpRequest()
 | 
			
		||||
    if(del) {
 | 
			
		||||
        var method = 'DELETE'
 | 
			
		||||
    } else {
 | 
			
		||||
        var method = 'PUT'
 | 
			
		||||
    }
 | 
			
		||||
	httpreq.open(method, start, true)
 | 
			
		||||
	httpreq.setRequestHeader('Content-Type', 'application/json')
 | 
			
		||||
	httpreq.setRequestHeader('Authorization', 'Bearer ' + at)
 | 
			
		||||
	httpreq.responseType = 'json'
 | 
			
		||||
	httpreq.send()
 | 
			
		||||
	httpreq.onreadystatechange = function() {
 | 
			
		||||
		if (httpreq.readyState === 4) {
 | 
			
		||||
			var json = httpreq.response
 | 
			
		||||
			if (this.status !== 200) {
 | 
			
		||||
				setLog(start, this.status, this.response)
 | 
			
		||||
			}
 | 
			
		||||
			announ(acct_id, tlid)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function announReactionNew(id, acct_id, tlid) {
 | 
			
		||||
    $('#reply').val(id)
 | 
			
		||||
	$('#media').val('announcement')
 | 
			
		||||
	$('#unreact').hide()
 | 
			
		||||
	$('#addreact').removeClass('hide')
 | 
			
		||||
	$('#post-acct-sel').val(acct_id)
 | 
			
		||||
	$('select').formSelect()
 | 
			
		||||
	localStorage.setItem('nohide', true)
 | 
			
		||||
	show()
 | 
			
		||||
	emojiToggle(true)
 | 
			
		||||
	$('#left-side').hide()
 | 
			
		||||
}
 | 
			
		||||
function emojiReactionDef(target) {
 | 
			
		||||
    var emojiraw = newpack.filter(function(item, index) {
 | 
			
		||||
		if (item.short_name == target) return true
 | 
			
		||||
	})
 | 
			
		||||
	var hex = emojiraw[0].unified.split('-')
 | 
			
		||||
	if (hex.length === 2) {
 | 
			
		||||
		emoji = twemoji.convert.fromCodePoint(hex[0]) + twemoji.convert.fromCodePoint(hex[1])
 | 
			
		||||
	} else {
 | 
			
		||||
		emoji = twemoji.convert.fromCodePoint(hex[0])
 | 
			
		||||
    }
 | 
			
		||||
	var acct_id = $('#post-acct-sel').val()
 | 
			
		||||
	var id = $('#reply').val()
 | 
			
		||||
	announReaction(id, acct_id, 0, false, emoji)
 | 
			
		||||
	clear()
 | 
			
		||||
	hide()
 | 
			
		||||
}
 | 
			
		||||
@@ -3,283 +3,390 @@
 | 
			
		||||
function additional(acct_id, tlid) {
 | 
			
		||||
	//メンション系
 | 
			
		||||
	//$(".mention").attr("href", "");
 | 
			
		||||
	
 | 
			
		||||
	$(".mention").addClass("parsed");
 | 
			
		||||
 | 
			
		||||
	$(".hashtag").each(function(i, elem) {
 | 
			
		||||
		var tags = $(this).attr("href").match(
 | 
			
		||||
			/https?:\/\/([-a-zA-Z0-9@.]+)\/tags\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
 | 
			
		||||
		);
 | 
			
		||||
		$(this).attr("href","#");
 | 
			
		||||
		if(tags){
 | 
			
		||||
			if(tags[2]){
 | 
			
		||||
				$(this).attr("onclick",'tagShow(\'' + tags[2] + '\')');
 | 
			
		||||
			}
 | 
			
		||||
	$('#timeline-container .mention').addClass('parsed')
 | 
			
		||||
 | 
			
		||||
	$('#timeline-container .hashtag, #timeline-container [rel=tag]').each(function(i, elem) {
 | 
			
		||||
		var tags = $(this)
 | 
			
		||||
			.attr('href')
 | 
			
		||||
			.match(/https?:\/\/([-a-zA-Z0-9@.]+)\/tags?\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/)
 | 
			
		||||
		if (tags) {
 | 
			
		||||
			var tagThis = tags[2]
 | 
			
		||||
		} else {
 | 
			
		||||
			var tagThis = $(this).attr('data-regTag')
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (tagThis) {
 | 
			
		||||
			$(this).attr('href', "javascript:tagShow('" + tagThis + "')")
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	//トゥートサムネ
 | 
			
		||||
	$("#timeline_" + tlid + " .toot a:not(.parsed)").each(function(i, elem) {
 | 
			
		||||
		var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
		var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
		var card = localStorage.getItem("card_" + tlid);
 | 
			
		||||
		var text = $(this).attr('href');
 | 
			
		||||
		if(text){
 | 
			
		||||
			if(text.indexOf("twimg.com")=== -1){
 | 
			
		||||
	$('#timeline_' + tlid + ' .toot a:not(.parsed)').each(function(i, elem) {
 | 
			
		||||
		var text = $(this).attr('href')
 | 
			
		||||
		if (text) {
 | 
			
		||||
			if (text.indexOf('twimg.com') === -1) {
 | 
			
		||||
				var urls = text.match(
 | 
			
		||||
					/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
 | 
			
		||||
				);
 | 
			
		||||
				)
 | 
			
		||||
			}
 | 
			
		||||
		}else{
 | 
			
		||||
			var urls =[]
 | 
			
		||||
		} else {
 | 
			
		||||
			text = ''
 | 
			
		||||
			var urls = []
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
		//トゥートのURLぽかったら
 | 
			
		||||
		toot = text.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/);
 | 
			
		||||
		if(toot){
 | 
			
		||||
			if(toot[1]){
 | 
			
		||||
				$(this).attr("data-acct",acct_id);
 | 
			
		||||
		toot = text.match(/https:\/\/([a-zA-Z0-9.-]+)\/@([a-zA-Z0-9_]+)\/([0-9]+)/)
 | 
			
		||||
		if (toot) {
 | 
			
		||||
			if (toot[1]) {
 | 
			
		||||
				$(this).attr('data-acct', acct_id)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (urls) {
 | 
			
		||||
			$(this).remove();
 | 
			
		||||
		} else if (!card) {
 | 
			
		||||
			var id = $(this).parents('.cvo').attr("toot-id");
 | 
			
		||||
			if(localStorage.getItem("mode_" + domain)=="misskey"){
 | 
			
		||||
				var start = "https://" + domain + "/url?url="+text;
 | 
			
		||||
				fetch(start, {
 | 
			
		||||
					method: 'GET',
 | 
			
		||||
					headers: {
 | 
			
		||||
						'content-type': 'application/json'
 | 
			
		||||
					},
 | 
			
		||||
					//body: JSON.stringify({})
 | 
			
		||||
				}).then(function(response) {
 | 
			
		||||
					return response.json();
 | 
			
		||||
				}).catch(function(error) {
 | 
			
		||||
					todo(error);
 | 
			
		||||
					console.error(error);
 | 
			
		||||
				}).then(function(json) {
 | 
			
		||||
					if (json.title) {
 | 
			
		||||
						$("[toot-id=" + id + "] .additional").html(
 | 
			
		||||
							"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" +
 | 
			
		||||
							json.description + "</span>");
 | 
			
		||||
						$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
 | 
			
		||||
						$("[toot-id=" + id + "]").addClass("parsed");
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
			}
 | 
			
		||||
		
 | 
			
		||||
		}else{
 | 
			
		||||
			$(this).attr("title",text);
 | 
			
		||||
			$(this).remove()
 | 
			
		||||
		} else {
 | 
			
		||||
			$(this).attr('title', text)
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
	$("i.unparsed").each(function(i, elem) {
 | 
			
		||||
		var dem=$(this).text();
 | 
			
		||||
		var dom=$(this);
 | 
			
		||||
		var start = "./js/emoji/emoji-map.json";
 | 
			
		||||
		var xmlHttpRequest = new XMLHttpRequest();
 | 
			
		||||
	 xmlHttpRequest.onreadystatechange = function()
 | 
			
		||||
	 {
 | 
			
		||||
		 if( this.readyState === 4 && this.status === 200 ) {
 | 
			
		||||
			 if( this.response){
 | 
			
		||||
				 var json=this.response;
 | 
			
		||||
				 var emojis=json.emojis;
 | 
			
		||||
				 for (i = 0; i < emojis.length; i++) {
 | 
			
		||||
					  var emojie = emojis[i];
 | 
			
		||||
					  var regExp = new RegExp(dem, "g");
 | 
			
		||||
					   if (emojie.emoji.match(regExp)) {
 | 
			
		||||
						 var sc=emojie.name;
 | 
			
		||||
						 var sc="twa-"+sc.replace(/_/g,"-");
 | 
			
		||||
						 dom.addClass(sc);
 | 
			
		||||
						 dom.text("");
 | 
			
		||||
						 dom.removeClass("unparsed");
 | 
			
		||||
						  break;
 | 
			
		||||
					  }
 | 
			
		||||
				   }   
 | 
			
		||||
		 }
 | 
			
		||||
	 }
 | 
			
		||||
 } 
 | 
			
		||||
 xmlHttpRequest.open( 'GET', start, true );
 | 
			
		||||
 xmlHttpRequest.responseType = 'json';
 | 
			
		||||
 xmlHttpRequest.send( null );
 | 
			
		||||
	});
 | 
			
		||||
				
 | 
			
		||||
	$("#timeline_" + tlid + " .toot:not(:has(a:not(.add-show,.parsed)))").each(function(i, elem) {
 | 
			
		||||
		$(this).parent().find(".add-show").hide();
 | 
			
		||||
	});
 | 
			
		||||
	})
 | 
			
		||||
	$('i.unparsed').each(function(i, elem) {
 | 
			
		||||
		var dem = $(this).text()
 | 
			
		||||
		var dom = $(this)
 | 
			
		||||
		var start = './js/emoji/emoji-map.json'
 | 
			
		||||
		var xmlHttpRequest = new XMLHttpRequest()
 | 
			
		||||
		xmlHttpRequest.onreadystatechange = function() {
 | 
			
		||||
			if (this.readyState === 4 && this.status === 200) {
 | 
			
		||||
				if (this.response) {
 | 
			
		||||
					var json = this.response
 | 
			
		||||
					if (this.status !== 200) {
 | 
			
		||||
						setLog(start, this.status, this.response)
 | 
			
		||||
					}
 | 
			
		||||
					var emojis = json.emojis
 | 
			
		||||
					for (i = 0; i < emojis.length; i++) {
 | 
			
		||||
						var emojie = emojis[i]
 | 
			
		||||
						var regExp = new RegExp(dem, 'g')
 | 
			
		||||
						if (emojie.emoji.match(regExp)) {
 | 
			
		||||
							var sc = emojie.name
 | 
			
		||||
							var sc = 'twa-' + sc.replace(/_/g, '-')
 | 
			
		||||
							dom.addClass(sc)
 | 
			
		||||
							dom.text('')
 | 
			
		||||
							dom.removeClass('unparsed')
 | 
			
		||||
							break
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		xmlHttpRequest.open('GET', start, true)
 | 
			
		||||
		xmlHttpRequest.responseType = 'json'
 | 
			
		||||
		xmlHttpRequest.send(null)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	$('#timeline_' + tlid + ' .toot:not(:has(a:not(.add-show,.parsed)))').each(function(i, elem) {
 | 
			
		||||
		$(this)
 | 
			
		||||
			.parent()
 | 
			
		||||
			.find('.add-show')
 | 
			
		||||
			.hide()
 | 
			
		||||
	})
 | 
			
		||||
	//Markdownイメージビューワー
 | 
			
		||||
	$("#timeline_" + tlid + " .toot a:not(.img-parsed):has(img)").each(function(i, elem) {
 | 
			
		||||
			var ilink=$(this).attr("href");
 | 
			
		||||
			var id = $(this).parents('.cvo').attr("toot-id");
 | 
			
		||||
			$(this).attr("href","#");
 | 
			
		||||
			$(this).attr("onclick","imgv('"+id+"','"+i+"')");
 | 
			
		||||
			$(this).attr("data-type","image");
 | 
			
		||||
			$(this).attr("id",id+"-image-"+i);
 | 
			
		||||
			$(this).attr("data-url",ilink);
 | 
			
		||||
			$(this).addClass("img-parsed");
 | 
			
		||||
	});
 | 
			
		||||
	$('#timeline_' + tlid + ' .toot a:not(.img-parsed):has(img)').each(function(i, elem) {
 | 
			
		||||
		var ilink = $(this).attr('href')
 | 
			
		||||
		var id = $(this)
 | 
			
		||||
			.parents('.cvo')
 | 
			
		||||
			.attr('toot-id')
 | 
			
		||||
		$(this).attr('href', `javascript:imgv('${id}','${i}')`)
 | 
			
		||||
		$(this).attr('data-type', 'image')
 | 
			
		||||
		$(this).attr('id', id + '-image-' + i)
 | 
			
		||||
		$(this).attr('data-url', ilink)
 | 
			
		||||
		$(this).addClass('img-parsed')
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function additionalIndv(tlid, acct_id, id) {
 | 
			
		||||
		var domain = localStorage.getItem("domain_" + acct_id);
 | 
			
		||||
		var at = localStorage.getItem("acct_"+ acct_id + "_at");
 | 
			
		||||
		var text = $("[toot-id="+id+"] .toot a").attr('href');
 | 
			
		||||
		var urls = text.match(
 | 
			
		||||
			/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
 | 
			
		||||
		);
 | 
			
		||||
		if (urls) {
 | 
			
		||||
			$("[toot-id="+id+"] .toot a").remove();
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var text = $('[toot-id=' + id + '] .toot a').attr('href')
 | 
			
		||||
	var urls = text.match(
 | 
			
		||||
		/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
 | 
			
		||||
	)
 | 
			
		||||
	if (urls) {
 | 
			
		||||
		$('[toot-id=' + id + '] .toot a').remove()
 | 
			
		||||
	} else {
 | 
			
		||||
		if (localStorage.getItem('mode_' + domain) == 'misskey') {
 | 
			
		||||
			var start = 'https://' + domain + '/url?url=' + text
 | 
			
		||||
			fetch(start, {
 | 
			
		||||
				method: 'GET',
 | 
			
		||||
				headers: {
 | 
			
		||||
					'content-type': 'application/json'
 | 
			
		||||
				}
 | 
			
		||||
				//body: JSON.stringify({})
 | 
			
		||||
			})
 | 
			
		||||
				.then(function(response) {
 | 
			
		||||
					if (!response.ok) {
 | 
			
		||||
						response.text().then(function(text) {
 | 
			
		||||
							setLog(response.url, response.status, text)
 | 
			
		||||
						})
 | 
			
		||||
					}
 | 
			
		||||
					return response.json()
 | 
			
		||||
				})
 | 
			
		||||
				.catch(function(error) {
 | 
			
		||||
					todo(error)
 | 
			
		||||
					setLog(start, 'JSON', error)
 | 
			
		||||
					console.error(error)
 | 
			
		||||
				})
 | 
			
		||||
				.then(function(json) {
 | 
			
		||||
					if (json.title) {
 | 
			
		||||
						$('[toot-id=' + id + '] .additional').html(
 | 
			
		||||
							`<span class="gray">URL${lang.lang_cards_check}:<br>Title:${escapeHTML(
 | 
			
		||||
								json.title
 | 
			
		||||
							)}<br>${escapeHTML(json.description)}</span>`
 | 
			
		||||
						)
 | 
			
		||||
						$('[toot-id=' + id + '] a:not(.parsed)').addClass('parsed')
 | 
			
		||||
						$('[toot-id=' + id + ']').addClass('parsed')
 | 
			
		||||
					}
 | 
			
		||||
				})
 | 
			
		||||
		} else {
 | 
			
		||||
			if(localStorage.getItem("mode_" + domain)=="misskey"){
 | 
			
		||||
				var start = "https://" + domain + "/url?url="+text;
 | 
			
		||||
				fetch(start, {
 | 
			
		||||
					method: 'GET',
 | 
			
		||||
					headers: {
 | 
			
		||||
						'content-type': 'application/json'
 | 
			
		||||
					},
 | 
			
		||||
					//body: JSON.stringify({})
 | 
			
		||||
				}).then(function(response) {
 | 
			
		||||
					return response.json();
 | 
			
		||||
				}).catch(function(error) {
 | 
			
		||||
					todo(error);
 | 
			
		||||
					console.error(error);
 | 
			
		||||
				}).then(function(json) {
 | 
			
		||||
			var id = $('[toot-id=' + id + '] .toot a')
 | 
			
		||||
				.parents('.cvo')
 | 
			
		||||
				.attr('toot-id')
 | 
			
		||||
			var start = 'https://' + domain + '/api/v1/statuses/' + id
 | 
			
		||||
			fetch(start, {
 | 
			
		||||
				method: 'GET',
 | 
			
		||||
				headers: {
 | 
			
		||||
					'content-type': 'application/json',
 | 
			
		||||
					Authorization: 'Bearer ' + at
 | 
			
		||||
				}
 | 
			
		||||
				//body: JSON.stringify({})
 | 
			
		||||
			})
 | 
			
		||||
				.then(function(response) {
 | 
			
		||||
					if (!response.ok) {
 | 
			
		||||
						response.text().then(function(text) {
 | 
			
		||||
							setLog(response.url, response.status, text)
 | 
			
		||||
						})
 | 
			
		||||
					}
 | 
			
		||||
					return response.json()
 | 
			
		||||
				})
 | 
			
		||||
				.catch(function(error) {
 | 
			
		||||
					todo(error)
 | 
			
		||||
					setLog(start, 'JSON', error)
 | 
			
		||||
					console.error(error)
 | 
			
		||||
				})
 | 
			
		||||
				.then(function(json) {
 | 
			
		||||
					cards = json.card
 | 
			
		||||
					var analyze = cardHtml(cards, acct_id, id)
 | 
			
		||||
					$('[toot-id=' + id + '] .additional').html(analyze)
 | 
			
		||||
					if (json.title) {
 | 
			
		||||
						$("[toot-id=" + id + "] .additional").html(
 | 
			
		||||
							"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + json.title + "<br>" +
 | 
			
		||||
							json.description + "</span>");
 | 
			
		||||
						$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
 | 
			
		||||
						$("[toot-id=" + id + "]").addClass("parsed");
 | 
			
		||||
						$('[toot-id=' + id + '] a:not(.parsed)').addClass('parsed')
 | 
			
		||||
						$('[toot-id=' + id + ']').addClass('parsed')
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
			}else{
 | 
			
		||||
				var id = $("[toot-id="+id+"] .toot a").parents('.cvo').attr("toot-id");
 | 
			
		||||
				var start = "https://" + domain + "/api/v1/statuses/" + id + "/card";
 | 
			
		||||
				fetch(start, {
 | 
			
		||||
					method: 'GET',
 | 
			
		||||
					headers: {
 | 
			
		||||
						'content-type': 'application/json',
 | 
			
		||||
						'Authorization': 'Bearer ' + at
 | 
			
		||||
					},
 | 
			
		||||
					//body: JSON.stringify({})
 | 
			
		||||
				}).then(function(response) {
 | 
			
		||||
					return response.json();
 | 
			
		||||
				}).catch(function(error) {
 | 
			
		||||
					todo(error);
 | 
			
		||||
					console.error(error);
 | 
			
		||||
				}).then(function(json) {
 | 
			
		||||
					console.log(json);
 | 
			
		||||
					//このリンク鳥やんけ、ってとき
 | 
			
		||||
					console.log(json.provider_name);
 | 
			
		||||
					if (json.provider_name=="Twitter"){
 | 
			
		||||
						if(json.image){
 | 
			
		||||
							var twiImg='<br><img src="'+json.image+'" style="max-width:100%" onclick="imgv(\'twi_'+id+'\', 0, \'twitter\');" id="twi_'+id+'-image-0" data-url="'+json.image+'" data-type="image">';
 | 
			
		||||
						}else{
 | 
			
		||||
							var twiImg='';
 | 
			
		||||
						}
 | 
			
		||||
						$("[toot-id=" + id + "] .additional").html(
 | 
			
		||||
							'<div class="twitter-tweet"><b>'+escapeHTML(json.author_name)+'</b><br>'+escapeHTML(json.description)+twiImg+'</div>');
 | 
			
		||||
					}else if (json.provider_name=="pixiv"){	
 | 
			
		||||
						if(json.image){
 | 
			
		||||
							var pxvImg='<br><img src="'+json.image+'" style="max-width:100%" onclick="imgv(\'pixiv_'+id+'\', 0, \'pixiv\');" id="pixiv_'+id+'-image-0" data-url="'+json.embed_url+'" data-type="image">';
 | 
			
		||||
						}else{
 | 
			
		||||
							var pxvImg='';
 | 
			
		||||
						}
 | 
			
		||||
						$("[toot-id=" + id + "] .additional").html(
 | 
			
		||||
							'<div class="pixiv-post"><b><a href="'+json.author_url+'" target="_blank">'+escapeHTML(json.author_name)+'</a></b><br>'+escapeHTML(json.title)+pxvImg+'</div>');
 | 
			
		||||
					}else{
 | 
			
		||||
						if (json.title) {
 | 
			
		||||
							$("[toot-id=" + id + "] .additional").html(
 | 
			
		||||
								"<span class=\"gray\">URL"+lang.lang_cards_check+":<br>Title:" + escapeHTML(json.title) + "<br>" +
 | 
			
		||||
								escapeHTML(json.description) + "</span>");
 | 
			
		||||
						}
 | 
			
		||||
						if (json.html) {
 | 
			
		||||
							$("[toot-id=" + id + "] .additional").html(json.html+'<i class="material-icons sml pointer" onclick="pip(\''+id+'\')" title="'+lang.lang_cards_pip+'">picture_in_picture_alt</i>');
 | 
			
		||||
		
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					if (json.title) {
 | 
			
		||||
						$("[toot-id=" + id + "] a:not(.parsed)").addClass("parsed");
 | 
			
		||||
						$("[toot-id=" + id + "]").addClass("parsed");
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
				})
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
function cardHtml(json, acct_id, id) {
 | 
			
		||||
	var analyze = ''
 | 
			
		||||
	var domain = json.url.match(/^https?:\/{2,}(.*?)(?:\/|\?|#|$)/)[1];
 | 
			
		||||
	var ok = [
 | 
			
		||||
		"pixiv.net",
 | 
			
		||||
		"twitter.com",
 | 
			
		||||
		"mobile.twitter.com",
 | 
			
		||||
		"open.spotify.com",
 | 
			
		||||
		"youtube.com",
 | 
			
		||||
		"youtu.be",
 | 
			
		||||
		"m.youtube.com",
 | 
			
		||||
		"www.youtube.com",
 | 
			
		||||
		"nicovideo.jp",
 | 
			
		||||
		"twitcasting.tv"
 | 
			
		||||
	]
 | 
			
		||||
	var isHad = _.includes(ok, domain);
 | 
			
		||||
	if (json.provider_name == 'pixiv') {
 | 
			
		||||
		if (json.image) {
 | 
			
		||||
			var pxvImg = `
 | 
			
		||||
			<br><img src="${json.image}" style="max-width:100%" 
 | 
			
		||||
					onclick="imgv('pixiv_${id}',0,'pixiv')" id="pixiv_${id}-image-0" 
 | 
			
		||||
					data-url="${json.embed_url}" 
 | 
			
		||||
				data-type="image">
 | 
			
		||||
			`
 | 
			
		||||
		} else {
 | 
			
		||||
			var pxvImg = ''
 | 
			
		||||
		}
 | 
			
		||||
		analyze = `<div class="pixiv-post"><b><a href="
 | 
			
		||||
				${json.author_url}
 | 
			
		||||
				" target="_blank">
 | 
			
		||||
				${escapeHTML(json.author_name)}
 | 
			
		||||
				</a></b><br>
 | 
			
		||||
				${escapeHTML(json.title)}
 | 
			
		||||
				${pxvImg}
 | 
			
		||||
				</div>`
 | 
			
		||||
	} else {
 | 
			
		||||
		if (json.title) {
 | 
			
		||||
			analyze = `<span class="gray">URL
 | 
			
		||||
					${lang.lang_cards_check}
 | 
			
		||||
					:<br>Title:
 | 
			
		||||
					${escapeHTML(json.title)}
 | 
			
		||||
					<br>
 | 
			
		||||
					${escapeHTML(json.description)}
 | 
			
		||||
					</span>`
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (json.html || json.provider_name == 'Twitter') {
 | 
			
		||||
			if(isHad) {
 | 
			
		||||
				var prved = `<img class="emoji" draggable="false" alt="✅" 
 | 
			
		||||
					src="https://twemoji.maxcdn.com/v/12.1.3/72x72/2705.png">`
 | 
			
		||||
				var title = lang.lang_cards_trusted
 | 
			
		||||
			}else{
 | 
			
		||||
				var prved = '<img class="emoji" draggable="false" alt="⚠️" src="https://twemoji.maxcdn.com/v/12.1.4/72x72/26a0.png">'
 | 
			
		||||
				var title = lang.lang_cards_untrusted
 | 
			
		||||
			}
 | 
			
		||||
			analyze =`<a onclick="cardHtmlShow('${acct_id}','${id}')" class="add-show pointer" title="${title}">
 | 
			
		||||
			${lang.lang_parse_html}(${domain})${prved}
 | 
			
		||||
			</a>${analyze}<br>`
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return analyze
 | 
			
		||||
}
 | 
			
		||||
function cardHtmlShow(acct_id, id) {
 | 
			
		||||
	var domain = localStorage.getItem('domain_' + acct_id)
 | 
			
		||||
	var at = localStorage.getItem('acct_' + acct_id + '_at')
 | 
			
		||||
	var text = $('[toot-id=' + id + '] .toot a').attr('href')
 | 
			
		||||
	var urls = text.match(
 | 
			
		||||
		/https?:\/\/([-a-zA-Z0-9@.]+)\/media\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/
 | 
			
		||||
	)
 | 
			
		||||
	var id = $('[toot-id=' + id + '] .toot a')
 | 
			
		||||
		.parents('.cvo')
 | 
			
		||||
		.attr('toot-id')
 | 
			
		||||
	var start = 'https://' + domain + '/api/v1/statuses/' + id
 | 
			
		||||
	fetch(start, {
 | 
			
		||||
		method: 'GET',
 | 
			
		||||
		headers: {
 | 
			
		||||
			'content-type': 'application/json',
 | 
			
		||||
			Authorization: 'Bearer ' + at
 | 
			
		||||
		}
 | 
			
		||||
		//body: JSON.stringify({})
 | 
			
		||||
	})
 | 
			
		||||
		.then(function(response) {
 | 
			
		||||
			if (!response.ok) {
 | 
			
		||||
				response.text().then(function(text) {
 | 
			
		||||
					setLog(response.url, response.status, text)
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
			return response.json()
 | 
			
		||||
		})
 | 
			
		||||
		.catch(function(error) {
 | 
			
		||||
			todo(error)
 | 
			
		||||
			setLog(start, 'JSON', error)
 | 
			
		||||
			console.error(error)
 | 
			
		||||
		})
 | 
			
		||||
		.then(function(json) {
 | 
			
		||||
			json = json.card
 | 
			
		||||
			if (json.html) {
 | 
			
		||||
				analyze =
 | 
			
		||||
					json.html +
 | 
			
		||||
					`<i class="material-icons sml pointer" onclick="pip('
 | 
			
		||||
								${id}
 | 
			
		||||
								')" title="
 | 
			
		||||
								${lang.lang_cards_pip}
 | 
			
		||||
								">picture_in_picture_alt</i>`
 | 
			
		||||
			}
 | 
			
		||||
			if (json.provider_name == 'Twitter') {
 | 
			
		||||
				var url = json.author_url
 | 
			
		||||
				var status = json.url.match(/^https:\/\/twitter.com\/[_a-zA-Z0-9-]+\/status\/([0-9]+)/);
 | 
			
		||||
				var statusId = false
 | 
			
		||||
				if(status){
 | 
			
		||||
					if(status.length > 0){
 | 
			
		||||
						var statusId = status[1]
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				console.log(statusId)
 | 
			
		||||
				if(statusId){
 | 
			
		||||
					url = json.url
 | 
			
		||||
					analyze = `
 | 
			
		||||
					<blockquote class="twitter-tweet" data-dnt="true"><strong>${json.author_name}</strong><br>${json.description}<a href="${url}">${json.url}</a></blockquote>
 | 
			
		||||
					<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 
 | 
			
		||||
					`
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			$('[toot-id=' + id + '] .additional').html(analyze)
 | 
			
		||||
		})
 | 
			
		||||
}
 | 
			
		||||
//各TL上方のLink[On/Off]
 | 
			
		||||
function cardToggle(tlid) {
 | 
			
		||||
	var card = localStorage.getItem("card_" + tlid);
 | 
			
		||||
	var card = localStorage.getItem('card_' + tlid)
 | 
			
		||||
	if (!card) {
 | 
			
		||||
		localStorage.setItem("card_" + tlid, "true");
 | 
			
		||||
		$("#sta-card-" + tlid).text("Off");
 | 
			
		||||
		$("#sta-card-" + tlid).css("color",'red');
 | 
			
		||||
		localStorage.setItem('card_' + tlid, 'true')
 | 
			
		||||
		$('#sta-card-' + tlid).text('Off')
 | 
			
		||||
		$('#sta-card-' + tlid).css('color', 'red')
 | 
			
		||||
	} else {
 | 
			
		||||
		localStorage.removeItem("card_" + tlid);
 | 
			
		||||
		$("#sta-card-" + tlid).text("On");
 | 
			
		||||
		$("#sta-card-" + tlid).css("color",'#009688');
 | 
			
		||||
		localStorage.removeItem('card_' + tlid)
 | 
			
		||||
		$('#sta-card-' + tlid).text('On')
 | 
			
		||||
		$('#sta-card-' + tlid).css('color', '#009688')
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//各TL上方のLink[On/Off]をチェック
 | 
			
		||||
function cardCheck(tlid) {
 | 
			
		||||
	var card = localStorage.getItem("card_" + tlid);
 | 
			
		||||
	var card = localStorage.getItem('card_' + tlid)
 | 
			
		||||
	if (!card) {
 | 
			
		||||
		$("#sta-card-" + tlid).text("On");
 | 
			
		||||
		$("#sta-card-" + tlid).css("color",'#009688');
 | 
			
		||||
		$('#sta-card-' + tlid).text('On')
 | 
			
		||||
		$('#sta-card-' + tlid).css('color', '#009688')
 | 
			
		||||
	} else {
 | 
			
		||||
		$("#sta-card-" + tlid).text("Off");
 | 
			
		||||
		$("#sta-card-" + tlid).css("color",'red');
 | 
			
		||||
		$('#sta-card-' + tlid).text('Off')
 | 
			
		||||
		$('#sta-card-' + tlid).css('color', 'red')
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function mov(id,tlid,type){
 | 
			
		||||
	if(tlid=="notf"){
 | 
			
		||||
		var tlide="[data-notf="+acct_id+"]";
 | 
			
		||||
	}else if(tlid=="user"){
 | 
			
		||||
		var tlide="#his-data";
 | 
			
		||||
	}else{
 | 
			
		||||
		var tlide="[tlid="+tlid+"]";
 | 
			
		||||
function mov(id, tlid, type) {
 | 
			
		||||
	var click = false
 | 
			
		||||
	if (tlid == 'notf') {
 | 
			
		||||
		var tlide = '[data-notf=' + acct_id + ']'
 | 
			
		||||
	} else if (tlid == 'user') {
 | 
			
		||||
		var tlide = '#his-data'
 | 
			
		||||
	} else {
 | 
			
		||||
		var tlide = '[tlid=' + tlid + ']'
 | 
			
		||||
	}
 | 
			
		||||
	console.log(tlid)
 | 
			
		||||
	var mouseover=localStorage.getItem("mouseover");
 | 
			
		||||
	if(!mouseover){
 | 
			
		||||
		mouseover="";
 | 
			
		||||
	var mouseover = localStorage.getItem('mouseover')
 | 
			
		||||
	if (!mouseover) {
 | 
			
		||||
		mouseover = ''
 | 
			
		||||
	}
 | 
			
		||||
	if(mouseover=="yes"){
 | 
			
		||||
		mouseover="hide";
 | 
			
		||||
	}else if(mouseover=="click"){
 | 
			
		||||
		if(type=="mv"){
 | 
			
		||||
			mouseover="";
 | 
			
		||||
		}else{
 | 
			
		||||
			mouseover="hide";
 | 
			
		||||
	if (mouseover == 'yes') {
 | 
			
		||||
		mouseover = 'hide'
 | 
			
		||||
	} else if (mouseover == 'click') {
 | 
			
		||||
		if (type == 'mv') {
 | 
			
		||||
			mouseover = ''
 | 
			
		||||
		} else {
 | 
			
		||||
			mouseover = 'hide'
 | 
			
		||||
		}
 | 
			
		||||
	}else if(mouseover=="no"){
 | 
			
		||||
		mouseover="";
 | 
			
		||||
		click = true
 | 
			
		||||
	} else if (mouseover == 'no') {
 | 
			
		||||
		mouseover = ''
 | 
			
		||||
	}
 | 
			
		||||
	if(mouseover=="hide"){
 | 
			
		||||
		$(tlide+" [toot-id="+id+"] .area-actions").toggleClass("hide")
 | 
			
		||||
		$(tlide+" [toot-id="+id+"] .area-side").toggleClass("hide")
 | 
			
		||||
	if (mouseover == 'hide') {
 | 
			
		||||
		if (click) {
 | 
			
		||||
			$(tlide + ' [toot-id=' + id + ']').toggleClass('hide-actions')
 | 
			
		||||
		} else {
 | 
			
		||||
			$(tlide + ' [toot-id=' + id + ']').removeClass('hide-actions')
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//$(tlide + " [toot-id=" + id + "] .area-vis").toggleClass("hide")
 | 
			
		||||
		//$(tlide + " [toot-id=" + id + "] .area-actions").toggleClass("hide")
 | 
			
		||||
		//$(tlide + " [toot-id=" + id + "] .area-side").toggleClass("hide")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function resetmv(type){
 | 
			
		||||
	var mouseover=localStorage.getItem("mouseover");
 | 
			
		||||
	if(!mouseover){
 | 
			
		||||
		mouseover="";
 | 
			
		||||
	}else if(mouseover=="yes"){
 | 
			
		||||
		mouseover="hide";
 | 
			
		||||
	}else if(mouseover=="no"){
 | 
			
		||||
		mouseover="";
 | 
			
		||||
	}else if(mouseover=="click" && type!="mv"){
 | 
			
		||||
		mouseover="hide";
 | 
			
		||||
function resetmv(type) {
 | 
			
		||||
	var mouseover = localStorage.getItem('mouseover')
 | 
			
		||||
	if (!mouseover) {
 | 
			
		||||
		mouseover = ''
 | 
			
		||||
	} else if (mouseover == 'yes') {
 | 
			
		||||
		mouseover = 'hide'
 | 
			
		||||
	} else if (mouseover == 'no') {
 | 
			
		||||
		mouseover = ''
 | 
			
		||||
	} else if (mouseover == 'click' && type != 'mv') {
 | 
			
		||||
		mouseover = 'hide'
 | 
			
		||||
	}
 | 
			
		||||
	if(mouseover=="hide"){
 | 
			
		||||
		$(".area-actions").addClass("hide");
 | 
			
		||||
		$(".area-side").addClass("hide");
 | 
			
		||||
	if (mouseover == 'hide') {
 | 
			
		||||
		$('.cvo').addClass('hide-actions')
 | 
			
		||||
		//$(".area-vis").addClass("hide");
 | 
			
		||||
		//$(".area-actions").addClass("hide");
 | 
			
		||||
		//$(".area-side").addClass("hide");
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ function date(str, datetype) {
 | 
			
		||||
		} else {
 | 
			
		||||
			var min = date.getMinutes();
 | 
			
		||||
		}
 | 
			
		||||
		var sec=null;
 | 
			
		||||
		var sec = null;
 | 
			
		||||
		if (date.getSeconds() < 10) {
 | 
			
		||||
			sec = "0" + date.getSeconds();
 | 
			
		||||
		} else {
 | 
			
		||||
@@ -57,31 +57,31 @@ function date(str, datetype) {
 | 
			
		||||
//特殊フォーマット(インスタンス情報で利用)
 | 
			
		||||
function crat(str) {
 | 
			
		||||
	var date = new Date(str);
 | 
			
		||||
	var mnt=null;
 | 
			
		||||
	if(date.getMonth()<9){
 | 
			
		||||
		mnt="0"+(date.getMonth()+1);
 | 
			
		||||
	}else{
 | 
			
		||||
		mnt=date.getMonth()+1;
 | 
			
		||||
	var mnt = null;
 | 
			
		||||
	if (date.getMonth() < 9) {
 | 
			
		||||
		mnt = "0" + (date.getMonth() + 1);
 | 
			
		||||
	} else {
 | 
			
		||||
		mnt = date.getMonth() + 1;
 | 
			
		||||
	}
 | 
			
		||||
	if(date.getDate()<10){
 | 
			
		||||
		var dat="0"+date.getDate();
 | 
			
		||||
	}else{
 | 
			
		||||
		var dat=date.getDate();
 | 
			
		||||
	if (date.getDate() < 10) {
 | 
			
		||||
		var dat = "0" + date.getDate();
 | 
			
		||||
	} else {
 | 
			
		||||
		var dat = date.getDate();
 | 
			
		||||
	}
 | 
			
		||||
	if(date.getHours()<10){
 | 
			
		||||
		var hrs="0"+date.getHours();
 | 
			
		||||
	}else{
 | 
			
		||||
		var hrs=date.getHours();
 | 
			
		||||
	if (date.getHours() < 10) {
 | 
			
		||||
		var hrs = "0" + date.getHours();
 | 
			
		||||
	} else {
 | 
			
		||||
		var hrs = date.getHours();
 | 
			
		||||
	}
 | 
			
		||||
	if(date.getMinutes()<10){
 | 
			
		||||
		var mns="0"+date.getMinutes();
 | 
			
		||||
	}else{
 | 
			
		||||
		var mns=date.getMinutes();
 | 
			
		||||
	if (date.getMinutes() < 10) {
 | 
			
		||||
		var mns = "0" + date.getMinutes();
 | 
			
		||||
	} else {
 | 
			
		||||
		var mns = date.getMinutes();
 | 
			
		||||
	}
 | 
			
		||||
	if(date.getSeconds()<10){
 | 
			
		||||
		var sec="0"+date.getSeconds();
 | 
			
		||||
	}else{
 | 
			
		||||
		var sec=date.getSeconds();
 | 
			
		||||
	if (date.getSeconds() < 10) {
 | 
			
		||||
		var sec = "0" + date.getSeconds();
 | 
			
		||||
	} else {
 | 
			
		||||
		var sec = date.getSeconds();
 | 
			
		||||
	}
 | 
			
		||||
	format_str = 'YYYY-MM-DD hh:mm:ss';
 | 
			
		||||
	format_str = format_str.replace(/YYYY/g, date.getFullYear());
 | 
			
		||||
 
 | 
			
		||||