1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

update dialogs

This commit is contained in:
Luke Pulverenti 2016-05-18 17:46:56 -04:00
parent c00d7cba09
commit 92b687f9a5
16 changed files with 242 additions and 71 deletions

View file

@ -16,12 +16,12 @@
},
"devDependencies": {},
"ignore": [],
"version": "1.3.44",
"_release": "1.3.44",
"version": "1.3.45",
"_release": "1.3.45",
"_resolution": {
"type": "version",
"tag": "1.3.44",
"commit": "7634be33759be48574ff2531df4d111fa1177e54"
"tag": "1.3.45",
"commit": "dbaa46e3aa38a939b82f305c61e875e1a30da2fe"
},
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.0",

View file

@ -217,7 +217,16 @@
var keyframes = [
{ transform: 'scale(0)', offset: 0 },
{ transform: 'scale(1,1)', offset: 1 }];
{ transform: 'none', offset: 1 }];
var timing = elem.animationConfig.entry.timing;
return elem.animate(keyframes, timing).onfinish = onFinish;
}
function slideUp(elem, onFinish) {
var keyframes = [
{ transform: 'translate3d(0,30%,0)', opacity: 0, offset: 0 },
{ transform: 'none', opacity: 1, offset: 1 }];
var timing = elem.animationConfig.entry.timing;
return elem.animate(keyframes, timing).onfinish = onFinish;
}
@ -240,6 +249,15 @@
return elem.animate(keyframes, timing);
}
function slideDown(elem, onFinish) {
var keyframes = [
{ transform: 'none', opacity: 1, offset: 0 },
{ transform: 'translate3d(0,30%,0)', opacity: 0, offset: 1 }];
var timing = elem.animationConfig.entry.timing;
return elem.animate(keyframes, timing);
}
function closeDialog(dlg) {
if (!dlg.classList.contains('hide')) {
@ -260,7 +278,18 @@
return;
}
fadeOut(dlg).onfinish = onAnimationFinish;
var animation;
if (dlg.animationConfig.exit.name == 'fadeout') {
animation = fadeOut(dlg);
} else if (dlg.animationConfig.exit.name == 'slidedown') {
animation = slideDown(dlg);
} else {
onAnimationFinish();
return;
}
animation.onfinish = onAnimationFinish;
}
}
@ -276,10 +305,12 @@
onAnimationFinish();
return;
}
if (dlg.animationConfig.entry.name == 'fade-in-animation') {
if (dlg.animationConfig.entry.name == 'fadein') {
fadeIn(dlg, onAnimationFinish);
} else if (dlg.animationConfig.entry.name == 'scale-up-animation') {
} else if (dlg.animationConfig.entry.name == 'scaleup') {
scaleUp(dlg, onAnimationFinish);
} else if (dlg.animationConfig.entry.name == 'slideup') {
slideUp(dlg, onAnimationFinish);
}
}
@ -355,9 +386,9 @@
dlg.setAttribute('data-autofocus', 'true');
}
var defaultEntryAnimation = browser.animate ? 'scale-up-animation' : 'fade-in-animation';
var defaultEntryAnimation = browser.animate ? 'scaleup' : 'fadein';
dlg.entryAnimation = options.entryAnimation || defaultEntryAnimation;
dlg.exitAnimation = 'fade-out-animation';
dlg.exitAnimation = 'fadeout';
// If it's not fullscreen then lower the default animation speed to make it open really fast
var entryAnimationDuration = options.entryAnimationDuration || (options.size ? 200 : 300);

View file

@ -0,0 +1,55 @@
{
"ValueSpecialEpisodeName": "Especial - {0}",
"Share": "Compartir",
"ServerUpdateNeeded": "Este Servidor Emby necesita ser actualizado. Para descargar la ultima versi\u00f3n, por favor visite {0}",
"LiveTvGuideRequiresUnlock": "La Guia de TV en Vivo actualmente esta limitada a {0} canales. De clic en el bot\u00f3n Desbloquear para saber como desbloquear la experiencia completa.",
"AttributeNew": "Nuevo",
"AttributePremiere": "Fecha de Estreno",
"AttributeLive": "En Vivo",
"TrackCount": "{0} Pistas",
"ItemCount": "{0} \u00edtems",
"ValueSeriesYearToPresent": "{0}-Presente",
"ReleaseYearValue": "A\u00f1o de estreno: {0}",
"OriginalAirDateValue": "Fecha de transmisi\u00f3n original: {0}",
"EndsAtValue": "Termina a las {0}",
"OptionSundayShort": "Dom",
"OptionMondayShort": "Lun",
"OptionTuesdayShort": "Mar",
"OptionWednesdayShort": "Mie",
"OptionThursdayShort": "Jue",
"OptionFridayShort": "Vie",
"OptionSaturdayShort": "Sab",
"HeaderSelectDate": "Seleccionar fecha",
"ButtonOk": "Ok",
"ButtonCancel": "Cancelar",
"ButtonGotIt": "Hecho",
"RecordingScheduled": "Grabaci\u00f3n programada.",
"HeaderNewRecording": "Nueva Grabaci\u00f3n",
"Sunday": "Domingo",
"Monday": "Lunes",
"Tuesday": "Martes",
"Wednesday": "Mi\u00e9rcoles",
"Thursday": "Jueves",
"Friday": "Viernes",
"Saturday": "S\u00e1bado",
"Days": "D\u00edas",
"RecordSeries": "Grabar Series",
"LabelPrePaddingMinutes": "Minutos de protecci\u00f3n previos:",
"LabelPostPaddingMinutes": "Minutos de protecci\u00f3n posterior:",
"RecordOnAllChannels": "Grabar en todos los canales",
"RecordAnytime": "Grabar en cualquier momento",
"RecordOnlyNewEpisodes": "Grabar s\u00f3lo nuevos episodios",
"HeaderBecomeProjectSupporter": "Obtener Emby Premiere",
"HeaderEnjoyDayTrial": "Disfrute de una Prueba Gratuita por 14 D\u00edas",
"MessageActiveSubscriptionRequiredSeriesRecordings": "Se requiere de una suscripci\u00f3n de Emby Premiere para crear grabaciones automatizadas de series.",
"OptionConvertRecordingsToStreamingFormat": "Convertir autom\u00e1ticamente las grabaciones a un formato amigable para transmisi\u00f3n",
"OptionConvertRecordingsToStreamingFormatHelp": "Las grabaciones ser\u00e1n convertidas en tiempo real a MP4 para una f\u00e1cil reproducci\u00f3n en sus dispositivos.",
"FeatureRequiresEmbyPremiere": "Esta caracter\u00edstica requiere de una suscripci\u00f3n activa de Emby Premiere.",
"Record": "Grabar",
"Save": "Guardar",
"Edit": "Editar",
"Download": "Descargar",
"Advanced": "Avanzado",
"Refresh": "Actualizar",
"RefreshQueued": "Actualizaci\u00f3n programada"
}

View file

@ -0,0 +1,55 @@
{
"ValueSpecialEpisodeName": "Spesial - {0}",
"Share": "Del",
"ServerUpdateNeeded": "Denne Emby serveren trenger en oppdatering. For \u00e5 laste ned nyeste versjon, vennligst bes\u00f8k: {0}",
"LiveTvGuideRequiresUnlock": "Live TV Guide er p\u00e5 n\u00e5v\u00e6rende tidspunkter begrenset til {0} Kanaler. Trykk p\u00e5 l\u00e5s opp knappen for \u00e5 l\u00e6re hvordan f\u00e5 full opplevelse.",
"AttributeNew": "Ny",
"AttributePremiere": "Premiere",
"AttributeLive": "Direkte",
"TrackCount": "{0} spor",
"ItemCount": "{0} elementer",
"ValueSeriesYearToPresent": "{0}-N\u00e5v\u00e6rende",
"ReleaseYearValue": "Utgivelse \u00e5r: {0}",
"OriginalAirDateValue": "Original slippdato: {0}",
"EndsAtValue": "Ender p\u00e5 {0}",
"OptionSundayShort": "S\u00f8n",
"OptionMondayShort": "Man",
"OptionTuesdayShort": "Tir",
"OptionWednesdayShort": "Ons",
"OptionThursdayShort": "Tor",
"OptionFridayShort": "Fre",
"OptionSaturdayShort": "L\u00f8r",
"HeaderSelectDate": "Velg dato",
"ButtonOk": "Ok",
"ButtonCancel": "Avbryt",
"ButtonGotIt": "Skj\u00f8nner",
"RecordingScheduled": "Planlagte opptak.",
"HeaderNewRecording": "Tar opp n\u00e5",
"Sunday": "S\u00f8ndag",
"Monday": "Mandag",
"Tuesday": "Tirsdag",
"Wednesday": "Onsdag",
"Thursday": "Torsdag",
"Friday": "Fredag",
"Saturday": "L\u00f8rdag",
"Days": "Dager",
"RecordSeries": "Ta opp serien",
"LabelPrePaddingMinutes": "Pre-padding minutter:",
"LabelPostPaddingMinutes": "Post-padding minutter:",
"RecordOnAllChannels": "Ta opp fra alle kanaler",
"RecordAnytime": "Ta opp n\u00e5r som helst",
"RecordOnlyNewEpisodes": "Ta opp kun nye episoder",
"HeaderBecomeProjectSupporter": "Skaff Emby Premiere",
"HeaderEnjoyDayTrial": "Nyt en 14 dagers gratis pr\u00f8ve versjon",
"MessageActiveSubscriptionRequiredSeriesRecordings": "En aktiv Emby Premiere abonnement er n\u00f8dvendig for \u00e5 skape automatiserte serie innspillinger.",
"OptionConvertRecordingsToStreamingFormat": "Automatisk konvertere opptak til en str\u00f8mnings vennlig format",
"OptionConvertRecordingsToStreamingFormatHelp": "Innspillinger vil automatisk bli konvertert til MP4 for enkel avspilling p\u00e5 dine enheter.",
"FeatureRequiresEmbyPremiere": "Denne funksjonen krever et aktivt Emby Premiere abonnement.",
"Record": "Ta opp",
"Save": "Lagre",
"Edit": "Endre",
"Download": "Last ned",
"Advanced": "Avansert",
"Refresh": "Oppdater",
"RefreshQueued": "Oppdatering k\u00f8"
}

View file

@ -34,6 +34,6 @@
"commit": "11c987b2eb3c73b388a79fc8aaea8ca01624f514"
},
"_source": "git://github.com/Polymer/polymer.git",
"_target": "^1.0.0",
"_target": "^1.1.0",
"_originalSource": "Polymer/polymer"
}

View file

@ -123,7 +123,13 @@
html += '<form class="newCollectionForm" style="margin:auto;">';
html += '<div>';
html += Globalize.translate('CreateCollectionHelp');
html += '</div>';
html += '<div class="fldSelectCollection">';
html += '<br/>';
html += '<br/>';
html += '<label for="selectCollectionToAddTo" class="selectLabel">' + Globalize.translate('LabelSelectCollection') + '</label>';
html += '<select id="selectCollectionToAddTo" data-mini="true"></select>';
html += '</div>';
@ -206,6 +212,9 @@
html += '<div class="dialogHeaderTitle">';
html += title;
html += '</div>';
html += '<a href="https://github.com/MediaBrowser/Wiki/wiki/Collections" target="_blank" tabindex="-1" class="clearLink" style="margin-left:auto;margin-right:.5em;display:inline-block;" title="' + Globalize.translate('ButtonHelp') + '"><paper-button class="accent" style="margin:0;font-weight:normal;font-size:13px;padding:.25em;display:flex;align-items:center;"><iron-icon icon="info"></iron-icon><span>' + Globalize.translate('ButtonHelp') + '</span></paper-button></a>';
html += '</div>';
html += getEditorHtml();

View file

