mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update recordings
This commit is contained in:
parent
28271a0867
commit
bc693bbdc6
36 changed files with 243 additions and 256 deletions
|
@ -29,14 +29,14 @@
|
|||
"web-component-tester": "*",
|
||||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
||||
},
|
||||
"homepage": "https://github.com/polymerelements/iron-a11y-keys-behavior",
|
||||
"homepage": "https://github.com/PolymerElements/iron-a11y-keys-behavior",
|
||||
"_release": "1.0.5",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.5",
|
||||
"commit": "cf833eab5c55a26c5aa92e56d3fcb079120ce66a"
|
||||
},
|
||||
"_source": "git://github.com/polymerelements/iron-a11y-keys-behavior.git",
|
||||
"_source": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "polymerelements/iron-a11y-keys-behavior"
|
||||
"_originalSource": "PolymerElements/iron-a11y-keys-behavior"
|
||||
}
|
|
@ -42,7 +42,7 @@
|
|||
"tag": "v1.0.3",
|
||||
"commit": "90b54de14264c19693601b9fc16af6b68a9d48e4"
|
||||
},
|
||||
"_source": "git://github.com/PolymerElements/paper-behaviors.git",
|
||||
"_source": "git://github.com/polymerelements/paper-behaviors.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "PolymerElements/paper-behaviors"
|
||||
"_originalSource": "polymerelements/paper-behaviors"
|
||||
}
|
|
@ -34,7 +34,7 @@
|
|||
"tag": "v1.0.11",
|
||||
"commit": "347542e9ebe3e6e5f0830ee10e1c20c12956ff2c"
|
||||
},
|
||||
"_source": "git://github.com/polymerelements/paper-styles.git",
|
||||
"_source": "git://github.com/PolymerElements/paper-styles.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "polymerelements/paper-styles"
|
||||
"_originalSource": "PolymerElements/paper-styles"
|
||||
}
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -121,7 +121,6 @@
|
|||
height: 12px;
|
||||
border-radius: 50%;
|
||||
background: #cc0000;
|
||||
vertical-align: top;
|
||||
border: 1px solid #cc3333;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -88,31 +88,6 @@
|
|||
</div>
|
||||
</div>
|
||||
<div id="items" class="itemsContainer" style="max-width:800px;margin: 0 auto;"></div>
|
||||
<div data-role="panel" class="viewPanel" data-theme="a" data-position="right" data-display="overlay" data-position-fixed="true">
|
||||
<form>
|
||||
<div data-role="controlgroup" data-type="horizontal" data-mini="true" class="viewPanelTabs">
|
||||
<a href="#" data-role="button" class="viewTabButton" data-tab="tabView">${TabView}</a>
|
||||
<a href="#" data-role="button" class="viewTabButton" data-tab="tabFilter">${TabFilter}</a>
|
||||
</div>
|
||||
<div class="tabView viewTab">
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tabFilter viewTab">
|
||||
<fieldset data-role="controlgroup">
|
||||
<legend>${HeaderFilters}</legend>
|
||||
<input class="chkStandardFilter" type="checkbox" id="chkFavorite" data-filter="IsFavorite" data-mini="true">
|
||||
<label for="chkFavorite">${OptionFavorite}</label>
|
||||
<input class="chkStandardFilter" type="checkbox" id="chkLikes" data-filter="Likes" data-mini="true">
|
||||
<label for="chkLikes">${OptionLikes}</label>
|
||||
<input class="chkStandardFilter" type="checkbox" id="chkDislikes" data-filter="Dislikes" data-mini="true">
|
||||
<label for="chkDislikes">${OptionDislikes}</label>
|
||||
</fieldset>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</neon-animatable>
|
||||
<neon-animatable>
|
||||
|
@ -151,6 +126,31 @@
|
|||
</neon-animated-pages>
|
||||
</div>
|
||||
|
||||
<div data-role="panel" class="viewPanel channelViewPanel" data-theme="a" data-position="right" data-display="overlay" data-position-fixed="true">
|
||||
<form>
|
||||
<div data-role="controlgroup" data-type="horizontal" data-mini="true" class="viewPanelTabs">
|
||||
<a href="#" data-role="button" class="viewTabButton" data-tab="tabView">${TabView}</a>
|
||||
<a href="#" data-role="button" class="viewTabButton" data-tab="tabFilter">${TabFilter}</a>
|
||||
</div>
|
||||
<div class="tabView viewTab">
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tabFilter viewTab">
|
||||
<fieldset data-role="controlgroup">
|
||||
<legend>${HeaderFilters}</legend>
|
||||
<input class="chkStandardFilter" type="checkbox" id="chkFavorite" data-filter="IsFavorite" data-mini="true">
|
||||
<label for="chkFavorite">${OptionFavorite}</label>
|
||||
<input class="chkStandardFilter" type="checkbox" id="chkLikes" data-filter="Likes" data-mini="true">
|
||||
<label for="chkLikes">${OptionLikes}</label>
|
||||
<input class="chkStandardFilter" type="checkbox" id="chkDislikes" data-filter="Dislikes" data-mini="true">
|
||||
<label for="chkDislikes">${OptionDislikes}</label>
|
||||
</fieldset>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div data-role="content">
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<title>Emby</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="liveTvNewRecordingPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvnewrecording,livetvcss" data-backbutton="true" data-menubutton="false">
|
||||
<div id="liveTvNewRecordingPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvnewrecording,livetvcss,jqmicons" data-backbutton="true" data-menubutton="false">
|
||||
|
||||
<div data-role="content">
|
||||
<form class="liveTvNewRecordingForm" style="margin: 0 auto;">
|
||||
|
@ -20,93 +20,65 @@
|
|||
<br />
|
||||
|
||||
<div style="display: none;" id="eligibleForSeriesFields">
|
||||
<p>
|
||||
<input type="checkbox" id="chkRecordSeries" />
|
||||
<label for="chkRecordSeries">${OptionRecordSeries}</label>
|
||||
</p>
|
||||
<div>
|
||||
<paper-checkbox id="chkRecordSeries">${OptionRecordSeries}</paper-checkbox>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<ul data-role="listview" class="ulForm" id="seriesFields" style="display: none;">
|
||||
<li>
|
||||
<h3>${HeaderDays}</h3>
|
||||
<div data-role="controlgroup">
|
||||
|
||||
<input type="checkbox" id="chkSunday" />
|
||||
<label for="chkSunday">${OptionSunday}</label>
|
||||
|
||||
<input type="checkbox" id="chkMonday" />
|
||||
<label for="chkMonday">${OptionMonday}</label>
|
||||
|
||||
<input type="checkbox" id="chkTuesday" />
|
||||
<label for="chkTuesday">${OptionTuesday}</label>
|
||||
|
||||
<input type="checkbox" id="chkWednesday" />
|
||||
<label for="chkWednesday">${OptionWednesday}</label>
|
||||
|
||||
<input type="checkbox" id="chkThursday" />
|
||||
<label for="chkThursday">${OptionThursday}</label>
|
||||
|
||||
<input type="checkbox" id="chkFriday" />
|
||||
<label for="chkFriday">${OptionFriday}</label>
|
||||
|
||||
<input type="checkbox" id="chkSaturday" />
|
||||
<label for="chkSaturday">${OptionSaturday}</label>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h3>${HeaderRepeatingOptions}</h3>
|
||||
<div data-role="controlgroup">
|
||||
|
||||
<label for="chkNewOnly">${OptionRecordOnlyNewEpisodes}</label>
|
||||
<input type="checkbox" id="chkNewOnly" />
|
||||
<label for="chkAnyTime">${OptionRecordAnytime}</label>
|
||||
<input type="checkbox" id="chkAnyTime" />
|
||||
<label for="chkAllChannels">${OptionRecordOnAllChannels}</label>
|
||||
<input type="checkbox" id="chkAllChannels" />
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="seriesFields" style="display: none;">
|
||||
<div>
|
||||
<h1>${HeaderDays}</h1>
|
||||
</div>
|
||||
<div class="paperCheckboxList">
|
||||
<paper-checkbox id="chkSunday">${OptionSunday}</paper-checkbox>
|
||||
<paper-checkbox id="chkMonday">${OptionMonday}</paper-checkbox>
|
||||
<paper-checkbox id="chkTuesday">${OptionTuesday}</paper-checkbox>
|
||||
<paper-checkbox id="chkWednesday">${OptionWednesday}</paper-checkbox>
|
||||
<paper-checkbox id="chkThursday">${OptionThursday}</paper-checkbox>
|
||||
<paper-checkbox id="chkFriday">${OptionFriday}</paper-checkbox>
|
||||
<paper-checkbox id="chkSaturday">${OptionSaturday}</paper-checkbox>
|
||||
</div>
|
||||
<div>
|
||||
<h1>${HeaderRepeatingOptions}</h1>
|
||||
</div>
|
||||
<div class="paperCheckboxList">
|
||||
<paper-checkbox id="chkNewOnly">${OptionRecordOnlyNewEpisodes}</paper-checkbox>
|
||||
<paper-checkbox id="chkAnyTime">${OptionRecordAnytime}</paper-checkbox>
|
||||
<paper-checkbox id="chkAllChannels">${OptionRecordOnAllChannels}</paper-checkbox>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<div data-role="collapsible" data-mini="true">
|
||||
<h3>${HeaderPrePostPadding}</h3>
|
||||
<h3>${HeaderAdvanced}</h3>
|
||||
<div>
|
||||
<br />
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtPrePaddingMinutes">${LabelPrePaddingMinutes}</label>
|
||||
<input type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" />
|
||||
<paper-input type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPrePaddingMinutes}"></paper-input>
|
||||
</li>
|
||||
<li>
|
||||
<input type="checkbox" data-mini="true" id="chkPrePaddingRequired" />
|
||||
<label for="chkPrePaddingRequired">${OptionPrePaddingRequired}</label>
|
||||
<paper-checkbox id="chkPrePaddingRequired">${OptionPrePaddingRequired}</paper-checkbox>
|
||||
</li>
|
||||
<li>
|
||||
<div style="height: .5em;"></div>
|
||||
<paper-input type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPostPaddingMinutes}"></paper-input>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtPostPaddingMinutes">${LabelPostPaddingMinutes}</label>
|
||||
<input type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" />
|
||||
</li>
|
||||
<li>
|
||||
<input type="checkbox" data-mini="true" id="chkPostPaddingRequired" />
|
||||
<label for="chkPostPaddingRequired">${OptionPostPaddingRequired}</label>
|
||||
<paper-checkbox id="chkPostPaddingRequired">${OptionPostPaddingRequired}</paper-checkbox>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<button type="submit" data-theme="a" data-icon="check">
|
||||
${ButtonRecord}
|
||||
</button>
|
||||
<button id="btnCancel" type="button" data-icon="delete">
|
||||
${ButtonCancel}
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div>
|
||||
<button type="submit" data-role="none" class="clearButton">
|
||||
<paper-button raised class="submit block" style="background:#cc3333;"><iron-icon icon="check"></iron-icon><span>${ButtonRecord}</span></paper-button>
|
||||
</button>
|
||||
|
||||
<paper-button raised class="cancel block btnCancel" onclick="history.back();"><iron-icon icon="close"></iron-icon><span>${ButtonCancel}</span></paper-button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
<title>Emby</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="liveTvSeriesTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvseriestimer,livetvcss" data-backbutton="true" data-menubutton="false">
|
||||
|
||||
<div id="liveTvSeriesTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvseriestimer,livetvcss,jqmicons" data-backbutton="true" data-menubutton="false">
|
||||
|
||||
<div data-role="content">
|
||||
<form class="liveTvSeriesTimerForm" style="margin: 0 auto; max-width: 720px;">
|
||||
<p><span class="itemName inlineItemName"></span></p>
|
||||
|
@ -23,83 +23,55 @@
|
|||
<label for="radioScheduled">${TabScheduled}</label>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<div class="settingsTab tab">
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<h3>${HeaderDays}</h3>
|
||||
<div data-role="controlgroup">
|
||||
|
||||
<input type="checkbox" id="chkSunday" />
|
||||
<label for="chkSunday">${OptionSunday}</label>
|
||||
|
||||
<input type="checkbox" id="chkMonday" />
|
||||
<label for="chkMonday">${OptionMonday}</label>
|
||||
|
||||
<input type="checkbox" id="chkTuesday" />
|
||||
<label for="chkTuesday">${OptionTuesday}</label>
|
||||
|
||||
<input type="checkbox" id="chkWednesday" />
|
||||
<label for="chkWednesday">${OptionWednesday}</label>
|
||||
|
||||
<input type="checkbox" id="chkThursday" />
|
||||
<label for="chkThursday">${OptionThursday}</label>
|
||||
|
||||
<input type="checkbox" id="chkFriday" />
|
||||
<label for="chkFriday">${OptionFriday}</label>
|
||||
|
||||
<input type="checkbox" id="chkSaturday" />
|
||||
<label for="chkSaturday">${OptionSaturday}</label>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h3>${HeaderRepeatingOptions}</h3>
|
||||
<div data-role="controlgroup">
|
||||
|
||||
<label for="chkNewOnly">${OptionRecordOnlyNewEpisodes}</label>
|
||||
<input type="checkbox" id="chkNewOnly" />
|
||||
<label for="chkAnyTime">${OptionRecordAnytime}</label>
|
||||
<input type="checkbox" id="chkAnyTime" />
|
||||
<label for="chkAllChannels">${OptionRecordOnAllChannels}</label>
|
||||
<input type="checkbox" id="chkAllChannels" />
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div>
|
||||
<h1>${HeaderDays}</h1>
|
||||
</div>
|
||||
<div class="paperCheckboxList">
|
||||
<paper-checkbox id="chkSunday">${OptionSunday}</paper-checkbox>
|
||||
<paper-checkbox id="chkMonday">${OptionMonday}</paper-checkbox>
|
||||
<paper-checkbox id="chkTuesday">${OptionTuesday}</paper-checkbox>
|
||||
<paper-checkbox id="chkWednesday">${OptionWednesday}</paper-checkbox>
|
||||
<paper-checkbox id="chkThursday">${OptionThursday}</paper-checkbox>
|
||||
<paper-checkbox id="chkFriday">${OptionFriday}</paper-checkbox>
|
||||
<paper-checkbox id="chkSaturday">${OptionSaturday}</paper-checkbox>
|
||||
</div>
|
||||
<div>
|
||||
<h1>${HeaderRepeatingOptions}</h1>
|
||||
</div>
|
||||
<div class="paperCheckboxList">
|
||||
<paper-checkbox id="chkNewOnly">${OptionRecordOnlyNewEpisodes}</paper-checkbox>
|
||||
<paper-checkbox id="chkAnyTime">${OptionRecordAnytime}</paper-checkbox>
|
||||
<paper-checkbox id="chkAllChannels">${OptionRecordOnAllChannels}</paper-checkbox>
|
||||
</div>
|
||||
<br/>
|
||||
<div data-role="collapsible" data-mini="true">
|
||||
<h3>${HeaderPrePostPadding}</h3>
|
||||
<h3>${HeaderAdvanced}</h3>
|
||||
<div>
|
||||
<br />
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtPrePaddingMinutes">${LabelPrePaddingMinutes}</label>
|
||||
<input type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" />
|
||||
<paper-input type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPrePaddingMinutes}"></paper-input>
|
||||
</li>
|
||||
<li>
|
||||
<input type="checkbox" data-mini="true" id="chkPrePaddingRequired" />
|
||||
<label for="chkPrePaddingRequired">${OptionPrePaddingRequired}</label>
|
||||
<paper-checkbox id="chkPrePaddingRequired">${OptionPrePaddingRequired}</paper-checkbox>
|
||||
</li>
|
||||
<li>
|
||||
<div style="height: .5em;"></div>
|
||||
<paper-input type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPostPaddingMinutes}"></paper-input>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtPostPaddingMinutes">${LabelPostPaddingMinutes}</label>
|
||||
<input type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" />
|
||||
</li>
|
||||
<li>
|
||||
<input type="checkbox" data-mini="true" id="chkPostPaddingRequired" />
|
||||
<label for="chkPostPaddingRequired">${OptionPostPaddingRequired}</label>
|
||||
<paper-checkbox id="chkPostPaddingRequired">${OptionPostPaddingRequired}</paper-checkbox>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div>
|
||||
<button type="submit" data-theme="a" data-icon="check">
|
||||
${ButtonSave}
|
||||
</button>
|
||||
<button type="button" onclick="history.back();" data-icon="delete">
|
||||
${ButtonCancel}
|
||||
<button type="submit" data-role="none" class="clearButton">
|
||||
<paper-button raised class="submit block"><iron-icon icon="check"></iron-icon><span>${ButtonSave}</span></paper-button>
|
||||
</button>
|
||||
|
||||
<paper-button raised class="cancel block btnCancel" onclick="history.back();"><iron-icon icon="close"></iron-icon><span>${ButtonCancel}</span></paper-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="recordingsTab tab"></div>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<title>Emby</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="liveTvTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvtimer,livetvcss" data-backbutton="true" data-menubutton="false">
|
||||
<div id="liveTvTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvtimer,livetvcss,jqmicons" data-backbutton="true" data-menubutton="false">
|
||||
|
||||
<div data-role="content">
|
||||
|
||||
|
@ -24,57 +24,44 @@
|
|||
</div>
|
||||
<p class="itemOverview smoothScrollY"></p>
|
||||
|
||||
<p style="margin-top: 2em;">
|
||||
<span class="timerStatus"></span>
|
||||
<p style="margin-top: 2em;" class="timerStatus">
|
||||
</p>
|
||||
|
||||
<div style="margin-top: 2em;">
|
||||
<paper-button class="subdued" raised id="btnCancelTimer"><iron-icon icon="delete"></iron-icon><span>${ButtonCancelRecording}</span></paper-button>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<form class="liveTvTimerForm" style="margin: 0 auto;">
|
||||
|
||||
<h1>${HeaderRecordingOptions}</h1>
|
||||
<div data-role="collapsible" data-mini="true">
|
||||
<h3>${HeaderPrePostPadding}</h3>
|
||||
<h3>${HeaderAdvanced}</h3>
|
||||
<div>
|
||||
<br />
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtPrePaddingMinutes">${LabelPrePaddingMinutes}</label>
|
||||
<input type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" />
|
||||
<paper-input type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPrePaddingMinutes}"></paper-input>
|
||||
</li>
|
||||
<li>
|
||||
<input type="checkbox" data-mini="true" id="chkPrePaddingRequired" />
|
||||
<label for="chkPrePaddingRequired">${OptionPrePaddingRequired}</label>
|
||||
<paper-checkbox id="chkPrePaddingRequired">${OptionPrePaddingRequired}</paper-checkbox>
|
||||
</li>
|
||||
<li>
|
||||
<div style="height: .5em;"></div>
|
||||
<paper-input type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPostPaddingMinutes}"></paper-input>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtPostPaddingMinutes">${LabelPostPaddingMinutes}</label>
|
||||
<input type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" />
|
||||
</li>
|
||||
<li>
|
||||
<input type="checkbox" data-mini="true" id="chkPostPaddingRequired" />
|
||||
<label for="chkPostPaddingRequired">${OptionPostPaddingRequired}</label>
|
||||
<paper-checkbox id="chkPostPaddingRequired">${OptionPostPaddingRequired}</paper-checkbox>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<div>
|
||||
<button type="submit" data-role="none" class="clearButton">
|
||||
<paper-button raised class="submit block"><iron-icon icon="check"></iron-icon><span>${ButtonSave}</span></paper-button>
|
||||
</button>
|
||||
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<button type="submit" data-theme="a" data-icon="check" data-mini="true">
|
||||
${ButtonSave}
|
||||
</button>
|
||||
<button type="button" onclick="Dashboard.navigate('livetvtimers.html');" data-icon="delete" data-mini="true">
|
||||
${ButtonCancel}
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
<p style="border-top: 1px solid #444; padding-top: .5em; margin-top: 3em;">
|
||||
<button id="btnCancelTimer" type="button" data-mini="true" data-icon="delete">${ButtonCancelRecording}</button>
|
||||
</p>
|
||||
<paper-button raised class="cancel block btnCancel" onclick="history.back();"><iron-icon icon="close"></iron-icon><span>${ButtonCancel}</span></paper-button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
|
||||
<div id="selectPageSizeBox" style="display: none;">
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize">
|
||||
<select id="selectPageSize" class="selectPageSize">
|
||||
<option value="20">20</option>
|
||||
<option value="50">50</option>
|
||||
<option value="100">100</option>
|
||||
|
|
|
@ -55,7 +55,7 @@ $.fn.checked = function (value) {
|
|||
});
|
||||
} else {
|
||||
// Return check state
|
||||
return $(this).is(':checked');
|
||||
return this.length && this[0].checked;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1192,6 +1192,10 @@
|
|||
atts.push('data-albumid="' + item.AlbumId + '"');
|
||||
}
|
||||
|
||||
if (item.ChannelId) {
|
||||
atts.push('data-channelid="' + item.ChannelId + '"');
|
||||
}
|
||||
|
||||
if (item.ArtistItems && item.ArtistItems.length) {
|
||||
atts.push('data-artistid="' + item.ArtistItems[0].Id + '"');
|
||||
}
|
||||
|
@ -3114,6 +3118,17 @@
|
|||
miscInfo.push(item.Width + "x" + item.Height);
|
||||
}
|
||||
|
||||
if (item.SeriesTimerId) {
|
||||
var html = '';
|
||||
html += '<a href="livetvseriestimer.html?id=' + item.SeriesTimerId + '" title="' + Globalize.translate('ButtonViewSeriesRecording') + '">';
|
||||
html += '<div class="timerCircle seriesTimerCircle"></div>';
|
||||
html += '<div class="timerCircle seriesTimerCircle"></div>';
|
||||
html += '<div class="timerCircle seriesTimerCircle"></div>';
|
||||
html += '</a>';
|
||||
miscInfo.push(html);
|
||||
require(['livetvcss']);
|
||||
}
|
||||
|
||||
return miscInfo.join(' ');
|
||||
},
|
||||
|
||||
|
|
|
@ -498,6 +498,10 @@
|
|||
isFolder = true;
|
||||
}
|
||||
|
||||
if (type == 'Program') {
|
||||
id = card.getAttribute('data-channelid');
|
||||
}
|
||||
|
||||
LibraryBrowser.showPlayMenu(playButton, id, type, isFolder, mediaType, resumePosition);
|
||||
|
||||
e.preventDefault();
|
||||
|
|
|
@ -23,17 +23,19 @@
|
|||
Dashboard.hideLoadingMsg();
|
||||
}
|
||||
|
||||
function renderChannels(page, result) {
|
||||
function renderChannels(page, viewPanel, result) {
|
||||
|
||||
$('.listTopPaging', page).html(LibraryBrowser.getQueryPagingHtml({
|
||||
startIndex: query.StartIndex,
|
||||
limit: query.Limit,
|
||||
totalRecordCount: result.TotalRecordCount,
|
||||
viewButton: true,
|
||||
showLimit: false
|
||||
showLimit: false,
|
||||
viewPanelClass: 'channelViewPanel'
|
||||
|
||||
})).trigger('create');
|
||||
|
||||
updateFilterControls(this);
|
||||
updateFilterControls(viewPanel);
|
||||
|
||||
var html = getChannelsHtml(result.Items);
|
||||
|
||||
|
@ -44,24 +46,24 @@
|
|||
|
||||
$('.btnNextPage', page).on('click', function () {
|
||||
query.StartIndex += query.Limit;
|
||||
reloadItems(page);
|
||||
reloadItems(page, viewPanel);
|
||||
});
|
||||
|
||||
$('.btnPreviousPage', page).on('click', function () {
|
||||
query.StartIndex -= query.Limit;
|
||||
reloadItems(page);
|
||||
reloadItems(page, viewPanel);
|
||||
});
|
||||
|
||||
LibraryBrowser.saveQueryValues('movies', query);
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
function reloadItems(page, viewPanel) {
|
||||
|
||||
showLoadingMessage(page);
|
||||
|
||||
ApiClient.getLiveTvChannels(query).done(function (result) {
|
||||
|
||||
renderChannels(page, result);
|
||||
renderChannels(page, viewPanel, result);
|
||||
|
||||
hideLoadingMessage(page);
|
||||
|
||||
|
@ -80,36 +82,37 @@
|
|||
$(document).on('pageinitdepends', "#liveTvSuggestedPage", function () {
|
||||
|
||||
var page = this.querySelector('.channelsTabContent');
|
||||
var viewPanel = this.querySelector('.channelViewPanel');
|
||||
|
||||
$('#chkFavorite', page).on('change', function () {
|
||||
$('#chkFavorite', viewPanel).on('change', function () {
|
||||
|
||||
query.StartIndex = 0;
|
||||
query.IsFavorite = this.checked ? true : null;
|
||||
|
||||
reloadItems(page);
|
||||
reloadItems(page, viewPanel);
|
||||
});
|
||||
|
||||
|
||||
$('#chkLikes', page).on('change', function () {
|
||||
$('#chkLikes', viewPanel).on('change', function () {
|
||||
|
||||
query.StartIndex = 0;
|
||||
query.IsLiked = this.checked ? true : null;
|
||||
|
||||
reloadItems(page);
|
||||
reloadItems(page, viewPanel);
|
||||
});
|
||||
|
||||
$('#chkDislikes', page).on('change', function () {
|
||||
$('#chkDislikes', viewPanel).on('change', function () {
|
||||
|
||||
query.StartIndex = 0;
|
||||
query.IsDisliked = this.checked ? true : null;
|
||||
|
||||
reloadItems(page);
|
||||
reloadItems(page, viewPanel);
|
||||
});
|
||||
|
||||
$('#selectPageSize', page).on('change', function () {
|
||||
$('#selectPageSize', viewPanel).on('change', function () {
|
||||
query.Limit = parseInt(this.value);
|
||||
query.StartIndex = 0;
|
||||
reloadItems(page);
|
||||
reloadItems(page, viewPanel);
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -122,13 +125,14 @@
|
|||
|
||||
if (parseInt(this.selected) == 2) {
|
||||
var tabContent = page.querySelector('.channelsTabContent');
|
||||
var viewPanel = page.querySelector('.channelViewPanel');
|
||||
|
||||
if (LibraryBrowser.needsRefresh(tabContent)) {
|
||||
query.UserId = Dashboard.getCurrentUserId();
|
||||
LibraryBrowser.loadSavedQueryValues('movies', query);
|
||||
query.Limit = query.Limit || LibraryBrowser.getDefaultPageSize();
|
||||
reloadItems(tabContent);
|
||||
updateFilterControls(this);
|
||||
reloadItems(tabContent, viewPanel);
|
||||
updateFilterControls(viewPanel);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -21,14 +21,14 @@
|
|||
|
||||
LiveTvHelpers.renderMiscProgramInfo($('.miscTvProgramInfo', page), program);
|
||||
|
||||
$('#chkNewOnly', page).checked(defaultTimer.RecordNewOnly).checkboxradio('refresh');
|
||||
$('#chkAllChannels', page).checked(defaultTimer.RecordAnyChannel).checkboxradio('refresh');
|
||||
$('#chkAnyTime', page).checked(defaultTimer.RecordAnyTime).checkboxradio('refresh');
|
||||
$('#chkNewOnly', page).checked(defaultTimer.RecordNewOnly);
|
||||
$('#chkAllChannels', page).checked(defaultTimer.RecordAnyChannel);
|
||||
$('#chkAnyTime', page).checked(defaultTimer.RecordAnyTime);
|
||||
|
||||
$('#txtPrePaddingMinutes', page).val(defaultTimer.PrePaddingSeconds / 60);
|
||||
$('#txtPostPaddingMinutes', page).val(defaultTimer.PostPaddingSeconds / 60);
|
||||
$('#chkPrePaddingRequired', page).checked(defaultTimer.IsPrePaddingRequired).checkboxradio('refresh');
|
||||
$('#chkPostPaddingRequired', page).checked(defaultTimer.IsPostPaddingRequired).checkboxradio('refresh');
|
||||
$('#chkPrePaddingRequired', page).checked(defaultTimer.IsPrePaddingRequired);
|
||||
$('#chkPostPaddingRequired', page).checked(defaultTimer.IsPostPaddingRequired);
|
||||
|
||||
if (program.IsSeries) {
|
||||
$('#eligibleForSeriesFields', page).show();
|
||||
|
@ -67,7 +67,7 @@
|
|||
|
||||
var day = daysOfWeek[i];
|
||||
|
||||
$('#chk' + day, page).checked(days.indexOf(day) != -1).checkboxradio('refresh');
|
||||
$('#chk' + day, page).checked(days.indexOf(day) != -1);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -29,12 +29,12 @@
|
|||
|
||||
$('#txtPrePaddingMinutes', page).val(item.PrePaddingSeconds / 60);
|
||||
$('#txtPostPaddingMinutes', page).val(item.PostPaddingSeconds / 60);
|
||||
$('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired).checkboxradio('refresh');
|
||||
$('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired).checkboxradio('refresh');
|
||||
$('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired);
|
||||
$('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired);
|
||||
|
||||
$('#chkNewOnly', page).checked(item.RecordNewOnly).checkboxradio('refresh');
|
||||
$('#chkAllChannels', page).checked(item.RecordAnyChannel).checkboxradio('refresh');
|
||||
$('#chkAnyTime', page).checked(item.RecordAnyTime).checkboxradio('refresh');
|
||||
$('#chkNewOnly', page).checked(item.RecordNewOnly);
|
||||
$('#chkAllChannels', page).checked(item.RecordAnyChannel);
|
||||
$('#chkAnyTime', page).checked(item.RecordAnyTime);
|
||||
|
||||
var channelHtml = '';
|
||||
if (item.RecordAnyChannel) {
|
||||
|
@ -75,7 +75,7 @@
|
|||
|
||||
var day = daysOfWeek[i];
|
||||
|
||||
$('#chk' + day, page).checked(days.indexOf(day) != -1).checkboxradio('refresh');
|
||||
$('#chk' + day, page).checked(days.indexOf(day) != -1);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -29,19 +29,26 @@
|
|||
|
||||
var html = '';
|
||||
|
||||
html += '<ul data-role="listview" data-inset="true" data-split-icon="delete">';
|
||||
if (timers.length) {
|
||||
html += '<div class="paperList">';
|
||||
}
|
||||
|
||||
for (var i = 0, length = timers.length; i < length; i++) {
|
||||
|
||||
var timer = timers[i];
|
||||
|
||||
html += '<li><a href="livetvseriestimer.html?id=' + timer.Id + '">';
|
||||
html += '<paper-icon-item>';
|
||||
|
||||
html += '<h3>';
|
||||
html += '<paper-fab class="listAvatar" icon="live-tv" item-icon></paper-fab>';
|
||||
|
||||
html += '<paper-item-body two-line>';
|
||||
html += '<a class="clearLink" href="livetvseriestimer.html?id=' + timer.Id + '">';
|
||||
|
||||
html += '<div>';
|
||||
html += timer.Name;
|
||||
html += '</h3>';
|
||||
html += '</div>';
|
||||
|
||||
html += '<p>';
|
||||
html += '<div secondary>';
|
||||
if (timer.DayPattern) {
|
||||
html += timer.DayPattern;
|
||||
}
|
||||
|
@ -57,24 +64,28 @@
|
|||
} else {
|
||||
html += ' - ' + LibraryBrowser.getDisplayTime(timer.StartDate);
|
||||
}
|
||||
html += '</p>';
|
||||
html += '</div>';
|
||||
|
||||
html += '<p>';
|
||||
html += '<div secondary>';
|
||||
if (timer.RecordAnyChannel) {
|
||||
html += Globalize.translate('LabelAllChannels');
|
||||
}
|
||||
else if (timer.ChannelId) {
|
||||
html += timer.ChannelName;
|
||||
}
|
||||
html += '</p>';
|
||||
html += '</div>';
|
||||
html += '</a>';
|
||||
|
||||
html += '<a data-seriestimerid="' + timer.Id + '" href="#" title="' + Globalize.translate('ButtonCancelSeries') + '" class="btnCancelSeries">' + Globalize.translate('ButtonCancelSeries') + '</a>';
|
||||
html += '</paper-item-body>';
|
||||
|
||||
html += '</li>';
|
||||
html += '<paper-icon-button icon="delete" data-seriestimerid="' + timer.Id + '" title="' + Globalize.translate('ButtonCancelSeries') + '" class="btnCancelSeries"></paper-icon-button>';
|
||||
|
||||
html += '</paper-icon-item>';
|
||||
}
|
||||
|
||||
html += '</ul>';
|
||||
if (timers.length) {
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
var elem = $('#items', page).html(html).trigger('create');
|
||||
|
||||
|
|
|
@ -59,10 +59,14 @@
|
|||
|
||||
$('#txtPrePaddingMinutes', page).val(item.PrePaddingSeconds / 60);
|
||||
$('#txtPostPaddingMinutes', page).val(item.PostPaddingSeconds / 60);
|
||||
$('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired).checkboxradio('refresh');
|
||||
$('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired).checkboxradio('refresh');
|
||||
$('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired);
|
||||
$('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired);
|
||||
|
||||
$('.timerStatus', page).html('Status: ' + item.Status);
|
||||
if (item.Status == 'New') {
|
||||
$('.timerStatus', page).hide();
|
||||
} else {
|
||||
$('.timerStatus', page).show().html('Status: ' + item.Status);
|
||||
}
|
||||
|
||||
Dashboard.hideLoadingMsg();
|
||||
}
|
||||
|
@ -81,6 +85,7 @@
|
|||
item.IsPostPaddingRequired = $('#chkPostPaddingRequired', form).checked();
|
||||
|
||||
ApiClient.updateLiveTvTimer(item).done(function () {
|
||||
Dashboard.hideLoadingMsg();
|
||||
Dashboard.alert(Globalize.translate('MessageRecordingSaved'));
|
||||
});
|
||||
});
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
var html = '';
|
||||
|
||||
|
||||
var index = '';
|
||||
|
||||
for (var i = 0, length = timers.length; i < length; i++) {
|
||||
|
@ -62,8 +61,21 @@
|
|||
|
||||
if (imgUrl) {
|
||||
html += '<paper-fab class="listAvatar blue" style="background-image:url(\'' + imgUrl + '\');background-repeat:no-repeat;background-position:center center;background-size: cover;" item-icon></paper-fab>';
|
||||
} else {
|
||||
html += '<paper-fab class="listAvatar blue" icon="tv" item-icon></paper-fab>';
|
||||
}
|
||||
else if (program.IsKids) {
|
||||
html += '<paper-fab class="listAvatar" style="background:#2196F3;" icon="person" item-icon></paper-fab>';
|
||||
}
|
||||
else if (program.IsSports) {
|
||||
html += '<paper-fab class="listAvatar" style="background:#8BC34A;" icon="person" item-icon></paper-fab>';
|
||||
}
|
||||
else if (program.IsMovie) {
|
||||
html += '<paper-fab class="listAvatar" icon="movie" item-icon></paper-fab>';
|
||||
}
|
||||
else if (program.IsNews) {
|
||||
html += '<paper-fab class="listAvatar" style="background:#673AB7;" icon="new-releases" item-icon></paper-fab>';
|
||||
}
|
||||
else {
|
||||
html += '<paper-fab class="listAvatar blue" icon="live-tv" item-icon></paper-fab>';
|
||||
}
|
||||
|
||||
html += '<paper-item-body two-line>';
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -1521,5 +1521,6 @@
|
|||
"LabelSyncPath": "Synced content path:",
|
||||
"OptionSyncOnlyOnWifi": "Sync only on Wifi",
|
||||
"OptionSyncLosslessAudioOriginal": "Sync lossless audio at original quality",
|
||||
"HeaderMetadata": "Metadata"
|
||||
"HeaderMetadata": "Metadata",
|
||||
"HeaderRecordingOptions": "Recording Options"
|
||||
}
|
||||
|
|
|
@ -373,6 +373,11 @@ paper-menu-item {
|
|||
border-color: #2ad;
|
||||
}
|
||||
|
||||
.paperCheckboxList paper-checkbox {
|
||||
display: block;
|
||||
padding: .5em 0;
|
||||
}
|
||||
|
||||
.ui-page-theme-b paper-input label, .ui-page-theme-b paper-textarea label {
|
||||
color: #ccc !important;
|
||||
font-size: 20px !important;
|
||||
|
@ -420,4 +425,4 @@ paper-dropdown-menu {
|
|||
|
||||
paper-dropdown-menu paper-item {
|
||||
display: block;
|
||||
}
|
||||
}
|
|
@ -44,7 +44,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
<div>
|
||||
<label for="selectPageSize">${LabelPageSize}</label>
|
||||
<select id="selectPageSize"></select>
|
||||
<select id="selectPageSize" class="selectPageSize"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue