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

update jqm

This commit is contained in:
Luke Pulverenti 2015-09-05 12:58:27 -04:00
parent 6b21f2fbd0
commit 8996ae4eab
39 changed files with 1162 additions and 686 deletions

View file

@ -27,14 +27,14 @@
"web-component-tester": "*", "web-component-tester": "*",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
}, },
"homepage": "https://github.com/polymerelements/iron-behaviors", "homepage": "https://github.com/PolymerElements/iron-behaviors",
"_release": "1.0.8", "_release": "1.0.8",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.0.8", "tag": "v1.0.8",
"commit": "663ad706b43989f4961d945b8116cf4db346532f" "commit": "663ad706b43989f4961d945b8116cf4db346532f"
}, },
"_source": "git://github.com/polymerelements/iron-behaviors.git", "_source": "git://github.com/PolymerElements/iron-behaviors.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "polymerelements/iron-behaviors" "_originalSource": "PolymerElements/iron-behaviors"
} }

View file

@ -0,0 +1 @@
bower_components

View file

@ -0,0 +1,31 @@
{
"name": "iron-collapse",
"version": "1.0.3",
"description": "Provides a collapsable container",
"authors": [
"The Polymer Authors"
],
"keywords": [
"web-components",
"polymer",
"container"
],
"private": true,
"repository": {
"type": "git",
"url": "https://github.com/PolymerElements/iron-collapse"
},
"license": "http://polymer.github.io/LICENSE.txt",
"homepage": "https://github.com/PolymerElements/iron-collapse",
"ignore": [],
"dependencies": {
"polymer": "Polymer/polymer#^1.0.0"
},
"devDependencies": {
"web-component-tester": "*",
"test-fixture": "PolymerElements/test-fixture#^1.0.0",
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
"paper-styles": "PolymerElements/paper-styles#^1.0.0",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
}
}

View file

@ -0,0 +1,74 @@
<!doctype html>
<!--
@license
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
<head>
<title>iron-collapse demo</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="../../webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="../iron-collapse.html">
<link rel="stylesheet" href="../../paper-styles/demo.css">
<style>
.heading {
padding: 10px 15px;
margin-top: 20px;
background-color: #f3f3f3;
border: 1px solid #dedede;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
font-size: 18px;
cursor: pointer;
-webkit-tap-highlight-color: rgba(0,0,0,0);
width: 100%;
text-align: left;
}
.content {
padding: 15px;
border: 1px solid #dedede;
border-top: none;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
}
</style>
</head>
<body unresolved>
<button class="heading" onclick="document.querySelector('#collapse1').toggle();">Collapse #1</button>
<iron-collapse id="collapse1">
<div class="content">
<div>Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea, id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus. Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea, id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus.</div>
</div>
</iron-collapse>
<button class="heading" onclick="document.querySelector('#collapse2').toggle();">Collapse #2</button>
<iron-collapse id="collapse2">
<div class="content">
<div>Pro saepe pertinax ei, ad pri animal labores suscipiantur. Modus commodo minimum eum te, vero utinam assueverit per eu, zril oportere suscipiantur pri te. Partem percipitur deterruisset ad sea, at eam suas luptatum dissentiunt. No error alienum pro, erant senserit ex mei, pri semper alterum no. Ut habemus menandri vulputate mea. Feugiat verterem ut sed. Dolores maiestatis id per. Pro saepe pertinax ei, ad pri animal labores suscipiantur. Modus commodo minimum eum te, vero utinam assueverit per eu, zril oportere suscipiantur pri te. Partem percipitur deterruisset ad sea, at eam suas luptatum dissentiunt. No error alienum pro, erant senserit ex mei, pri semper alterum no. Ut habemus menandri vulputate mea. Feugiat verterem ut sed. Dolores maiestatis id per.</div>
<button class="heading" onclick="document.querySelector('#collapse3').toggle();">Collapse #3</button>
<iron-collapse id="collapse3">
<div class="content">
<div>Iisque perfecto dissentiet cum et, sit ut quot mandamus, ut vim tibique splendide instructior. Id nam odio natum malorum, tibique copiosae expetenda mel ea. Mea melius malorum ut. Ut nec tollit vocent timeam. Facer nonumy numquam id his, munere salutatus consequuntur eum et, eum cotidieque definitionem signiferumque id. Ei oblique graecis patrioque vis, et probatus dignissim inciderint vel. Sed id paulo erroribus, autem semper accusamus in mel. Iisque perfecto dissentiet cum et, sit ut quot mandamus, ut vim tibique splendide instructior. Id nam odio natum malorum, tibique copiosae expetenda mel ea. Mea melius malorum ut. Ut nec tollit vocent timeam. Facer nonumy numquam id his, munere salutatus consequuntur eum et, eum cotidieque definitionem signiferumque id. Ei oblique graecis patrioque vis, et probatus dignissim inciderint vel. Sed id paulo erroribus, autem semper accusamus in mel.</div>
</div>
</iron-collapse>
</div>
</iron-collapse>
</body>
</html>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
<g id="background" display="none">
<rect display="inline" fill="#B0BEC5" width="225" height="126"/>
<path display="inline" fill="none" d="M167.5,51.7c3.7-0.8,6.9,2.4,6.1,6.1c-0.4,1.9-1.9,3.4-3.8,3.8c-3.7,0.8-6.9-2.4-6.1-6.1
C164.2,53.6,165.7,52.1,167.5,51.7z"/>
</g>
<g id="label">
</g>
<g id="art">
<path d="M151,102H73V52h78V102z M75,100h74V54H75V100z"/>
<path d="M151,38H73V24h78V38z M75,36h74V26H75V36z"/>
<circle cx="171" cy="51" r="4"/>
<path d="M151,72v-2c10.5,0,19-8.5,19-19s-8.5-19-19-19v-2c11.6,0,21,9.4,21,21S162.6,72,151,72z"/>
<g id="ic_x5F_add_x0D_">
</g>
</g>
<g id="Guides">
</g>
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,31 @@
<!doctype html>
<!--
@license
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
<title>iron-collapse</title>
<script src="../webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="../polymer/polymer.html">
<link rel="import" href="../iron-component-page/iron-component-page.html">
</head>
<body>
<iron-component-page></iron-component-page>
</body>
</html>

View file

@ -0,0 +1,200 @@
<!--
@license
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<link rel="import" href="../polymer/polymer.html">
<!--
`iron-collapse` creates a collapsible block of content. By default, the content
will be collapsed. Use `opened` or `toggle()` to show/hide the content.
<button on-click="toggle">toggle collapse</button>
<iron-collapse id="collapse">
<div>Content goes here...</div>
</iron-collapse>
...
toggle: function() {
this.$.collapse.toggle();
}
`iron-collapse` adjusts the height/width of the collapsible element to show/hide
the content. So avoid putting padding/margin/border on the collapsible directly,
and instead put a div inside and style that.
<style>
.collapse-content {
padding: 15px;
border: 1px solid #dedede;
}
</style>
<iron-collapse>
<div class="collapse-content">
<div>Content goes here...</div>
</div>
</iron-collapse>
@group Iron Elements
@hero hero.svg
@demo demo/index.html
@element iron-collapse
-->
<dom-module id="iron-collapse">
<style>
:host {
display: block;
transition-duration: 300ms;
}
:host(.iron-collapse-closed) {
display: none;
}
:host(:not(.iron-collapse-opened)) {
overflow: hidden;
}
</style>
<template>
<content></content>
</template>
</dom-module>
<script>
Polymer({
is: 'iron-collapse',
properties: {
/**
* If true, the orientation is horizontal; otherwise is vertical.
*
* @attribute horizontal
*/
horizontal: {
type: Boolean,
value: false,
observer: '_horizontalChanged'
},
/**
* Set opened to true to show the collapse element and to false to hide it.
*
* @attribute opened
*/
opened: {
type: Boolean,
value: false,
notify: true,
observer: '_openedChanged'
}
},
hostAttributes: {
role: 'group',
'aria-expanded': 'false'
},
listeners: {
transitionend: '_transitionEnd'
},
ready: function() {
// Avoid transition at the beginning e.g. page loads and enable
// transitions only after the element is rendered and ready.
this._enableTransition = true;
},
/**
* Toggle the opened state.
*
* @method toggle
*/
toggle: function() {
this.opened = !this.opened;
},
show: function() {
this.opened = true;
},
hide: function() {
this.opened = false;
},
updateSize: function(size, animated) {
this.enableTransition(animated);
var s = this.style;
var nochange = s[this.dimension] === size;
s[this.dimension] = size;
if (animated && nochange) {
this._transitionEnd();
}
},
enableTransition: function(enabled) {
this.style.transitionDuration = (enabled && this._enableTransition) ? '' : '0s';
},
_horizontalChanged: function() {
this.dimension = this.horizontal ? 'width' : 'height';
this.style.transitionProperty = this.dimension;
},
_openedChanged: function() {
if (this.opened) {
this.toggleClass('iron-collapse-closed', false);
this.updateSize('auto', false);
var s = this._calcSize();
this.updateSize('0px', false);
// force layout to ensure transition will go
/** @suppress {suspiciousCode} */ this.offsetHeight;
this.updateSize(s, true);
}
else {
this.toggleClass('iron-collapse-opened', false);
this.updateSize(this._calcSize(), false);
// force layout to ensure transition will go
/** @suppress {suspiciousCode} */ this.offsetHeight;
this.updateSize('0px', true);
}
this.setAttribute('aria-expanded', this.opened ? 'true' : 'false');
},
_transitionEnd: function() {
if (this.opened) {
this.updateSize('auto', false);
}
this.toggleClass('iron-collapse-closed', !this.opened);
this.toggleClass('iron-collapse-opened', this.opened);
this.enableTransition(false);
},
_calcSize: function() {
return this.getBoundingClientRect()[this.dimension] + 'px';
},
});
</script>