@ -1,4 +1,4 @@
<div id="dashboardHostingPage" data-role="page" class="page type-interior advancedConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Hosting%20Settings" data-require="scripts/dashboardhosting,paper-checkbox,paper-input,paper-button">
<div id="dashboardHostingPage" data-role="page" class="page type-interior advancedConfigurationPage withTabs" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Hosting%20Settings">
<div data-role="content">
<div class="content-primary">
@ -14,10 +14,6 @@
<paper-input type="number" label="${LabelPublicHttpPort}" id="txtPublicPort" pattern="[0-9]*" required="required" min="1"></paper-input>
<div class="fieldDescription">${LabelPublicHttpPortHelp}</div>
</li>
<li>
<paper-input id="txtDdns" type="text" label="${LabelExternalDDNS}"></paper-input>
<div class="fieldDescription">${LabelExternalDDNSHelp}</div>
</li>
<li>
<paper-input type="number" id="txtHttpsPort" pattern="[0-9]*" required="required" min="1" label="${LabelHttpsPort}"></paper-input>
<div class="fieldDescription">${LabelHttpsPortHelp}</div>
@ -31,6 +27,10 @@
<button type="button" is="paper-icon-button-light" id="btnSelectCertPath" title="${ButtonSelectDirectory}"><iron-icon icon="search"></iron-icon></button>
<div class="fieldDescription">${LabelCustomCertificatePathHelp}</div>
</li>
<li>
<paper-input id="txtDdns" type="text" label="${LabelExternalDDNS}"></paper-input>
<div class="fieldDescription">${LabelExternalDDNSHelp}</div>
</li>
<li>
<paper-checkbox id="chkEnableHttps">${LabelEnableHttps}</paper-checkbox>
<div class="fieldDescription paperCheckboxFieldDescription">${LabelEnableHttpsHelp}</div>

View file

@ -61,13 +61,13 @@
<div class="listTopPaging">
&nbsp;
</div>
<button type="button" is="paper-icon-button-light" class="btnNewCollection"><iron-icon icon="add"></iron-icon></button>
</div>
<div class="itemsContainer" style="text-align:center;"></div>
<div class="noItemsMessage" style="display: none; text-align: center;">
<p>${MessageNoCollectionsAvailable}</p>
</div>
<paper-fab class="btnNewCollection bottomFab" icon="add" style="position:fixed;right:20px;background-color:#db4437;"></paper-fab>
</div>
<div class="pageTabContent ehsContent" id="genresTab" data-index="4">
<div class="viewSettings">

View file

@ -1,22 +1,5 @@
define(['jQuery'], function ($) {
function loadPage(page, config) {
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
$('#txtPublicPort', page).val(config.PublicPort);
$('#txtPublicHttpsPort', page).val(config.PublicHttpsPort);
$('#chkEnableHttps', page).checked(config.EnableHttps);
$('#txtHttpsPort', page).val(config.HttpsPortNumber);
$('#txtDdns', page).val(config.WanDdns || '');
$('#txtCertificatePath', page).val(config.CertificatePath || '');
$('#chkEnableUpnp', page).checked(config.EnableUPnP);
Dashboard.hideLoadingMsg();
}
function onSubmit() {
Dashboard.showLoadingMsg();
@ -52,24 +35,43 @@
}];
}
$(document).on('pageshow', "#dashboardHostingPage", function () {
return function (view, params) {
LibraryMenu.setTabs('adminadvanced', 0, getTabs);
Dashboard.showLoadingMsg();
var self = this;
var page = this;
function loadPage(page, config) {
ApiClient.getServerConfiguration().then(function (config) {
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
$('#txtPublicPort', page).val(config.PublicPort);
$('#txtPublicHttpsPort', page).val(config.PublicHttpsPort);
loadPage(page, config);
var chkEnableHttps = page.querySelector('#chkEnableHttps');
chkEnableHttps.checked = config.EnableHttps;
});
$('#txtHttpsPort', page).val(config.HttpsPortNumber);
}).on('pageinit', "#dashboardHostingPage", function () {
$('#txtDdns', page).val(config.WanDdns || '');
var page = this;
var txtCertificatePath = page.querySelector('#txtCertificatePath');
txtCertificatePath.value = config.CertificatePath || '';
$('#btnSelectCertPath', page).on("click.selectDirectory", function () {
$('#chkEnableUpnp', page).checked(config.EnableUPnP);
onCertPathChange.call(txtCertificatePath);
Dashboard.hideLoadingMsg();
}
function onCertPathChange() {
if (this.value) {
view.querySelector('#txtDdns').setAttribute('required', 'required');
} else {
view.querySelector('#txtDdns').removeAttribute('required');
}
}
$('#btnSelectCertPath', view).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
@ -83,7 +85,7 @@
callback: function (path) {
if (path) {
$('#txtCertificatePath', page).val(path);
$('#txtCertificatePath', view).val(path);
}
picker.close();
},
@ -94,6 +96,18 @@
});
$('.dashboardHostingForm').off('submit', onSubmit).on('submit', onSubmit);
});
view.querySelector('#txtCertificatePath').addEventListener('change', onCertPathChange);
view.addEventListener('viewshow', function (e) {
LibraryMenu.setTabs('adminadvanced', 0, getTabs);
Dashboard.showLoadingMsg();
ApiClient.getServerConfiguration().then(function (config) {
loadPage(view, config);
});
});
};
});

