Cumulative update to tour authoring. Numerous features added. Still in progress.

This commit is contained in:
Ron Gilchrist 2016-07-24 00:48:06 -07:00
Родитель 1904313c43
Коммит 5a8ec10ba7
16 изменённых файлов: 740 добавлений и 365 удалений

Просмотреть файл

@ -136,96 +136,14 @@
css+="<link href=\"ext/introjs.css?v="+ResourcesVersion+"\" rel=\"stylesheet\" />";
%>
<%=css%>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.0.23/style/jquery.jscrollpane.css" rel="stylesheet"/>
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/>
<style>
html, body.fs-player, iframe {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
.finder-scope {
body .finder-scope {
background: url(Images/finder-scope.png?v=<%= ResourcesVersion %>) no-repeat;
}
body .contextmenu {
background: rgba(25,30,43,.88);
position: absolute;
display: none;
width: 240px;
top: 400px;
left: 400px;
z-index: 1000;
box-shadow: 0 0 4px #808080;
background-clip: border-box;
padding-left: 15px;
border: solid 1px rgba(105,115,150,.7);
}
body .contextmenuitem {
border-left: solid 1px rgba(105,115,150,.7);
padding: 2px 4px 2px 4px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body .contextmenuitem:hover {
background-color: rgba(1,14,23,.85);
}
body .submenu:after {
display: block;
right: 6px;
content: " ";
float: right;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
border-width: 5px 0 5px 5px;
border-left-color: #cccccc;
margin-top: 5px;
margin-right: 10px;
}
body .checkedmenu:after {
font-family: FontAwesome;
content: "\f00c";
font-size: 13px;
color: rgba(255,255,255,.8);
text-align: center;
line-height: 15px;
height: 15px;
width: 15px;
position: absolute;
left: 0;
}
body .colorpicker {
background: rgba(25,30,43,.88);
position: absolute;
display: none;
width: 220px;
height: 240px;
top: 400px;
left: 400px;
z-index: 1000;
box-shadow: 0 0 4px #808080;
background-clip: border-box;
padding-left: 15px;
padding-top: 15px;
border: solid 1px rgba(105,115,150,.7);
}
</style>
<script src="//js.live.net/v5.0/wl.js"></script>
@ -239,6 +157,8 @@
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.5/angular-animate.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.3.8/angular-strap.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular-strap/2.3.8/angular-strap.tpl.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.0.23/script/jquery.jscrollpane.js"></script>
<% if (Debug || DebugChrome)
{ %>
@ -435,7 +355,7 @@
<hr class="clearfix"/>
</li>
<li>
<a ng-click="gotoPage('/')" target="_blank" localize="WorldWide Telescope Home"></a>
<a ng-click="gotoPage('/home')" target="_blank" localize="WorldWide Telescope Home"></a>
</li>
<li>
<a ng-click="gotoPage('/Learn')" target="_blank" localize="Getting Started (Help)"></a>
@ -455,24 +375,43 @@
</div>
</div>
<div ng-class="isLoading ? 'mobile-loading' : 'hide'">
<img src='<%= ResourcesLocation%>/Images/wwtlogo.png'
class="pull-left"
localize="WorldWide Telescope Logo"
localize-only="alt"
/>
<a href="http://aas.org" target="_blank" style="position:relative;left:3px;z-index:5"
class="pull-right">
<img ng-src="https://wwtweb.blob.core.windows.net/images/aas-white110.png"
localize="American Astronomical Society (AAS) Logo"
localize-only="alt" style="width:60px;height:60px;"/>
</a>
<a class="pull-left" href="/home" style="margin-left: -11px;">
<img src='<%= ResourcesLocation%>/Images/wwtlogo.png'
localize="WorldWide Telescope Logo"
localize-only="alt"
style="height:60px;width:60px"
/>
</a>
<h3>
<div class="small text-white">American Astronomical Society</div>
World<span class="brand-blue">Wide Telescope</span>
</h3>
<br />
<h4 localize="Welcome to the WorldWide Telescope Web Client"></h4>
<p>
<br />
<p style="text-align:center">
<i class="fa fa-spin fa-spinner"></i>
<span localize="WorldWide Telescope is loading. Please wait."></span>
<span localize="WorldWide Telescope is loading."></span><br />
<span localize="Please wait."></span>
</p>
<br />
<p class="small" localize="Please ensure you have a strong connection to the internet for the best experience.">
(Please ensure you have a strong connection to the internet for the best experience.)
Please ensure you have a strong connection to the internet for the best experience.
</p>
<div class="checkbox pull-left">
<label data-ng-class="iswebclientHome ? 'checked' : ''">
<input type="checkbox" ng-model="iswebclientHome" ng-change="homePrefChange(iswebclientHome)" />
<span localize="Show the web client as WWT landing page"></span>
</label>
</div>
</div>
<ng-include src="'views/modals/mobile-nearby-objects.html'"></ng-include>
<div class="context-panel">
@ -548,11 +487,10 @@
<li data-ng-class="activePanel == 'currentTour' ? 'active' : 'hide'">
<div class="outer">
<a href="javascript:void(0)">
<span class="label" data-ng-click="tabClick(tab)" id="btnCurTour" localize="{{currentTour._title}}"></span>
<%--<div class="menu" data-ng-click="menuClick(tab.menu)" id="tabMenu{{ribbon.tabs.length}}" data-target="#menu{{ribbon.tabs.length}}">
<i class="fa fa-caret-down"></i>
</div>--%>
<span class="label" style="padding-right:22px" localize="{{currentTour._title}}"></span>
<span ng-click="finishTour()" class="close-tour"><i class="fa fa-close"></i></span>
</a>
</div>
</li>
</ul>
@ -952,15 +890,15 @@
ng-show="!loadingUrlPlace"
ng-switch-when="currentTour"
id="currentTourPanel"
class="explore-panel rel"
class="explore-panel rel curtour-panel"
ng-controller="CurrentTourController"
ng-init="init(tour)"
>
<table>
<table ng-if="escaped == true">
<colgroup>
<col style="width:80px"/>
<col style="width:99%"/>
<col style="width:16px"/>
<col style="width:100%"/>
<col style="width:2px"/>
</colgroup>
<tr>
<td class="play-tour">
@ -971,27 +909,54 @@
<i class="fa fa-minus"></i>
</div>
</a><br/>
{{tour.minuteDuration}}:{{tour.secDuration}}
<div class="small" localize="Run Time"></div>
<div class="small">{{tour.minuteDuration}}:{{tour.secDuration}}</div>
</td>
<td class="tour-stops">
<div class="scroller">
<div class="scroller" data-jquery-scrollbar>
<div class="stops-container">
<div class="stop-arrow" ng-repeat="stop in tourStops">
<div class="thumbwrap">
<div class="stop-thumb thumbnail"
<div class="stop-thumb thumbnail {{$index == activeIndex?'active':''}}"
index="{{$index}}"
ng-click="gotoStop($index, $event)"
ng-click="selectStop($index, $event)"
ng-dblclick="showStartCameraPosition($index)"
ng-context-menu="showContextMenu">
<a class="ear stop-start" ng-click="showStartCameraPosition($index)"></a>
<a class="ear stop-end" ng-click="showEndCameraPosition($index)"></a>
<a class="ear stop-start" ng-click="showStartCameraPosition($index)" ng-show="editingTour"></a>
<a class="ear stop-end" ng-click="showEndCameraPosition($index)" ng-show="editingTour"></a>
<img ng-src="{{stop.thumb.src}}" alt="{{stop.description}}"/>
<label class="slide-label">{{stop.description}}</label>
<label class="duration">{{stop.secDuration}}</label>
</div>
</div>
<div class="right-arrow" ng-if="!$last" bs-popover template-url="/views/popovers/transition-type.html" trigger="hover" placement="bottom-left" data-content="{1}" title="Transition">
<i class="arrow-line"></i><i class="arrow-head"></i>
<div class="transition-choice" ng-if="!$last" bs-popover template-url="views/popovers/transition-type.html" trigger="click" placement="bottom-left" data-content="{1}" title="Transition" data-container="body">
<div class="right-arrow choice" ng-if="stop.transitionType==0">
<i class="arrow-line"></i><i class="arrow-head"></i>
</div>
<div class="crossfade choice" ng-if="stop.transitionType==1">
<span class="shape"></span>
</div>
<div class="abrupt choice" ng-if="stop.transitionType==2">
<span class="shape"></span>
</div>
<div class="fadeout-in choice" ng-if="stop.transitionType==3">
<span class="shape left"></span>
<span class="shape right"></span>
</div>
<div class="fadein choice" ng-if="stop.transitionType==4">
<span class="shape"></span>
</div>
<div class="fadeout choice" ng-if="stop.transitionType==5">
<span class="shape"></span>
</div>
</div>
</div>

Просмотреть файл

@ -1,3 +1,4 @@
/// <binding ProjectOpened='watch' />
/**!
Gruntfile to perform wwt webclient less compilation,
script concatenation/minification, and component updates

Просмотреть файл

@ -250,10 +250,13 @@ wwt.controllers.controller('MainController',
label:'Guided Tours',
button:'rbnTours',
menu: {
'Tour Home Page': [util.nav, '/Learn/Exploring#guidedtours'],
'Music and other Tour Resources': [util.nav, '/Download/TourAssets'],
sep2: null,
'Create a New Tour...': [$scope.createNewTour]
sep2: null,
'Create a New Tour...': [$scope.createNewTour],
}
}, {
label: 'Search',
@ -639,25 +642,43 @@ wwt.controllers.controller('MainController',
$('#openModal').modal('show');
};
$scope.playTour = function(url) {
$scope.playTour = function (url) {
console.log(encodeURIComponent(url));
$('.finder-scope').hide();
wwtlib.WWTControl.singleton.playTour(url);
wwt.tourPlaying = $rootScope.tourPlaying = true;
$rootScope.tourPaused = false;
wwt.wc.add_tourEnded(tourChangeHandler);
wwt.wc.add_tourReady(function() {
$scope.$applyAsync(function () {
$scope.activeItem = { label: 'currentTour' };
$scope.activePanel = 'currentTour';
wwt.wc.add_tourReady(function() {
$('#ribbon,.top-panel,.context-panel,.layer-manager')
.fadeOut(800, function () {
$scope.$applyAsync(function () {
$scope.activeItem = { label: 'currentTour' };
$scope.activePanel = 'currentTour';
$scope.ribbon.tabs[1].menu['Edit Tour'] = [$scope.editTour]
});
});
//$('#ribbon,.top-panel,.context-panel,.layer-manager').fadeOut(800);
});
//wwt.wc.add_tourPaused(tourChangeHandler);
};
};
$scope.editTour = function () {
$rootScope.$applyAsync(function () {
$rootScope.editingTour = true;
});
};
$rootScope.finishTour = function () {
delete $scope.ribbon.tabs[1].menu['Edit Tour'];
$rootScope.editingTour = false;
$rootScope.tourPlaying = false;
wwtlib.WWTControl.singleton.stopCurrentTour();
$scope.activePanel = 'Guided Tours';
$('#ribbon, .top-panel, .context-panel, .layer-manager').fadeIn(400);
}
$scope.createNewTour = function() {
//todo show dialog for tour properties
@ -815,7 +836,6 @@ wwt.controllers.controller('MainController',
$cookies.remove('homepage');
if (!isWebclient) {
$cookies.put('homepage', 'home', { expires: new Date(2050, 1, 1), path: "/" });
//location.href = '/'
} else {
$cookies.put('homepage', 'webclient', { expires: new Date(2050, 1, 1), path: "/" });
}
@ -919,5 +939,8 @@ wwt.controllers.controller('MainController',
$scope.contextPagerRight = function() {
return /*$scope.fovClass() != 'hide' && */ $scope.showTrackingString() ? 0 : 50;
}
if (util.getQSParam('playTour')) {
$scope.playTour(decodeURIComponent(util.getQSParam('playTour')))
}
}
]);

Просмотреть файл

@ -1,20 +1,42 @@
wwt.controllers.controller('CurrentTourController', ['$scope', '$rootScope', function($scope,$rootScope) {
wwt.controllers.controller('CurrentTourController', ['$scope', '$rootScope','Util', function($scope,$rootScope,util) {
var tourEdit = wwtlib.WWTControl.singleton.tourEdit;
var tour;
$scope.init = function (curTour) {
$rootScope.currentTour = $scope.tour = tour = tourEdit.get_tour();
tourEdit.tourStopList.refreshCallback = mapStops;
mapStops();
mapStops();
$rootScope.$on('escKey', function () {
$scope.$applyAsync(showTourSlides);
});
$rootScope.$watch('editingTour', function () { });
if (util.isDebug) {
showTourSlides();
}
};
var showTourSlides = function () {
$('#ribbon,.top-panel').fadeIn(400);
tourEdit.pauseTour();
$rootScope.tourPaused = true;
$scope.escaped = true;
if (util.isDebug) {
$rootScope.editingTour = true;
}
setTimeout(function () {
$rootScope.stopScroller = $('.scroller').jScrollPane({ scrollByY: 155, horizontalDragMinWidth: 155 });
}, 200);
};
$scope.showContextMenu = function (index,e) {
if (e) {
tour.set_currentTourstopIndex(index);
tourEdit.tourStopList_MouseClick(index, e);
$scope.activeIndex = index;
}
};
$scope.gotoStop = function (index, e) {
$scope.selectStop = function (index, e) {
tour.set_currentTourstopIndex(index);
$scope.activeIndex = index;
};
$scope.showStartCameraPosition = function (index) {
@ -49,14 +71,23 @@
}
s.secDuration = '0:' + s.secDuration;
tour.duration += s.duration;
s.transitionType = s.get__transition();
console.log(s);
return s;
});
tour.minuteDuration = Math.floor(tour.duration / 60000);
tour.secDuration = Math.floor((tour.duration % 60000) / 1000);
$scope.tour = tour;
});
}
$scope.setStopTransition = function (index, transitionType) {
var stop = $scope.tourStops[index];
stop.set__transition(transitionType);
stop.transitionType = transitionType;
}
}]);