View file

@ -0,0 +1,93 @@
<!doctype html>
<!--
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
<head>
<title>iron-collapse-basic</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="../../webcomponentsjs/webcomponents-lite.js"></script>
<script src="../../web-component-tester/browser.js"></script>
<script src="../../test-fixture/test-fixture-mocha.js"></script>
<link rel="import" href="../../test-fixture/test-fixture.html">
<link rel="import" href="../iron-collapse.html">
</head>
<body>
<test-fixture id="test">
<template>
<iron-collapse id="collapse" opened>
<div>
Forma temperiemque cornua sidera dissociata cornua recessit innabilis ligavit: solidumque coeptis nullus caelum sponte phoebe di regat mentisque tanta austro capacius amphitrite sui quin postquam semina fossae liquidum umor galeae coeptis caligine liberioris quin liquidum matutinis invasit posset: flexi glomeravit radiis certis invasit oppida postquam onerosior inclusum dominari opifex terris pace finxit quam aquae nunc sine altae auroram quam habentem homo totidemque scythiam in pondus ensis tegit caecoque poena lapidosos humanas coeperunt poena aetas totidem nec natura aethera locavit caelumque distinxit animalibus phoebe cingebant moderantum porrexerat terrae possedit sua sole diu summaque obliquis melioris orbem
</div>
</iron-collapse>
</template>
</test-fixture>
<script>
suite('basic', function() {
var collapse;
var delay = 500;
var collapseHeight;
setup(function () {
collapse = fixture('test');
});
test('opened attribute', function() {
assert.equal(collapse.opened, true);
});
test('horizontal attribute', function() {
assert.equal(collapse.horizontal, false);
});
test('default opened height', function(done) {
setTimeout(function() {
// store height
collapseHeight = getComputedStyle(collapse).height;
// verify height not 0px
assert.notEqual(collapseHeight, '0px');
done();
}, delay);
});
test('set opened to false', function(done) {
collapse.opened = false;
setTimeout(function() {
var h = getComputedStyle(collapse).height;
// verify height is 0px
assert.equal(h, '0px');
done();
}, delay);
});
test('set opened to true', function(done) {
collapse.opened = true;
setTimeout(function() {
var h = getComputedStyle(collapse).height;
// verify height
assert.equal(h, collapseHeight);
done();
}, delay);
});
});
</script>
</body>
</html>

View file

@ -0,0 +1,91 @@
<!doctype html>
<!--
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
<head>
<title>iron-collapse-horizontal</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="../../webcomponentsjs/webcomponents-lite.js"></script>
<script src="../../web-component-tester/browser.js"></script>
<script src="../../test-fixture/test-fixture-mocha.js"></script>
<link rel="import" href="../../test-fixture/test-fixture.html">
<link rel="import" href="../iron-collapse.html">
</head>
<body>
<test-fixture id="test">
<template>
<iron-collapse id="collapse" opened horizontal>
<div>
Forma temperiemque cornua sidera dissociata cornua recessit innabilis ligavit: solidumque coeptis nullus caelum sponte phoebe di regat mentisque tanta austro capacius amphitrite sui quin postquam semina fossae liquidum umor galeae coeptis caligine liberioris quin liquidum matutinis invasit posset: flexi glomeravit radiis certis invasit oppida postquam onerosior inclusum dominari opifex terris pace finxit quam aquae nunc sine altae auroram quam habentem homo totidemque scythiam in pondus ensis tegit caecoque poena lapidosos humanas coeperunt poena aetas totidem nec natura aethera locavit caelumque distinxit animalibus phoebe cingebant moderantum porrexerat terrae possedit sua sole diu summaque obliquis melioris orbem
</div>
</iron-collapse>
</template>
</test-fixture>
<script>
suite('horizontal', function() {
var collapse;
var delay = 500;
var collapseHeight;
setup(function () {
collapse = fixture('test');
});
test('opened attribute', function() {
assert.equal(collapse.opened, true);
});
test('horizontal attribute', function() {
assert.equal(collapse.horizontal, true);
});
test('default opened width', function(done) {
setTimeout(function() {
// store actual width
width = getComputedStyle(collapse).width;
// verify width not 0px
assert.notEqual(width, '0px');
done();
}, delay);
});
test('set opened to false', function(done) {
collapse.opened = false;
setTimeout(function() {
var h = getComputedStyle(collapse).width;
// verify width is 0px
assert.equal(h, '0px');
done();
}, delay);
});
test('set opened to true', function(done) {
collapse.opened = true;
setTimeout(function() {
var h = getComputedStyle(collapse).width;
// verify width
assert.equal(h, width);
done();
}, delay);
});
});
</script>
</body>
</html>

View file

@ -0,0 +1,31 @@
<!doctype html>
<!--
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
<head>
<meta charset="utf-8">
<title>Tests</title>
<script src="../../web-component-tester/browser.js"></script>
</head>
<body>
<script>
WCT.loadSuites([
'basic.html',
'horizontal.html'
]);
</script>
</body>
</html>

View file

@ -31,6 +31,7 @@
left: 0; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
z-index: -1;
} }
.pageWithAbsoluteTabs neon-animatable { .pageWithAbsoluteTabs neon-animatable {
@ -524,7 +525,7 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
} }
.portraitDetailImageContainer + .primaryDetailsContainer { .portraitDetailImageContainer + .primaryDetailsContainer {
width: 75%; width: 74%;
} }
.parentName { .parentName {

View file

@ -72,7 +72,7 @@
.mainDrawerPanel #main { .mainDrawerPanel #main {
left: 0 !important; left: 0 !important;
position: relative !important; position: static !important;
z-index: 1; z-index: 1;
} }

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="editItemMetadataPage" data-role="page" class="page libraryPage metadataEditorPage noSecondaryNavPage" data-contextname="${HeaderMetadataManager}" data-require="jqmlistview,jqmpopup,scripts/editorsidebar,scripts/edititemmetadata,scripts/edititemsubtitles,scripts/editcollectionitems,scripts/edititemimages"> <div id="editItemMetadataPage" data-role="page" class="page libraryPage metadataEditorPage noSecondaryNavPage" data-contextname="${HeaderMetadataManager}" data-require="jqmcollapsible,jqmlistview,jqmpopup,scripts/editorsidebar,scripts/edititemmetadata,scripts/edititemsubtitles,scripts/editcollectionitems,scripts/edititemimages">
<div> <div>
<div class="editPageSidebar" style="overflow:auto;"> <div class="editPageSidebar" style="overflow:auto;">
<div class="libraryTree"> <div class="libraryTree">

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="gamesPage" data-role="page" class="page libraryPage listPage" data-require="scripts/gamespage,scripts/queryfilters"> <div id="gamesPage" data-role="page" class="page libraryPage listPage" data-require="jqmcollapsible,scripts/gamespage,scripts/queryfilters">
<div class="libraryViewNav scopedLibraryViewNav"> <div class="libraryViewNav scopedLibraryViewNav">
<a href="gamesrecommended.html">${TabSuggestions}</a> <a href="gamesrecommended.html">${TabSuggestions}</a>
<a href="#" class="ui-btn-active">${TabGames}</a> <a href="#" class="ui-btn-active">${TabGames}</a>

View file

@ -52,7 +52,6 @@
<paper-button raised class="subdued btnRecord hide"><iron-icon icon="videocam"></iron-icon><span>${ButtonRecord}</span></paper-button> <paper-button raised class="subdued btnRecord hide"><iron-icon icon="videocam"></iron-icon><span>${ButtonRecord}</span></paper-button>
<paper-button raised class="subdued hide btnCancelRecording"><iron-icon icon="delete"></iron-icon><span>${ButtonCancelRecording}</span></paper-button> <paper-button raised class="subdued hide btnCancelRecording"><iron-icon icon="delete"></iron-icon><span>${ButtonCancelRecording}</span></paper-button>
<paper-button raised class="subdued btnSync hide"><iron-icon icon="refresh"></iron-icon><span>${ButtonSync}</span></paper-button> <paper-button raised class="subdued btnSync hide"><iron-icon icon="refresh"></iron-icon><span>${ButtonSync}</span></paper-button>
<paper-button raised class="subdued btnShare notext hide"><iron-icon icon="share"></iron-icon></paper-button>
<paper-button raised class="subdued btnMoreCommands hide notext"><iron-icon icon="more-vert"></iron-icon></paper-button> <paper-button raised class="subdued btnMoreCommands hide notext"><iron-icon icon="more-vert"></iron-icon></paper-button>
<div class="detailUserDataIcons userDataIcons"></div> <div class="detailUserDataIcons userDataIcons"></div>
</div> </div>
@ -73,7 +72,6 @@
<paper-button raised class="subdued btnRecord hide"><iron-icon icon="videocam"></iron-icon><span>${ButtonRecord}</span></paper-button> <paper-button raised class="subdued btnRecord hide"><iron-icon icon="videocam"></iron-icon><span>${ButtonRecord}</span></paper-button>
<paper-button raised class="subdued hide btnCancelRecording"><iron-icon icon="delete"></iron-icon><span>${ButtonCancelRecording}</span></paper-button> <paper-button raised class="subdued hide btnCancelRecording"><iron-icon icon="delete"></iron-icon><span>${ButtonCancelRecording}</span></paper-button>
<paper-button raised class="subdued btnSync hide"><iron-icon icon="refresh"></iron-icon><span>${ButtonSync}</span></paper-button> <paper-button raised class="subdued btnSync hide"><iron-icon icon="refresh"></iron-icon><span>${ButtonSync}</span></paper-button>
<paper-button raised class="subdued btnShare notext hide"><iron-icon icon="share"></iron-icon></paper-button>
<paper-button raised class="subdued btnMoreCommands hide notext"><iron-icon icon="more-vert"></iron-icon></paper-button> <paper-button raised class="subdued btnMoreCommands hide notext"><iron-icon icon="more-vert"></iron-icon></paper-button>
<div class="detailUserDataIcons userDataIcons"></div> <div class="detailUserDataIcons userDataIcons"></div>
</div> </div>