View file

@ -1,4 +1,4 @@
define(['layoutManager', 'datetime', 'jQuery', 'mediaInfo', 'scrollStyles'], function (layoutManager, datetime, $, mediaInfo) {
define(['layoutManager', 'datetime', 'jQuery', 'mediaInfo', 'backdrop', 'scrollStyles'], function (layoutManager, datetime, $, mediaInfo, backdrop) {
var currentItem;
@ -75,14 +75,13 @@
// For these types, make the backdrop a little smaller so that the items are more quickly accessible
if (item.Type == 'MusicArtist' || item.Type == "MusicAlbum" || item.Type == "Playlist" || item.Type == "BoxSet" || item.MediaType == "Audio" || !layoutManager.mobile) {
$('#itemBackdrop', page).addClass('noBackdrop').css('background-image', 'none');
require(['backdrop'], function (backdrop) {
backdrop.setBackdrops([item]);
});
}
else {
//$('#itemBackdrop', page).addClass('noBackdrop').css('background-image', 'none');
//Backdrops.setBackdrops(page, [item]);
hasBackdrop = LibraryBrowser.renderDetailPageBackdrop(page, item);
backdrop.clear();
}
var transparentHeader = hasBackdrop && page.classList.contains('noSecondaryNavPage');
@ -475,7 +474,7 @@
});
});
$('.itemGenres', page).each(function() {
$('.itemGenres', page).each(function () {
LibraryBrowser.renderGenres(this, item, null, isStatic);
});
LibraryBrowser.renderStudios($('.itemStudios', page), item, isStatic);
@ -1098,10 +1097,13 @@
html += '<div class="detailSection">';
html += '<div style="display:flex;align-items:center;">';
html += '<h1>';
html += '<span>' + type.name + '</span>';
html += '</h1>';
html += '<button class="btnAddToCollection" type="button" is="paper-icon-button-light" style="margin-left:1em;"><iron-icon icon="add"></iron-icon></button>';
html += '</div>';
html += '<div class="detailSectionContent itemsContainer">';
@ -1131,6 +1133,15 @@
removeFromCollection(page, parentItem, [itemId], user, context);
});
collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () {
require(['alert'], function (alert) {
alert({
text: Globalize.translate('AddItemToCollectionHelp'),
html: Globalize.translate('AddItemToCollectionHelp') + '<br/><br/><a target="_blank" href="https://github.com/MediaBrowser/Wiki/wiki/Collections">' + Globalize.translate('ButtonLearnMore') + '</a>'
});
});
});
}
function removeFromCollection(page, parentItem, itemIds, user, context) {

View file

@ -1066,7 +1066,8 @@
}
if (item.CollectionType == 'games') {
return 'gamesrecommended.html?topParentId=' + item.Id;
return id ? "itemlist.html?parentId=" + id : "#";
//return 'gamesrecommended.html?topParentId=' + item.Id;
}
if (item.CollectionType == 'playlists') {
return 'playlists.html?topParentId=' + item.Id;

View file

@ -743,7 +743,7 @@
var helpUrl = page.getAttribute('data-helpurl');
if (helpUrl) {
html += '<a href="' + helpUrl + '" target="_blank" class="clearLink" style="margin-left:2em;" title="' + Globalize.translate('ButtonHelp') + '"><paper-button class="accent" style="margin:0;font-weight:normal;font-size:13px;padding:.25em;display:flex;align-items:center;"><iron-icon icon="info"></iron-icon><span>Help</span></paper-button></a>';
html += '<a href="' + helpUrl + '" target="_blank" class="clearLink" style="margin-left:2em;" title="' + Globalize.translate('ButtonHelp') + '"><paper-button class="accent" style="margin:0;font-weight:normal;font-size:13px;padding:.25em;display:flex;align-items:center;"><iron-icon icon="info"></iron-icon><span>' + Globalize.translate('ButtonHelp') + '</span></paper-button></a>';
}
}
}

