Skip to content

Commit 98e4c9a

Browse files
committed
Various UI updates for image handling and processing.
1 parent 30bba37 commit 98e4c9a

File tree

3 files changed

+106
-96
lines changed

3 files changed

+106
-96
lines changed

js/app.js

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,6 @@ app.controller("AppCtrl", function($scope, localStorage, $window, $filter) {
188188
};
189189

190190
$scope.noStateSaveOnUnload = function() {
191-
console.log('here', arguments);
192191
$window.onbeforeunload = function() {
193192
//No-op
194193
};
@@ -216,6 +215,8 @@ app.controller("AppCtrl", function($scope, localStorage, $window, $filter) {
216215
$scope.initState();
217216
}
218217

218+
$scope.imageSupport = true;
219+
219220
/**
220221
* Set the correct drawOptions and term as well as a global schedule var
221222
* for displaying any single schedule alone
@@ -239,6 +240,13 @@ app.controller("AppCtrl", function($scope, localStorage, $window, $filter) {
239240
$scope.state.drawOptions[key] = schedule[key];
240241
}
241242

243+
// Set image property
244+
if(schedule.hasOwnProperty('image')) {
245+
$scope.imageSupport = schedule.image;
246+
} else {
247+
$scope.imageSupport = true;
248+
}
249+
242250
// Set the correct term
243251
$scope.state.requestOptions.term = +schedule.term;
244252

@@ -1966,13 +1974,15 @@ app.directive('schedule', function($timeout, $filter) {
19661974
scope.scheduleController.draw();
19671975

19681976

1969-
// Fix the pixel issues after DOM updates
1970-
$timeout(function() {
1971-
var offset = elm.find("svg").offset(),
1972-
vert = 1 - parseFloat('0.'+('' + offset.top).split('.')[1]);
1973-
horz = 1 - parseFloat('0.'+('' + offset.left).split('.')[1]);
1974-
scope.grid.opts.pixelAlignment ='translate('+horz+','+vert+')';
1975-
},0,true);
1977+
// Fix the pixel issues after DOM updates (not on Chrome)
1978+
if(typeof window.chrome == 'undefined') {
1979+
$timeout(function() {
1980+
var offset = elm.find("svg").offset(),
1981+
vert = 1 - parseFloat('0.'+('' + offset.top).split('.')[1]);
1982+
horz = 1 - parseFloat('0.'+('' + offset.left).split('.')[1]);
1983+
scope.grid.opts.pixelAlignment ='translate('+horz+','+vert+')';
1984+
},10,true);
1985+
}
19761986
}
19771987
});
19781988
}

js/templates/schedule.html

Lines changed: 87 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,88 @@
1-
<div class="panel panel-default" schedule-actions>
2-
<div ng-show="!print" class="panel-heading">
3-
<div class="row form-horizontal">
4-
<div class="col-xs-12">
5-
<h2 class="panel-title control-label pull-left smaller-sm">{{saveAction == "create"?("Schedule " + (state.schedules.indexOf(schedule) + 1)):"My Schedule"}}</h2>
6-
<div class="btn-group pull-right hidden-xs hidden-sm">
7-
<div class="btn-group">
8-
<button ng-click="scheduleActions.save(saveAction)" type="button" class="btn btn-primary"><i class="fa" ng-class="{'fa-save': saveAction == 'create', 'fa-copy': saveAction == 'fork'}"></i> {{saveAction == "create"?"Save":"Copy and Edit"}} </button>
9-
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
10-
<span class="caret"></span>
11-
</button>
12-
<ul class="dropdown-menu" role="menu">
13-
<li><a ng-click="scheduleActions.downloadiCal($event)" href="#"><i class="fa fa-calendar-o"></i> iCal</a></li>
14-
<li><a ng-click="scheduleActions.downloadImage($event)" href="#"><i class="fa fa-picture-o"></i> Image</a></li>
15-
</ul>
16-
</div>
17-
<button ng-click="scheduleActions.print()" type="button" class="btn btn-info hidden-xs"><i class="fa fa-print"></i> Print</button>
18-
<div class="btn-group">
19-
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown">
20-
<i class="fa fa-share"></i> Share to... <span class="caret"></span>
21-
</button>
22-
<ul class="dropdown-menu" role="menu">
23-
<li><a ng-click="scheduleActions.shareToService($event, 'facebook')" href="#"><i class="fa fa-facebook"></i> Facebook</a></li>
24-
<li><a ng-click="scheduleActions.shareToService($event, 'twitter')" href="#"><i class="fa fa-twitter"></i> Twitter</a></li>
25-
<li><a ng-click="scheduleActions.shareToService($event, 'googlep')" href="#"><i class="fa fa-google-plus"></i> Google+</a></li>
26-
<li class="divider"></li>
27-
<li><a ng-click="scheduleActions.shareToEmail($event)" href="#"><i class="fa fa-envelope"></i> Email</a></li>
28-
<li><a ng-click="scheduleActions.shareToDirectLink($event)" href="#"><i class="fa fa-link"></i> Direct link</a></li>
29-
</ul>
30-
</div>
31-
</div>
32-
<div class="btn-group pull-right visible-xs visible-sm">
33-
<div class="btn-group">
34-
<button ng-click="scheduleActions.save(saveAction)" type="button" class="btn btn-primary btn-sm"><i class="fa" ng-class="{'fa-save': saveAction == 'create', 'fa-copy': saveAction == 'fork'}"></i> {{saveAction == "create"?"Save":"Copy and Edit"}} </button>
35-
<button type="button" class="btn btn-primary dropdown-toggle btn-sm" data-toggle="dropdown">
36-
<span class="caret"></span>
37-
</button>
38-
<ul class="dropdown-menu" role="menu">
39-
<li><a ng-click="scheduleActions.downloadiCal($event)" href="#"><i class="fa fa-calendar-o"></i> iCal</a></li>
40-
<li><a ng-click="scheduleActions.downloadImage($event)" href="#"><i class="fa fa-picture-o"></i> Image</a></li>
41-
</ul>
42-
</div>
43-
<div class="btn-group">
44-
<button type="button" class="btn btn-info dropdown-toggle btn-sm" data-toggle="dropdown">
45-
<i class="fa fa-share"></i> Share to... <span class="caret"></span>
46-
</button>
47-
<ul class="dropdown-menu" role="menu">
48-
<li><a ng-click="scheduleActions.shareToService($event, 'facebook', true)" href="#"><i class="fa fa-facebook"></i> Facebook</a></li>
49-
<li><a ng-click="scheduleActions.shareToService($event, 'twitter', true)" href="#"><i class="fa fa-twitter"></i> Twitter</a></li>
50-
<li><a ng-click="scheduleActions.shareToService($event, 'googlep', true)" href="#"><i class="fa fa-google-plus"></i> Google+</a></li>
51-
<li class="divider"></li>
52-
<li><a ng-click="scheduleActions.shareToEmail($event)" href="#"><i class="fa fa-envelope"></i> Email</a></li>
53-
<li><a ng-click="scheduleActions.shareToDirectLink($event)" href="#"><i class="fa fa-link"></i> Direct link</a></li>
54-
</ul>
55-
</div>
56-
</div>
57-
<div ng-show="status == 'L'" class="control-label pull-right-sm">
58-
<i class="fa fa-spin fa-refresh"></i>
59-
</div>
60-
</div>
61-
</div>
62-
</div>
63-
<div class="panel-body">
64-
<div ng-show="notification.length > 0" class="schedule-notification alert alert-info">
65-
<button type="button" class="close" aria-hidden="true" ng-click="notification = ''"><i class="fa fa-times"></i></button>
66-
<div ng-bind-html="notification"></div>
67-
</div>
68-
<div class="schedule-cont">
69-
<div class="schedule-track" onload="alignToPixels()">
70-
<svg version="1.1" ng-attr-height="{{grid.opts.height}}" width="100%" xmlns="http://www.w3.org/2000/svg"><defs><pattern vector-effect="non-scaling-stroke" id="day" width="100%" x="0" height="40" patternUnits="userSpaceOnUse"><line vector-effect="non-scaling-stroke" x1="0" y1="19.5" x2="100%" y2="19.5" style="stroke:#bbb;stroke-width:1" /></pattern></defs><rect x="0" y="0" width="100%" height="100%" fill="#ffffff" /><g ng-attr-transform="{{grid.opts.pixelAlignment}}" font-family="Roboto" font-size="15"><g><text fill="#aaa" text-anchor="end" ng-repeat="hour in grid.hours track by $index" ng-attr-x="{{print?'41':'5%'}}" ng-attr-y="{{($index * 40) + 25}}">{{hour}}</text></g><g ng-repeat="day in grid.days"><text y="12" ng-attr-x="{{day.offset}}" ng-attr-width="{{grid.opts.daysWidth}}" fill="#aaa" ng-bind="day.name"></text><rect y="19" ng-attr-x="{{day.offset}}" ng-attr-width="{{grid.opts.daysWidth}}" ng-attr-height="{{grid.opts.daysHeight}}" fill="url(#day)" /></g><g svg-schedule-item class="item" ng-mouseenter="itemEnter($event)" ng-mouseleave="itemLeave($event)" ng-repeat="item in scheduleItems"><rect ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y}}" ng-attr-width="{{item.boundry.width}}" ng-attr-height="{{item.boundry.height}}" ng-attr-fill="{{item.color}}" fill-opacity=".8" /><rect ng-if="item.boundry.shorten != 0" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.shorten < 0 ?item.boundry.y : item.boundry.y + item.boundry.height - 2}}" ng-attr-width="{{item.boundry.width}}" height="2" fill="#ffff00" /><text svg-text-line="{{item.title}}" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y + 16}}" transform="translate(3,0)" font-weight="bold" fill="white"></text><text ng-if="item.boundry.height > 32 && item.content.courseNum" svg-text-line="{{item.content.courseNum}}" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y + 32}}" transform="translate(3,0)" fill="#fff"></text><text ng-if="item.boundry.height > 48 && item.content.instructor" svg-text-line="{{item.content.instructor}}" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y + 48}}" transform="translate(3,0)" fill="#fff"></text><text ng-if="item.boundry.height > 64 && item.content.location" svg-text-line="{{item.content.location}}" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y + 64}}" transform="translate(3,0)" fill="#fff"></text><g svg-text-content="item.content"></g></g></g></svg>
71-
</div>
72-
</div>
73-
<div ng-if="hiddenCourses.length > 0" class="row">
74-
<div class="col-xs-12">
75-
<div class="alert alert-warning">
76-
<strong>Warning!</strong> The following item{{hiddenCourses.length != 1?'s are':' is'}} not displayed: <span ng-repeat="course in hiddenCourses">{{course.courseNum != 'non'?course.courseNum+': ':''}}{{course.title}}{{$last?'':', '}}</span>
77-
</div>
78-
</div>
79-
</div>
80-
<div ng-if="onlineCourses.length > 0" class="row">
81-
<div class="col-xs-12">
82-
<div class="alert alert-info">
83-
Online Course{{onlineCourses.length != 1?'s':''}}: <span ng-repeat="course in onlineCourses">{{course.courseNum}} ({{course.title}}){{$last?'':','}}</span>
84-
</div>
85-
</div>
86-
</div>
87-
</div>
1+
<div class="panel panel-default" schedule-actions>
2+
<div ng-show="!print" class="panel-heading">
3+
<div class="row form-horizontal">
4+
<div class="col-xs-12">
5+
<h2 class="panel-title control-label pull-left smaller-sm">{{saveAction == "create"?("Schedule " + (state.schedules.indexOf(schedule) + 1)):"My Schedule"}}</h2>
6+
<div class="btn-group pull-right hidden-xs hidden-sm">
7+
<div class="btn-group">
8+
<button ng-click="scheduleActions.save(saveAction)" type="button" class="btn btn-primary"><i class="fa" ng-class="{'fa-save': saveAction == 'create', 'fa-copy': saveAction == 'fork'}"></i> {{saveAction == "create"?"Save":"Copy and Edit"}} </button>
9+
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
10+
<span class="caret"></span>
11+
</button>
12+
<ul class="dropdown-menu" role="menu">
13+
<li><a ng-click="scheduleActions.downloadiCal($event)" href="#"><i class="fa fa-calendar-o"></i> iCal</a></li>
14+
<li ng-show="imageSupport"><a ng-click="scheduleActions.downloadImage($event)" href="#"><i class="fa fa-picture-o"></i> Image</a></li>
15+
</ul>
16+
</div>
17+
<button ng-click="scheduleActions.print()" type="button" class="btn btn-info hidden-xs"><i class="fa fa-print"></i> Print</button>
18+
<div class="btn-group">
19+
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown">
20+
<i class="fa fa-share"></i> Share to... <span class="caret"></span>
21+
</button>
22+
<ul class="dropdown-menu" role="menu">
23+
<li><a ng-click="scheduleActions.shareToService($event, 'facebook')" href="#"><i class="fa fa-facebook"></i> Facebook</a></li>
24+
<li><a ng-click="scheduleActions.shareToService($event, 'twitter')" href="#"><i class="fa fa-twitter"></i> Twitter</a></li>
25+
<li><a ng-click="scheduleActions.shareToService($event, 'googlep')" href="#"><i class="fa fa-google-plus"></i> Google+</a></li>
26+
<li class="divider"></li>
27+
<li><a ng-click="scheduleActions.shareToEmail($event)" href="#"><i class="fa fa-envelope"></i> Email</a></li>
28+
<li><a ng-click="scheduleActions.shareToDirectLink($event)" href="#"><i class="fa fa-link"></i> Direct link</a></li>
29+
</ul>
30+
</div>
31+
</div>
32+
<div class="btn-group pull-right visible-xs visible-sm">
33+
<div class="btn-group">
34+
<button ng-click="scheduleActions.save(saveAction)" type="button" class="btn btn-primary btn-sm"><i class="fa" ng-class="{'fa-save': saveAction == 'create', 'fa-copy': saveAction == 'fork'}"></i> {{saveAction == "create"?"Save":"Copy and Edit"}} </button>
35+
<button type="button" class="btn btn-primary dropdown-toggle btn-sm" data-toggle="dropdown">
36+
<span class="caret"></span>
37+
</button>{{scheduleActionsAvailable}}
38+
<ul class="dropdown-menu" role="menu">
39+
<li><a ng-click="scheduleActions.downloadiCal($event)" href="#"><i class="fa fa-calendar-o"></i> iCal</a></li>
40+
<li ng-show="imageSupport"><a ng-click="scheduleActions.downloadImage($event)" href="#"><i class="fa fa-picture-o"></i> Image</a></li>
41+
</ul>
42+
</div>
43+
<div class="btn-group">
44+
<button type="button" class="btn btn-info dropdown-toggle btn-sm" data-toggle="dropdown">
45+
<i class="fa fa-share"></i> Share to... <span class="caret"></span>
46+
</button>
47+
<ul class="dropdown-menu" role="menu">
48+
<li><a ng-click="scheduleActions.shareToService($event, 'facebook', true)" href="#"><i class="fa fa-facebook"></i> Facebook</a></li>
49+
<li><a ng-click="scheduleActions.shareToService($event, 'twitter', true)" href="#"><i class="fa fa-twitter"></i> Twitter</a></li>
50+
<li><a ng-click="scheduleActions.shareToService($event, 'googlep', true)" href="#"><i class="fa fa-google-plus"></i> Google+</a></li>
51+
<li class="divider"></li>
52+
<li><a ng-click="scheduleActions.shareToEmail($event)" href="#"><i class="fa fa-envelope"></i> Email</a></li>
53+
<li><a ng-click="scheduleActions.shareToDirectLink($event)" href="#"><i class="fa fa-link"></i> Direct link</a></li>
54+
</ul>
55+
</div>
56+
</div>
57+
<div ng-show="status == 'L'" class="control-label pull-right-sm">
58+
<i class="fa fa-spin fa-refresh"></i>
59+
</div>
60+
</div>
61+
</div>
62+
</div>
63+
<div class="panel-body">
64+
<div ng-show="notification.length > 0" class="schedule-notification alert alert-info">
65+
<button type="button" class="close" aria-hidden="true" ng-click="notification = ''"><i class="fa fa-times"></i></button>
66+
<div ng-bind-html="notification"></div>
67+
</div>
68+
<div class="schedule-cont">
69+
<div class="schedule-track">
70+
<svg version="1.1" ng-attr-height="{{grid.opts.height}}" width="100%" xmlns="http://www.w3.org/2000/svg"><defs><pattern vector-effect="non-scaling-stroke" id="day" width="100%" x="0" height="40" patternUnits="userSpaceOnUse"><line vector-effect="non-scaling-stroke" x1="0" y1="19.5" x2="100%" y2="19.5" style="stroke:#bbb;stroke-width:1" /></pattern></defs><rect x="0" y="0" width="100%" height="100%" fill="#ffffff" /><g ng-attr-transform="{{grid.opts.pixelAlignment}}" font-family="Roboto" font-size="15"><g><text fill="#aaa" text-anchor="end" ng-repeat="hour in grid.hours track by $index" ng-attr-x="{{print?'41':'5%'}}" ng-attr-y="{{($index * 40) + 25}}">{{hour}}</text></g><g ng-repeat="day in grid.days"><text y="12" ng-attr-x="{{day.offset}}" ng-attr-width="{{grid.opts.daysWidth}}" fill="#aaa" ng-bind="day.name"></text><rect y="19" ng-attr-x="{{day.offset}}" ng-attr-width="{{grid.opts.daysWidth}}" ng-attr-height="{{grid.opts.daysHeight}}" fill="url(#day)" /></g><g svg-schedule-item class="item" ng-mouseenter="itemEnter($event)" ng-mouseleave="itemLeave($event)" ng-repeat="item in scheduleItems | orderBy:'-boundry.y'"><rect ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y}}" ng-attr-width="{{item.boundry.width}}" ng-attr-height="{{item.boundry.height}}" ng-attr-fill="{{item.color}}" fill-opacity=".8" /><rect ng-if="item.boundry.shorten != 0" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.shorten < 0 ?item.boundry.y : item.boundry.y + item.boundry.height - 2}}" ng-attr-width="{{item.boundry.width}}" height="2" fill="#ffff00" /><text svg-text-line="{{item.title}}" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y + 16}}" transform="translate(3,0)" font-weight="bold" fill="white"></text><text ng-if="item.boundry.height > 32 && item.content.courseNum" svg-text-line="{{item.content.courseNum}}" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y + 32}}" transform="translate(3,0)" fill="#fff"></text><text ng-if="item.boundry.height > 48 && item.content.instructor" svg-text-line="{{item.content.instructor}}" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y + 48}}" transform="translate(3,0)" fill="#fff"></text><text ng-if="item.boundry.height > 64 && item.content.location" svg-text-line="{{item.content.location}}" ng-attr-x="{{item.boundry.x}}" ng-attr-y="{{item.boundry.y + 64}}" transform="translate(3,0)" fill="#fff"></text><g svg-text-content="item.content"></g></g></g></svg>
71+
</div>
72+
</div>
73+
<div ng-if="hiddenCourses.length > 0" class="row">
74+
<div class="col-xs-12">
75+
<div class="alert alert-warning">
76+
<strong>Warning!</strong> The following item{{hiddenCourses.length != 1?'s are':' is'}} not displayed: <span ng-repeat="course in hiddenCourses">{{course.courseNum != 'non'?course.courseNum+': ':''}}{{course.title}}{{$last?'':', '}}</span>
77+
</div>
78+
</div>
79+
</div>
80+
<div ng-if="onlineCourses.length > 0" class="row">
81+
<div class="col-xs-12">
82+
<div class="alert alert-info">
83+
Online Course{{onlineCourses.length != 1?'s':''}}: <span ng-repeat="course in onlineCourses">{{course.courseNum}} ({{course.title}}){{$last?'':','}}</span>
84+
</div>
85+
</div>
86+
</div>
87+
</div>
8888
</div>

schedule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ function getScheduleFromId($id) {
108108
$query = "UPDATE schedules SET datelastaccessed = NOW() WHERE id={$id}";
109109
$result = mysql_query($query);
110110

111-
$query = "SELECT startday, endday, starttime, endtime, building, `quarter`, CAST(`image` AS unsigned int) AS `image` FROM schedules WHERE id={$id}";
111+
$query = "SELECT startday, endday, starttime, endtime, building, `quarter`, `image` FROM schedules WHERE id={$id}";
112112

113113
$result = mysql_query($query);
114114
if(!$result) {

0 commit comments

Comments
 (0)