View file

@ -13,72 +13,6 @@
<div id="items" class="itemsContainer paddedItemsContainer"></div> <div id="items" class="itemsContainer paddedItemsContainer"></div>
</div> </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>
</div>
<div class="tabView viewTab">
<div>
<label for="selectView">${LabelView}</label>
<select id="selectView">
<option value="Poster">${OptionPoster}</option>
<option value="PosterCard">${OptionPosterCard}</option>
</select>
</div>
<br />
<div>
<label for="selectPageSize">${LabelPageSize}</label>
<select id="selectPageSize" class="selectPageSize"></select>
</div>
</div>
<div class="tabSort viewTab">
<fieldset data-role="controlgroup">
<legend>
${HeaderSortBy}
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioStartDate" value="on" checked="checked" data-sortby="PremiereDate,SortName" data-mini="true">
<label for="radioStartDate">${OptionStartDate}</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioSortName" value="off" checked="checked" data-sortby="SortName,PremiereDate" data-mini="true">
<label for="radioSortName">${OptionNameSort}</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioCommunityRating" value="off" data-sortby="CommunityRating,SortName" data-mini="true">
<label for="radioCommunityRating">${OptionImdbRating}</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioCriticRating" value="off" data-sortby="CriticRating,SortName" data-mini="true">
<label for="radioCriticRating">${OptionCriticRating}</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioContentRating" value="off" data-sortby="OfficialRating,SortName" data-mini="true">
<label for="radioContentRating">${OptionParentalRating}</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioPremiereDate" value="off" data-sortby="PremiereDate,SortName" data-mini="true">
<label for="radioPremiereDate">${OptionReleaseDate}</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioRuntime" value="off" data-sortby="Runtime,SortName" data-mini="true">
<label for="radioRuntime">${OptionRuntime}</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
${HeaderSortOrder}
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">${OptionAscending}</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">${OptionDescending}</label>
</fieldset>
</div>
</form>
</div>
</div> </div>
</body> </body>
</html> </html>

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <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="jqmcollapsible,scripts/livetvcomponents,scripts/livetvnewrecording,livetvcss" data-backbutton="true" data-menubutton="false">
<div data-role="content"> <div data-role="content">
<form class="liveTvNewRecordingForm" style="margin: 0 auto;"> <form class="liveTvNewRecordingForm" style="margin: 0 auto;">

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="liveTvSeriesTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvseriestimer,livetvcss,jqmlistview" data-backbutton="true" data-menubutton="false"> <div id="liveTvSeriesTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-contextname="${HeaderLiveTv}" data-require="jqmcollapsible,scripts/livetvcomponents,scripts/livetvseriestimer,livetvcss,jqmlistview" data-backbutton="true" data-menubutton="false">
<div data-role="content"> <div data-role="content">
<form class="liveTvSeriesTimerForm" style="margin: 0 auto; max-width: 720px;"> <form class="liveTvSeriesTimerForm" style="margin: 0 auto; max-width: 720px;">
@ -44,7 +44,7 @@
<paper-checkbox id="chkAnyTime">${OptionRecordAnytime}</paper-checkbox> <paper-checkbox id="chkAnyTime">${OptionRecordAnytime}</paper-checkbox>
<paper-checkbox id="chkAllChannels">${OptionRecordOnAllChannels}</paper-checkbox> <paper-checkbox id="chkAllChannels">${OptionRecordOnAllChannels}</paper-checkbox>
</div> </div>
<br/> <br />
<div data-role="collapsible" data-mini="true"> <div data-role="collapsible" data-mini="true">
<h3>${HeaderAdvanced}</h3> <h3>${HeaderAdvanced}</h3>
<div> <div>

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <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="jqmcollapsible,scripts/livetvcomponents,scripts/livetvtimer,livetvcss" data-backbutton="true" data-menubutton="false">
<div data-role="content"> <div data-role="content">

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="moviesPage" data-role="page" data-dom-cache="true" class="page libraryPage backdropPage pageWithAbsoluteTabs collectionEditorPage" data-backdroptype="movie" data-require="scripts/moviesrecommended"> <div id="moviesPage" data-role="page" data-dom-cache="true" class="page libraryPage backdropPage pageWithAbsoluteTabs collectionEditorPage" data-backdroptype="movie" data-require="jqmcollapsible,scripts/moviesrecommended">
<div class="libraryViewNav libraryViewNavWithMinHeight"> <div class="libraryViewNav libraryViewNavWithMinHeight">
<paper-tabs hidescrollbuttons noink> <paper-tabs hidescrollbuttons noink>

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="musicRecommendedPage" data-dom-cache="true" data-role="page" class="page libraryPage backdropPage pageWithAbsoluteTabs" data-backdroptype="musicartist" data-require="scripts/musicrecommended"> <div id="musicRecommendedPage" data-dom-cache="true" data-role="page" class="page libraryPage backdropPage pageWithAbsoluteTabs" data-backdroptype="musicartist" data-require="jqmcollapsible,scripts/musicrecommended">
<div class="libraryViewNav libraryViewNavWithMinHeight"> <div class="libraryViewNav libraryViewNavWithMinHeight">
<paper-tabs hidescrollbuttons noink> <paper-tabs hidescrollbuttons noink>
<paper-tab><iron-icon icon="info"></iron-icon>${TabSuggestions}</paper-tab> <paper-tab><iron-icon icon="info"></iron-icon>${TabSuggestions}</paper-tab>

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="userImagePage" data-role="page" class="page libraryPage userPreferencesPage userPasswordPage noSecondaryNavPage" data-title="${HeaderProfile}" data-require="scripts/myprofile,paperbuttonstyle,jqmicons" data-backbutton="true" data-menubutton="false"> <div id="userImagePage" data-role="page" class="page libraryPage userPreferencesPage userPasswordPage noSecondaryNavPage" data-title="${HeaderProfile}" data-require="jqmcollapsible,scripts/myprofile,paperbuttonstyle,jqmicons" data-backbutton="true" data-menubutton="false">
<div data-role="content"> <div data-role="content">
<br /> <br />
@ -13,7 +13,7 @@
<div style="vertical-align:top;margin: .5em 0 0 1em;display:inline-block;"> <div style="vertical-align:top;margin: .5em 0 0 1em;display:inline-block;">
<h2 class="username" style="margin: 0;"></h2> <h2 class="username" style="margin: 0;"></h2>
<br/> <br />
<paper-button raised class="cancel" id="btnDeleteImage"><iron-icon icon="delete"></iron-icon><span>${ButtonDeleteImage}</span></paper-button> <paper-button raised class="cancel" id="btnDeleteImage"><iron-icon icon="delete"></iron-icon><span>${ButtonDeleteImage}</span></paper-button>
</div> </div>
</div> </div>
@ -95,7 +95,7 @@
<paper-checkbox class="chkEnableLocalEasyPassword">${LabelInNetworkSignInWithEasyPassword}</paper-checkbox> <paper-checkbox class="chkEnableLocalEasyPassword">${LabelInNetworkSignInWithEasyPassword}</paper-checkbox>
<div class="fieldDescription paperCheckboxFieldDescription">${LabelInNetworkSignInWithEasyPasswordHelp}</div> <div class="fieldDescription paperCheckboxFieldDescription">${LabelInNetworkSignInWithEasyPasswordHelp}</div>
</div> </div>
<br /><br/> <br /><br />
<div> <div>
<button type="submit" data-role="none" class="clearButton"> <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> <paper-button raised class="submit block"><iron-icon icon="check"></iron-icon><span>${ButtonSave}</span></paper-button>

View file

@ -4,7 +4,7 @@
<title>${TitleSync}</title> <title>${TitleSync}</title>
</head> </head>
<body> <body>
<div id="mySyncJobPage" data-role="page" class="page libraryPage syncJobPage mySyncPage noSecondaryNavPage" data-contextname="${TitleSync}" data-require="scripts/syncjob" data-backbutton="true" data-menubutton="false"> <div id="mySyncJobPage" data-role="page" class="page libraryPage syncJobPage mySyncPage noSecondaryNavPage" data-contextname="${TitleSync}" data-require="jqmcollapsible,scripts/syncjob" data-backbutton="true" data-menubutton="false">
<div data-role="content"> <div data-role="content">

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="nowPlayingPage" data-role="page" class="page libraryPage nowPlayingPage noSecondaryNavPage" data-contextname="${TitleRemoteControl}" data-theme="b" data-require="scripts/nowplayingpage,paperbuttonstyle"> <div id="nowPlayingPage" data-role="page" class="page libraryPage nowPlayingPage noSecondaryNavPage" data-contextname="${TitleRemoteControl}" data-theme="b" data-require="jqmcollapsible,scripts/nowplayingpage,paperbuttonstyle">
<div data-role="content" style="overflow:visible;"> <div data-role="content" style="overflow:visible;">

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="libraryReportManagerPage" data-role="page" class="page libraryPage noSecondaryNavPage reportsPage" data-contextname="${HeaderReports}" data-require="jqmtable,scripts/reports,detailtablecss,jqmicons"> <div id="libraryReportManagerPage" data-role="page" class="page libraryPage noSecondaryNavPage reportsPage" data-contextname="${HeaderReports}" data-require="jqmcollapsible,jqmtable,scripts/reports,detailtablecss,jqmicons">
<div data-role="content"> <div data-role="content">
<div style="text-align: center;"> <div style="text-align: center;">
<div class="viewControls"> <div class="viewControls">