Просмотреть файл

@ -108,7 +108,7 @@
title: item.get_name(),
target: $(event.currentTarget),
id: 'tourpop',
template:'views/popovers/tour-template.html',
templateUrl:'views/popovers/tour-template.html',
contentTemplate: 'views/popovers/tour-info.html',
placement: 'bottom-left',
scope: $scope,

84
css/contextmenu.less Normal file
Просмотреть файл

@ -0,0 +1,84 @@
html, body.fs-player, iframe {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
body{
.contextmenu {
background: rgba(25,30,43,.88);
position: absolute;
display: none;
width: 240px;
top: 400px;
left: 400px;
z-index: 1000;
box-shadow: 0 0 4px #808080;
background-clip: border-box;
padding-left: 15px;
border: solid 1px rgba(105,115,150,.7);
}
.contextmenuitem {
border-left: solid 1px rgba(105,115,150,.7);
padding: 2px 4px 2px 4px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.contextmenuitem:hover {
background-color: rgba(1,14,23,.85);
}
.submenu:after {
display: block;
right: 6px;
content: " ";
float: right;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
border-width: 5px 0 5px 5px;
border-left-color: #cccccc;
margin-top: 5px;
margin-right: 10px;
}
.checkedmenu:after {
font-family: FontAwesome;
content: "\f00c";
font-size: 13px;
color: rgba(255,255,255,.8);
text-align: center;
line-height: 15px;
height: 15px;
width: 15px;
position: absolute;
left: 0;
}
.colorpicker {
background: rgba(25,30,43,.88);
position: absolute;
display: none;
width: 220px;
height: 240px;
top: 400px;
left: 400px;
z-index: 1000;
box-shadow: 0 0 4px #808080;
background-clip: border-box;
padding-left: 15px;
padding-top: 15px;
border: solid 1px rgba(105,115,150,.7);
}
}

376
css/tours.less Normal file
Просмотреть файл

@ -0,0 +1,376 @@
body.wwt-webclient-wrapper {
div.curtour-panel {
padding-left: 0;
max-height: 108px;
height: 108px;
//overflow: hidden;
table{
table-layout:fixed;
width:100%;
//margin:2px 8px 0 8px;
height:108px;
td.play-tour{
background:fade(@bordercolor-opaque,30%);
width:80px;
vertical-align:middle;
text-align:center;
//height:102px;
}
td.tour-stops,td.tour-stops *{
outline:none !important;
}
td.tour-stops{
background:fade(#000,30%);
height:102px;
width:100%;
//border: solid 1px @bordercolor;
.scroller{
height:108px;
border-bottom:solid 8px rgba(78,86,114,.3);
.jspVerticalBar,.jspCorner{
display:none;
}
.jspContainer{
border: 1px solid @bordercolor-opaque;
}
.jspPane{
margin-left:0;
}
.jspHorizontalBar{
background:transparent;
bottom:auto;
top:0;
height:8px;
background:transparent;
.jspTrack{
background:fade(@bordercolor-opaque,60%);
.jspDrag{
background:@bordercolor-opaque;
border-radius:3px;
height:6px;
.jspDragLeft,.jspdragRight{
visibility:hidden;
}
}
}
}
max-width: 100%;
overflow-x: auto;
overflow-y:hidden;
div.stops-container{
padding-left:5px;
padding-top:16px;
height:100px;
white-space:nowrap;
vertical-align:text-top;
.stop-arrow{
white-space:nowrap;
vertical-align:text-top;
width:155px;
display:inline-block;
.transition-choice{
position: relative;
left: -10px;
margin:0 0 0 6px;
}
}
div.stop-thumb{
position:relative;
vertical-align:text-top;
img{
display:inline-block;
border:none;
}
.slide-label{
position:absolute;
bottom:0;
left:4px;
}
.duration{
position:absolute;
bottom:-17px;
left:0;
width:99px;
text-align:center;
display:block;
}
.ear{
height:0;
width:0;
position:absolute;
top:-9px;
display:inline-block;
}
.ear:hover, .ear.active{
border-bottom-color:yellow;
}
.stop-start{
left:-1px;
border-bottom: 7px solid @bordercolor-opaque;
border-right: 7px solid transparent;
}
.stop-end{
right:-1px;
border-bottom: 7px solid @bordercolor-opaque;
border-left: 7px solid transparent;
}
}
}
}
}
}
tour-slides{
overflow-x:scroll;
}
}
.transition-choice{
border:solid 1px transparent;
width:38px;
height:65px;
border-radius:3px;
vertical-align:text-top;
display:inline-block;
.shape{
height:0;
width:0;
position:absolute;
top:0;
}.choice{
display:inline-block;
height:100%;
width:100%;
}
.choice:before{
content:'A';
position:absolute;
color:white;
}
.choice:after{
content:'B';
position:absolute;
color:white;
}
.right-arrow{
width:100%;
padding:22px 0 21px 2px;
i.arrow-line{
display:inline-block;
height:7px;
width:23px;
background:@bordercolor-opaque;
}
i.arrow-head{
display:inline-block;
border-top: 14px solid @bordercolor-opaque;
border-left: 14px solid transparent;
transform:rotate(45deg);
margin-left:-8px;
margin-bottom:-3px;
}
}
.right-arrow:after,.right-arrow:before{visibility:hidden}
.crossfade{
background:fade(@bordercolor,30%);
.shape{
border-top: 63px solid @bordercolor;
border-left: 36px solid transparent;
right:0;
}
&:before{
bottom:2px;
left:4px;
}
&:after{
top:3px;
right:3px;
}
}
.abrupt{
background:fade(@bordercolor,30%);
.shape{
background: @bordercolor;
width:50%;
height:100%;
right:0;
}
&:before{
top:16px;
left:4px;
}
&:after{
top:16px;
right:3px;
}
}
.fadeout-in{
.shape.right{
border-bottom: 63px solid @bordercolor;
border-left: 18px solid transparent;
right:0;
}
.shape.left{
border-bottom: 63px solid fade(@bordercolor,30%);
border-right: 18px solid transparent;
left:0;
}
&:before{
bottom:3px;
left:4px;
}
&:after{
bottom:3px;
right:3px;
}
}
.fadein{
.shape{
border-bottom: 63px solid @bordercolor;
border-left: 36px solid transparent;
right:0;
}
&:before{
visibility:hidden;
}
&:after{
bottom:3px;
right:4px;
}
}
.fadeout{
.shape{
border-bottom: 63px solid fade(@bordercolor,30%);
border-right: 36px solid transparent;
left:0;
}
&:before{
bottom:3px;
left:4px;
}
&:after{
visibility:hidden;
}
}
}
.transition-choice.active,.transition-choice:hover{
border-color:yellow;
}
a.btn-play-tour{
position:relative;
height:48px;width:48px;
border-radius:50%;
display:inline-block;
font-size: 20px;
box-shadow:inset 0 -2px 6px #324272,
inset 0 0 2px rgba(0,0,0,.5),
0 0 3px rgba(0,0,0,.5),
0 0 8px rgba(93, 144, 232, 0.80);
background-color:rgba(0,0,0,.3);
#gradient > .vertical-four-colors(rgba(255,255,255,.3), rgba(155,155,155,.01), 50%, rgba(155,155,155,.01), 75%, rgba(44,185,201,.7));
border:solid 2px #000;
i.fa-play{
margin:14px 17px;
}
div.paused{
display:inline-block;
margin: 9px 0;
white-space: nowrap;
position: relative;
left: -2px;
i.fa.fa-minus{
transform:rotate(90deg);
height:10px;
overflow:hidden;
margin: 0 -12px 0 0;
}
}
}
a.btn-play-tour:after {
content:" ";
position:absolute;
top:2px;
left:2px;
background:linear-gradient(180deg, rgba(255,255,255,.5), rgba(255,255,255,.3) 40%, rgba(255,255,255,.1));
height:22px;
width:40px;
border-radius: 50% 50% 50% 50%/75% 75% 25% 25%;
box-shadow:inset 0 0 3px rgba(255,255,255,.3);
}
a.btn-play-tour:hover::after{
background:linear-gradient(180deg, rgba(255,255,255,.6), rgba(255,255,255,.4) 40%, rgba(255,255,255,.15));
}
a.btn-play-tour:hover {
box-shadow:inset 0 -2px 6px lighten(rgb(121,158,225),10%),
inset 0 0 2px rgba(0,0,0,.3),
0 0 2px rgba(0,0,0,.5),
0 0 13px rgba(93, 144, 232, 1);
border:solid 1px #000;
background-color:rgba(23,56,156,.5);
#gradient > .vertical-four-colors(rgba(255,255,255,.6), rgba(155,155,155,.01), 50%, rgba(155,155,155,.01), 75%, rgba(44,185,201,.7));
}
.tour-info h3 {
a.btn-play-tour{
cursor: pointer;
position:absolute;
z-index: 10;
top:3px;
height:40px;width:40px;
font-size: 18px;
background-color:rgba(0,0,0,.8);
i.fa-play{
margin:10px 13px;
}
}
a.btn-play-tour:after{
content:" ";
position:absolute;
top:2px;
left:2px;
height:19px;
width:34px;
}
}
.popover.slide-transition{
margin-top:3px;
width:290px;
height:190px;
border-radius:3px;
.choose-transition{
margin:12px;
background:rgba(0,0,0,.7);
.transition-choice{
position:relative;
width:38px;
height:65px;
overflow:hidden;
cursor:pointer;
margin-left:2.2px;
}
}
.col-md-4{
padding-top:10px;
text-align:center;
input{
width:40px;
}
}
}
}

Просмотреть файл

@ -1,6 +1,7 @@
@import '../../packages/bootstrap.less.3.3.6/content/Content/bootstrap/bootstrap.less';
@import 'variables.less';
@import 'tours.less';
@import 'contextmenu.less';
html {
-ms-content-zooming: none;
.desktop{position:relative;}
@ -64,7 +65,9 @@ body.wwt-webclient-wrapper.mobile{
padding:16px;
h3{
position:relative;
top:-2px;
top: -12px;
left:3px;
white-space: nowrap;
.text-white{color:white;}
.brand-blue{color:@brand-blue;}
}
@ -473,172 +476,11 @@ body.wwt-webclient-wrapper.mobile{
margin: -3px -8px -8px -8px;
}
div.explore-panel {
div.explore-panel {
padding-left: 4px;
max-height: 97px;
height: 97px;
//overflow: hidden;
table{
table-layout:fixed;
width:100%;
margin:2px 8px 0 8px;
td.play-tour{
width:80px;
vertical-align:middle;
text-align:center;
height:100px;
}
td.tour-stops{
width:100%;
border: solid 1px @bordercolor;
.scroller{
padding-left:5px;
max-width: 100%;
overflow-x: auto;
overflow-y:hidden;
div.stops-container{
position:relative;
top:10px;
height:88px;
white-space:nowrap;
vertical-align:text-top;
.stop-arrow{
white-space:nowrap;
vertical-align:text-top;
width:155px;
display:inline-block;
}
div.stop-thumb{
position:relative;
img{
display:inline-block;
border:none;
}
.slide-label{
position:absolute;
bottom:0;
left:4px;
}
.duration{
position:absolute;
bottom:-16px;
left:0;
width:99px;
text-align:center;
display:block;
}
.ear{
height:0;
width:0;
position:absolute;
top:-9px;
display:inline-block;
}
.ear:hover, .ear.active{
border-bottom-color:yellow;
}
.stop-start{
left:-1px;
border-bottom: 7px solid @bordercolor-opaque;
border-right: 7px solid transparent;
}
.stop-end{
right:-1px;
border-bottom: 7px solid @bordercolor-opaque;
border-left: 7px solid transparent;
}
}
.right-arrow{
padding-top:29px;
width:50px;
vertical-align:middle;
display:inline-block;
position: relative;
//top: 11px;
left: -3px;
i.arrow-line{
display:inline-block;
height:7px;
width:23px;
background:@bordercolor-opaque;
}
i.arrow-head{
display:inline-block;
border-top: 14px solid @bordercolor-opaque;
border-left: 14px solid transparent;
transform:rotate(45deg);
margin-left:-8px;
margin-bottom:-3px;
}
}
}
}
}
}
tour-slides{
overflow-x:scroll;
}
}
a.btn-play-tour{
height:48px;width:48px;
border-radius:50%;
display:inline-block;
font-size: 20px;
//padding: 10px 17px;
//margin:16px 0 0 8px;
box-shadow:inset 0 -2px 6px #324272,
inset 0 0 2px rgba(0,0,0,.5),
0 0 3px rgba(0,0,0,.5),
0 0 6px rgba(44,185,201,.7);
background-color:rgba(0,0,0,.3);
#gradient > .vertical-four-colors(rgba(255,255,255,.3), rgba(155,155,155,.01), 50%, rgba(155,155,155,.01), 75%, rgba(44,185,201,.7));
border:solid 1px #000;
i.fa-play{
margin:14px 17px;
}
div.paused{
display:inline-block;
margin: 9px 0;
white-space: nowrap;
position: relative;
left: -2px;
i.fa.fa-minus{
transform:rotate(90deg);
height:10px;
overflow:hidden;
margin: 0 -12px 0 0;
}
}
}
a.btn-play-tour:after{
content:" ";
position:absolute;
top:21px;
left:32px;
background:linear-gradient(180deg, rgba(255,255,255,.5), rgba(255,255,255,.3) 40%, rgba(255,255,255,.1));
height:22px;
width:42px;
border-radius: 50% 50% 50% 50%/75% 75% 25% 25%;
}
a.btn-play-tour:hover::after{
background:linear-gradient(180deg, rgba(255,255,255,.6), rgba(255,255,255,.4) 40%, rgba(255,255,255,.15));
}
a.btn-play-tour:hover {
box-shadow:inset 0 -2px 6px lighten(rgba(44,185,201,1),10%),
inset 0 0 2px rgba(0,0,0,.3),
0 0 2px rgba(0,0,0,.5),
0 0 9px lighten(rgba(44,185,201,1),10%);
border:solid 1px #000;
background-color:rgba(23,56,156,.5);
#gradient > .vertical-four-colors(rgba(255,255,255,.6), rgba(155,155,155,.01), 50%, rgba(155,155,155,.01), 75%, rgba(44,185,201,.7));
}
div.explore-panel.expanded {
height: 377px;
@ -697,7 +539,7 @@ body.wwt-webclient-wrapper.mobile{
overflow: hidden;
position: relative;
a {
text-align: center;
display: block;
@ -747,6 +589,20 @@ body.wwt-webclient-wrapper.mobile{
text-decoration: none;
color: white;
}
.close-tour{
font-weight:100;
position: absolute;
top: 0px;
right: 2px;height:17px;
background-color:transparent;
width:14px;
cursor:pointer;
display:inline-block;
}
.close-tour:hover{
background-color:#006;
}
}
}
@ -1057,22 +913,25 @@ body.wwt-webclient-wrapper.mobile{
margin: 1px 0 4px;
}
}
.popover.tour-preview{
border-radius:3px;
top:17px !important;
}
.tour-pop {
padding: 0;
width: 470px;
margin-top:3px;
.tour-info {
margin: 0;
margin:-3px 0 0 0;
padding: 2px;
h3 {
background-color: rgba(222,222,222,.2);
background-color: rgba(114, 156, 208, 0.28);
margin: -3px;
padding: 2px 5px 6px;
border-top-right-radius: 3px;
border-top-left-radius: 3px;
/*border-top-right-radius: 3px;
border-top-left-radius: 3px;*/
height:45px;
span.label {
max-width: 380px;
display: inline-block;
@ -1086,6 +945,7 @@ body.wwt-webclient-wrapper.mobile{
font-size: 12px;
display: block;
color:@text-color;
margin-bottom:6px;
.rating-container {
display: inline-block;
position: relative;
@ -1417,6 +1277,9 @@ body.wwt-webclient-wrapper.mobile{
overflow: hidden;
}
}
.thumbnail.active {
border-color: yellow;
}
.property-panel a.thumbnail, .finder-scope .thumbnail {
height: 58px;

Просмотреть файл

@ -1,4 +1,4 @@
wwt.app.directive("scrollBuffer", function ($window) {
wwt.app.directive("scrollBuffer", ['$window',function ($window) {
return function ($scope, element, attrs) {
var buffer = parseInt(attrs.scrollBuffer);
var scope = $scope;
@ -22,4 +22,35 @@
});
};
});
}]);
wwt.app.directive("jqueryScrollbar", ['$rootScope','$window', function ($rootScope,$window) {
return function ($scope, element, attrs) {
var scope = $scope;
var movable = $(element).find('.jspPane');
$(element).on('mousewheel', function (event) {
var e = event.originalEvent;
movable = $(element).find('.jspPane');
var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
var curLeft = movable.position().left;
var increment = 155;
var newLeft;
//scrolling down?
if (delta < 0) {
newLeft = Math.floor((curLeft - increment) / increment) * increment;
}
//scrolling up?
else {
newLeft = Math.floor((curLeft + increment) / increment) * increment;
}
//movable.css('left', Math.max(newLeft,0));
$(element).data('jsp').scrollToX(Math.abs(newLeft));
})
};
}
])

Просмотреть файл

@ -3,23 +3,10 @@
init: init
};
var canvas, ctx;
//var renderLog = [];
//var avgs = [];
//var getAvg = function () {
// var sum = 0;
// $.each(renderLog, function() {
// sum += this;
// });
// avgs.push(sum / renderLog.length);
// renderLog = [];
//}
function draw(event, viewport) {
if (!viewport.isDirty && !viewport.init){ return;}
//var d1 = new Date();
/*if (canvas == undefined) {
init();
}*/
ctx.clearRect(0, 0, 100, 100);
var sphereSize = $('#skyball').height();
var radius = sphereSize / 2;
@ -67,12 +54,6 @@
ctx.fillStyle = (z / 4) > 0 ? 'rgba(255,255,0,.9)' : 'rgba(255,255,0,.5)';
ctx.fill();
ctx.stroke();
//var renderTime = new Date().valueOf() - d1.valueOf();
//renderLog.push(renderTime);
//if (renderLog.length == 50) {
// getAvg();
// console.log('skyball avg: ', avgs);
//}
};

Просмотреть файл

@ -16,6 +16,7 @@
isStaging: function() {
return location.href.indexOf('worldwidetelescope') === -1;
},
isDebug:getQSParam('debug')!=null,
nav: nav,
log: log,
resetCamera: resetCamera,
@ -98,9 +99,6 @@
return parseFloat(input);
}
}
function getAstroDetails(place) {
var coords = wwtlib.Coordinates.fromRaDec(place.get_RA(), place.get_dec());
@ -216,18 +214,7 @@
}
var accelDevice = false;
//window.ondevicemotion = function(event) {
// if (event.acceleration &&
// event.acceleration.x != null) {
// log('devicemotionevent', event);
// accelDevice = true;
// if (!api.isMobile && minDimension < 500) {
// redirectClient('mobile');
// }
// window.ondevicemotion = null;
// }
//}
function redirectClient(val) {
return;
var qs = location.search.substr(1);
@ -300,6 +287,16 @@
}
var keyHandler = function (e) {
switch (e.keyCode) {
case 27:
$rootScope.$broadcast('escKey');
break;
}
};
$(document).on('keyup', keyHandler);
var dirtyInterval,
viewport = {
isDirty: false,

Просмотреть файл

@ -59,18 +59,20 @@
</div>
<div class="modal-footer" style="border: none">
<div class="pull-left">
<div class="checkbox">
<div class="checkbox pull-left">
<label data-ng-class="iswebclientHome ? 'checked' : ''">
<input type="checkbox" ng-model="iswebclientHome" ng-change="homePrefChange(iswebclientHome)" />
<span localize="Show the web client as WWT landing page"></span>
</label>
</div>
<div class="clear"></div>
<div class="checkbox pull-left">
<label data-ng-class="hideIntroModal ? 'checked' : ''">
<input type="checkbox" ng-model="hideIntroModal" ng-change="hideIntroModalChange(hideIntroModal)" />
<span localize="Do not show me this dialog again"></span>
</label>
</div>
<div class="checkbox pull-left">
<label data-ng-class="iswebclientHome ? 'checked' : ''">
<input type="checkbox" ng-model="iswebclientHome" ng-change="homePrefChange(iswebclientHome)" />
<span localize="Web client is WWT home page"></span>
</label>
</div>
</div>
<a class="btn" ng-click="tourFeatures()">Tour WWT Features</a>
<button type="button" class="btn" data-dismiss="modal" id="btnCloseIntro" style="width:80px" localize="Close"></button>

Просмотреть файл

@ -1,10 +1,12 @@
<div class="tour-info">
<h3 class="rel">
<a ng-click="playTour(tour.get_tourUrl())" class="iblock" style="cursor: pointer;position:absolute;z-index: 10">
<!--<a ng-click="playTour(tour.get_tourUrl())" class="iblock" style="cursor: pointer;position:absolute;z-index: 10">
<i class="fa fa-play-circle text-info"></i>
</a>-->
<a class="btn-play-tour iblock" ng-click="playTour(tour.get_tourUrl())">
<i class="fa fa-play"></i>
</a>
<span class="label" style="margin-left: 20px">{{tour.get_name()}}</span>
<span class="label" style="margin-left: 42px">{{tour.get_name()}}</span>
<div style="display: inline-block" class="pull-right">
<span class="small">
<span localize="Rating"></span>:
@ -35,7 +37,7 @@
<h4>{{tour.author}}</h4>
<h5>{{tour.organizationName}}</h5>
<p>{{tour.description}}</p>
<div ng-if="relatedTours">
<div ng-if="relatedTours" style="clear:left">
<h4 localize="Related Tours"></h4>
<hr />
<div style="display: inline-block;vertical-align:top;" ng-repeat="item in relatedTours">

Просмотреть файл

@ -1,5 +1,5 @@

<div class="popover">
<div class="popover tour-preview">
<div class="arrow"></div>
<h3 class="popover-title hide" ng-bind="title" ng-show="title"></h3>
<div class="popover-content tour-pop" ng-bind="content"></div>

Просмотреть файл

@ -1,22 +1,37 @@
<div class="popover">
<div class="popover slide-transition" ng-show="editingTour">
<div class="choose-transition">
<div class="transition-container">
<div class="right-arrow">
<i class="arrow-line"></i><i class="arrow-head"></i>
</div>
<div class="right-arrow">
<i class="arrow-line"></i><i class="arrow-head"></i>
</div>
<div class="right-arrow">
<i class="arrow-line"></i><i class="arrow-head"></i>
</div>
<div class="right-arrow">
<i class="arrow-line"></i><i class="arrow-head"></i>
</div>
<div class="right-arrow">
<div class="transition-choice" ng-click="setStopTransition($index,0);$hide()">
<div class="right-arrow choice">
<i class="arrow-line"></i><i class="arrow-head"></i>
</div>
</div>
<div class="transition-choice" ng-click="setStopTransition($index,1);$hide()">
<div class="crossfade choice">
<span class="shape"></span>
</div>
</div>
<div class="transition-choice" ng-click="setStopTransition($index,2);$hide()">
<div class="abrupt choice">
<span class="shape"></span>
</div>
</div>
<div class="transition-choice" ng-click="setStopTransition($index,3);$hide()">
<div class="fadeout-in choice">
<span class="shape left"></span>
<span class="shape right"></span>
</div>
</div>
<div class="transition-choice" ng-click="setStopTransition($index,4);$hide()">
<div class="fadein choice">
<span class="shape"></span>
</div>
</div>
<div class="transition-choice" ng-click="setStopTransition($index,5);$hide()">
<div class="fadeout choice">
<span class="shape"></span>
</div>
</div>
</div>
<div class="row-fluid">
<div class="col-md-4">
<label>A Time</label>
@ -24,10 +39,12 @@
</div>
<div class="col-md-4">
<label>Hold Time</label>
<input type="number" min="0" />
</div>
<div class="col-md-4">
<label>B Time</label>
<input type="number" min="0" />
</div>
</div>
</div>
</div>

Просмотреть файл

@ -271,6 +271,8 @@
<Content Include="Content\bootstrap\alerts.less" />
<Content Include="App_Data\wurfl-latest.zip" />
<Content Include="Chandra.wtml" />
<Content Include="css\contextmenu.less" />
<Content Include="css\tours.less" />
<None Include="Scripts\jquery-2.1.4.intellisense.js" />
<Content Include="Scripts\bootstrap.js" />
<Content Include="Scripts\bootstrap.min.js" />