mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 06:33:44 +08:00
227 lines
9.6 KiB
Handlebars
227 lines
9.6 KiB
Handlebars
{{#composer-body composer=model
|
|
showPreview=showPreview
|
|
openIfDraft=(action "openIfDraft")
|
|
typed=(action "typed")
|
|
cancelled=(action "cancelled")
|
|
save=(action "save")}}
|
|
<div class="grippie"></div>
|
|
{{#if visible}}
|
|
{{composer-messages composer=model
|
|
messageCount=messageCount
|
|
addLinkLookup=(action "addLinkLookup")}}
|
|
{{#if model.viewOpenOrFullscreen}}
|
|
<div class="reply-area {{if canEditTags 'with-tags'}}">
|
|
<div class='composer-fields'>
|
|
{{plugin-outlet name="composer-open" args=(hash model=model)}}
|
|
<div class='reply-to'>
|
|
{{#unless model.viewFullscreen}}
|
|
<div class="reply-details">
|
|
{{composer-action-title
|
|
model=model
|
|
openComposer=(action "openComposer")
|
|
closeComposer=(action "closeComposer")
|
|
canWhisper=canWhisper
|
|
tabindex=8}}
|
|
{{plugin-outlet name="composer-action-after" noTags=true args=(hash model=model)}}
|
|
|
|
{{#unless site.mobileView}}
|
|
{{#if isWhispering}}
|
|
<span class='whisper'>{{d-icon "far-eye-slash"}}</span>
|
|
{{/if}}
|
|
{{#if model.unlistTopic}}
|
|
<span class='whisper'>({{i18n 'composer.unlist'}})</span>
|
|
{{/if}}
|
|
{{#if model.noBump}}
|
|
<span class="no-bump">{{d-icon "anchor"}}</span>
|
|
{{/if}}
|
|
{{/unless}}
|
|
|
|
{{#if canEdit}}
|
|
{{#link-to-input onClick=(action "displayEditReason") showInput=showEditReason key="composer.show_edit_reason" class="display-edit-reason"}}
|
|
{{text-field value=editReason tabindex="7" id="edit-reason" maxlength="255" placeholderKey="composer.edit_reason_placeholder"}}
|
|
{{/link-to-input}}
|
|
{{/if}}
|
|
</div>
|
|
{{/unless}}
|
|
{{composer-toggles composeState=model.composeState
|
|
toggleComposer=(action "toggle")
|
|
toggleToolbar=(action "toggleToolbar")
|
|
toggleFullscreen=(action "fullscreenComposer")}}
|
|
</div>
|
|
{{#unless model.viewFullscreen}}
|
|
{{#if model.canEditTitle}}
|
|
{{#if model.creatingPrivateMessage}}
|
|
<div class='user-selector'>
|
|
{{composer-user-selector topicId=topicModel.id
|
|
usernames=model.targetUsernames
|
|
hasGroups=model.hasTargetGroups
|
|
focusTarget=focusTarget
|
|
class="users-input"}}
|
|
{{#if showWarning}}
|
|
<label class='add-warning'>
|
|
{{input type="checkbox" checked=model.isWarning tabindex="3"}}
|
|
{{i18n "composer.add_warning"}}
|
|
</label>
|
|
{{/if}}
|
|
</div>
|
|
{{/if}}
|
|
|
|
<div class="title-and-category {{if showPreview 'with-preview'}}">
|
|
|
|
{{composer-title composer=model lastValidatedAt=lastValidatedAt focusTarget=focusTarget}}
|
|
|
|
{{#if model.showCategoryChooser}}
|
|
<div class="category-input">
|
|
{{category-chooser
|
|
fullWidthOnMobile=true
|
|
value=model.categoryId
|
|
scopedCategoryId=scopedCategoryId
|
|
tabindex="3"}}
|
|
{{popup-input-tip validation=categoryValidation}}
|
|
</div>
|
|
{{/if}}
|
|
{{#if canEditTags}}
|
|
{{mini-tag-chooser tags=model.tags tabindex="4" categoryId=model.categoryId minimum=model.minimumRequiredTags}}
|
|
{{popup-input-tip validation=tagValidation}}
|
|
{{/if}}
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{plugin-outlet name="composer-fields" args=(hash model=model)}}
|
|
{{/unless}}
|
|
|
|
</div>
|
|
|
|
{{composer-editor topic=topic
|
|
composer=model
|
|
lastValidatedAt=lastValidatedAt
|
|
canWhisper=canWhisper
|
|
storeToolbarState=(action "storeToolbarState")
|
|
onPopupMenuAction=(action "onPopupMenuAction")
|
|
showUploadModal=(route-action "showUploadSelector")
|
|
popupMenuOptions=popupMenuOptions
|
|
draftStatus=model.draftStatus
|
|
isUploading=isUploading
|
|
allowUpload=allowUpload
|
|
uploadIcon=uploadIcon
|
|
isCancellable=isCancellable
|
|
uploadProgress=uploadProgress
|
|
groupsMentioned=(action "groupsMentioned")
|
|
cannotSeeMention=(action "cannotSeeMention")
|
|
importQuote=(action "importQuote")
|
|
togglePreview=(action "togglePreview")
|
|
showToolbar=showToolbar
|
|
afterRefresh=(action "afterRefresh")
|
|
focusTarget=focusTarget}}
|
|
|
|
<div class='submit-panel'>
|
|
{{plugin-outlet name="composer-fields-below" args=(hash model=model)}}
|
|
|
|
<div class='save-or-cancel'>
|
|
{{#unless model.viewFullscreen}}
|
|
{{composer-save-button action=(action "save")
|
|
icon=saveIcon
|
|
label=saveLabel
|
|
disableSubmit=disableSubmit}}
|
|
|
|
{{#if site.mobileView}}
|
|
<a href {{action "cancel"}} class='cancel' tabindex="6" title="{{i18n 'cancel'}}">
|
|
{{#if canEdit}}
|
|
{{d-icon "times"}}
|
|
{{else}}
|
|
{{d-icon "far-trash-alt"}}
|
|
{{/if}}
|
|
</a>
|
|
{{else}}
|
|
<a href {{action "cancel"}} class='cancel' tabindex="6" >{{i18n 'cancel'}}</a>
|
|
{{/if}}
|
|
{{/unless}}
|
|
|
|
|
|
{{#if site.mobileView}}
|
|
{{#if whisperOrUnlistTopic}}
|
|
<span class='whisper'>
|
|
{{d-icon "far-eye-slash"}}
|
|
</span>
|
|
{{/if}}
|
|
{{#if model.noBump}}
|
|
<span class="no-bump">{{d-icon "anchor"}}</span>
|
|
{{/if}}
|
|
{{/if}}
|
|
|
|
|
|
{{#if isUploading}}
|
|
<div id="file-uploading">
|
|
{{loading-spinner size="small"}}<span>{{i18n 'upload_selector.uploading'}} {{uploadProgress}}%</span>
|
|
{{#if isCancellable}}
|
|
<a href id="cancel-file-upload" {{action "cancelUpload"}}>{{d-icon "times"}}</a>
|
|
{{/if}}
|
|
</div>
|
|
{{/if}}
|
|
<div id='draft-status' class="{{if isUploading 'hidden'}}">
|
|
{{#if model.draftSaving}}<div class="spinner small"></div>{{/if}}
|
|
{{#if model.draftSaved}}{{d-icon 'check' class='save-animation'}}{{/if}}
|
|
{{#if model.draftStatus}}
|
|
<span title="{{model.draftStatus}}">
|
|
{{#if model.draftConflictUser}}
|
|
{{avatar model.draftConflictUser imageSize="small"}} {{d-icon 'user-edit'}}
|
|
{{else}}
|
|
{{d-icon 'sync-alt'}}
|
|
{{/if}}
|
|
{{#unless site.mobileView}}
|
|
{{model.draftStatus}}
|
|
{{/unless}}
|
|
</span>
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
|
|
{{#if site.mobileView}}
|
|
{{#if allowUpload}}
|
|
<a class="btn btn-default no-text mobile-file-upload {{if isUploading 'hidden'}}">
|
|
{{d-icon uploadIcon}}
|
|
</a>
|
|
{{/if}}
|
|
|
|
<a class="btn btn-default no-text mobile-preview" title="{{i18n 'composer.show_preview'}}" {{action "togglePreview"}}>
|
|
{{d-icon "desktop"}}
|
|
</a>
|
|
|
|
{{#if showPreview}}
|
|
{{d-button action=(action "togglePreview") class="hide-preview" label="composer.hide_preview"}}
|
|
{{/if}}
|
|
{{else}}
|
|
<a href {{action "togglePreview"}} class='toggle-preview'>{{{toggleText}}}</a>
|
|
{{/if}}
|
|
|
|
</div>
|
|
</div>
|
|
|
|
{{else}}
|
|
<div class='saving-text'>
|
|
{{#if model.createdPost}}
|
|
{{i18n 'composer.saved'}} <a class='permalink' href="{{unbound createdPost.url}}" {{action "viewNewReply"}}>{{i18n 'composer.view_new_post'}}</a>
|
|
{{else}}
|
|
{{i18n 'composer.saving'}} {{loading-spinner size="small"}}
|
|
{{/if}}
|
|
</div>
|
|
|
|
<div class='draft-text'>
|
|
{{#if model.topic}}
|
|
{{d-icon "share"}} {{{draftTitle}}}
|
|
{{else}}
|
|
{{i18n "composer.saved_draft"}}
|
|
{{/if}}
|
|
</div>
|
|
|
|
{{composer-toggles composeState=model.composeState
|
|
toggleFullscreen=(action "openIfDraft")
|
|
toggleComposer=(action "toggle")
|
|
toggleToolbar=(action "toggleToolbar")}}
|
|
|
|
{{/if}}
|
|
|
|
{{/if}}
|
|
|
|
{{/composer-body}}
|