View file

@ -117,12 +117,6 @@
$('.btnSync', page).addClass('hide'); $('.btnSync', page).addClass('hide');
} }
if (LibraryBrowser.canShare(item, user)) {
$('.btnShare', page).removeClass('hide');
} else {
$('.btnShare', page).addClass('hide');
}
if (item.Type == 'Program' && item.TimerId) { if (item.Type == 'Program' && item.TimerId) {
$('.btnCancelRecording', page).removeClass('hide'); $('.btnCancelRecording', page).removeClass('hide');
} else { } else {
@ -1747,13 +1741,6 @@
deleteTimer(page, currentItem.TimerId); deleteTimer(page, currentItem.TimerId);
}); });
$('.btnShare', page).on('click', function () {
require(['sharingmanager'], function () {
SharingManager.showMenu(Dashboard.getCurrentUserId(), currentItem.Id);
});
});
$('.btnMoreCommands', page).on('click', function () { $('.btnMoreCommands', page).on('click', function () {
var button = this; var button = this;

View file

@ -670,6 +670,10 @@
commands.push('download'); commands.push('download');
} }
if (LibraryBrowser.canShare(item, user)) {
commands.push('share');
}
return commands; return commands;
}, },
@ -760,6 +764,14 @@
}); });
} }
if (commands.indexOf('share') != -1) {
items.push({
name: Globalize.translate('ButtonShare'),
id: 'share',
ironIcon: 'share'
});
}
require(['actionsheet'], function () { require(['actionsheet'], function () {
ActionSheetElement.show({ ActionSheetElement.show({
@ -769,6 +781,11 @@
switch (id) { switch (id) {
case 'share':
require(['sharingmanager'], function () {
SharingManager.showMenu(Dashboard.getCurrentUserId(), itemId);
});
break;
case 'addtocollection': case 'addtocollection':
BoxSetEditor.showPanel([itemId]); BoxSetEditor.showPanel([itemId]);
break; break;

View file

@ -171,7 +171,8 @@
function onCardTapHold(e) { function onCardTapHold(e) {
showContextMenu(this, {}); var card = parentWithClass(e.target, 'card');
showContextMenu(card, {});
e.preventDefault(); e.preventDefault();
return false; return false;
@ -423,6 +424,7 @@
break; break;
case 'album': case 'album':
Dashboard.navigate('itemdetails.html?id=' + albumid); Dashboard.navigate('itemdetails.html?id=' + albumid);
break;
case 'record': case 'record':
Dashboard.navigate('livetvnewrecording.html?programid=' + itemId); Dashboard.navigate('livetvnewrecording.html?programid=' + itemId);
break; break;
@ -483,16 +485,24 @@
function onListViewMenuButtonClick(e) { function onListViewMenuButtonClick(e) {
showContextMenu(this, {}); var btn = parentWithClass(e.target, 'listviewMenuButton') || parentWithClass(e.target, 'cardOverlayMoreButton');
if (btn) {
showContextMenu(btn, {});
e.preventDefault(); e.preventDefault();
return false; return false;
} }
}
function onListViewPlayButtonClick(e) { function onListViewPlayButtonClick(e) {
var playButton = this; var playButton = parentWithClass(e.target, 'cardOverlayPlayButton');
var card = this;
if (!playButton) {
return;
}
var card = e.target;
if (!card.classList.contains('card') && !card.classList.contains('listItem')) { if (!card.classList.contains('card') && !card.classList.contains('listItem')) {
card = $(card).parents('.listItem,.card')[0]; card = $(card).parents('.listItem,.card')[0];
@ -535,7 +545,11 @@
function onGroupedCardClick(e) { function onGroupedCardClick(e) {
var card = this; var card = parentWithClass(e.target, 'groupedCard');
if (!card) {
return;
}
var itemId = card.getAttribute('data-itemid'); var itemId = card.getAttribute('data-itemid');
var context = card.getAttribute('data-context'); var context = card.getAttribute('data-context');
@ -794,13 +808,31 @@
}); });
} }
function parentWithClass(elem, className) {
while (!elem.classList || !elem.classList.contains(className)) {
elem = elem.parentNode;
if (!elem) {
return null;
}
}
return elem;
}
function onCardClick(e) { function onCardClick(e) {
var targetElem = parentWithClass(e.target, 'mediaItem');
if (!targetElem) {
return;
}
if (isClickable(targetElem)) { if (isClickable(targetElem)) {
return; return;
} }
var targetElem = e.target;
if (targetElem.classList.contains('itemSelectionPanel') || this.querySelector('.itemSelectionPanel')) { if (targetElem.classList.contains('itemSelectionPanel') || this.querySelector('.itemSelectionPanel')) {
return; return;
} }
@ -923,20 +955,17 @@
preventHover = true; preventHover = true;
} }
this.off('contextmenu', '.card', onCardTapHold); this.off('contextmenu', onCardTapHold);
this.on('contextmenu', '.card', onCardTapHold); this.on('contextmenu', onCardTapHold);
this.off('click', '.groupedCard', onGroupedCardClick); this.off('click', onGroupedCardClick);
this.on('click', '.groupedCard', onGroupedCardClick); this.on('click', onGroupedCardClick);
this.off('click', '.listviewMenuButton', onListViewMenuButtonClick); this.off('click', onListViewMenuButtonClick);
this.on('click', '.listviewMenuButton', onListViewMenuButtonClick); this.on('click', onListViewMenuButtonClick);
this.off('click', '.cardOverlayMoreButton', onListViewMenuButtonClick); this.off('click', onListViewPlayButtonClick);
this.on('click', '.cardOverlayMoreButton', onListViewMenuButtonClick); this.on('click', onListViewPlayButtonClick);
this.off('click', '.cardOverlayPlayButton', onListViewPlayButtonClick);
this.on('click', '.cardOverlayPlayButton', onListViewPlayButtonClick);
if (!AppInfo.isTouchPreferred) { if (!AppInfo.isTouchPreferred) {
this.off('mouseenter', '.card:not(.bannerCard) .cardContent', onHoverIn); this.off('mouseenter', '.card:not(.bannerCard) .cardContent', onHoverIn);
@ -949,8 +978,8 @@
this.on("touchstart", '.card:not(.bannerCard) .cardContent', preventTouchHover); this.on("touchstart", '.card:not(.bannerCard) .cardContent', preventTouchHover);
} }
this.off('click', '.mediaItem', onCardClick); this.off('click', onCardClick);
this.on('click', '.mediaItem', onCardClick); this.on('click', onCardClick);
return this; return this;
}; };

View file

@ -144,6 +144,7 @@
function onRecordClick() { function onRecordClick() {
$('.itemFlyout').popup('close'); $('.itemFlyout').popup('close');
Dashboard.navigate('livetvnewrecording.html?programid=' + this.getAttribute('data-id')); Dashboard.navigate('livetvnewrecording.html?programid=' + this.getAttribute('data-id'));
} }

View file

@ -18,13 +18,6 @@
return 'livetvitems2' + (query.ParentId || ''); return 'livetvitems2' + (query.ParentId || '');
} }
function updateFilterControls(page) {
$('#selectView', page).val(view);
$('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
$('#selectPageSize', page).val(query.Limit);
}
function reloadItems(page) { function reloadItems(page) {
Dashboard.showLoadingMsg(); Dashboard.showLoadingMsg();
@ -39,14 +32,11 @@
startIndex: query.StartIndex, startIndex: query.StartIndex,
limit: query.Limit, limit: query.Limit,
totalRecordCount: result.TotalRecordCount, totalRecordCount: result.TotalRecordCount,
viewButton: true,
showLimit: false showLimit: false
}); });
page.querySelector('.listTopPaging').innerHTML = pagingHtml; page.querySelector('.listTopPaging').innerHTML = pagingHtml;
updateFilterControls(page);
if (view == "Poster") { if (view == "Poster") {
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
@ -95,52 +85,7 @@
}); });
} }
$(document).on('pageinit', "#liveTvItemsPage", function () { $(document).on('pagebeforeshow', "#liveTvItemsPage", function () {
var page = this;
$('#selectView', this).on('change', function () {
view = this.value;
reloadItems(page);
LibraryBrowser.saveViewSetting(getSavedQueryKey(), view);
});
$('#radioBasicFilters', this).on('change', function () {
if (this.checked) {
$('.basicFilters', page).show();
$('.advancedFilters', page).hide();
} else {
$('.basicFilters', page).hide();
}
});
$('#radioAdvancedFilters', this).on('change', function () {
if (this.checked) {
$('.advancedFilters', page).show();
$('.basicFilters', page).hide();
} else {
$('.advancedFilters', page).hide();
}
});
$('.itemsContainer', page).on('needsrefresh', function () {
reloadItems(page);
});
$('#selectPageSize', page).on('change', function () {
query.Limit = parseInt(this.value);
query.StartIndex = 0;
reloadItems(page);
});
}).on('pagebeforeshow', "#liveTvItemsPage", function () {
query.ParentId = LibraryMenu.getTopParentId(); query.ParentId = LibraryMenu.getTopParentId();
@ -163,16 +108,7 @@
QueryFilters.onPageShow(page, query); QueryFilters.onPageShow(page, query);
LibraryBrowser.getSavedViewSetting(viewkey).done(function (val) {
if (val) {
$('#selectView', page).val(val).trigger('change');
} else {
reloadItems(page); reloadItems(page);
}
});
updateFilterControls(page);
}); });
})(jQuery, document); })(jQuery, document);

