wip
This commit is contained in:
		
							parent
							
								
									71c3e11708
								
							
						
					
					
						commit
						e770cd6f55
					
				
					 5 changed files with 196 additions and 46 deletions
				
			
		|  | @ -8,6 +8,7 @@ let page = null; | ||||||
| 
 | 
 | ||||||
| export default me => { | export default me => { | ||||||
| 	route('/',                 index); | 	route('/',                 index); | ||||||
|  | 	route('/selectdrive',      selectDrive); | ||||||
| 	route('/i>mentions',       mentions); | 	route('/i>mentions',       mentions); | ||||||
| 	route('/channel',          channels); | 	route('/channel',          channels); | ||||||
| 	route('/channel/:channel', channel); | 	route('/channel/:channel', channel); | ||||||
|  | @ -66,6 +67,10 @@ export default me => { | ||||||
| 		mount(document.createElement('mk-channels-page')); | 		mount(document.createElement('mk-channels-page')); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	function selectDrive() { | ||||||
|  | 		mount(document.createElement('mk-selectdrive-page')); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	function notFound() { | 	function notFound() { | ||||||
| 		mount(document.createElement('mk-not-found')); | 		mount(document.createElement('mk-not-found')); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -63,6 +63,7 @@ require('./pages/search.tag'); | ||||||
| require('./pages/not-found.tag'); | require('./pages/not-found.tag'); | ||||||
| require('./pages/channel.tag'); | require('./pages/channel.tag'); | ||||||
| require('./pages/channels.tag'); | require('./pages/channels.tag'); | ||||||
|  | require('./pages/selectdrive.tag'); | ||||||
| require('./autocomplete-suggestion.tag'); | require('./autocomplete-suggestion.tag'); | ||||||
| require('./progress-dialog.tag'); | require('./progress-dialog.tag'); | ||||||
| require('./user-preview.tag'); | require('./user-preview.tag'); | ||||||
|  |  | ||||||
|  | @ -2,7 +2,9 @@ | ||||||
| 	<mk-ui ref="ui"> | 	<mk-ui ref="ui"> | ||||||
| 		<main if={ !parent.fetching }> | 		<main if={ !parent.fetching }> | ||||||
| 			<h1>{ parent.channel.title }</h1> | 			<h1>{ parent.channel.title }</h1> | ||||||
| 			<mk-channel-post if={ parent.posts } each={ parent.posts.reverse() } post={ this } form={ parent.refs.form }/> | 			<virtual if={ parent.posts }> | ||||||
|  | 				<mk-channel-post each={ parent.posts.reverse() } post={ this } form={ parent.refs.form }/> | ||||||
|  | 			</virtual> | ||||||
| 			<hr> | 			<hr> | ||||||
| 			<mk-channel-form channel={ parent.channel } ref="form"/> | 			<mk-channel-form channel={ parent.channel } ref="form"/> | ||||||
| 		</main> | 		</main> | ||||||
|  | @ -68,6 +70,11 @@ | ||||||
| 	<div> | 	<div> | ||||||
| 		<a if={ post.reply_to }>>>{ post.reply_to.index }</a> | 		<a if={ post.reply_to }>>>{ post.reply_to.index }</a> | ||||||
| 		{ post.text } | 		{ post.text } | ||||||
|  | 		<div class="media" if={ post.media }> | ||||||
|  | 			<virtual each={ file in post.media }> | ||||||
|  | 				<img src={ file.url + '?thumbnail&size=512' } alt={ file.name } title={ file.name }/> | ||||||
|  | 			</virtual> | ||||||
|  | 		</div> | ||||||
| 	</div> | 	</div> | ||||||
| 	<style> | 	<style> | ||||||
| 		:scope | 		:scope | ||||||
|  | @ -109,13 +116,19 @@ | ||||||
| 	<button class={ wait: wait } ref="submit" disabled={ wait || (refs.text.value.length == 0) } onclick={ post }> | 	<button class={ wait: wait } ref="submit" disabled={ wait || (refs.text.value.length == 0) } onclick={ post }> | ||||||
| 		{ wait ? 'やってます' : 'やる' }<mk-ellipsis if={ wait }/> | 		{ wait ? 'やってます' : 'やる' }<mk-ellipsis if={ wait }/> | ||||||
| 	</button> | 	</button> | ||||||
| 
 | 	<br> | ||||||
|  | 	<button onclick={ drive }>ドライブ</button> | ||||||
|  | 	<ol if={ files }> | ||||||
|  | 		<li each={ files }>{ name }</li> | ||||||
|  | 	</ol> | ||||||
| 	<style> | 	<style> | ||||||
| 		:scope | 		:scope | ||||||
| 			display block | 			display block | ||||||
| 
 | 
 | ||||||
| 	</style> | 	</style> | ||||||
| 	<script> | 	<script> | ||||||
|  | 		import CONFIG from '../../../common/scripts/config'; | ||||||
|  | 
 | ||||||
| 		this.mixin('api'); | 		this.mixin('api'); | ||||||
| 
 | 
 | ||||||
| 		this.channel = this.opts.channel; | 		this.channel = this.opts.channel; | ||||||
|  | @ -128,6 +141,9 @@ | ||||||
| 
 | 
 | ||||||
| 		this.clear = () => { | 		this.clear = () => { | ||||||
| 			this.clearReply(); | 			this.clearReply(); | ||||||
|  | 			this.update({ | ||||||
|  | 				files: null | ||||||
|  | 			}); | ||||||
| 			this.refs.text.value = ''; | 			this.refs.text.value = ''; | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
|  | @ -136,8 +152,13 @@ | ||||||
| 				wait: true | 				wait: true | ||||||
| 			}); | 			}); | ||||||
| 
 | 
 | ||||||
|  | 			const files = this.files && this.files.length > 0 | ||||||
|  | 				? this.files.map(f => f.id) | ||||||
|  | 				: undefined; | ||||||
|  | 
 | ||||||
| 			this.api('posts/create', { | 			this.api('posts/create', { | ||||||
| 				text: this.refs.text.value, | 				text: this.refs.text.value, | ||||||
|  | 				media_ids: files, | ||||||
| 				reply_to_id: this.reply ? this.reply.id : undefined, | 				reply_to_id: this.reply ? this.reply.id : undefined, | ||||||
| 				channel_id: this.channel.id | 				channel_id: this.channel.id | ||||||
| 			}).then(data => { | 			}).then(data => { | ||||||
|  | @ -151,5 +172,13 @@ | ||||||
| 			}); | 			}); | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
|  | 		this.drive = () => { | ||||||
|  | 			window['cb'] = files => { | ||||||
|  | 				this.update({ | ||||||
|  | 					files: files | ||||||
|  | 				}); | ||||||
|  | 			}; | ||||||
|  | 			window.open(CONFIG.url + '/selectdrive?multiple=true', '_blank'); | ||||||
|  | 		}; | ||||||
| 	</script> | 	</script> | ||||||
| </mk-channel-form> | </mk-channel-form> | ||||||
|  |  | ||||||
|  | @ -1,44 +0,0 @@ | ||||||
| <mk-drive-chooser> |  | ||||||
| 	<mk-drive-browser ref="browser" multiple={ parent.multiple }/> |  | ||||||
| 	<div> |  | ||||||
| 		<button class="upload" title="PCからドライブにファイルをアップロード" onclick={ upload }><i class="fa fa-upload"></i></button> |  | ||||||
| 		<button class="cancel" onclick={ close }>キャンセル</button> |  | ||||||
| 		<button class="ok" onclick={ parent.ok }>決定</button> |  | ||||||
| 	</div> |  | ||||||
| 
 |  | ||||||
| 	<style> |  | ||||||
| 		:scope |  | ||||||
| 			display block |  | ||||||
| 			height 100% |  | ||||||
| 
 |  | ||||||
| 	</style> |  | ||||||
| 	<script> |  | ||||||
| 		this.multiple = this.opts.multiple != null ? this.opts.multiple : false; |  | ||||||
| 
 |  | ||||||
| 		this.on('mount', () => { |  | ||||||
| 			this.refs.browser.on('selected', file => { |  | ||||||
| 				this.files = [file]; |  | ||||||
| 				this.ok(); |  | ||||||
| 			}); |  | ||||||
| 
 |  | ||||||
| 			this.refs.browser.on('change-selection', files => { |  | ||||||
| 				this.update({ |  | ||||||
| 					files: files |  | ||||||
| 				}); |  | ||||||
| 			}); |  | ||||||
| 		}); |  | ||||||
| 
 |  | ||||||
| 		this.upload = () => { |  | ||||||
| 			this.refs.browser.selectLocalFile(); |  | ||||||
| 		}; |  | ||||||
| 
 |  | ||||||
| 		this.close = () => { |  | ||||||
| 			window.close(); |  | ||||||
| 		}; |  | ||||||
| 
 |  | ||||||
| 		this.ok = () => { |  | ||||||
| 			window.opener.cb(this.multiple ? this.files : this.files[0]); |  | ||||||
| 			window.close(); |  | ||||||
| 		}; |  | ||||||
| 	</script> |  | ||||||
| </mk-drive-chooser> |  | ||||||
							
								
								
									
										159
									
								
								src/web/app/desktop/tags/pages/selectdrive.tag
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								src/web/app/desktop/tags/pages/selectdrive.tag
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,159 @@ | ||||||
|  | <mk-selectdrive-page> | ||||||
|  | 	<mk-drive-browser ref="browser" multiple={ multiple }/> | ||||||
|  | 	<div> | ||||||
|  | 		<button class="upload" title="PCからドライブにファイルをアップロード" onclick={ upload }><i class="fa fa-upload"></i></button> | ||||||
|  | 		<button class="cancel" onclick={ close }>キャンセル</button> | ||||||
|  | 		<button class="ok" onclick={ ok }>決定</button> | ||||||
|  | 	</div> | ||||||
|  | 
 | ||||||
|  | 	<style> | ||||||
|  | 		:scope | ||||||
|  | 			display block | ||||||
|  | 			height 100% | ||||||
|  | 			background #fff | ||||||
|  | 
 | ||||||
|  | 			> mk-drive-browser | ||||||
|  | 				height calc(100% - 72px) | ||||||
|  | 
 | ||||||
|  | 			> div | ||||||
|  | 				position fixed | ||||||
|  | 				bottom 0 | ||||||
|  | 				left 0 | ||||||
|  | 				width 100% | ||||||
|  | 				height 72px | ||||||
|  | 				background lighten($theme-color, 95%) | ||||||
|  | 
 | ||||||
|  | 				.upload | ||||||
|  | 					display inline-block | ||||||
|  | 					position absolute | ||||||
|  | 					top 8px | ||||||
|  | 					left 16px | ||||||
|  | 					cursor pointer | ||||||
|  | 					padding 0 | ||||||
|  | 					margin 8px 4px 0 0 | ||||||
|  | 					width 40px | ||||||
|  | 					height 40px | ||||||
|  | 					font-size 1em | ||||||
|  | 					color rgba($theme-color, 0.5) | ||||||
|  | 					background transparent | ||||||
|  | 					outline none | ||||||
|  | 					border solid 1px transparent | ||||||
|  | 					border-radius 4px | ||||||
|  | 
 | ||||||
|  | 					&:hover | ||||||
|  | 						background transparent | ||||||
|  | 						border-color rgba($theme-color, 0.3) | ||||||
|  | 
 | ||||||
|  | 					&:active | ||||||
|  | 						color rgba($theme-color, 0.6) | ||||||
|  | 						background transparent | ||||||
|  | 						border-color rgba($theme-color, 0.5) | ||||||
|  | 						box-shadow 0 2px 4px rgba(darken($theme-color, 50%), 0.15) inset | ||||||
|  | 
 | ||||||
|  | 					&:focus | ||||||
|  | 						&:after | ||||||
|  | 							content "" | ||||||
|  | 							pointer-events none | ||||||
|  | 							position absolute | ||||||
|  | 							top -5px | ||||||
|  | 							right -5px | ||||||
|  | 							bottom -5px | ||||||
|  | 							left -5px | ||||||
|  | 							border 2px solid rgba($theme-color, 0.3) | ||||||
|  | 							border-radius 8px | ||||||
|  | 
 | ||||||
|  | 				.ok | ||||||
|  | 				.cancel | ||||||
|  | 					display block | ||||||
|  | 					position absolute | ||||||
|  | 					bottom 16px | ||||||
|  | 					cursor pointer | ||||||
|  | 					padding 0 | ||||||
|  | 					margin 0 | ||||||
|  | 					width 120px | ||||||
|  | 					height 40px | ||||||
|  | 					font-size 1em | ||||||
|  | 					outline none | ||||||
|  | 					border-radius 4px | ||||||
|  | 
 | ||||||
|  | 					&:focus | ||||||
|  | 						&:after | ||||||
|  | 							content "" | ||||||
|  | 							pointer-events none | ||||||
|  | 							position absolute | ||||||
|  | 							top -5px | ||||||
|  | 							right -5px | ||||||
|  | 							bottom -5px | ||||||
|  | 							left -5px | ||||||
|  | 							border 2px solid rgba($theme-color, 0.3) | ||||||
|  | 							border-radius 8px | ||||||
|  | 
 | ||||||
|  | 					&:disabled | ||||||
|  | 						opacity 0.7 | ||||||
|  | 						cursor default | ||||||
|  | 
 | ||||||
|  | 				.ok | ||||||
|  | 					right 16px | ||||||
|  | 					color $theme-color-foreground | ||||||
|  | 					background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%) | ||||||
|  | 					border solid 1px lighten($theme-color, 15%) | ||||||
|  | 
 | ||||||
|  | 					&:not(:disabled) | ||||||
|  | 						font-weight bold | ||||||
|  | 
 | ||||||
|  | 					&:hover:not(:disabled) | ||||||
|  | 						background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%) | ||||||
|  | 						border-color $theme-color | ||||||
|  | 
 | ||||||
|  | 					&:active:not(:disabled) | ||||||
|  | 						background $theme-color | ||||||
|  | 						border-color $theme-color | ||||||
|  | 
 | ||||||
|  | 				.cancel | ||||||
|  | 					right 148px | ||||||
|  | 					color #888 | ||||||
|  | 					background linear-gradient(to bottom, #ffffff 0%, #f5f5f5 100%) | ||||||
|  | 					border solid 1px #e2e2e2 | ||||||
|  | 
 | ||||||
|  | 					&:hover | ||||||
|  | 						background linear-gradient(to bottom, #f9f9f9 0%, #ececec 100%) | ||||||
|  | 						border-color #dcdcdc | ||||||
|  | 
 | ||||||
|  | 					&:active | ||||||
|  | 						background #ececec | ||||||
|  | 						border-color #dcdcdc | ||||||
|  | 
 | ||||||
|  | 	</style> | ||||||
|  | 	<script> | ||||||
|  | 		const q = (new URL(location)).searchParams; | ||||||
|  | 		this.multiple = q.get('multiple') == 'true' ? true : false; | ||||||
|  | 
 | ||||||
|  | 		this.on('mount', () => { | ||||||
|  | 			document.documentElement.style.background = '#fff'; | ||||||
|  | 
 | ||||||
|  | 			this.refs.browser.on('selected', file => { | ||||||
|  | 				this.files = [file]; | ||||||
|  | 				this.ok(); | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 			this.refs.browser.on('change-selection', files => { | ||||||
|  | 				this.update({ | ||||||
|  | 					files: files | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
|  | 		this.upload = () => { | ||||||
|  | 			this.refs.browser.selectLocalFile(); | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		this.close = () => { | ||||||
|  | 			window.close(); | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		this.ok = () => { | ||||||
|  | 			window.opener.cb(this.multiple ? this.files : this.files[0]); | ||||||
|  | 			window.close(); | ||||||
|  | 		}; | ||||||
|  | 	</script> | ||||||
|  | </mk-selectdrive-page> | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue