public/components/stub-modal/stub-modal.html (237 lines of code) (raw):
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" ng-click="cancel()">×</button>
<h4 class="modal-title">{{ modalTitle }}</h4>
</div>
<form name="stubForm">
<fieldset>
<input type="hidden" ng-model="stub.id"/>
<div class="modal-body">
<div class="form-group" ng-if="mode === 'import'">
<label for="stub_title">Content URL
*<em class="stubModal__import-help">Copy / paste the URL of the content to import (e.g. from Composer)</em></label>
<input type="text" ng-model="formData.importUrl" ng-change="importUrlChanged()" id="import_url" name="import_url" class="form-control" required wf-focus focus-me="{{ mode === 'import' }}">
</div>
<div class="form-horizontal clearfix">
<div class="format-dropdown" ng-if="(showFormatDropdown && stubFormatIsCorrectlyPopulated())">
<label for="stub_format">Format</label>
<div>
<select ng-disabled="mode === 'import'" id="stub_format" name="articleFormat" ng-model="stub.articleFormat" ng-options="f.value as f.name for f in articleFormats"></select>
</div>
</div>
<div class="form-group col-xs-8">
<label for="stub_title">Working title *</label>
<input type="text" ng-model="stub.title" id="stub_title" name="title" class="form-control" required wf-focus focus-me="{{ !(mode === 'import') }}">
</div>
<div class="form-group pull-right col-xs-5">
<punters stub="stub"></punters>
</div>
</div>
<div class="form-horizontal clearfix">
<div class="form-group pull-left col-xs-8">
<label for="stub_status">Status *</label>
<div>
<select id="stub_status" name="status" ng-model="stub.status" ng-options="status.value as status.label for status in statuses"></select>
</div>
</div>
<div class="form-group pull-right col-xs-5" ng-if="contentName === 'Atom'">
<label for="stub_content_type">Type *</label>
<div>
<select id="stub_content_type" name="content_type" ng-model="stub.contentType" ng-options="(type.value | lowercase) as type.displayName for type in atomTypes" required>
</select>
</div>
</div>
<div class="form-group pull-left col-xs-8" ng-if="contentName !== 'Atom' && !['Atom Workshop', 'Media Atom Maker'].includes(importHandler.name)">
<label for="stub_cdesk">Commissioning info</label>
<div ng-if="cdesks.length > 0">
<select class="commissioning-desk-margin" id="stub_cdesk" name="cdesk" ng-model="stub.commissioningDesks" ng-options="cdesk.id.toString() as cdesk.externalName for cdesk in cdesks"></select>
</div>
<div ng-if="cdesks.length === 0">
<p class="commissioning-desk-margin">Selecting commissioning info is temporarily unavailable</p>
</div>
<section style="display: contents;" ng-if="isCommissionedLengthRequired()" >
<label for="commissionedLength">Commissioned Length <span ng-if="isCommissionedLengthRequired()">*</span></label>
<a class="feedback-link" href="https://docs.google.com/forms/d/e/1FAIpQLSeZje55T3OnErlTI_8iGuyZERjDy2Pybh8fdPmbnjy1PNFDAw/viewform" target="_blank">
<span class="feedback-title" title="Send Feedback">Send Feedback</span>
</a>
<div class="commissioned-length-buttons">
<button
ng:repeat="commissionedLengthSuggestion in commissionedLengthSuggestions"
class="btn btn-default btn-sm commissioned-length-suggestion"
ng-model="stub.commissionedLength"
btn-radio="commissionedLengthSuggestion"
type="button"
ng-click="
resetMissingCommissionedLengthReason();
sendTelemetryForSuggestion(commissionedLengthSuggestion);
"
>
{{ commissionedLengthSuggestion }}
</button>
<button
class="btn btn-default btn-sm breaking-news"
ng-model="stub.missingCommissionedLengthReason"
btn-radio="'BreakingNews'"
ng-click="
resetCommissionedLength();
sendTelemetryForSuggestion(0, 'BreakingNews');
setPriorityToVeryUrgent();
"
type="button"
>
Breaking News
</button>
</div>
<div>
<input
class="form-control"
name="commissionedLength"
min="0"
step="50"
type="number"
string-to-number
ng-model="stub.commissionedLength"
placeholder="Choose a custom commissioned length"
ng-change="resetMissingCommissionedLengthReason()"
ng-required="requiredAttrForCommissionedLength()"
/>
</div>
</section>
</div>
<div class="form-group pull-right col-xs-5">
<label for="stub_section">Section *</label>
<div>
<select class="section-margin" id="stub_section" name="section" ng-model="stub.section" ng-options="section.name for section in sections" required>
</select>
</div>
<div ng-if="contentName === 'Article'">
<label for="stub_template">Template</label>
<div ng-if="!loadingTemplates && templates.length === 0">
<p class="help-block">Cannot load templates. Try logging into Composer directly.</p>
</div>
<div>
<select id="stub_template" class="col-xs-12" name="template" ng-model="stub.template" ng-disabled="templates.length === 0" ng-options="template.display for template in templates">
</select>
</div>
</div>
</div>
<div wf-date-time-picker label="Production deadline" help-text="true" ng-model="stub.due"></div>
<div class="form-horizontal clearfix">
<div class="form-group col-xs-8">
<label for="stub_priority">Priority</label>
<div>
<div class="btn-group">
<button class="btn btn-default btn-sm" ng-model="stub.priority" ng-disabled="stub.missingCommissionedLengthReason === 'BreakingNews'" btn-radio="0">Normal</button>
<button class="btn btn-default btn-sm" ng-model="stub.priority" ng-disabled="stub.missingCommissionedLengthReason === 'BreakingNews'" btn-radio="1"><i class="stubModal__icon" wf-icon="priority-urgent"></i> Urgent</button>
<button class="btn btn-default btn-sm" ng-model="stub.priority" btn-radio="2"><i class="stubModal__icon" wf-icon="priority-very-urgent"></i> Very Urgent</button>
</div>
</div>
</div>
<div class="form-group col-xs-5 pull-right">
<label for="stub_legal">Legal</label>
<div>
<select id="stub_legal" name="needsLegal" ng-model="stub.needsLegal" ng-options="ls.value as ls.name for ls in legalStates"></select>
</div>
</div>
<div class="form-group col-xs-5 pull-right">
<label for="stub_picture_desk">Picture Desk</label>
<div>
<select id="stub_picture_desk" name="needsPictureDesk" ng-model="stub.needsPictureDesk" ng-options="pds.value as pds.name for pds in pictureDeskStates"></select>
</div>
</div>
</div>
<div class="form-horizontal clearfix">
<div class="form-group col-xs-8">
<label for="stub_note">Note</label>
<input type="text" ng-model="stub.note" id="stub_note" name="note" value="" class="form-control" maxlength="500">
</div>
<div class="form-group col-xs-5 pull-right">
<label>Production Office</label>
<div>
<select ng-model="stub.prodOffice"
ng-options="office.value as office.name for office in prodOffices">
</select>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer" ng-if="mode !== 'import'" ng-hide="actionInProgress || (actionSuccess && composerUrl)">
<button type="submit" class="btn btn-default" id="testing-do-generic-submit" ng-click="submit(stubForm)" ng-show="false">
Submit
</button>
<div class="pull-left">
<button type="button" class="btn btn-default pull-left" data-dismiss="modal" ng-click="delete()" ng-if="stub.id">Delete</button>
<button type="button" class="btn btn-default" data-dismiss="modal" ng-click="cancel()">Cancel</button>
</div>
<div class="pull-right">
<span ng-if="warningMessages">
<span ng-repeat="message in warningMessages">{{ message }} </span>
</span>
<button type="button" class="btn btn-default" id="testing-create-stub" ng-click="submit(stubForm)" ng-disabled="disabled || stubForm.$invalid " ng-show="stub.status === 'Stub'">
Save stub
</button>
<button
type="button"
class="btn btn-primary"
ng-disabled="disabled || stubForm.$invalid || warningMessages.length > 0"
ng-class="{ 'disabled': disabled || stubForm.$invalid || warningMessages.length > 0 }"
id="testing-create-in-composer"
ng-click="submit(stubForm)"
ng-show="stub.status !== 'Stub' && contentName !== 'Atom'">
Create new
</button>
<button type="button" class="btn btn-primary" id="testing-create-atom" ng-click="submit(stubForm)" ng-disabled="disabled || stubForm.$invalid " ng-show="contentName === 'Atom' && stub.status !== 'Stub'">
Create atom
</button>
</div>
</div>
<div class="modal-footer" ng-if="mode === 'import'" ng-hide="actionInProgress">
<button type="button" class="btn btn-default pull-left" data-dismiss="modal" ng-click="cancel()">Cancel</button>
<button
type="submit"
class="btn btn-primary"
id="testing-import-from-composer"
ng-click="
ok();
updateCommissionedLengthInComposer();
sendTelemetryForImport(contentName);
"
ng-disabled="stubForm.$invalid || !validImport">
Import <span ng-show="importHandler">from {{importHandler.name}}</span>
</button>
</div>
<div class="modal-footer" ng-show="actionInProgress">
Loading ...
</div>
</fieldset>
</form>
<div class="modal-footer" ng-show="actionSuccess && composerUrl">
<button type="button" class="btn btn-default pull-left" ng-click="cancel()">Dismiss</button>
<a ng-href="{{composerUrl}}" class="btn btn-primary pull-right" target="_blank" ng-click="cancel()" id="testing-view-in-composer">View in Composer</a>
</div>
<div class="modal-footer" ng-show="actionSuccess && editorUrl">
<button type="button" class="btn btn-default pull-left" ng-click="cancel()">Dismiss</button>
<a ng-href="{{editorUrl}}" class="btn btn-primary pull-right" target="_blank" ng-click="cancel()" id="testing-view-in-atom-editor">View in Editor</a>
</div>
<div class="modal-footer__alert">
<div class="modal-footer alert alert-info" ng-show="wfComposerState ==='visible'">
<p>This content is already tracked. <a href="#stub-{{stubId}}" ng-click="cancel()">View in Workflow.</a></p>
</div>
<div class="modal-footer alert alert-info" ng-show="wfComposerState ==='invisible'">
<p>This content is already tracked and not visible in Workflow.
<a href="{{composerUrl || editorUrl}}" target="_blank" ng-click="cancel()">View in editor.</a>
</p>
</div>
<div class="modal-footer alert alert-danger" ng-show="actionSuccess === false">
<p ng-show="contentName !== 'Atom'">Workflow's having difficulty communicating with Composer. Please try again. If the problem persists, please <a href="mailto:central.production@guardian.co.uk ">contact Central Production</a>.</p>
<p ng-show="contentName === 'Atom'">Workflow's having difficulty communicating with the editor for this atom type. Please try again. If the problem persists, please <a href="mailto:central.production@guardian.co.uk ">contact Central Production</a>.</p>
<p>
<a ng-show="composerUrl" href="{{composerUrl}}" target="_blank" ng-click="cancel()">View in Composer.</a>
<a ng-show="editorUrl" href="{{editorUrl}}" target="_blank" ng-click="cancel()">View in Editor.</a>
<a ng-show="stubId" href="#stub-{{stubId}}" ng-click="cancel()">View in Workflow.</a>
</p>
</div>
<div id="testing-modal-success-message" class="modal-footer alert alert-success" ng-show="actionSuccess">
<p>Completed successfully!</p>
</div>
</div>