View file

@ -342,6 +342,21 @@
] ]
}); });
// These don't play very well
if (isVlc) {
profile.CodecProfiles.push({
Type: 'VideoAudio',
Codec: 'dca',
Conditions: [
{
Condition: 'LessThanEqual',
Property: 'AudioChannels',
Value: 6
}
]
});
}
if (isVlc) { if (isVlc) {
profile.CodecProfiles.push({ profile.CodecProfiles.push({
Type: 'Video', Type: 'Video',

View file

@ -2113,6 +2113,11 @@ var AppInfo = {};
return {}; return {};
}); });
define("jqmcollapsible", ["jqmicons", "thirdparty/jquerymobile-1.4.5/jqm.collapsible"], function () {
Dashboard.importCss('thirdparty/jquerymobile-1.4.5/jqm.collapsible.css');
return {};
});
define("hammer", ["bower_components/hammerjs/hammer.min"], function (Hammer) { define("hammer", ["bower_components/hammerjs/hammer.min"], function (Hammer) {
return Hammer; return Hammer;
}); });
@ -2194,6 +2199,7 @@ var AppInfo = {};
depends.push('jqmicons'); depends.push('jqmicons');
depends.push('jqmpopup'); depends.push('jqmpopup');
depends.push('jqmlistview'); depends.push('jqmlistview');
depends.push('jqmcollapsible');
} }
require(depends, function () { require(depends, function () {
@ -2320,7 +2326,7 @@ $(document).on('pagecreate', ".page", function () {
var isSettingsPage = page.classList.contains('type-interior'); var isSettingsPage = page.classList.contains('type-interior');
if (isSettingsPage) { if (isSettingsPage) {
require(['jqmicons', 'jqmlistview']);
Dashboard.ensureToolsMenu(page); Dashboard.ensureToolsMenu(page);
Dashboard.getCurrentUser().done(function (user) { Dashboard.getCurrentUser().done(function (user) {

View file

@ -196,7 +196,7 @@
function showSyncMenu(options) { function showSyncMenu(options) {
requirejs(["scripts/registrationservices"], function () { requirejs(["scripts/registrationservices", "jqmcollapsible"], function () {
RegistrationServices.validateFeature('sync').done(function () { RegistrationServices.validateFeature('sync').done(function () {
showSyncMenuInternal(options); showSyncMenuInternal(options);
}); });
@ -244,7 +244,6 @@
html += '</div>'; html += '</div>';
$(document.body).append(html); $(document.body).append(html);
require(['paperbuttonstyle']);
var elem = $('.syncPanel').panel({}).trigger('create').panel("open").on("panelclose", function () { var elem = $('.syncPanel').panel({}).trigger('create').panel("open").on("panelclose", function () {
$(this).off("panelclose").remove(); $(this).off("panelclose").remove();

View file

@ -0,0 +1,102 @@

.ui-collapsible {
margin: 0 -1em;
}
.ui-collapsible-inset,
.ui-collapsible-set {
margin: .5em 0;
}
.ui-collapsible-heading {
display: block;
margin: 0;
padding: 0;
position: relative;
}
.ui-collapsible-heading .ui-btn {
text-align: left;
margin: 0;
border-left-width: 0;
border-right-width: 0;
}
.ui-collapsible-heading .ui-btn-icon-top,
.ui-collapsible-heading .ui-btn-icon-bottom {
text-align: center;
}
.ui-collapsible-inset .ui-collapsible-heading .ui-btn {
border-right-width: 1px;
border-left-width: 1px;
}
.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) > .ui-collapsible-heading .ui-btn {
border-top-width: 0;
}
.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn {
border-top-width: 1px;
}
.ui-collapsible-heading-status {
position: absolute !important;
height: 1px;
width: 1px;
overflow: hidden;
clip: rect(1px,1px,1px,1px);
}
.ui-collapsible-content {
display: block;
margin: 0;
padding: .5em 1em;
}
.ui-collapsible-themed-content .ui-collapsible-content {
border-left-width: 0;
border-right-width: 0;
border-top-width: 0;
border-bottom-width: 1px;
border-style: solid;
}
.ui-collapsible-inset.ui-collapsible-themed-content .ui-collapsible-content {
border-left-width: 1px;
border-right-width: 1px;
}
.ui-collapsible-inset .ui-collapsible-content {
margin: 0;
}
.ui-collapsible-content-collapsed {
display: none;
}
.ui-collapsible-set > .ui-collapsible.ui-corner-all {
-webkit-border-radius: 0;
border-radius: 0;
}
.ui-collapsible-heading,
.ui-collapsible-heading > .ui-btn {
-webkit-border-radius: inherit;
border-radius: inherit;
}
.ui-collapsible-set .ui-collapsible.ui-first-child {
-webkit-border-top-right-radius: inherit;
border-top-right-radius: inherit;
-webkit-border-top-left-radius: inherit;
border-top-left-radius: inherit;
}
.ui-collapsible-content,
.ui-collapsible-set .ui-collapsible.ui-last-child {
-webkit-border-bottom-right-radius: inherit;
border-bottom-right-radius: inherit;
-webkit-border-bottom-left-radius: inherit;
border-bottom-left-radius: inherit;
}
.ui-collapsible-themed-content:not(.ui-collapsible-collapsed) > .ui-collapsible-heading {
-webkit-border-bottom-right-radius: 0;
border-bottom-right-radius: 0;
-webkit-border-bottom-left-radius: 0;
border-bottom-left-radius: 0;
}
.ui-collapsible-set .ui-collapsible {
margin: -1px -1em 0;
}
.ui-collapsible-set .ui-collapsible-inset {
margin: -1px 0 0;
}
.ui-collapsible-set .ui-collapsible.ui-first-child {
margin-top: 0;
}

View file

@ -0,0 +1,348 @@
(function ($, undefined) {
var rInitialLetter = /([A-Z])/g,
// Construct iconpos class from iconpos value
iconposClass = function (iconpos) {
return ("ui-btn-icon-" + (iconpos === null ? "left" : iconpos));
};
$.widget("mobile.collapsible", {
options: {
enhanced: false,
expandCueText: null,
collapseCueText: null,
collapsed: true,
heading: "h1,h2,h3,h4,h5,h6,legend",
collapsedIcon: null,
expandedIcon: null,
iconpos: null,
theme: null,
contentTheme: null,
inset: null,
corners: null,
mini: null
},
_create: function () {
var elem = this.element,
ui = {
accordion: elem
.closest(":jqmData(role='collapsible-set')," +
":jqmData(role='collapsibleset')" +
($.mobile.collapsibleset ? ", :mobile-collapsibleset" :
""))
.addClass("ui-collapsible-set")
};
this._ui = ui;
this._renderedOptions = this._getOptions(this.options);
if (this.options.enhanced) {
ui.heading = this.element.children(".ui-collapsible-heading");
ui.content = ui.heading.next();
ui.anchor = ui.heading.children();
ui.status = ui.anchor.children(".ui-collapsible-heading-status");
} else {
this._enhance(elem, ui);
}
this._on(ui.heading, {
"tap": function () {
ui.heading.find("a").first().addClass($.mobile.activeBtnClass);
},
"click": function (event) {
this._handleExpandCollapse(!ui.heading.hasClass("ui-collapsible-heading-collapsed"));
event.preventDefault();
event.stopPropagation();
}
});
},
// Adjust the keys inside options for inherited values
_getOptions: function (options) {
var key,
accordion = this._ui.accordion,
accordionWidget = this._ui.accordionWidget;
// Copy options
options = $.extend({}, options);
if (accordion.length && !accordionWidget) {
this._ui.accordionWidget =
accordionWidget = accordion.data("mobile-collapsibleset");
}
for (key in options) {
// Retrieve the option value first from the options object passed in and, if
// null, from the parent accordion or, if that's null too, or if there's no
// parent accordion, then from the defaults.
options[key] =
(options[key] != null) ? options[key] :
(accordionWidget) ? accordionWidget.options[key] :
accordion.length ? $.mobile.getAttribute(accordion[0],
key.replace(rInitialLetter, "-$1").toLowerCase()) :
null;
if (null == options[key]) {
options[key] = $.mobile.collapsible.defaults[key];
}
}
return options;
},
_themeClassFromOption: function (prefix, value) {
return (value ? (value === "none" ? "" : prefix + value) : "");
},
_enhance: function (elem, ui) {
var iconclass,
opts = this._renderedOptions,
contentThemeClass = this._themeClassFromOption("ui-body-", opts.contentTheme);
elem.addClass("ui-collapsible " +
(opts.inset ? "ui-collapsible-inset " : "") +
(opts.inset && opts.corners ? "ui-corner-all " : "") +
(contentThemeClass ? "ui-collapsible-themed-content " : ""));
ui.originalHeading = elem.children(this.options.heading).first(),
ui.content = elem
.wrapInner("<div " +
"class='ui-collapsible-content " +
contentThemeClass + "'></div>")
.children(".ui-collapsible-content"),
ui.heading = ui.originalHeading;
// Replace collapsibleHeading if it's a legend
if (ui.heading.is("legend")) {
ui.heading = $("<div role='heading'>" + ui.heading.html() + "</div>");
ui.placeholder = $("<div><!-- placeholder for legend --></div>").insertBefore(ui.originalHeading);
ui.originalHeading.remove();
}
iconclass = (opts.collapsed ? (opts.collapsedIcon ? "ui-icon-" + opts.collapsedIcon : "") :
(opts.expandedIcon ? "ui-icon-" + opts.expandedIcon : ""));
ui.status = $("<span class='ui-collapsible-heading-status'></span>");
ui.anchor = ui.heading
.detach()
//modify markup & attributes
.addClass("ui-collapsible-heading")
.append(ui.status)
.wrapInner("<a href='#' class='ui-collapsible-heading-toggle'></a>")
.find("a")
.first()
.addClass("ui-btn " +
(iconclass ? iconclass + " " : "") +
(iconclass ? iconposClass(opts.iconpos) +
" " : "") +
this._themeClassFromOption("ui-btn-", opts.theme) + " " +
(opts.mini ? "ui-mini " : ""));
//drop heading in before content
ui.heading.insertBefore(ui.content);
this._handleExpandCollapse(this.options.collapsed);
return ui;
},
refresh: function () {
this._applyOptions(this.options);
this._renderedOptions = this._getOptions(this.options);
},
_applyOptions: function (options) {
var isCollapsed, newTheme, oldTheme, hasCorners, hasIcon,
elem = this.element,
currentOpts = this._renderedOptions,
ui = this._ui,
anchor = ui.anchor,
status = ui.status,
opts = this._getOptions(options);
// First and foremost we need to make sure the collapsible is in the proper
// state, in case somebody decided to change the collapsed option at the
// same time as another option
if (options.collapsed !== undefined) {
this._handleExpandCollapse(options.collapsed);
}
isCollapsed = elem.hasClass("ui-collapsible-collapsed");
// We only need to apply the cue text for the current state right away.
// The cue text for the alternate state will be stored in the options
// and applied the next time the collapsible's state is toggled
if (isCollapsed) {
if (opts.expandCueText !== undefined) {
status.text(opts.expandCueText);
}
} else {
if (opts.collapseCueText !== undefined) {
status.text(opts.collapseCueText);
}
}
// Update icon
// Is it supposed to have an icon?
hasIcon =
// If the collapsedIcon is being set, consult that
(opts.collapsedIcon !== undefined ? opts.collapsedIcon !== false :
// Otherwise consult the existing option value
currentOpts.collapsedIcon !== false);
// If any icon-related options have changed, make sure the new icon
// state is reflected by first removing all icon-related classes
// reflecting the current state and then adding all icon-related
// classes for the new state
if (!(opts.iconpos === undefined &&
opts.collapsedIcon === undefined &&
opts.expandedIcon === undefined)) {
// Remove all current icon-related classes
anchor.removeClass([iconposClass(currentOpts.iconpos)]
.concat((currentOpts.expandedIcon ?
["ui-icon-" + currentOpts.expandedIcon] : []))
.concat((currentOpts.collapsedIcon ?
["ui-icon-" + currentOpts.collapsedIcon] : []))
.join(" "));
// Add new classes if an icon is supposed to be present
if (hasIcon) {
anchor.addClass(
[iconposClass(opts.iconpos !== undefined ?
opts.iconpos : currentOpts.iconpos)]
.concat(isCollapsed ?
["ui-icon-" + (opts.collapsedIcon !== undefined ?
opts.collapsedIcon :
currentOpts.collapsedIcon)] :
["ui-icon-" + (opts.expandedIcon !== undefined ?
opts.expandedIcon :
currentOpts.expandedIcon)])
.join(" "));
}
}
if (opts.theme !== undefined) {
oldTheme = this._themeClassFromOption("ui-btn-", currentOpts.theme);
newTheme = this._themeClassFromOption("ui-btn-", opts.theme);
anchor.removeClass(oldTheme).addClass(newTheme);
}
if (opts.contentTheme !== undefined) {
oldTheme = this._themeClassFromOption("ui-body-",
currentOpts.contentTheme);
newTheme = this._themeClassFromOption("ui-body-",
opts.contentTheme);
ui.content.removeClass(oldTheme).addClass(newTheme);
}
if (opts.inset !== undefined) {
elem.toggleClass("ui-collapsible-inset", opts.inset);
hasCorners = !!(opts.inset && (opts.corners || currentOpts.corners));
}
if (opts.corners !== undefined) {
hasCorners = !!(opts.corners && (opts.inset || currentOpts.inset));
}
if (hasCorners !== undefined) {
elem.toggleClass("ui-corner-all", hasCorners);
}
if (opts.mini !== undefined) {
anchor.toggleClass("ui-mini", opts.mini);
}
},
_setOptions: function (options) {
this._applyOptions(options);
this._super(options);
this._renderedOptions = this._getOptions(this.options);
},
_handleExpandCollapse: function (isCollapse) {
var opts = this._renderedOptions,
ui = this._ui;
ui.status.text(isCollapse ? opts.expandCueText : opts.collapseCueText);
ui.heading
.toggleClass("ui-collapsible-heading-collapsed", isCollapse)
.find("a").first()
.toggleClass("ui-icon-" + opts.expandedIcon, !isCollapse)
// logic or cause same icon for expanded/collapsed state would remove the ui-icon-class
.toggleClass("ui-icon-" + opts.collapsedIcon, (isCollapse || opts.expandedIcon === opts.collapsedIcon))
.removeClass($.mobile.activeBtnClass);
this.element.toggleClass("ui-collapsible-collapsed", isCollapse);
ui.content
.toggleClass("ui-collapsible-content-collapsed", isCollapse)
.attr("aria-hidden", isCollapse)
.trigger("updatelayout");
this.options.collapsed = isCollapse;
this._trigger(isCollapse ? "collapse" : "expand");
},
expand: function () {
this._handleExpandCollapse(false);
},
collapse: function () {
this._handleExpandCollapse(true);
},
_destroy: function () {
var ui = this._ui,
opts = this.options;
if (opts.enhanced) {
return;
}
if (ui.placeholder) {
ui.originalHeading.insertBefore(ui.placeholder);
ui.placeholder.remove();
ui.heading.remove();
} else {
ui.status.remove();
ui.heading
.removeClass("ui-collapsible-heading ui-collapsible-heading-collapsed")
.children()
.contents()
.unwrap();
}
ui.anchor.contents().unwrap();
ui.content.contents().unwrap();
this.element
.removeClass("ui-collapsible ui-collapsible-collapsed " +
"ui-collapsible-themed-content ui-collapsible-inset ui-corner-all");
}
});
// Defaults to be used by all instances of collapsible if per-instance values
// are unset or if nothing is specified by way of inheritance from an accordion.
// Note that this hash does not contain options "collapsed" or "heading",
// because those are not inheritable.
$.mobile.collapsible.defaults = {
expandCueText: " click to expand contents",
collapseCueText: " click to collapse contents",
collapsedIcon: "plus",
contentTheme: "inherit",
expandedIcon: "minus",
iconpos: "left",
inset: true,
corners: true,
theme: "inherit",
mini: false
};
})(jQuery);

View file

@ -770,9 +770,12 @@ $.ui.plugin = {
window.scrollTo(0, ypos); window.scrollTo(0, ypos);
}, },
getClosestBaseUrl: function( ele ) { getClosestBaseUrl: function (ele) {
var page = parentWithClass(ele, 'ui-page');
// Find the closest page and extract out its url. // Find the closest page and extract out its url.
var url = parentWithClass(ele, 'ui-page').getAttribute("data-url"), var url = (page ? page.getAttribute("data-url") : null),
base = $.mobile.path.documentBase.hrefNoHash; base = $.mobile.path.documentBase.hrefNoHash;
if ( !$.mobile.dynamicBaseEnabled || !url || !$.mobile.path.isPath( url ) ) { if ( !$.mobile.dynamicBaseEnabled || !url || !$.mobile.path.isPath( url ) ) {
@ -3565,6 +3568,8 @@ $.fn.fieldcontain = function(/* options */) {
(function( $, undefined ) { (function( $, undefined ) {
var pageCache = {};
$.widget( "mobile.pagecontainer", { $.widget( "mobile.pagecontainer", {
options: { options: {
theme: "a" theme: "a"
@ -4029,11 +4034,14 @@ $.fn.fieldcontain = function(/* options */) {
_loadSuccess: function( absUrl, triggerData, settings, deferred ) { _loadSuccess: function( absUrl, triggerData, settings, deferred ) {
var fileUrl = this._createFileUrl( absUrl ); var fileUrl = this._createFileUrl( absUrl );
return $.proxy(function (html, textStatus, xhr) { return $.proxy(function (html, wasCached) {
if (!wasCached || typeof (wasCached) != 'boolean') {
if ($.mobile.filterHtml) { if ($.mobile.filterHtml) {
html = $.mobile.filterHtml(html); html = $.mobile.filterHtml(html);
} }
pageCache[absUrl.split('?')[0]] = html;
}
//dont update the base tag if we are prefetching //dont update the base tag if we are prefetching
if ( settings.prefetch === undefined ) { if ( settings.prefetch === undefined ) {
@ -4045,10 +4053,6 @@ $.fn.fieldcontain = function(/* options */) {
this._setLoadedTitle( content, html ); this._setLoadedTitle( content, html );
// Add the content reference and xhr to our triggerData.
triggerData.xhr = xhr;
triggerData.textStatus = textStatus;
// DEPRECATED // DEPRECATED
triggerData.page = content; triggerData.page = content;
@ -4069,6 +4073,7 @@ $.fn.fieldcontain = function(/* options */) {
dependencies.push('jqmicons'); dependencies.push('jqmicons');
dependencies.push('jqmpopup'); dependencies.push('jqmpopup');
dependencies.push('jqmlistview'); dependencies.push('jqmlistview');
dependencies.push('jqmcollapsible');
} }
var currentSelf = this; var currentSelf = this;
@ -4214,6 +4219,13 @@ $.fn.fieldcontain = function(/* options */) {
return deferred.promise(); return deferred.promise();
} }
var successFn = this._loadSuccess(absUrl, triggerData, settings, deferred);
var cachedResult = pageCache[absUrl.split('?')[0]];
if (cachedResult) {
successFn(cachedResult, true);
return deferred.promise();
}
// Load the new content. // Load the new content.
$.ajax({ $.ajax({
url: fileUrl, url: fileUrl,
@ -4221,7 +4233,7 @@ $.fn.fieldcontain = function(/* options */) {
data: settings.data, data: settings.data,
contentType: settings.contentType, contentType: settings.contentType,
dataType: "html", dataType: "html",
success: this._loadSuccess( absUrl, triggerData, settings, deferred ), success: successFn,
error: this._loadError( absUrl, triggerData, settings, deferred ) error: this._loadError( absUrl, triggerData, settings, deferred )
}); });
@ -5050,41 +5062,6 @@ $.mobile.links = function( target ) {
})( jQuery ); })( jQuery );
(function( $ ) {
var meta = $( "meta[name=viewport]" ),
initialContent = meta.attr( "content" ),
disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no",
enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes",
disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent );
$.mobile.zoom = $.extend( {}, {
enabled: !disabledInitially,
locked: false,
disable: function( lock ) {
if ( !disabledInitially && !$.mobile.zoom.locked ) {
meta.attr( "content", disabledZoom );
$.mobile.zoom.enabled = false;
$.mobile.zoom.locked = lock || false;
}
},
enable: function( unlock ) {
if ( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ) {
meta.attr( "content", enabledZoom );
$.mobile.zoom.enabled = true;
$.mobile.zoom.locked = false;
}
},
restore: function() {
if ( !disabledInitially ) {
meta.attr( "content", initialContent );
$.mobile.zoom.enabled = true;
}
}
});
}( jQuery ));
(function( $, undefined ) { (function( $, undefined ) {
var uiScreenHiddenRegex = /\bui-screen-hidden\b/; var uiScreenHiddenRegex = /\bui-screen-hidden\b/;
@ -5135,354 +5112,6 @@ $.mobile.behaviors.addFirstLastClasses = {
(function( $, undefined ) { (function( $, undefined ) {
var rInitialLetter = /([A-Z])/g,
// Construct iconpos class from iconpos value
iconposClass = function( iconpos ) {
return ( "ui-btn-icon-" + ( iconpos === null ? "left" : iconpos ) );
};
$.widget( "mobile.collapsible", {
options: {
enhanced: false,
expandCueText: null,
collapseCueText: null,
collapsed: true,
heading: "h1,h2,h3,h4,h5,h6,legend",
collapsedIcon: null,
expandedIcon: null,
iconpos: null,
theme: null,
contentTheme: null,
inset: null,
corners: null,
mini: null
},
_create: function() {
var elem = this.element,
ui = {
accordion: elem
.closest( ":jqmData(role='collapsible-set')," +
":jqmData(role='collapsibleset')" +
( $.mobile.collapsibleset ? ", :mobile-collapsibleset" :
"" ) )
.addClass( "ui-collapsible-set" )
};
this._ui = ui;
this._renderedOptions = this._getOptions( this.options );
if ( this.options.enhanced ) {
ui.heading = this.element.children( ".ui-collapsible-heading" );
ui.content = ui.heading.next();
ui.anchor = ui.heading.children();
ui.status = ui.anchor.children( ".ui-collapsible-heading-status" );
} else {
this._enhance( elem, ui );
}
this._on( ui.heading, {
"tap": function() {
ui.heading.find( "a" ).first().addClass( $.mobile.activeBtnClass );
},
"click": function( event ) {
this._handleExpandCollapse( !ui.heading.hasClass( "ui-collapsible-heading-collapsed" ) );
event.preventDefault();
event.stopPropagation();
}
});
},
// Adjust the keys inside options for inherited values
_getOptions: function( options ) {
var key,
accordion = this._ui.accordion,
accordionWidget = this._ui.accordionWidget;
// Copy options
options = $.extend( {}, options );
if ( accordion.length && !accordionWidget ) {
this._ui.accordionWidget =
accordionWidget = accordion.data( "mobile-collapsibleset" );
}
for ( key in options ) {
// Retrieve the option value first from the options object passed in and, if
// null, from the parent accordion or, if that's null too, or if there's no
// parent accordion, then from the defaults.
options[ key ] =
( options[ key ] != null ) ? options[ key ] :
( accordionWidget ) ? accordionWidget.options[ key ] :
accordion.length ? $.mobile.getAttribute( accordion[ 0 ],
key.replace( rInitialLetter, "-$1" ).toLowerCase() ):
null;
if ( null == options[ key ] ) {
options[ key ] = $.mobile.collapsible.defaults[ key ];
}
}
return options;
},
_themeClassFromOption: function( prefix, value ) {
return ( value ? ( value === "none" ? "" : prefix + value ) : "" );
},
_enhance: function( elem, ui ) {
var iconclass,
opts = this._renderedOptions,
contentThemeClass = this._themeClassFromOption( "ui-body-", opts.contentTheme );
elem.addClass( "ui-collapsible " +
( opts.inset ? "ui-collapsible-inset " : "" ) +
( opts.inset && opts.corners ? "ui-corner-all " : "" ) +
( contentThemeClass ? "ui-collapsible-themed-content " : "" ) );
ui.originalHeading = elem.children( this.options.heading ).first(),
ui.content = elem
.wrapInner( "<div " +
"class='ui-collapsible-content " +
contentThemeClass + "'></div>" )
.children( ".ui-collapsible-content" ),
ui.heading = ui.originalHeading;
// Replace collapsibleHeading if it's a legend
if ( ui.heading.is( "legend" ) ) {
ui.heading = $( "<div role='heading'>"+ ui.heading.html() +"</div>" );
ui.placeholder = $( "<div><!-- placeholder for legend --></div>" ).insertBefore( ui.originalHeading );
ui.originalHeading.remove();
}
iconclass = ( opts.collapsed ? ( opts.collapsedIcon ? "ui-icon-" + opts.collapsedIcon : "" ):
( opts.expandedIcon ? "ui-icon-" + opts.expandedIcon : "" ) );
ui.status = $( "<span class='ui-collapsible-heading-status'></span>" );
ui.anchor = ui.heading
.detach()
//modify markup & attributes
.addClass( "ui-collapsible-heading" )
.append( ui.status )
.wrapInner( "<a href='#' class='ui-collapsible-heading-toggle'></a>" )
.find( "a" )
.first()
.addClass( "ui-btn " +
( iconclass ? iconclass + " " : "" ) +
( iconclass ? iconposClass( opts.iconpos ) +
" " : "" ) +
this._themeClassFromOption( "ui-btn-", opts.theme ) + " " +
( opts.mini ? "ui-mini " : "" ) );
//drop heading in before content
ui.heading.insertBefore( ui.content );
this._handleExpandCollapse( this.options.collapsed );
return ui;
},
refresh: function() {
this._applyOptions( this.options );
this._renderedOptions = this._getOptions( this.options );
},
_applyOptions: function( options ) {
var isCollapsed, newTheme, oldTheme, hasCorners, hasIcon,
elem = this.element,
currentOpts = this._renderedOptions,
ui = this._ui,
anchor = ui.anchor,
status = ui.status,
opts = this._getOptions( options );
// First and foremost we need to make sure the collapsible is in the proper
// state, in case somebody decided to change the collapsed option at the
// same time as another option
if ( options.collapsed !== undefined ) {
this._handleExpandCollapse( options.collapsed );
}
isCollapsed = elem.hasClass( "ui-collapsible-collapsed" );
// We only need to apply the cue text for the current state right away.
// The cue text for the alternate state will be stored in the options
// and applied the next time the collapsible's state is toggled
if ( isCollapsed ) {
if ( opts.expandCueText !== undefined ) {
status.text( opts.expandCueText );
}
} else {
if ( opts.collapseCueText !== undefined ) {
status.text( opts.collapseCueText );
}
}
// Update icon
// Is it supposed to have an icon?
hasIcon =
// If the collapsedIcon is being set, consult that
( opts.collapsedIcon !== undefined ? opts.collapsedIcon !== false :
// Otherwise consult the existing option value
currentOpts.collapsedIcon !== false );
// If any icon-related options have changed, make sure the new icon
// state is reflected by first removing all icon-related classes
// reflecting the current state and then adding all icon-related
// classes for the new state
if ( !( opts.iconpos === undefined &&
opts.collapsedIcon === undefined &&
opts.expandedIcon === undefined ) ) {
// Remove all current icon-related classes
anchor.removeClass( [ iconposClass( currentOpts.iconpos ) ]
.concat( ( currentOpts.expandedIcon ?
[ "ui-icon-" + currentOpts.expandedIcon ] : [] ) )
.concat( ( currentOpts.collapsedIcon ?
[ "ui-icon-" + currentOpts.collapsedIcon ] : [] ) )
.join( " " ) );
// Add new classes if an icon is supposed to be present
if ( hasIcon ) {
anchor.addClass(
[ iconposClass( opts.iconpos !== undefined ?
opts.iconpos : currentOpts.iconpos ) ]
.concat( isCollapsed ?
[ "ui-icon-" + ( opts.collapsedIcon !== undefined ?
opts.collapsedIcon :
currentOpts.collapsedIcon ) ] :
[ "ui-icon-" + ( opts.expandedIcon !== undefined ?
opts.expandedIcon :
currentOpts.expandedIcon ) ] )
.join( " " ) );
}
}
if ( opts.theme !== undefined ) {
oldTheme = this._themeClassFromOption( "ui-btn-", currentOpts.theme );
newTheme = this._themeClassFromOption( "ui-btn-", opts.theme );
anchor.removeClass( oldTheme ).addClass( newTheme );
}
if ( opts.contentTheme !== undefined ) {
oldTheme = this._themeClassFromOption( "ui-body-",
currentOpts.contentTheme );
newTheme = this._themeClassFromOption( "ui-body-",
opts.contentTheme );
ui.content.removeClass( oldTheme ).addClass( newTheme );
}
if ( opts.inset !== undefined ) {
elem.toggleClass( "ui-collapsible-inset", opts.inset );
hasCorners = !!( opts.inset && ( opts.corners || currentOpts.corners ) );
}
if ( opts.corners !== undefined ) {
hasCorners = !!( opts.corners && ( opts.inset || currentOpts.inset ) );
}
if ( hasCorners !== undefined ) {
elem.toggleClass( "ui-corner-all", hasCorners );
}
if ( opts.mini !== undefined ) {
anchor.toggleClass( "ui-mini", opts.mini );
}
},
_setOptions: function( options ) {
this._applyOptions( options );
this._super( options );
this._renderedOptions = this._getOptions( this.options );
},
_handleExpandCollapse: function( isCollapse ) {
var opts = this._renderedOptions,
ui = this._ui;
ui.status.text( isCollapse ? opts.expandCueText : opts.collapseCueText );
ui.heading
.toggleClass( "ui-collapsible-heading-collapsed", isCollapse )
.find( "a" ).first()
.toggleClass( "ui-icon-" + opts.expandedIcon, !isCollapse )
// logic or cause same icon for expanded/collapsed state would remove the ui-icon-class
.toggleClass( "ui-icon-" + opts.collapsedIcon, ( isCollapse || opts.expandedIcon === opts.collapsedIcon ) )
.removeClass( $.mobile.activeBtnClass );
this.element.toggleClass( "ui-collapsible-collapsed", isCollapse );
ui.content
.toggleClass( "ui-collapsible-content-collapsed", isCollapse )
.attr( "aria-hidden", isCollapse )
.trigger( "updatelayout" );
this.options.collapsed = isCollapse;
this._trigger( isCollapse ? "collapse" : "expand" );
},
expand: function() {
this._handleExpandCollapse( false );
},
collapse: function() {
this._handleExpandCollapse( true );
},
_destroy: function() {
var ui = this._ui,
opts = this.options;
if ( opts.enhanced ) {
return;
}
if ( ui.placeholder ) {
ui.originalHeading.insertBefore( ui.placeholder );
ui.placeholder.remove();
ui.heading.remove();
} else {
ui.status.remove();
ui.heading
.removeClass( "ui-collapsible-heading ui-collapsible-heading-collapsed" )
.children()
.contents()
.unwrap();
}
ui.anchor.contents().unwrap();
ui.content.contents().unwrap();
this.element
.removeClass( "ui-collapsible ui-collapsible-collapsed " +
"ui-collapsible-themed-content ui-collapsible-inset ui-corner-all" );
}
});
// Defaults to be used by all instances of collapsible if per-instance values
// are unset or if nothing is specified by way of inheritance from an accordion.
// Note that this hash does not contain options "collapsed" or "heading",
// because those are not inheritable.
$.mobile.collapsible.defaults = {
expandCueText: " click to expand contents",
collapseCueText: " click to collapse contents",
collapsedIcon: "plus",
contentTheme: "inherit",
expandedIcon: "minus",
iconpos: "left",
inset: true,
corners: true,
theme: "inherit",
mini: false
};
})( jQuery );
(function( $, undefined ) {
$.widget( "mobile.controlgroup", $.extend( { $.widget( "mobile.controlgroup", $.extend( {
options: { options: {
enhanced: false, enhanced: false,

View file

@ -613,107 +613,6 @@ li.ui-block-e {
} }
.ui-collapsible {
margin: 0 -1em;
}
.ui-collapsible-inset,
.ui-collapsible-set {
margin: .5em 0;
}
.ui-collapsible-heading {
display: block;
margin: 0;
padding: 0;
position: relative;
}
.ui-collapsible-heading .ui-btn {
text-align: left;
margin: 0;
border-left-width: 0;
border-right-width: 0;
}
.ui-collapsible-heading .ui-btn-icon-top,
.ui-collapsible-heading .ui-btn-icon-bottom {
text-align: center;
}
.ui-collapsible-inset .ui-collapsible-heading .ui-btn {
border-right-width: 1px;
border-left-width: 1px;
}
.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) > .ui-collapsible-heading .ui-btn {
border-top-width: 0;
}
.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn {
border-top-width: 1px;
}
.ui-collapsible-heading-status {
position: absolute !important;
height: 1px;
width: 1px;
overflow: hidden;
clip: rect(1px,1px,1px,1px);
}
.ui-collapsible-content {
display: block;
margin: 0;
padding: .5em 1em;
}
.ui-collapsible-themed-content .ui-collapsible-content {
border-left-width: 0;
border-right-width: 0;
border-top-width: 0;
border-bottom-width: 1px;
border-style: solid;
}
.ui-collapsible-inset.ui-collapsible-themed-content .ui-collapsible-content {
border-left-width: 1px;
border-right-width: 1px;
}
.ui-collapsible-inset .ui-collapsible-content {
margin: 0;
}
.ui-collapsible-content-collapsed {
display: none;
}
.ui-collapsible-set > .ui-collapsible.ui-corner-all {
-webkit-border-radius: 0;
border-radius: 0;
}
.ui-collapsible-heading,
.ui-collapsible-heading > .ui-btn {
-webkit-border-radius: inherit;
border-radius: inherit;
}
.ui-collapsible-set .ui-collapsible.ui-first-child {
-webkit-border-top-right-radius: inherit;
border-top-right-radius: inherit;
-webkit-border-top-left-radius: inherit;
border-top-left-radius: inherit;
}
.ui-collapsible-content,
.ui-collapsible-set .ui-collapsible.ui-last-child {
-webkit-border-bottom-right-radius: inherit;
border-bottom-right-radius: inherit;
-webkit-border-bottom-left-radius: inherit;
border-bottom-left-radius: inherit;
}
.ui-collapsible-themed-content:not(.ui-collapsible-collapsed) > .ui-collapsible-heading {
-webkit-border-bottom-right-radius: 0;
border-bottom-right-radius: 0;
-webkit-border-bottom-left-radius: 0;
border-bottom-left-radius: 0;
}
.ui-collapsible-set .ui-collapsible {
margin: -1px -1em 0;
}
.ui-collapsible-set .ui-collapsible-inset {
margin: -1px 0 0;
}
.ui-collapsible-set .ui-collapsible.ui-first-child {
margin-top: 0;
}
.ui-controlgroup, .ui-controlgroup,
fieldset.ui-controlgroup { fieldset.ui-controlgroup {
padding: 0; padding: 0;

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="tvShowsPage" data-role="page" class="page libraryPage" data-require="scripts/tvshows,scripts/queryfilters"> <div id="tvShowsPage" data-role="page" class="page libraryPage" data-require="jqmcollapsible,scripts/tvshows,scripts/queryfilters">
<div class="libraryViewNav scopedLibraryViewNav"> <div class="libraryViewNav scopedLibraryViewNav">
<a href="tvrecommended.html"><iron-icon icon="info"></iron-icon>${TabSuggestions}</a> <a href="tvrecommended.html"><iron-icon icon="info"></iron-icon>${TabSuggestions}</a>
<a href="tvlatest.html"><iron-icon icon="new-releases"></iron-icon>${TabLatest}</a> <a href="tvlatest.html"><iron-icon icon="new-releases"></iron-icon>${TabLatest}</a>

View file

@ -4,7 +4,7 @@
<title>Emby</title> <title>Emby</title>
</head> </head>
<body> <body>
<div id="wizardLibraryPage" data-role="page" class="page standalonePage wizardPage mediaLibraryPage" data-require="jqmpopup,scripts/medialibrarypage,scripts/taskbutton,paperbuttonstyle"> <div id="wizardLibraryPage" data-role="page" class="page standalonePage wizardPage mediaLibraryPage" data-require="jqmcollapsible,jqmpopup,scripts/medialibrarypage,scripts/taskbutton,paperbuttonstyle">
<div data-role="content"> <div data-role="content">