The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/app/apps/client/admin/appManage.html

510 lines
22 KiB

<!-- This page allows for settings to be changed but not all of them are implemented yet -->
<template name="appManage">
{{#with app}}
<section class="page-container page-home page-static page-settings rc-apps-marketplace">
{{# header sectionName='App_Details' fixedHeight=true hideHelp=true fullpage=true}}
<div class="rc-header__section-button">
{{#unless disabled}}
<button class="rc-button rc-button--cancel js-cancel-editing">{{_ "Cancel" }}</button>
{{/unless}}
<button class="rc-button rc-button--primary js-save {{#if saving}} loading{{/if}}" disabled='{{disabled}}'>{{_ "Save_changes" }}</button>
</div>
<div class="rc-header__block rc-header__block-action">
<button class="rc-button rc-button--nude js-cancel">{{> icon icon="cross"}}</button>
</div>
{{/header}}
<div class="content">
{{#requiresPermission 'manage-apps'}}
{{#if error}}
<div class="apps-error error-color">
<i class="icon-attention"></i>
<p>{{error}}</p>
</div>
{{else if isReady}}
<div class="rc-apps-details">
<div class="rc-apps-container rc-apps-container__header">
{{#if iconFileData}}
<div class="rc-apps-details__photo" style="background-image:url(data:image/png;base64,{{iconFileData}})"></div>
{{else}}
<div class="rc-apps-details__photo" style="background-image:url({{iconFileContent}})"></div>
{{/if}}
<div class="rc-apps-details__content">
<h2 class="rc-apps-details__app-name">{{name}}</h2>
<div class="rc-apps-details__app-info">
{{#if author.name}}
<span class="rc-apps-details__app-author">by {{author.name}}</span>
{{/if}}
<span class="rc-apps-details__app-version">Version {{version}}</span>
</div>
<div class="rc-apps-details__app-status">
{{#if isInstalled}}
<span class="rc-apps-details__app-button-wrapper">
{{#if canUpdate}}
<button class="rc-button rc-button--primary js-install">
{{> icon icon="reload" block="rc-icon--default-size"}}
{{_ "Update_to_version" version=newVersion }}
</button>
{{else if isFromMarketplace}}
<span class="rc-apps-details__app-install-status">
{{> icon icon="checkmark-circled" block="rc-icon--default-size"}}
{{_ "Up to date"}}
</span>
{{else}}
<span class="rc-apps-details__app-install-status">
{{> icon icon="checkmark-circled" block="rc-icon--default-size"}}
{{_ "Installed"}}
</span>
{{/if}}
</span>
<button class="rc-button rc-button--nude rc-apps-details__app-menu-trigger js-menu" data-app="{{appId}}">
{{> icon icon="menu" block="rc-icon--default-size"}}
</button>
{{else}}
{{#if canTrial}}
<button class="rc-button rc-button--primary js-purchase" data-app="{{appId}}">
{{> icon icon="circled-arrow-down" block="rc-icon--default-size"}}
{{_ "Start a trial"}}
</button>
{{else if canBuy}}
<button class="rc-button rc-button--primary js-purchase" data-app="{{appId}}">
{{> icon icon="circled-arrow-down" block="rc-icon--default-size"}}
{{_ "Buy"}}
</button>
{{else}}
<button class="rc-button rc-button--primary js-install" data-app="{{appId}}">
{{> icon icon="circled-arrow-down" block="rc-icon--default-size"}}
{{_ "Install"}}
</button>
{{/if}}
{{#if priceDisplay}}
<span class="rc-apps-details__app-price">
{{priceDisplay}}
</span>
{{/if}}
{{/if}}
</div>
</div>
</div>
</div>
<div class="rc-apps-container">
<div class="rc-apps-details__content">
{{#if categories}}
<div class="rc-apps-details__row rc-apps-details__block">
<h2> {{_ "Categories"}} </h2>
<div class="rc-apps-details__row">
{{#each category in categories}}
<span class="rc-apps-category">{{ category }}</span>
{{/each}}
</div>
</div>
{{/if}}
<div class="rc-apps-details__row rc-apps-details__block">
<h2> {{_ "Contact"}} </h2>
<div class="rc-apps-details__row">
<div class="rc-apps-details__col">
{{#if author.homepage}}
<h3>{{_ "Author_Site"}}</h3>
<a href="{{author.homepage}}" target="_blank">{{author.homepage}}</a>
{{/if}}
</div>
<div class="rc-apps-details__col">
{{#if author.support}}
<h3>{{_ "Support"}}</h3>
{{#if isEmail author.support}}
<a href="mailto:{{author.support}}">{{author.support}}</a>
{{else}}
<a href="{{author.support}}" target="_blank">{{author.support}}</a>
{{/if}}
{{/if}}
</div>
</div>
</div>
<div class="rc-apps-details__row">
<h2> {{_ "Details"}} </h2>
</div>
{{#if summary}}
<div>
{{ summary }}
</div>
{{/if}}
{{#if description}}
<div class="rc-apps-details__description">
<p>{{ description }}</p>
</div>
{{/if}}
{{#if bundledIn}}
<div class="rc-apps-details__row">
<h2> {{_ "Bundles"}} </h2>
</div>
<div class="rc-apps-details__bundles">
{{#each bundledIn}}
<div class="rc-apps-details__bundle">
<div class="rc-apps-details__bundle_icons">
{{#each apps}}
{{#if latest.iconFileData}}
<div class="rc-apps-details__bundle_icon" style="background-image:url(data:image/png;base64,{{latest.iconFileData}})"></div>
{{else}}
<div class="rc-apps-details__bundle_icon" style="background-image:url({{latest.iconFileContent}})"></div>
{{/if}}
{{/each}}
</div>
<div class="rc-apps-details__bundle_body">
<div class="rc-apps-details__bundle_body_title">{{ bundleName }}</div>
{{bundleAppNames apps}}
</div>
</div>
{{/each}}
</div>
{{/if}}
{{#if apis}}
<div class="rc-apps-details__row">
<h2> {{_ "Apis"}} </h2>
</div>
<div class="rc-apps-settings">
{{#each apis}}
<div class="rc-apps-settings__item">
<div class="rc-input">
<div class="rc-apps-details__api">
{{renderMethods methods}} {{path}}
</div>
<div class="rc-input__description rc-apps-details__api__description">
{{#each methods}}
<div class="rc-apps-details__api__description__item">{{#each curl . ..}}{{.}}<br />{{/each}}</div>
{{/each}}
</div>
</div>
</div>
{{/each}}
</div>
{{/if}}
{{#if settings}}
<div class="rc-apps-details__row">
<h2> {{_ "Settings"}} </h2>
</div>
<div class="rc-apps-settings">
{{#each settings}}
<div class="rc-apps-settings__item">
{{#if $eq type 'string'}}
<div class="rc-input">
<label class="rc-input__label">
<div class="rc-input__title">{{_ i18nLabel}}</div>
<div class="rc-input__wrapper">
{{#if multiline}}
<textarea class="rc-input__element" name="{{id}}" rows="4" style="height: auto">{{value}}</textarea>
{{else}}
<input class="rc-input__element" type="text" name="{{id}}" value="{{value}}" placeholder="{{_ i18nPlaceholder}}" />
{{/if}}
</div>
</label>
{{#if i18nDescription}}
<div class="rc-input__description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{#if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{else if $eq type 'boolean'}}
<div class="rc-switch rc-switch--blue">
<label class="rc-switch__label" tabindex="-1" for="{{id}}">
<input type="checkbox" class="rc-switch__input" name="{{id}}" id="{{id}}" checked="{{$eq value true}}">
<span class="rc-switch__button">
<span class="rc-switch__button-inside"></span>
</span>
<span class="rc-switch__text">
{{_ i18nLabel}}
</span>
</label>
<span class="rc-switch__description">{{{parseDescription i18nDescription}}}</span>
{{# if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{else if $eq type 'int'}}
<div class="rc-input">
<label class="rc-input__label">
<div class="rc-input__title">{{_ i18nLabel}}</div>
<div class="rc-input__wrapper">
{{#if multiline}}
<textarea class="rc-input__element" name="{{id}}" rows="4" style="height: auto">{{value}}</textarea>
{{else}}
<input class="rc-input__element" type="number" name="{{id}}" value="{{value}}" placeholder="{{_ i18nPlaceholder}}" />
{{/if}}
</div>
</label>
{{# if i18nDescription}}
<div class="rc-input__description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{# if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{else if $eq type 'password'}}
<div class="rc-input">
<label class="rc-input__label">
<div class="rc-input__title">{{_ i18nLabel}}</div>
<div class="rc-input__wrapper">
{{#if multiline}}
<textarea class="rc-input__element" name="{{id}}" rows="4" style="height: auto">{{value}}</textarea>
{{else}}
<input class="rc-input__element" type="password" name="{{id}}" value="{{value}}" placeholder="{{_ i18nPlaceholder}}" />
{{/if}}
</div>
</label>
{{# if i18nDescription}}
<div class="rc-input__description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{# if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{else if $eq type 'relativeUrl'}}
<div class="rc-input">
<label class="rc-input__label">
<div class="rc-input__title">{{_ i18nLabel}}</div>
<div class="rc-input__wrapper">
{{#if $eq type 'relativeUrl'}}
<input class="rc-input__element" type="text" name="{{id}}" value="{{relativeUrl value}}" placeholder="{{_ i18nPlaceholder}}" {{isReadonly}}/>
{{/if}}
</div>
</label>
{{# if i18nDescription}}
<div class="rc-input__description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{# if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{else if $eq type 'font'}}
<div class="rc-input">
<label class="rc-input__label">
<div class="rc-input__title">{{_ i18nLabel}}</div>
<div class="rc-input__wrapper">
{{#if multiline}}
<textarea class="rc-input__element" name="{{id}}" rows="4" style="height: auto">{{value}}</textarea>
{{else}}
<input class="rc-input__element" type="text" name="{{id}}" value="{{value}}" placeholder="{{_ i18nPlaceholder}}" />
{{/if}}
</div>
</label>
{{# if i18nDescription}}
<div class="rc-input__description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{# if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{else if $eq type 'code'}}
<div class="rc-input">
<label class="rc-input__label">
<div class="rc-input__title">{{_ i18nLabel}}</div>
<div class="rc-input__wrapper">
{{#if isDisabled.disabled}}
{{> CodeMirror name=id options=(getEditorOptions true) code=(i18nDefaultValue) }}
{{else}}
<div class="code-mirror-box" data-editor-id="{{id}}">
<div class="title">
{{label}}
</div>
{{> CodeMirror name=id options=getEditorOptions code=value }}
<div class="buttons">
<button class="button primary button-fullscreen">{{_ "Full_Screen"}}</button>
<button class="button primary button-restore">{{_ "Exit_Full_Screen"}}</button>
</div>
</div>
{{/if}}
</div>
</label>
{{# if i18nDescription}}
<div class="rc-input__description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{# if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{else if $eq type 'select'}}
<div class="rc-input">
<label class="rc-input__label">
<div class="rc-input__title">{{_ i18nLabel}}</div>
<div class="rc-select">
<select class="rc-select__element" name="{{id}}">
{{#each values}}
<option class="rc-select__option" value="{{key}}" selected="{{selectedOption ../id key}}">{{_ i18nLabel}}</option>
{{/each}}
</select>
{{> icon block="rc-select__arrow" icon="arrow-down" }}
</div>
</label>
{{# if i18nDescription}}
<div class="rc-input__description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{# if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{else if $eq type 'color'}}
<div class="rc-input">
<label class="rc-input__label">
<div class="rc-input__title">{{_ i18nLabel}}</div>
<div class="rc-input__wrapper">
{{#if multiline}}
<textarea class="rc-input__element" name="{{id}}" rows="4" style="height: auto">{{value}}</textarea>
{{else}}
<input class="rc-input__element" type="color" name="{{id}}" value="{{value}}" placeholder="{{_ i18nPlaceholder}}" />
{{/if}}
</div>
</label>
{{# if i18nDescription}}
<div class="rc-input__description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{# if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{ else if $eq type 'language'}}
<div class="rc-input">
<label class="rc-input__label">
<div class="rc-input__title">{{_ i18nLabel}}</div>
<div class="rc-select">
<select class="rc-select__element" name="{{id}}">
{{#each languages}}
<option class="rc-select__option" value="{{key}}" selected="{{selectedOption key}}">{{_ name}}</option>
{{/each}}
</select>
{{> icon block="rc-select__arrow" icon="arrow-down" }}
</div>
</label>
{{# if i18nDescription}}
<div class="rc-input__description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{# if i18nAlert}}
<div class="rc-input__error">
<div class="rc-input__error-icon">
{{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}}
</div>
<div class="rc-input__error-message">{{{parseDescription i18nAlert}}}</div>
</div>
{{/if}}
</div>
{{else}}
<div class="input-line double-col">
<label class="setting-label">{{_ i18nLabel}}</label>
<div class="setting-field">
{{#if $eq type 'action'}}
{{#if hasChanges section}}
<span style="line-height: 40px" class="secondary-font-color">{{_ "Save_to_enable_this_action"}}</span>
{{else}}
<button type="button" class="button primary action" data-setting="{{id}}" data-action="{{value}}">{{_ actionText}}</button>
{{/if}}
{{/if}}
{{#if $eq type 'asset'}}
{{#if value.url}}
<div class="settings-file-preview">
<div class="preview" style="background-image:url({{value.url}}?_dc={{random}});"></div>
<div class="action">
<button type="button" class="button danger delete-asset"><i class="icon-trash secondary-font-color"></i>{{_ 'Delete'}}</button>
</div>
</div>
{{else}}
<div class="settings-file-preview">
<div class="preview no-file background-transparent-light secondary-font-color"><i class="icon-upload secondary-font-color"></i></div>
<div class="action">
<div class="button primary">{{_ 'Select_file'}}
<input type="file" accept="{{assetAccept fileConstraints}}" />
</div>
</div>
</div>
{{/if}}
{{/if}}
{{#if $eq type 'roomPick'}}
<div>
{{> inputAutocomplete settings=autocompleteRoom id=id name=id class="search autocomplete" autocomplete="off" disabled=isDisabled.disabled}}
<ul class="selected-rooms">
{{#each selectedRooms}}
<li class="remove-room" data-setting={{../id}}>{{name}} <i class="icon-cancel secondary-font-color"></i></li>
{{/each}}
</ul>
</div>
{{/if}}
{{#if i18nDescription}}
<div class="settings-description">{{{parseDescription i18nDescription}}}</div>
{{/if}}
{{#if i18nAlert}}
<div class="settings-alert pending-color pending-background pending-border"><i class="icon-attention secondary-font-color"></i>{{{parseDescription i18nAlert}}}</div>
{{/if}}
</div>
</div>
{{/if}}
</div>
{{/each}}
</div>
{{/if}}
</div>
</div>
{{else}}
{{> loading}}
{{/if}}
{{/requiresPermission}}
</div>
</section>
{{/with}}
</template>