View file

@ -8,14 +8,6 @@
return enableScrollX() ? 'overflowPortrait' : 'portrait';
}
function getThumbShape() {
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
}
function getSquareShape() {
return enableScrollX() ? 'overflowSquare' : 'square';
}
function getLimit() {
return enableScrollX() ? 12 : 8;
@ -109,7 +101,7 @@
var html = libraryBrowser.getPosterViewHtml({
items: items,
shape: shape || (enableScrollX() ? getSquareShape() : 'auto'),
shape: shape || (enableScrollX() ? 'autooverflow' : 'auto'),
showTitle: true,
centerText: true,
coverImage: true,

View file

@ -301,7 +301,7 @@
baseUrl += '?topParentId=' + topParentId;
}
libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 4, 5]);
libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 3, 4, 5]);
var tabControllers = [];
var renderedTabs = [];

View file

@ -2243,7 +2243,7 @@ var AppInfo = {};
var baseUrl = 'bower_components/emby-webcomponents/strings/';
var languages = ['da', 'en-US', 'kk', 'nl', 'ru'];
var languages = ['da', 'en-US', 'es-MX', 'kk', 'nb', 'nl', 'ru'];
var translations = languages.map(function (i) {
return {
@ -2404,9 +2404,10 @@ var AppInfo = {};
defineRoute({
path: '/dashboardhosting.html',
dependencies: [],
dependencies: ['paper-checkbox', 'paper-input', 'paper-button'],
autoFocus: false,
roles: 'admin'
roles: 'admin',
controller: 'scripts/dashboardhosting'
});
defineRoute({
@ -2698,7 +2699,7 @@ var AppInfo = {};
defineRoute({
path: '/movies.html',
dependencies: ['paper-checkbox', 'paper-fab', 'scripts/alphapicker', 'paper-button'],
dependencies: ['paper-checkbox', 'scripts/alphapicker', 'paper-button'],
autoFocus: false,
controller: 'scripts/moviesrecommended',
transition: 'fade'

View file

@ -561,8 +561,8 @@
"LabelWebSocketPortNumber": "Web socket port number:",
"LabelEnableAutomaticPortMap": "Enable automatic port mapping",
"LabelEnableAutomaticPortMapHelp": "Attempt to automatically map the public port to the local port via UPnP. This may not work with some router models.",
"LabelExternalDDNS": "External WAN Address:",
"LabelExternalDDNSHelp": "If you have a dynamic DNS enter it here. Emby apps will use it when connecting remotely. Leave empty for automatic detection.",
"LabelExternalDDNS": "External domain:",
"LabelExternalDDNSHelp": "If you have a dynamic DNS enter it here. Emby apps will use it when connecting remotely. This field is required when used with a custom https certificate.",
"TabResume": "Resume",
"TabWeather": "Weather",
"TitleAppSettings": "App Settings",
@ -2351,5 +2351,7 @@
"LabelOriginalTitle": "Original title:",
"LabelSortTitle": "Sort title:",
"OptionConvertRecordingPreserveAudio": "Preserve original audio when converting recordings",
"OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices."
"OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices.",
"CreateCollectionHelp": "Collections allow you to create personalized groupings of movies and other library content.",
"AddItemToCollectionHelp": "Add items to collections by searching for them and using their right-click or tap menus to add them to a collection."
}