Channel Tools now have a compact version with less tools. Time/Random slots now have a reroll button to quickly refresh the schedule. Time/random slots data can be cleared from a channel.
This commit is contained in:
parent
3214febb38
commit
f18b853575
@ -1465,6 +1465,10 @@ module.exports = function ($timeout, $location, dizquetv, resolutionOptions, get
|
||||
scope.videoRateDefault = "(Use global setting)";
|
||||
scope.videoBufSizeDefault = "(Use global setting)";
|
||||
|
||||
scope.randomizeBlockShuffle = false;
|
||||
|
||||
scope.advancedTools = (localStorage.getItem("channel-programming-advanced-tools" ) === "show");
|
||||
|
||||
let refreshScreenResolution = async () => {
|
||||
|
||||
|
||||
@ -1653,13 +1657,21 @@ module.exports = function ($timeout, $location, dizquetv, resolutionOptions, get
|
||||
|
||||
|
||||
scope.onTimeSlotsDone = (slotsResult) => {
|
||||
scope.channel.scheduleBackup = slotsResult.schedule;
|
||||
readSlotsResult(slotsResult);
|
||||
if (slotsResult === null) {
|
||||
delete scope.channel.scheduleBackup;
|
||||
} else {
|
||||
scope.channel.scheduleBackup = slotsResult.schedule;
|
||||
readSlotsResult(slotsResult);
|
||||
}
|
||||
}
|
||||
|
||||
scope.onRandomSlotsDone = (slotsResult) => {
|
||||
scope.channel.randomScheduleBackup = slotsResult.schedule;
|
||||
readSlotsResult(slotsResult);
|
||||
if (slotsResult === null) {
|
||||
delete scope.channel.randomScheduleBackup;
|
||||
} else {
|
||||
scope.channel.randomScheduleBackup = slotsResult.schedule;
|
||||
readSlotsResult(slotsResult);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1672,6 +1684,73 @@ module.exports = function ($timeout, $location, dizquetv, resolutionOptions, get
|
||||
scope.randomSlots.startDialog(progs, scope.maxSize, scope.channel.randomScheduleBackup );
|
||||
}
|
||||
|
||||
scope.rerollRandomSlots = () => {
|
||||
let progs = commonProgramTools.removeDuplicates( scope.channel.programs );
|
||||
scope.randomSlots.startDialog(
|
||||
progs, scope.maxSize, scope.channel.randomScheduleBackup,
|
||||
true
|
||||
);
|
||||
}
|
||||
scope.hasNoRandomSlots = () => {
|
||||
return (
|
||||
(typeof(scope.channel.randomScheduleBackup) === 'undefined' )
|
||||
||
|
||||
(scope.channel.randomScheduleBackup == null)
|
||||
);
|
||||
}
|
||||
|
||||
scope.rerollTimeSlots = () => {
|
||||
let progs = commonProgramTools.removeDuplicates( scope.channel.programs );
|
||||
scope.timeSlots.startDialog(
|
||||
progs, scope.maxSize, scope.channel.scheduleBackup,
|
||||
true
|
||||
);
|
||||
}
|
||||
scope.hasNoTimeSlots = () => {
|
||||
return (
|
||||
(typeof(scope.channel.scheduleBackup) === 'undefined' )
|
||||
||
|
||||
(scope.channel.scheduleBackup == null)
|
||||
);
|
||||
}
|
||||
scope.toggleAdvanced = () => {
|
||||
scope.advancedTools = ! scope.advancedTools;
|
||||
localStorage.setItem("channel-programming-advanced-tools" , scope.advancedTools ? "show" : "hide");
|
||||
}
|
||||
scope.hasAdvancedTools = () => {
|
||||
return scope.advancedTools;
|
||||
}
|
||||
|
||||
scope.toolWide = () => {
|
||||
if ( scope.hasAdvancedTools()) {
|
||||
return {
|
||||
"col-xl-6": true,
|
||||
"col-md-12" : true
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
"col-xl-12": true,
|
||||
"col-lg-12" : true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
scope.toolThin = () => {
|
||||
if ( scope.hasAdvancedTools()) {
|
||||
return {
|
||||
"col-xl-3": true,
|
||||
"col-lg-6" : true
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
"col-xl-6": true,
|
||||
"col-lg-6" : true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
scope.logoOnChange = (event) => {
|
||||
const formData = new FormData();
|
||||
formData.append('image', event.target.files[0]);
|
||||
|
||||
@ -177,8 +177,22 @@ module.exports = function ($timeout, dizquetv, getShowData) {
|
||||
{ id: "shuffle", description: "Shuffle" },
|
||||
];
|
||||
|
||||
let doIt = async() => {
|
||||
let doWait = (millis) => {
|
||||
return new Promise( (resolve) => {
|
||||
$timeout( resolve, millis );
|
||||
} );
|
||||
}
|
||||
|
||||
let doIt = async(fromInstant) => {
|
||||
let t0 = new Date().getTime();
|
||||
let res = await dizquetv.calculateRandomSlots(scope.programs, scope.schedule );
|
||||
let t1 = new Date().getTime();
|
||||
|
||||
let w = Math.max(0, 250 - (t1 - t0) );
|
||||
if (fromInstant && (w > 0) ) {
|
||||
await doWait(w);
|
||||
}
|
||||
|
||||
for (let i = 0; i < scope.schedule.slots.length; i++) {
|
||||
delete scope.schedule.slots[i].weightPercentage;
|
||||
}
|
||||
@ -189,7 +203,7 @@ module.exports = function ($timeout, dizquetv, getShowData) {
|
||||
|
||||
|
||||
|
||||
let startDialog = (programs, limit, backup) => {
|
||||
let startDialog = (programs, limit, backup, instant) => {
|
||||
scope.limit = limit;
|
||||
scope.programs = programs;
|
||||
|
||||
@ -213,11 +227,15 @@ module.exports = function ($timeout, dizquetv, getShowData) {
|
||||
id: "flex.",
|
||||
description: "Flex",
|
||||
} );
|
||||
if (typeof(backup) !== 'undefined') {
|
||||
scope.hadBackup = (typeof(backup) !== 'undefined');
|
||||
if (scope.hadBackup) {
|
||||
loadBackup(backup);
|
||||
}
|
||||
|
||||
scope.visible = true;
|
||||
if (instant) {
|
||||
scope.finished(false, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -225,13 +243,18 @@ module.exports = function ($timeout, dizquetv, getShowData) {
|
||||
startDialog: startDialog,
|
||||
} );
|
||||
|
||||
scope.finished = async (cancel) => {
|
||||
scope.finished = async (cancel, fromInstant) => {
|
||||
scope.error = null;
|
||||
if (!cancel) {
|
||||
if ( scope.schedule.slots.length === 0) {
|
||||
scope.onDone(null);
|
||||
scope.visible = false;
|
||||
return;
|
||||
}
|
||||
try {
|
||||
scope.loading = true;
|
||||
$timeout();
|
||||
scope.onDone( await doIt() );
|
||||
scope.onDone( await doIt(fromInstant) );
|
||||
scope.visible = false;
|
||||
} catch(err) {
|
||||
console.error("Unable to generate channel lineup", err);
|
||||
@ -267,6 +290,20 @@ module.exports = function ($timeout, dizquetv, getShowData) {
|
||||
return false;
|
||||
}
|
||||
|
||||
scope.hideCreateLineup = () => {
|
||||
return (
|
||||
scope.disableCreateLineup()
|
||||
&& (scope.schedule.slots.length == 0)
|
||||
&& scope.hadBackup
|
||||
);
|
||||
}
|
||||
|
||||
scope.showResetSlots = () => {
|
||||
return scope.hideCreateLineup();
|
||||
}
|
||||
|
||||
|
||||
|
||||
scope.canShowSlot = (slot) => {
|
||||
return (slot.showId != 'flex.') && !(slot.showId.startsWith('redirect.'));
|
||||
}
|
||||
|
||||
@ -203,9 +203,23 @@ module.exports = function ($timeout, dizquetv, getShowData ) {
|
||||
{ id: "shuffle", description: "Shuffle" },
|
||||
];
|
||||
|
||||
let doIt = async() => {
|
||||
let doWait = (millis) => {
|
||||
return new Promise( (resolve) => {
|
||||
$timeout( resolve, millis );
|
||||
} );
|
||||
}
|
||||
|
||||
let doIt = async(fromInstant) => {
|
||||
scope.schedule.timeZoneOffset = (new Date()).getTimezoneOffset();
|
||||
let t0 = new Date().getTime();
|
||||
let res = await dizquetv.calculateTimeSlots(scope.programs, scope.schedule );
|
||||
let t1 = new Date().getTime();
|
||||
|
||||
let w = Math.max(0, 250 - (t1 - t0) );
|
||||
if (fromInstant && (w > 0) ) {
|
||||
await doWait(w);
|
||||
}
|
||||
|
||||
res.schedule = scope.schedule;
|
||||
delete res.schedule.fake;
|
||||
return res;
|
||||
@ -214,7 +228,7 @@ module.exports = function ($timeout, dizquetv, getShowData ) {
|
||||
|
||||
|
||||
|
||||
let startDialog = (programs, limit, backup) => {
|
||||
let startDialog = (programs, limit, backup, instant) => {
|
||||
scope.limit = limit;
|
||||
scope.programs = programs;
|
||||
|
||||
@ -238,11 +252,15 @@ module.exports = function ($timeout, dizquetv, getShowData ) {
|
||||
id: "flex.",
|
||||
description: "Flex",
|
||||
} );
|
||||
if (typeof(backup) !== 'undefined') {
|
||||
scope.hadBackup = (typeof(backup) !== 'undefined');
|
||||
if (scope.hadBackup) {
|
||||
loadBackup(backup);
|
||||
}
|
||||
|
||||
scope.visible = true;
|
||||
if (instant) {
|
||||
scope.finished(false, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -250,13 +268,19 @@ module.exports = function ($timeout, dizquetv, getShowData ) {
|
||||
startDialog: startDialog,
|
||||
} );
|
||||
|
||||
scope.finished = async (cancel) => {
|
||||
scope.finished = async (cancel, fromInstant) => {
|
||||
scope.error = null;
|
||||
if (!cancel) {
|
||||
if ( scope.schedule.slots.length === 0) {
|
||||
scope.onDone(null);
|
||||
scope.visible = false;
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
scope.loading = true;
|
||||
$timeout();
|
||||
scope.onDone( await doIt() );
|
||||
scope.onDone( await doIt(fromInstant) );
|
||||
scope.visible = false;
|
||||
} catch(err) {
|
||||
console.error("Unable to generate channel lineup", err);
|
||||
@ -292,6 +316,18 @@ module.exports = function ($timeout, dizquetv, getShowData ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
scope.hideCreateLineup = () => {
|
||||
return (
|
||||
scope.disableCreateLineup()
|
||||
&& (scope.schedule.slots.length == 0)
|
||||
&& scope.hadBackup
|
||||
);
|
||||
}
|
||||
|
||||
scope.showResetSlots = () => {
|
||||
return scope.hideCreateLineup();
|
||||
}
|
||||
|
||||
scope.canShowSlot = (slot) => {
|
||||
return (slot.showId != 'flex.') && !(slot.showId.startsWith('redirect.'));
|
||||
}
|
||||
|
||||
@ -197,23 +197,29 @@
|
||||
<small class='text-info'>There are no programs in the channel, use the <i class='fas fa-plus'></i> button to add programs from your media library or use the Tools to add Flex time or a Channel Redirect</small>
|
||||
</div>
|
||||
|
||||
<div class='col-md-4 col-sm-12 col-xl-6 col-lg-5 programming-pane tools-pane' ng-show="showShuffleOptions"
|
||||
<div ng-class='{
|
||||
"col-md-4" : true,
|
||||
"col-sm-12" : true,
|
||||
"col-xl-6" : hasAdvancedTools(),
|
||||
"col-lg-5" : hasAdvancedTools(),
|
||||
"col-xl-4" : !hasAdvancedTools(),
|
||||
"col-lg-3" : !hasAdvancedTools()
|
||||
}' class='programming-pane tools-pane' ng-show="showShuffleOptions"
|
||||
ng-style="{'max-height':programmingHeight()}"
|
||||
>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xl-6 col-md-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div ng-class="toolWide()" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<input type="number" class="form-control form-control-sm" placeholder="Desired number of consecutive TV shows." min="1" max="10" ng-model="blockCount" style="width:5em">
|
||||
</input>
|
||||
</div>
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text" style="padding: 0;">
|
||||
<label class="small" for="randomizeBlockShuffle" style="margin-bottom: 2px;"> Randomize </label>
|
||||
<input id="randomizeBlockShuffle" type="checkbox" ng-model="randomizeBlockShuffle"></input>
|
||||
|
||||
</div>
|
||||
<select class="custom-select" ng-model="randomizeBlockShuffle">
|
||||
<option ng-value="false" label="Fixed" />
|
||||
<option ng-value="true" label="Random" />
|
||||
</select>
|
||||
</div>
|
||||
<button class="btn btn-sm btn-warning form-control form-control-sm" type="button" ng-click="blockShuffle(blockCount, randomizeBlockShuffle)">
|
||||
<i class='fa fa-random' title='Block Shuffle' ></i> Block Shuffle
|
||||
@ -223,7 +229,7 @@
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-lg-6" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div ng-class="toolThin()" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="input-group">
|
||||
<button class="btn btn-sm btn-warning form-control form-control-sm" type="button" ng-click="randomShuffle()" aria-describedby="randomShuffleHelp" title='Random Shuffle'>
|
||||
<i class='fa fa-random'></i> Random Shuffle
|
||||
@ -234,7 +240,7 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class='col-xl-3 col-lg-6' style="padding: 5px;" ng-show="hasPrograms()" >
|
||||
<div ng-class="toolThin()" style="padding: 5px;" ng-show="hasPrograms()" >
|
||||
<div class="input-group">
|
||||
<button class="btn btn-sm btn-warning form-control form-control-sm" type="button" ng-click="cyclicShuffle()" title='Cyclic Shuffle' >
|
||||
<i class='fa fa-random'></i> Cyclic Shuffle
|
||||
@ -243,7 +249,7 @@
|
||||
<p ng-show='showHelp.check'>Like Random Shuffle, but tries to preserve the sequence of episodes for each TV show. If a TV show has multiple instances of its episodes, they are also cycled appropriately.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div ng-class="toolWide()" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<input type="number" class="form-control form-control-sm" placeholder="Repeats" min="1" max="{{maxReplicas()}}" ng-model="replicaCount" style="width:5em">
|
||||
@ -255,7 +261,7 @@
|
||||
<p ng-show='showHelp.check'>Makes multiple copies of the schedule and plays them in sequence. Normally this isn't necessary, because dizqueTV will always play the schedule back from the beginning when it finishes. But creating replicas is a useful intermediary step sometimes before applying other transformations. Note that because very large channels can be problematic, the number of replicas will be limited to avoid creating really large channels.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div ng-class="toolWide()" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<input type="number" class="form-control form-control-sm" placeholder="Repeats" min="1" max="{{maxReplicas()}}" ng-model="randomReplicaCount" style="width:5em">
|
||||
@ -267,7 +273,7 @@
|
||||
<p ng-show='showHelp.check'>Like "Replicate", it will make multiple copies of the programming. In addition it will shuffle the programs, but it will make sure not to have too small a distance between two identical programs.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-lg-6" style="padding: 5px;" ng-show="hasPrograms()" >
|
||||
<div ng-class="toolThin()" style="padding: 5px;" ng-show="hasPrograms()" >
|
||||
<div class='input-group'>
|
||||
<button class="btn btn-sm btn-warning form-control form-control-sm" type="button" ng-click="sortShows()" title='Sort TV Shows' >
|
||||
<i class='fa fa-sort-alpha-down'></i> Sort TV Shows
|
||||
@ -278,7 +284,7 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-lg-6" style="padding: 5px;" ng-show="hasPrograms()" >
|
||||
<div ng-class="toolThin()" style="padding: 5px;" ng-show="hasPrograms()" >
|
||||
<div class="input-group">
|
||||
<button class="btn btn-sm btn-warning form-control form-control-sm" type="button" ng-click="sortByDate()" title='Sort Release Dates' >
|
||||
<i class='fa fa-sort-numeric-down'></i> Sort Release Dates
|
||||
@ -287,7 +293,7 @@
|
||||
<p ng-show='showHelp.check'>Sorts everything by its release date. This will only work correctly if the release dates in Plex are correct. In case any item does not have a release date specified, it will be moved to the bottom.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-lg-6" style="padding: 5px;" ng-show="hasPrograms()" >
|
||||
<div class="col-xl-3 col-lg-6" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()" >
|
||||
<div class="input-group">
|
||||
<button class="btn btn-sm btn-warning form-control form-control-sm" type="button" ng-click="equalizeShows()" title='Balance Shows' >
|
||||
<i class='fa fa-balance-scale'></i> Balance Shows
|
||||
@ -296,7 +302,7 @@
|
||||
<p ng-show='showHelp.check'>Will replicate some TV shows or delete duplicates of other TV shows in an effort to make it so the total durations of all episodes of each episode are as similar as possible. It's usually impossible to make the shows perfectly balanced without creating a really high number of duplicates, but it will try to get close. Movies are treated as a single show.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-lg-6" style="padding: 5px;" ng-show="hasPrograms()" >
|
||||
<div class="col-xl-3 col-lg-6" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()" >
|
||||
<div class='input-group'>
|
||||
<button class="btn btn-sm btn-warning form-control form-control-sm" type="button" ng-click="startFrequencyTweak()" title='Tweak Weights...'>
|
||||
<i class='fa fa-balance-scale'></i> Tweak Weights...
|
||||
@ -314,7 +320,7 @@
|
||||
<p ng-show='showHelp.check'>Programs a Flex time slot. Normally you'd use pad times, restrict times or add breaks to add a large quantity of Flex times at once, but this exists for more specific cases.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<select class="custom-select" ng-model="nightStart"
|
||||
@ -330,7 +336,7 @@
|
||||
<p ng-show='showHelp.check'>The channel's regular programming between the specified hours. Flex time will fill up the remaining hours.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<select class="custom-select" ng-model="paddingOption"
|
||||
@ -344,7 +350,7 @@
|
||||
<p ng-show='showHelp.check'>Adds Flex breaks after each TV episode or movie to ensure that the program starts at one of the allowed minute marks. For example, you can use this to ensure that all your programs start at either XX:00 times or XX:30 times. Removes any existing Flex periods before adding the new ones. This button might be disabled if the channel is already too large.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<select class="custom-select" style="width:5em" ng-model="breakAfter"
|
||||
@ -361,7 +367,7 @@
|
||||
<p ng-show='showHelp.check'>Adds Flex breaks between programs, attempting to avoid groups of consecutive programs that exceed the specified number of minutes. This button might be disabled if the channel is already too large.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<select class="custom-select" ng-model="rerunStart"
|
||||
@ -381,7 +387,7 @@
|
||||
<p ng-show='showHelp.check'>Divides the programming in blocks of 6, 8 or 12 hours then repeats each of the blocks the specified number of times. For example, you can make a channel that plays exactly the same channels in the morning and in the afternoon. This button might be disabled if the channel is already too large.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class="input-group" >
|
||||
<div class="input-group-prepend">
|
||||
<button class="btn btn-sm btn-secondary form-control form-control-sm" type="button" ng-click="savePositions()">
|
||||
@ -407,7 +413,7 @@
|
||||
<p ng-show='showHelp.check'>Adds a channel redirect. During this period of time, the channel will redirect to another channel.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class='loader' ng-hide='channelsDownloaded'></div>
|
||||
@ -425,7 +431,7 @@
|
||||
<p ng-show='showHelp.check'>Will redirect to another channel while between the selected hours.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-6 col-lg-12" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div ng-class="toolWide()" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<button class='btn btn-sm btn-warning form-control' ng-click="slideAllPrograms(-slide.value)"
|
||||
@ -449,27 +455,51 @@
|
||||
<p ng-show='showHelp.check'>Slides the whole schedule. The "Fast-Forward" button will advance the stream by the specified amount of time. The "Rewind" button does the opposite.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-lg-6" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="input-group">
|
||||
<div ng-class="toolThin()" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="input-group" >
|
||||
<div class="input-group-prepend">
|
||||
<button class="btn btn-sm btn-warning form-control"
|
||||
type="button"
|
||||
ng-click="rerollTimeSlots()"
|
||||
ng-disabled="hasNoTimeSlots()"
|
||||
title = "Regenerate time slots..."
|
||||
>
|
||||
<i class='fas fa-redo'></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<button class='btn btn-sm btn-warning form-control' ng-click="onTimeSlotsButtonClick()"
|
||||
title="Time Slots..."
|
||||
>
|
||||
<i class='fas fa-blender'></i> Time Slots...
|
||||
</button>
|
||||
</div>
|
||||
<p ng-show='showHelp.check'>This allows to schedul specific shows to run at specific time slots of the day or a week. It's recommended you first populate the channel with the episodes from the shows you want to play and/or other content like movies and redirects.</p>
|
||||
<p ng-show='showHelp.check'>This allows to schedule specific shows to run at specific time slots of the day or a week. It's recommended you first populate the channel with the episodes from the shows you want to play and/or other content like movies and redirects.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-xl-3 col-lg-6" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="input-group">
|
||||
<div ng-class="toolThin()" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
|
||||
|
||||
<div class="input-group" >
|
||||
<div class="input-group-prepend">
|
||||
<button class="btn btn-sm btn-warning form-control"
|
||||
type="button"
|
||||
ng-click="rerollRandomSlots()"
|
||||
ng-disabled="hasNoRandomSlots()"
|
||||
title = "Regenerate random slots..."
|
||||
>
|
||||
<i class='fas fa-redo'></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<button class='btn btn-sm btn-warning form-control' ng-click="onRandomSlotsButtonClick()"
|
||||
title="Random Slots..."
|
||||
>
|
||||
<i class='fas fa-flask'></i> Random Slots...
|
||||
</button>
|
||||
</div>
|
||||
<p ng-show='showHelp.check'>This is similar to Time Slots, but instead of time sections, you pick a probability to play each tv show and the length of the block.</p>
|
||||
<p ng-show='showHelp.check'>This is similar to Time Slots, but instead of time sections, you pick a probability to play each tv show and the length of the block. Once a channel has been configured with random slots, the reload button can re-evaluate them again, with the saved settings.</p>
|
||||
|
||||
|
||||
</div>
|
||||
@ -493,7 +523,7 @@
|
||||
<p ng-show='showHelp.check'>Removes any Flex periods from the schedule.</p>
|
||||
</div>
|
||||
|
||||
<div class="col-md-auto" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
<div class="col-md-auto" style="padding: 5px;" ng-show="hasPrograms() && hasAdvancedTools()">
|
||||
<div class='input-group'>
|
||||
<button class="btn btn-sm btn-danger form-control form-control-sm" type="button" ng-click="wipeSpecials()" title='Remove Specials' >
|
||||
<i class='fa fa-trash-alt'></i> Specials
|
||||
@ -519,6 +549,24 @@
|
||||
</div>
|
||||
<p ng-show='showHelp.check'>Wipes out the schedule so that you can start over.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<br />
|
||||
<div class="col-xl-6 col-lg-6" style="padding: 5px;" ng-show="hasPrograms()">
|
||||
|
||||
|
||||
<div class="input-group" >
|
||||
|
||||
<button class='btn btn-sm btn-outline-secondary form-control' ng-click="toggleAdvanced()"
|
||||
title="Toggle extra tools..."
|
||||
>
|
||||
<i class='fas fa-tools'></i> {{ hasAdvancedTools() ? "Less" : "More"}} Tools...
|
||||
</button>
|
||||
</div>
|
||||
<p ng-show='showHelp.check'>Use this button to show or hide a bunch of additional tools that might be useful.</p>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@ -177,7 +177,8 @@
|
||||
<div class="modal-footer" ng-show='!loading'>
|
||||
<div class='text-danger small'>{{error}}</div>
|
||||
<button type="button" class="btn btn-sm btn-link" ng-click="finished(true)">Cancel</button>
|
||||
<button ng-disabled='disableCreateLineup()' type="button" class="btn btn-sm btn-primary" ng-click="finished(false);">Create Lineup</button>
|
||||
<button ng-show='! hideCreateLineup()' ng-disabled='disableCreateLineup()' type="button" class="btn btn-sm btn-primary" ng-click="finished(false);">Create Lineup</button>
|
||||
<button ng-show='showResetSlots()' type="button" class="btn btn-sm btn-danger" ng-click="finished(false);">Reset Slots</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -148,7 +148,8 @@
|
||||
<div class="modal-footer" ng-show='!loading'>
|
||||
<div class='text-danger small'>{{error}}</div>
|
||||
<button type="button" class="btn btn-sm btn-link" ng-click="finished(true)">Cancel</button>
|
||||
<button ng-disabled='disableCreateLineup()' type="button" class="btn btn-sm btn-primary" ng-click="finished(false);">Create Lineup</button>
|
||||
<button ng-show='! hideCreateLineup()' ng-disabled='disableCreateLineup()' type="button" class="btn btn-sm btn-primary" ng-click="finished(false);">Create Lineup</button>
|
||||
<button ng-show='showResetSlots()' type="button" class="btn btn-sm btn-danger" ng-click="finished(false);">Reset Slots</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user