Merge pull request #1748 from MediaBrowser/dev

Dev
This commit is contained in:
Luke 2016-05-19 15:59:09 -04:00
commit 5075df30c0
19 changed files with 302 additions and 273 deletions

View File

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

View File

@ -1,4 +1,4 @@
define(['visibleinviewport', 'imageFetcher', 'layoutManager', 'events'], function (visibleinviewport, imageFetcher, layoutManager, events) {
define(['visibleinviewport', 'imageFetcher', 'layoutManager', 'events', 'browser'], function (visibleinviewport, imageFetcher, layoutManager, events, browser) {
var thresholdX;
var thresholdY;
@ -88,12 +88,64 @@ define(['visibleinviewport', 'imageFetcher', 'layoutManager', 'events'], functio
target.addEventListener(type, handler, optionsOrCapture);
}
function unveilWithIntersection(images) {
var filledCount = 0;
var observer = new IntersectionObserver(function (entries) {
for (var j = 0, length2 = entries.length; j < length2; j++) {
var entry = entries[j];
var intersectionRatio = entry.intersectionRatio;
if (intersectionRatio) {
var target = entry.target;
observer.unobserve(target);
fillImage(target);
filledCount++;
}
}
if (filledCount >= images.length) {
//observer.disconnect();
}
},
{
/* Using default options. Details below */
}
);
// Start observing an element
for (var i = 0, length = images.length; i < length; i++) {
observer.observe(images[i]);
}
}
var supportsIntersectionObserver = function () {
if (window.IntersectionObserver) {
// The api exists in chrome 50 but doesn't work
if (browser.chrome) {
var version = parseInt(browser.version.split('.')[0]);
return version >= 51;
}
return true;
}
return false;
}();
function unveilElements(images) {
if (!images.length) {
return;
}
if (supportsIntersectionObserver) {
unveilWithIntersection(images);
return;
}
var filledImages = [];
var cancellationTokens = [];

View File

@ -11,7 +11,14 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali
var commands = [];
if (item.CanDownload && user.Policy.EnableContentDownloading && appHost.supports('filedownload')) {
if (item.CanDelete) {
commands.push({
name: globalize.translate('sharedcomponents#Delete'),
id: 'delete'
});
}
if (item.CanDownload && appHost.supports('filedownload')) {
commands.push({
name: globalize.translate('sharedcomponents#Download'),
id: 'download'
@ -69,6 +76,14 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali
case 'refresh':
{
refresh(apiClient, itemId);
reject();
break;
}
case 'delete':
{
deleteItem(apiClient, itemId).then(function () {
resolve(true);
});
break;
}
case 'share':
@ -83,11 +98,33 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali
break;
}
default:
reject();
break;
}
});
}
function deleteItem(apiClient, itemId) {
return new Promise(function (resolve, reject) {
var msg = globalize.translate('sharedcomponents#ConfirmDeleteItem');
var title = globalize.translate('sharedcomponents#HeaderDeleteItem');
require(['confirm'], function (confirm) {
confirm(msg, title).then(function () {
apiClient.deleteItem(itemId).then(function () {
resolve(true);
});
}, reject);
});
});
}
function refresh(apiClient, itemId) {
apiClient.refreshItem(itemId, {
@ -97,7 +134,6 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali
MetadataRefreshMode: 'FullRefresh',
ReplaceAllImages: false,
ReplaceAllMetadata: true
});
require(['toast'], function (toast) {

View File

@ -203,10 +203,10 @@ define(['loading', 'viewManager', 'skinManager', 'pluginManager', 'backdrop', 'b
if (!isBackNav) {
// Don't force a new view for home due to the back menu
if (route.type != 'home') {
//if (route.type != 'home') {
onNewViewNeeded();
return;
}
//}
}
viewManager.tryRestoreView(currentRequest).then(function () {

View File

@ -50,6 +50,9 @@
"Edit": "Edit",
"Download": "Download",
"Advanced": "Advanced",
"Delete": "Delete",
"HeaderDeleteItem": "Delete Item",
"ConfirmDeleteItem": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?",
"Refresh": "Refresh",
"RefreshQueued": "Refresh queued."
}

View File

@ -112,76 +112,74 @@ define(['browser'], function (browser) {
function slide(newAnimatedPage, oldAnimatedPage, transition, isBack) {
var timings = {
duration: 450,
iterations: 1,
easing: 'ease-out',
fill: 'both'
}
return new Promise(function (resolve, reject) {
var timings = {
duration: 450,
iterations: 1,
easing: 'ease-out'
}
var animations = [];
var animations = [];
if (oldAnimatedPage) {
var destination = isBack ? '100%' : '-100%';
if (oldAnimatedPage) {
var destination = isBack ? '100%' : '-100%';
animations.push(oldAnimatedPage.animate([
animations.push(oldAnimatedPage.animate([
{ transform: 'none', offset: 0 },
{ transform: 'translate3d(' + destination + ', 0, 0)', offset: 1 }
{ transform: 'none', offset: 0 },
{ transform: 'translate3d(' + destination + ', 0, 0)', offset: 1 }
], timings));
}
newAnimatedPage.classList.remove('hide');
var start = isBack ? '-100%' : '100%';
animations.push(newAnimatedPage.animate([
{ transform: 'translate3d(' + start + ', 0, 0)', offset: 0 },
{ transform: 'none', offset: 1 }
], timings));
}
newAnimatedPage.classList.remove('hide');
currentAnimations = animations;
var start = isBack ? '-100%' : '100%';
animations.push(newAnimatedPage.animate([
{ transform: 'translate3d(' + start + ', 0, 0)', offset: 0 },
{ transform: 'none', offset: 1 }
], timings));
currentAnimations = animations;
return new Promise(function (resolve, reject) {
animations[animations.length - 1].onfinish = resolve;
});
}
function fade(newAnimatedPage, oldAnimatedPage, transition, isBack) {
var timings = {
duration: 200,
iterations: 1,
easing: 'ease-out',
fill: 'both'
}
return new Promise(function (resolve, reject) {
var timings = {
duration: 200,
iterations: 1,
easing: 'ease-out'
}
var animations = [];
var animations = [];
if (oldAnimatedPage) {
animations.push(oldAnimatedPage.animate([
if (oldAnimatedPage) {
animations.push(oldAnimatedPage.animate([
{ opacity: 1, offset: 0 },
{ opacity: 0, offset: 1 }
{ opacity: 1, offset: 0 },
{ opacity: 0, offset: 1 }
], timings));
}
newAnimatedPage.classList.remove('hide');
animations.push(newAnimatedPage.animate([
{ opacity: 0, offset: 0 },
{ opacity: 1, offset: 1 }
], timings));
}
newAnimatedPage.classList.remove('hide');
currentAnimations = animations;
animations.push(newAnimatedPage.animate([
{ opacity: 0, offset: 0 },
{ opacity: 1, offset: 1 }
], timings));
currentAnimations = animations;
return new Promise(function (resolve, reject) {
animations[animations.length - 1].onfinish = resolve;
});
}

View File

@ -45,7 +45,7 @@
"tag": "v1.0.11",
"commit": "e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5"
},
"_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"
}

View File

@ -32,14 +32,14 @@
"iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
},
"ignore": [],
"homepage": "https://github.com/PolymerElements/paper-ripple",
"homepage": "https://github.com/polymerelements/paper-ripple",
"_release": "1.0.5",
"_resolution": {
"type": "version",
"tag": "v1.0.5",
"commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5"
},
"_source": "git://github.com/PolymerElements/paper-ripple.git",
"_source": "git://github.com/polymerelements/paper-ripple.git",
"_target": "^1.0.0",
"_originalSource": "PolymerElements/paper-ripple"
"_originalSource": "polymerelements/paper-ripple"
}

View File

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

View File

@ -413,24 +413,17 @@
// $(".playlist", page).html(html).lazyChildren();
//});
var playlistOpen = isPlaylistOpen(context);
html += libraryBrowser.getListViewHtml({
items: MediaController.playlist(),
smallIcon: true
});
if (playlistOpen) {
html += libraryBrowser.getListViewHtml({
items: MediaController.playlist(),
smallIcon: true
});
playlistNeedsRefresh = false;
}
playlistNeedsRefresh = false;
var deps = [];
if (playlistOpen) {
deps.push('paper-icon-item');
deps.push('paper-item-body');
}
deps.push('paper-icon-item');
deps.push('paper-item-body');
require(deps, function () {
@ -438,19 +431,16 @@
itemsContainer.innerHTML = html;
if (playlistOpen) {
var index = MediaController.currentPlaylistIndex();
var index = MediaController.currentPlaylistIndex();
if (index != -1) {
if (index != -1) {
var item = itemsContainer.querySelectorAll('.listItem')[index];
if (item) {
var img = item.querySelector('.listviewImage');
var item = itemsContainer.querySelectorAll('.listItem')[index];
if (item) {
var img = item.querySelector('.listviewImage');
img.classList.remove('lazy');
img.classList.add('playlistIndexIndicatorImage');
}
img.classList.remove('lazy');
img.classList.add('playlistIndexIndicatorImage');
}
}
@ -458,10 +448,6 @@
});
}
function isPlaylistOpen(context) {
return libraryBrowser.selectedTab(context.querySelector('.libraryViewNav')) == 2;
}
function onStateChanged(e, state) {
if (e.type == 'positionchange') {
@ -485,11 +471,7 @@
onStateChanged.call(player, e, state);
if (isPlaylistOpen(dlg)) {
loadPlaylist(dlg);
} else {
playlistNeedsRefresh = true;
}
loadPlaylist(dlg);
}
function onPlaybackStopped(e, state) {
@ -500,11 +482,7 @@
onStateChanged.call(player, e, {});
if (isPlaylistOpen(dlg)) {
loadPlaylist(dlg);
} else {
playlistNeedsRefresh = true;
}
loadPlaylist(dlg);
}
function releaseCurrentPlayer() {
@ -824,6 +802,7 @@
libraryBrowser.configurePaperLibraryTabs(ownerView, mdlTabs, ownerView.querySelectorAll('.pageTabContent'));
mdlTabs.addEventListener('tabchange', function (e) {
if (e.detail.selectedTabIndex == 2 && playlistNeedsRefresh) {
loadPlaylist(context);
}

View File

@ -1,4 +1,4 @@
<div id="itemDetailPage" data-role="page" class="page libraryPage itemDetailPage noSecondaryNavPage selfBackdropPage" data-theme="b" data-require="scripts/itemdetailpage,tileitemcss,scripts/livetvcomponents,paper-fab,paper-item-body,paper-icon-item,paper-button,paper-icon-button-light">
<div id="itemDetailPage" data-role="page" class="page libraryPage itemDetailPage noSecondaryNavPage selfBackdropPage" data-theme="b">
<div id="itemBackdrop" class="itemBackdrop noBackdrop">
<div class="itemBackdropContent">

View File

@ -28,12 +28,7 @@
<div class="fieldDescription">${LabelNumberOfGuideDaysHelp}</div>
</li>
</ul>
<div class="paperCheckboxList">
<label>${LabelEnableInternetMetadataForTvPrograms}</label>
<paper-checkbox id="chkMovies">${OptionTVMovies}</paper-checkbox>
</div>
<div>
<br />
<paper-input id="txtRecordingPath" label="${LabelRecordingPath}" style="width:84%;display:inline-block;"></paper-input>
<button type="button" is="paper-icon-button-light" id="btnSelectRecordingPath" title="${ButtonSelectDirectory}"><iron-icon icon="search"></iron-icon></button>
<div class="fieldDescription">${LabelRecordingPathHelp}</div>

View File

@ -10,7 +10,7 @@
UserId: Dashboard.getCurrentUserId(),
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
EnableTotalRecordCount: 0
EnableTotalRecordCount: false
};
ApiClient.getJSON(ApiClient.getUrl("Shows/Upcoming", query)).then(function (result) {

View File

@ -2,33 +2,33 @@
var currentItem;
function getPromise() {
function getPromise(params) {
var id = getParameterByName('id');
var id = params.id;
if (id) {
return ApiClient.getItem(Dashboard.getCurrentUserId(), id);
}
var name = getParameterByName('genre');
var name = params.genre;
if (name) {
return ApiClient.getGenre(name, Dashboard.getCurrentUserId());
}
name = getParameterByName('musicgenre');
name = params.musicgenre;
if (name) {
return ApiClient.getMusicGenre(name, Dashboard.getCurrentUserId());
}
name = getParameterByName('gamegenre');
name = params.gamegenre;
if (name) {
return ApiClient.getGameGenre(name, Dashboard.getCurrentUserId());
}
name = getParameterByName('musicartist');
name = params.musicartist;
if (name) {
return ApiClient.getArtist(name, Dashboard.getCurrentUserId());
@ -38,21 +38,21 @@
}
}
function reload(page) {
function reload(page, params) {
Dashboard.showLoadingMsg();
getPromise().then(function (item) {
getPromise(params).then(function (item) {
reloadFromItem(page, item);
reloadFromItem(page, params, item);
});
}
function reloadFromItem(page, item) {
function reloadFromItem(page, params, item) {
currentItem = item;
var context = getContext(item);
var context = params.context;
LibraryMenu.setBackButtonVisible(true);
LibraryMenu.setMenuButtonVisible(false);
@ -300,11 +300,6 @@
}
function getContext(item) {
return getParameterByName('context');
}
function renderNextUp(page, item, user) {
var section = page.querySelector('.nextUpSection');
@ -1935,9 +1930,7 @@
});
}
function splitVersions(page) {
var id = getParameterByName('id');
function splitVersions(page, params) {
require(['confirm'], function (confirm) {
@ -1947,13 +1940,13 @@
ApiClient.ajax({
type: "DELETE",
url: ApiClient.getUrl("Videos/" + id + "/AlternateSources")
url: ApiClient.getUrl("Videos/" + params.id + "/AlternateSources")
}).then(function () {
Dashboard.hideLoadingMsg();
reload(page);
reload(page, params);
});
});
});
@ -2002,7 +1995,7 @@
LibraryBrowser.showPlayMenu(button, currentItem.Id, currentItem.Type, currentItem.IsFolder, mediaType, userdata.PlaybackPositionTicks);
}
function deleteTimer(page, id) {
function deleteTimer(page, params, id) {
require(['confirm'], function (confirm) {
@ -2016,129 +2009,12 @@
toast(Globalize.translate('MessageRecordingCancelled'));
});
reload(page);
reload(page, params);
});
});
});
}
pageIdOn('pageinit', "itemDetailPage", function () {
var page = this;
$('.btnPlay', page).on('click', function () {
playCurrentItem(this);
});
$('.btnPlayTrailer', page).on('click', function () {
playTrailer(page);
});
$('.btnSplitVersions', page).on('click', function () {
splitVersions(page);
});
$('.btnSync', page).on('click', function () {
require(['syncDialog'], function (syncDialog) {
syncDialog.showMenu({
items: [currentItem]
});
});
});
$('.btnRecord,.btnFloatingRecord', page).on('click', function () {
var id = getParameterByName('id');
Dashboard.showLoadingMsg();
require(['recordingCreator'], function (recordingCreator) {
recordingCreator.show(id, currentItem.ServerId).then(function () {
reload(page);
});
});
});
$('.btnCancelRecording', page).on('click', function () {
deleteTimer(page, currentItem.TimerId);
});
$('.btnMoreCommands', page).on('click', function () {
var button = this;
Dashboard.getCurrentUser().then(function (user) {
LibraryBrowser.showMoreCommands(button, currentItem.Id, currentItem.Type, LibraryBrowser.getMoreCommands(currentItem, user));
});
});
$('.childrenItemsContainer', page).on('playallfromhere', function (e, index) {
LibraryBrowser.playAllFromHere(_childrenItemsFunction, index);
}).on('queueallfromhere', function (e, index) {
LibraryBrowser.queueAllFromHere(_childrenItemsFunction, index);
});
$(page).on("click", ".moreScenes", function () {
Dashboard.getCurrentUser().then(function (user) {
renderScenes(page, currentItem, user);
});
}).on("click", ".morePeople", function () {
renderCast(page, currentItem, getContext(currentItem));
}).on("click", ".moreSpecials", function () {
Dashboard.getCurrentUser().then(function (user) {
renderSpecials(page, currentItem, user);
});
}).on("click", ".moreCriticReviews", function () {
renderCriticReviews(page, currentItem);
});
//var btnMore = page.querySelectorAll('.btnMoreCommands iron-icon');
//for (var i = 0, length = btnMore.length; i < length; i++) {
// btnMore[i].icon = AppInfo.moreIcon;
//}
});
pageIdOn('pagebeforeshow', "itemDetailPage", function () {
var page = this;
reload(page);
Events.on(ApiClient, 'websocketmessage', onWebSocketMessage);
Events.on(LibraryBrowser, 'itemdeleting', onItemDeleted);
});
pageIdOn('pagebeforehide', "itemDetailPage", function () {
Events.off(LibraryBrowser, 'itemdeleting', onItemDeleted);
currentItem = null;
var page = this;
Events.off(ApiClient, 'websocketmessage', onWebSocketMessage);
LibraryMenu.setTransparentMenu(false);
});
function itemDetailPage() {
var self = this;
@ -2154,4 +2030,111 @@
window.ItemDetailPage = new itemDetailPage();
return function (view, params) {
$('.btnPlay', view).on('click', function () {
playCurrentItem(this);
});
$('.btnPlayTrailer', view).on('click', function () {
playTrailer(view);
});
$('.btnSplitVersions', view).on('click', function () {
splitVersions(view, params);
});
$('.btnSync', view).on('click', function () {
require(['syncDialog'], function (syncDialog) {
syncDialog.showMenu({
items: [currentItem]
});
});
});
$('.btnRecord,.btnFloatingRecord', view).on('click', function () {
var id = params.id;
Dashboard.showLoadingMsg();
require(['recordingCreator'], function (recordingCreator) {
recordingCreator.show(id, currentItem.ServerId).then(function () {
reload(view, params);
});
});
});
$('.btnCancelRecording', view).on('click', function () {
deleteTimer(view, params, currentItem.TimerId);
});
$('.btnMoreCommands', view).on('click', function () {
var button = this;
Dashboard.getCurrentUser().then(function (user) {
LibraryBrowser.showMoreCommands(button, currentItem.Id, currentItem.Type, LibraryBrowser.getMoreCommands(currentItem, user));
});
});
$('.childrenItemsContainer', view).on('playallfromhere', function (e, index) {
LibraryBrowser.playAllFromHere(_childrenItemsFunction, index);
}).on('queueallfromhere', function (e, index) {
LibraryBrowser.queueAllFromHere(_childrenItemsFunction, index);
});
$(view).on("click", ".moreScenes", function () {
Dashboard.getCurrentUser().then(function (user) {
renderScenes(view, currentItem, user);
});
}).on("click", ".morePeople", function () {
renderCast(view, currentItem, params.context);
}).on("click", ".moreSpecials", function () {
Dashboard.getCurrentUser().then(function (user) {
renderSpecials(view, currentItem, user);
});
}).on("click", ".moreCriticReviews", function () {
renderCriticReviews(view, currentItem);
});
//var btnMore = page.querySelectorAll('.btnMoreCommands iron-icon');
//for (var i = 0, length = btnMore.length; i < length; i++) {
// btnMore[i].icon = AppInfo.moreIcon;
//}
view.addEventListener('viewbeforeshow', function () {
var page = this;
reload(page, params);
Events.on(ApiClient, 'websocketmessage', onWebSocketMessage);
Events.on(LibraryBrowser, 'itemdeleting', onItemDeleted);
});
view.addEventListener('viewbeforehide', function () {
Events.off(LibraryBrowser, 'itemdeleting', onItemDeleted);
currentItem = null;
Events.off(ApiClient, 'websocketmessage', onWebSocketMessage);
LibraryMenu.setTransparentMenu(false);
});
};
});

View File

@ -7,7 +7,6 @@
$('#selectGuideDays', page).val(config.GuideDays || '');
$('#chkMovies', page).checked(config.EnableMovieProviders);
$('#chkOrganize', page).checked(config.EnableAutoOrganize);
$('#chkConvertRecordings', page).checked(config.EnableRecordingEncoding);
$('#chkPreserveAudio', page).checked(config.EnableOriginalAudioWithEncodedRecordings || false);
@ -33,7 +32,6 @@
ApiClient.getNamedConfiguration("livetv").then(function (config) {
config.GuideDays = $('#selectGuideDays', form).val() || null;
config.EnableMovieProviders = $('#chkMovies', form).checked();
config.EnableAutoOrganize = $('#chkOrganize', form).checked();
config.EnableRecordingEncoding = $('#chkConvertRecordings', form).checked();
config.EnableOriginalAudioWithEncodedRecordings = $('#chkPreserveAudio', form).checked();

View File

@ -36,10 +36,6 @@
return enableScrollX() ? 'overflowPortrait' : 'portrait';
}
function getSquareShape() {
return enableScrollX() ? 'overflowSquare' : 'square';
}
function getLibraryButtonsHtml(items) {
var html = "";
@ -495,7 +491,7 @@
ExcludeLocationTypes: "Virtual",
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
EnableTotalRecordCount: 0
EnableTotalRecordCount: false
};
return ApiClient.getItems(userId, options).then(function (result) {
@ -679,6 +675,7 @@
userId: userId,
limit: 5,
Fields: "PrimaryImageAspectRatio,SyncInfo",
IsInProgress: false
}).then(function (result) {
@ -702,7 +699,7 @@
}
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: getSquareShape(),
shape: enableScrollX() ? 'autoOverflow' : 'auto',
showTitle: true,
showParentTitle: true,
coverImage: true,

View File

@ -1280,19 +1280,6 @@ var Dashboard = {
Method: 'Embed'
});
// These don't play very well
profile.CodecProfiles.push({
Type: 'VideoAudio',
Codec: 'dca',
Conditions: [
{
Condition: 'LessThanEqual',
Property: 'AudioChannels',
Value: 6
}
]
});
profile.CodecProfiles.push({
Type: 'VideoAudio',
Codec: 'aac,mp3',
@ -2539,7 +2526,8 @@ var AppInfo = {};
defineRoute({
path: '/itemdetails.html',
dependencies: ['paper-button'],
dependencies: ['paper-button', 'tileitemcss', 'scripts/livetvcomponents', 'paper-fab', 'paper-item-body', 'paper-icon-item', 'paper-icon-button-light'],
controller: 'scripts/itemdetailpage',
autoFocus: false,
transition: 'fade'
});

View File

@ -109,7 +109,7 @@
ParentId: parentId,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
EnableTotalRecordCount: 0
EnableTotalRecordCount: false
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).then(function (result) {

View File

@ -11,7 +11,7 @@
UserId: Dashboard.getCurrentUserId(),
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
EnableTotalRecordCount: 0
EnableTotalRecordCount: false
};
query.ParentId = params.topParentId;