mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
3.0.5666.2
This commit is contained in:
parent
17a0f1578d
commit
8030454e19
13 changed files with 175 additions and 137 deletions
|
@ -482,6 +482,63 @@
|
|||
});
|
||||
};
|
||||
|
||||
self.getDownloadSpeed = function (byteSize) {
|
||||
|
||||
var url = self.getUrl('Playback/BitrateTest', {
|
||||
|
||||
Size: byteSize
|
||||
});
|
||||
|
||||
var now = new Date().getTime();
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
|
||||
self.get(url).done(function () {
|
||||
|
||||
var responseTime = new Date().getTime() - now;
|
||||
responseTime /= 1000;
|
||||
var bytesPerSecond = byteSize / responseTime;
|
||||
|
||||
deferred.resolveWith(null, [bytesPerSecond]);
|
||||
|
||||
}).fail(function () {
|
||||
|
||||
deferred.reject();
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
};
|
||||
|
||||
self.detectBitrate = function () {
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
|
||||
// First try a small amount so that we don't hang up their mobile connection
|
||||
self.getDownloadSpeed(1000000).done(function (bitrate) {
|
||||
|
||||
if (bitrate < 3000000) {
|
||||
deferred.resolveWith(null, [Math.round(bitrate * .8)]);
|
||||
} else {
|
||||
|
||||
// If that produced a fairly high speed, try again with a larger size to get a more accurate result
|
||||
self.getDownloadSpeed(2000000).done(function (bitrate) {
|
||||
|
||||
deferred.resolveWith(null, [Math.round(bitrate * .8)]);
|
||||
|
||||
}).fail(function () {
|
||||
|
||||
deferred.reject();
|
||||
});
|
||||
}
|
||||
|
||||
}).fail(function () {
|
||||
|
||||
deferred.reject();
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets an item from the server
|
||||
* Omit itemId to get the root folder.
|
||||
|
|
52
dashboard-ui/cordova/android/immersive.js
vendored
52
dashboard-ui/cordova/android/immersive.js
vendored
|
@ -32,51 +32,6 @@
|
|||
//// Hide system UI and keep it hidden (Android 4.4+ only)
|
||||
//AndroidFullScreen.immersiveMode(onSuccess, onError);
|
||||
|
||||
var currentPlayer;
|
||||
|
||||
function onPlaybackStart(e, state) {
|
||||
|
||||
var player = this;
|
||||
|
||||
if (player.isLocalPlayer && state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
|
||||
AndroidFullScreen.immersiveMode(onSuccess, onError);
|
||||
}
|
||||
}
|
||||
|
||||
function onPlaybackStopped(e, state) {
|
||||
|
||||
var player = this;
|
||||
|
||||
if (player.isLocalPlayer && state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
|
||||
|
||||
if (!AppSettings.enableFullScreen()) {
|
||||
AndroidFullScreen.showSystemUI(onSuccess, onError);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function bindToPlayer(player) {
|
||||
|
||||
releaseCurrentPlayer();
|
||||
|
||||
currentPlayer = player;
|
||||
|
||||
if (!player.isLocalPlayer) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(player).on('playbackstart', onPlaybackStart)
|
||||
.on('playbackstop', onPlaybackStopped);
|
||||
}
|
||||
|
||||
function releaseCurrentPlayer() {
|
||||
|
||||
if (currentPlayer) {
|
||||
|
||||
$(currentPlayer).off('playbackstart', onPlaybackStart).off('playbackstop', onPlaybackStopped);
|
||||
}
|
||||
}
|
||||
|
||||
function updateFromSetting(leaveFullScreen) {
|
||||
|
||||
if (AppSettings.enableFullScreen()) {
|
||||
|
@ -91,13 +46,6 @@
|
|||
|
||||
Logger.log('binding fullscreen to MediaController');
|
||||
|
||||
$(MediaController).on('playerchange', function () {
|
||||
|
||||
bindToPlayer(MediaController.getCurrentPlayer());
|
||||
});
|
||||
|
||||
bindToPlayer(MediaController.getCurrentPlayer());
|
||||
|
||||
updateFromSetting(false);
|
||||
|
||||
$(AppSettings).on('settingupdated', function (e, key) {
|
||||
|
|
24
dashboard-ui/cordova/android/vlcplayer.js
vendored
24
dashboard-ui/cordova/android/vlcplayer.js
vendored
|
@ -95,11 +95,22 @@
|
|||
return;
|
||||
}
|
||||
|
||||
var tIndex = val.indexOf('#t=');
|
||||
var startPosMs = 0;
|
||||
|
||||
if (tIndex != -1) {
|
||||
startPosMs = val.substring(tIndex + 3);
|
||||
startPosMs = parseFloat(startPosMs) * 1000;
|
||||
}
|
||||
|
||||
if (options.type == 'audio') {
|
||||
|
||||
AndroidVlcPlayer.playAudioVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), posterUrl);
|
||||
} else {
|
||||
AndroidVlcPlayer.playVideoVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), posterUrl);
|
||||
|
||||
var playbackStartInfo = {};
|
||||
|
||||
AndroidVlcPlayer.playVideoVlc(val, startPosMs, item.Name, JSON.stringify(mediaSource), JSON.stringify(playbackStartInfo));
|
||||
}
|
||||
|
||||
playerState.currentSrc = val;
|
||||
|
@ -175,6 +186,17 @@
|
|||
return deferred.promise();
|
||||
};
|
||||
|
||||
self.onActivityClosed = function (wasStopped, hasError, endPositionMs) {
|
||||
|
||||
playerState.currentTime = endPositionMs;
|
||||
|
||||
if (wasStopped) {
|
||||
MediaPlayer.stop(false);
|
||||
}
|
||||
|
||||
self.report('playbackstop', playerState.duration, endPositionMs, false, 100);
|
||||
};
|
||||
|
||||
window.AudioRenderer.Current = self;
|
||||
window.VideoRenderer.Current = self;
|
||||
}
|
||||
|
|
2
dashboard-ui/cordova/imagestore.js
vendored
2
dashboard-ui/cordova/imagestore.js
vendored
|
@ -57,7 +57,7 @@
|
|||
// Use the embedded server for iOS8, and also if we don't know the iOS version, just to be safe
|
||||
//if ($.browser.iOSVersion == 8 || !$.browser.iOSVersion)
|
||||
{
|
||||
//return url.replace('file://', '');
|
||||
return url.replace('file://', '');
|
||||
}
|
||||
}
|
||||
return url;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<title>Emby</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="movieTrailersPage" data-role="page" class="page libraryPage" data-require="scripts/movietrailers">
|
||||
<div id="movieTrailersPage" data-role="page" class="page libraryPage" data-require="scripts/movietrailers,jqmicons">
|
||||
|
||||
<div class="libraryViewNav scopedLibraryViewNav">
|
||||
<a href="moviesrecommended.html"><i class="material-icons">info</i>${TabSuggestions}</a>
|
||||
|
@ -22,7 +22,7 @@
|
|||
<div class="viewSettings">
|
||||
<div class="listTopPaging">
|
||||
</div>
|
||||
<button class="btnTrailerReel" type="button" data-icon="play" data-inline="true" data-mini="true">${ButtonTrailerReel}</button>
|
||||
<button class="btnTrailerReel" type="button" data-icon="action" data-inline="true" data-mini="true">${ButtonTrailerReel}</button>
|
||||
</div>
|
||||
<div id="items" class="itemsContainer paddedItemsContainer"></div>
|
||||
<p class="noItemsMessage" style="display:none;text-align:center;">${MessageNoTrailersFound}</p>
|
||||
|
|
|
@ -545,6 +545,10 @@
|
|||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
onHardwareMenuButtonClick: function () {
|
||||
openMainDrawer();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -626,8 +626,8 @@
|
|||
html += '<div class="videoTopControlsLogo"></div>';
|
||||
html += '<div class="videoAdvancedControls">';
|
||||
|
||||
html += '<paper-icon-button icon="skip-previous" class="previousTrackButton mediaButton videoTrackControl" onclick="MediaPlayer.previousTrack();"></paper-icon-button>';
|
||||
html += '<paper-icon-button icon="skip-next" class="nextTrackButton mediaButton videoTrackControl" onclick="MediaPlayer.nextTrack();"></paper-icon-button>';
|
||||
html += '<paper-icon-button icon="skip-previous" class="previousTrackButton mediaButton videoTrackControl hide" onclick="MediaPlayer.previousTrack();"></paper-icon-button>';
|
||||
html += '<paper-icon-button icon="skip-next" class="nextTrackButton mediaButton videoTrackControl hide" onclick="MediaPlayer.nextTrack();"></paper-icon-button>';
|
||||
|
||||
// Embedding onclicks due to issues not firing in cordova safari
|
||||
html += '<paper-icon-button icon="audiotrack" class="mediaButton videoAudioButton" onclick="MediaPlayer.showAudioTracksFlyout();"></paper-icon-button>';
|
||||
|
@ -652,12 +652,12 @@
|
|||
html += '<div class="nowPlayingTabs"></div>';
|
||||
html += '</div>'; // nowPlayingInfo
|
||||
|
||||
html += '<paper-icon-button icon="skip-previous" class="previousTrackButton mediaButton videoTrackControl" onclick="MediaPlayer.previousTrack();"></paper-icon-button>';
|
||||
html += '<paper-icon-button icon="skip-previous" class="previousTrackButton mediaButton videoTrackControl hide" onclick="MediaPlayer.previousTrack();"></paper-icon-button>';
|
||||
|
||||
html += '<paper-icon-button id="video-playButton" icon="play-arrow" class="mediaButton unpauseButton" onclick="MediaPlayer.unpause();"></paper-icon-button>';
|
||||
html += '<paper-icon-button id="video-pauseButton" icon="pause" class="mediaButton pauseButton" onclick="MediaPlayer.pause();"></paper-icon-button>';
|
||||
|
||||
html += '<paper-icon-button icon="skip-next" class="nextTrackButton mediaButton videoTrackControl" onclick="MediaPlayer.nextTrack();"></paper-icon-button>';
|
||||
html += '<paper-icon-button icon="skip-next" class="nextTrackButton mediaButton videoTrackControl hide" onclick="MediaPlayer.nextTrack();"></paper-icon-button>';
|
||||
|
||||
html += '<paper-slider pin step=".1" min="0" max="100" value="0" class="videoPositionSlider" style="width:300px;vertical-align:middle;margin-left:-1em;"></paper-slider>';
|
||||
|
||||
|
@ -933,8 +933,11 @@
|
|||
unbindEventsForPlayback(mediaRenderer);
|
||||
};
|
||||
|
||||
self.playVideo = function (item, mediaSource, startPosition) {
|
||||
self.playVideo = function (item, mediaSource, startPosition, callback) {
|
||||
|
||||
//ApiClient.detectBitrate().done(function (b) {
|
||||
// alert(b);
|
||||
//});
|
||||
requirejs(['videorenderer'], function () {
|
||||
|
||||
var streamInfo = self.createStreamInfo('Video', item, mediaSource, startPosition);
|
||||
|
@ -953,11 +956,11 @@
|
|||
Dashboard.hideLoadingMsg();
|
||||
|
||||
}).done(function () {
|
||||
self.playVideoInternal(item, mediaSource, startPosition, streamInfo);
|
||||
self.playVideoInternal(item, mediaSource, startPosition, streamInfo, callback);
|
||||
});
|
||||
|
||||
} else {
|
||||
self.playVideoInternal(item, mediaSource, startPosition, streamInfo);
|
||||
self.playVideoInternal(item, mediaSource, startPosition, streamInfo, callback);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -966,7 +969,7 @@
|
|||
return true;
|
||||
}
|
||||
|
||||
self.playVideoInternal = function (item, mediaSource, startPosition, streamInfo) {
|
||||
self.playVideoInternal = function (item, mediaSource, startPosition, streamInfo, callback) {
|
||||
|
||||
var videoUrl = streamInfo.url;
|
||||
var contentType = streamInfo.mimeType;
|
||||
|
@ -990,7 +993,7 @@
|
|||
//show stop button
|
||||
$('#video-playButton', videoControls).hide();
|
||||
$('#video-pauseButton', videoControls).show();
|
||||
$('.videoTrackControl').hide();
|
||||
$('.videoTrackControl').visible(false);
|
||||
|
||||
var videoElement = $('#videoElement', mediaPlayerContainer);
|
||||
|
||||
|
@ -1166,6 +1169,10 @@
|
|||
if (videoUrl.indexOf('.m3u8') == -1) {
|
||||
mediaRenderer.unpause();
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -1180,7 +1187,7 @@
|
|||
}
|
||||
|
||||
if (length < 2) {
|
||||
$('.videoTrackControl').hide();
|
||||
$('.videoTrackControl').visible(false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1202,7 +1209,8 @@
|
|||
nextTrackButton.removeAttribute('disabled');
|
||||
}
|
||||
|
||||
$('.videoTrackControl', controls).show();
|
||||
$(previousTrackButton).visible(true);
|
||||
$(nextTrackButton).visible(true);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -975,16 +975,12 @@
|
|||
if (item.MediaType === "Video") {
|
||||
|
||||
requirejs(['videorenderer'], function () {
|
||||
self.playVideo(item, self.currentMediaSource, startPosition);
|
||||
self.playVideo(item, self.currentMediaSource, startPosition, callback);
|
||||
});
|
||||
|
||||
} else if (item.MediaType === "Audio") {
|
||||
|
||||
playAudio(item, self.currentMediaSource, startPosition);
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
playAudio(item, self.currentMediaSource, startPosition, callback);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1720,10 +1716,14 @@
|
|||
self.setCurrentTime(currentTicks);
|
||||
}
|
||||
|
||||
function playAudio(item, mediaSource, startPositionTicks) {
|
||||
function playAudio(item, mediaSource, startPositionTicks, callback) {
|
||||
|
||||
requirejs(['audiorenderer'], function () {
|
||||
playAudioInternal(item, mediaSource, startPositionTicks);
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -4,27 +4,44 @@
|
|||
|
||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
||||
|
||||
// The base query options
|
||||
var query = {
|
||||
var data = {};
|
||||
|
||||
function getQuery() {
|
||||
|
||||
var key = getSavedQueryKey();
|
||||
var pageData = data[key];
|
||||
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,DateCreated,SyncInfo,ItemCounts",
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
Limit: LibraryBrowser.getDefaultPageSize()
|
||||
}
|
||||
};
|
||||
|
||||
pageData.query.ParentId = LibraryMenu.getTopParentId();
|
||||
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
return pageData.query;
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
|
||||
return 'musicartists' + (query.ParentId || '');
|
||||
return getWindowUrl();
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
var query = getQuery();
|
||||
|
||||
ApiClient.getAlbumArtists(Dashboard.getCurrentUserId(), query).done(function (result) {
|
||||
|
||||
// Scroll back up so they can see the results from the beginning
|
||||
|
@ -100,13 +117,15 @@
|
|||
});
|
||||
|
||||
LibraryBrowser.saveQueryValues(getSavedQueryKey(), query);
|
||||
|
||||
LibraryBrowser.setLastRefreshed(page);
|
||||
Dashboard.hideLoadingMsg();
|
||||
});
|
||||
}
|
||||
|
||||
function updateFilterControls(page) {
|
||||
|
||||
var query = getQuery();
|
||||
|
||||
$('.chkStandardFilter', page).each(function () {
|
||||
|
||||
var filters = "," + (query.Filters || "");
|
||||
|
@ -129,6 +148,8 @@
|
|||
|
||||
filtersLoaded = true;
|
||||
|
||||
var query = getQuery();
|
||||
|
||||
QueryFilters.loadFilters(page, Dashboard.getCurrentUserId(), query, function () {
|
||||
|
||||
reloadItems(page);
|
||||
|
@ -147,6 +168,8 @@
|
|||
|
||||
$('.chkStandardFilter', this).on('change', function () {
|
||||
|
||||
var query = getQuery();
|
||||
|
||||
var filterName = this.getAttribute('data-filter');
|
||||
var filters = query.Filters || "";
|
||||
|
||||
|
@ -164,6 +187,8 @@
|
|||
|
||||
$('.alphabetPicker', this).on('alphaselect', function (e, character) {
|
||||
|
||||
var query = getQuery();
|
||||
|
||||
query.NameStartsWithOrGreater = character;
|
||||
query.StartIndex = 0;
|
||||
|
||||
|
@ -171,6 +196,8 @@
|
|||
|
||||
}).on('alphaclear', function (e) {
|
||||
|
||||
var query = getQuery();
|
||||
|
||||
query.NameStartsWithOrGreater = '';
|
||||
|
||||
reloadItems(page);
|
||||
|
@ -186,6 +213,8 @@
|
|||
});
|
||||
|
||||
$('#selectPageSize', page).on('change', function () {
|
||||
var query = getQuery();
|
||||
|
||||
query.Limit = parseInt(this.value);
|
||||
query.StartIndex = 0;
|
||||
reloadItems(page);
|
||||
|
@ -194,22 +223,12 @@
|
|||
}).on('pagebeforeshowready', "#musicAlbumArtistsPage", function () {
|
||||
|
||||
var page = this;
|
||||
query.ParentId = LibraryMenu.getTopParentId();
|
||||
var query = getQuery();
|
||||
|
||||
var limit = LibraryBrowser.getDefaultPageSize(pageSizeKey, 100);
|
||||
|
||||
// If the default page size has changed, the start index will have to be reset
|
||||
if (limit != query.Limit) {
|
||||
query.Limit = limit;
|
||||
query.StartIndex = 0;
|
||||
}
|
||||
|
||||
var viewkey = getSavedQueryKey();
|
||||
|
||||
LibraryBrowser.loadSavedQueryValues(viewkey, query);
|
||||
QueryFilters.onPageShow(page, query);
|
||||
|
||||
LibraryBrowser.getSavedViewSetting(viewkey).done(function (val) {
|
||||
if (LibraryBrowser.needsRefresh(page)) {
|
||||
LibraryBrowser.getSavedViewSetting(getSavedQueryKey()).done(function (val) {
|
||||
|
||||
if (val) {
|
||||
$('#selectView', page).val(val).selectmenu('refresh').trigger('change');
|
||||
|
@ -217,6 +236,7 @@
|
|||
reloadItems(page);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
updateFilterControls(this);
|
||||
});
|
||||
|
|
|
@ -2,19 +2,6 @@
|
|||
|
||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
||||
|
||||
// The base query options
|
||||
var query = {
|
||||
|
||||
SortBy: "AlbumArtist,SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "MusicAlbum",
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,SyncInfo",
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
};
|
||||
|
||||
var data = {};
|
||||
|
||||
function getQuery() {
|
||||
|
@ -295,12 +282,11 @@
|
|||
|
||||
var page = this;
|
||||
|
||||
var viewKey = getSavedQueryKey();
|
||||
LibraryBrowser.loadSavedQueryValues(viewKey, query);
|
||||
var query = getQuery();
|
||||
QueryFilters.onPageShow(page, query);
|
||||
|
||||
if (LibraryBrowser.needsRefresh(page)) {
|
||||
LibraryBrowser.getSavedViewSetting(viewKey).done(function (val) {
|
||||
LibraryBrowser.getSavedViewSetting(getSavedQueryKey()).done(function (val) {
|
||||
|
||||
if (val) {
|
||||
$('#selectView', page).val(val).selectmenu('refresh').trigger('change');
|
||||
|
|
|
@ -78,6 +78,9 @@
|
|||
|
||||
ApiClient.updateUserConfiguration(user.Id, user.Configuration).done(function () {
|
||||
Dashboard.alert(Globalize.translate('SettingsSaved'));
|
||||
|
||||
}).always(function () {
|
||||
Dashboard.hideLoadingMsg();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -151,11 +151,7 @@
|
|||
|
||||
if (items.length) {
|
||||
html += '<div>';
|
||||
html += '<h1 style="display:inline-block; vertical-align:middle;" class="listHeader">' + Globalize.translate('HeaderLatestMedia') + '</h1>';
|
||||
|
||||
if (user.Policy.EnableUserPreferenceAccess && !AppInfo.isNativeApp) {
|
||||
html += '<a href="mypreferencesdisplay.html" class="clearLink" style="margin-left:2em;"><paper-button raised class="submit mini"><iron-icon icon="mode-edit"></iron-icon><span>' + Globalize.translate('ButtonEdit') + '</span></paper-button></a>';
|
||||
}
|
||||
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestMedia') + '</h1>';
|
||||
|
||||
html += '</div>';
|
||||
|
||||
|
@ -239,11 +235,7 @@
|
|||
var cssClass = index !== 0 ? 'listHeader' : 'listHeader';
|
||||
|
||||
html += '<div>';
|
||||
html += '<h1 style="display:inline-block; vertical-align:middle;" class="' + cssClass + '">' + Globalize.translate('HeaderMyMedia') + '</h1>';
|
||||
|
||||
if (user.Policy.EnableUserPreferenceAccess && !AppInfo.isNativeApp) {
|
||||
html += '<a href="mypreferencesdisplay.html" class="clearLink" style="margin-left:2em;"><paper-button raised class="submit mini"><iron-icon icon="mode-edit"></iron-icon><span>' + Globalize.translate('ButtonEdit') + '</span></paper-button></a>';
|
||||
}
|
||||
html += '<h1 class="' + cssClass + '">' + Globalize.translate('HeaderMyMedia') + '</h1>';
|
||||
|
||||
html += '</div>';
|
||||
|
||||
|
|
|
@ -2063,9 +2063,7 @@ var AppInfo = {};
|
|||
|
||||
function initCordovaWithDeviceId(deferred, deviceId) {
|
||||
|
||||
if ($.browser.android) {
|
||||
require(['cordova/imagestore']);
|
||||
}
|
||||
|
||||
var capablities = Dashboard.capabilities();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue