<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- TODO: remote hosted CSS should be hosted locally instead -->
- <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.min.css" />
+ <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="[% ctx.base_path %]/staff/css/style.css" />
</head>
<body>
%]
<!-- hosted angular libs -->
-<script src="//ajax.googleapis.com/ajax/libs/angularjs/[% ANGULAR_VERSION %]/angular.min.js"></script>
-<script src="//ajax.googleapis.com/ajax/libs/angularjs/[% ANGULAR_VERSION %]/angular-route.min.js"></script>
-<script src="//ajax.googleapis.com/ajax/libs/angularjs/[% ANGULAR_VERSION %]/angular-cookies.min.js"></script>
-<script src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/[% ANGULAR_BOOTSTRAP_VERSION %]/ui-bootstrap-tpls.min.js"></script>
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/[% ANGULAR_VERSION %]/angular.min.js"></script>
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/[% ANGULAR_VERSION %]/angular-route.min.js"></script>
+<script src="https://ajax.googleapis.com/ajax/libs/angularjs/[% ANGULAR_VERSION %]/angular-cookies.min.js"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/[% ANGULAR_BOOTSTRAP_VERSION %]/ui-bootstrap-tpls.min.js"></script>
<!-- IDL / opensrf (network) -->
<script src="/IDL2js"></script>
<script src="[% ctx.media_prefix %]/js/dojo/opensrf/JSON_v1.js"></script>
<script src="[% ctx.media_prefix %]/js/dojo/opensrf/opensrf.js"></script>
-<!--
+
+<!-- needed for XUL, pending global websockets connection -->
<script src="[% ctx.media_prefix %]/js/dojo/opensrf/opensrf_xhr.js"></script>
--->
<script>
// pending api_level thunking in C
// OpenSRF.api_level = 2;
- OpenSRF.Session.transport = OSRF_TRANSPORT_TYPE_WS_SHARED
+ // OpenSRF.Session.transport = OSRF_TRANSPORT_TYPE_WS_SHARED;
</script>
<!-- angular-driven shared services -->
<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/org.js"></script>
<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/startup.js"></script>
<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/ui.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/xul.js"></script>
<!-- navbar driver -->
<script src="[% ctx.media_prefix %]/js/ui/default/staff/navbar.js"></script>
angular.module('egCatRecordBuckets',
['ngRoute', 'ui.bootstrap', 'egCoreMod', 'egUiMod', 'egListMod'])
-.config(function($routeProvider, $locationProvider) {
+.config(function($routeProvider, $locationProvider, $compileProvider) {
$locationProvider.html5Mode(true);
+ $compileProvider.aHrefSanitizationWhitelist(/^\s*(chrome|oils):/);
var resolver = {delay : function(egStartup) {return egStartup.go()}};
angular.module('egCheckinApp', ['ngRoute', 'ui.bootstrap',
'egCoreMod', 'egUiMod', 'egListMod', 'egUserMod'])
-.config(function($routeProvider, $locationProvider) {
+.config(function($routeProvider, $locationProvider, $compileProvider) {
$locationProvider.html5Mode(true);
+
+ $compileProvider.aHrefSanitizationWhitelist(/^\s*(chrome|oils):/);
+
// no routes needed
})
angular.module('egPatronApp', ['ngRoute', 'ui.bootstrap',
'egCoreMod', 'egUiMod', 'egListMod', 'egUserMod'])
-.config(function($routeProvider, $locationProvider) {
+.config(function($routeProvider, $locationProvider, $compileProvider) {
$locationProvider.html5Mode(true);
+ $compileProvider.aHrefSanitizationWhitelist(/^\s*(chrome|oils):/);
+
// data loaded at startup which only requires an authtoken goes
// here. this allows the requests to be run in parallel instead of
// waiting until startup has completed.
$scope.profiles = egEnv.pgt.list.map(
function(grp) {return {name : grp.name(), id : grp.id() }})
+
$scope.org_units = egEnv.aou.list.map(
function(org) {return {shortname : org.shortname(), id : org.id() }})
+
+ $scope.tips = { dismissed : function() {return true} };
+ /* localStorage would need xul tie-in
+
// TODO: experiment
// if this is useful, it should be moved into a service.
$scope.tips = {
}
// TODO: function to reset all tips
};
+ */
+
// TODO:
// another experiment -- user prefs in localStorage -- this should
// be a service, which can also check (certain) user/org settings
$scope.applyShowExtras = function($event, bool) {
$scope.showExtras = bool;
- $window.localStorage.setItem('eg.prefs.circ.patron.search.showExtras', bool);
+ //$window.localStorage.setItem('eg.prefs.circ.patron.search.showExtras', bool);
$event.preventDefault();
}
// localStorage stores strings; parse the values as JSON bools
+ /*
$scope.showExtras = JSON.parse($window.localStorage.getItem(
'eg.prefs.circ.patron.search.showExtras')) || false;
+ */
+
// map form arguments into search params
function compileSearch(args) {
.constant('EG_AUTH_COOKIE', 'ses')
.factory('egAuth',
- ['$q','$cookies','egNet','EG_AUTH_COOKIE',
-function($q, $cookies, egNet, EG_AUTH_COOKIE) {
+ ['$q','$cookies', '$timeout','egNet','EG_AUTH_COOKIE','egXUL',
+function($q, $cookies, $timeout, egNet, EG_AUTH_COOKIE , egXUL) {
var service = {
// expose user and token via function, since we will eventually
return this._user;
},
token : function() {
- return $cookies[EG_AUTH_COOKIE];
+ return this._token || $cookies[EG_AUTH_COOKIE];
}
};
var deferred = $q.defer();
var token = service.token();
+ if (egXUL.isXUL()) {
+ var authstuff = egXUL.getAuthInfo();
+ service._user = authstuff.user;
+ service._token = authstuff.token;
+ // race condition from multiple callers of egStartup.go()
+ // which relies on the testAuthToken to resolve asynchronously
+ $timeout(function() { deferred.resolve()}, 1);
+ return deferred.promise;
+ }
+
if (token) {
egNet.request(
'open-ils.auth',
--- /dev/null
+angular.module('egCoreMod')
+
+.factory('egXUL', [function() {
+
+ var service = {};
+
+ service.isXUL = function() {
+ if(location.protocol == 'chrome:' || location.protocol == 'oils:')
+ return true;
+ return Boolean(window.IAMXUL);
+ }
+
+ service.getStash = function() {
+ try {
+ var CacheClass = Components.classes[
+ "@open-ils.org/openils_data_cache;1"].getService();
+ return CacheClass.wrappedJSObject.data;
+ } catch(e) {
+ console.log("Error loading XUL stash: " + e);
+ return {error : e};
+ }
+ }
+
+ service.getAuthInfo = function() {
+ var stash = service.getStash();
+ return {
+ user : stash.list.au[0],
+ token : stash.session.key
+ };
+ }
+
+ service.initXUL = function($compileProvider) {
+ // treat these URLs schemes as safe
+ if (service.isXUL())
+ $compileProvider.aHrefSanitizationWhitelist(/^\s*(chrome|oils):/);
+ }
+
+ return service;
+}]);
+
+
+