Basic Laurentian University branding: colours and logos
authorDan Scott <dscott@laurentian.ca>
Tue, 31 Jul 2012 18:53:48 +0000 (14:53 -0400)
committerDan Scott <dscott@laurentian.ca>
Tue, 11 Nov 2014 19:56:35 +0000 (14:56 -0500)
Required some wrestling with the default stylesheet but otherwise we
appear to be good.

Phone notifications for holds do not happen. Hide any mention of phone
numbers or widgets for changing phone numbers.

We also do not want to enable users to update their username, password, or
email address.

Override style.css in a separate stylesheet

One more HTTP request, but much simpler tracking of HEAD stylesheet
changes.

Customize login form for Laurentian LDAP login

Set ou_email_host via a hidden form variable.

Provide more rational inline help for OSUL login form.

Link to the OSUL password reset form on login failure

Avoid the "place holds on available" lists hole by ripping out the option
entirely, naturally.

Turn on Google Book Previews

Hide the display of 659 fields in Laurentian records. They appear to
have been used for some sort of identifiers, not genres, and are
meaningless to users.

Remove the "Stay logged in" checkbox until we uncover the actual problem
with logging in via LDAP and persistence.

Enable Google Analytics in Laurentian skin

Signed-off-by: Dan Scott <dscott@laurentian.ca>
15 files changed:
Open-ILS/src/templates_laurentian/opac/css/style_overrides.css.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/myopac/lists.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/anon_list.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/base.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/config.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/css/colors.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/css/fonts.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/footer.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/homesearch.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/login/form.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/record/subjects.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/topnav_links.tt2 [new file with mode: 0644]
Open-ILS/src/templates_laurentian/opac/parts/topnav_logo.tt2 [new file with mode: 0644]
Open-ILS/web/images/lul_logo.png [new file with mode: 0644]
Open-ILS/web/images/lul_logo_small.png [new file with mode: 0644]

diff --git a/Open-ILS/src/templates_laurentian/opac/css/style_overrides.css.tt2 b/Open-ILS/src/templates_laurentian/opac/css/style_overrides.css.tt2
new file mode 100644 (file)
index 0000000..61b8eb3
--- /dev/null
@@ -0,0 +1,20 @@
+[%- PROCESS "opac/parts/css/colors.tt2" %]
+
+#adv_search_tabs a.acct-tab-on, #acct_tabs a.acct-tab-on, #acct_fines_tabs a.acct-tab-on {
+    color: [% css_colors.primary %];
+}
+#acct_checked_tabs a, #acct_holds_tabs a, #acct_prefs_tabs a {
+    color: [% css_colors.text_invert %];
+}
+
+#acct_checked_tabs div.selected a, #acct_holds_tabs div.selected a, #acct_prefs_tabs div.selected a {
+    color: [% css_colors.text %];
+}
+
+#acct_checked_tabs, #acct_holds_tabs, #acct_prefs_tabs {
+    color: [% css_colors.text %];
+}
+
+#main-content .login_boxes {
+    color: [% css_colors.text %];
+}
diff --git a/Open-ILS/src/templates_laurentian/opac/myopac/lists.tt2 b/Open-ILS/src/templates_laurentian/opac/myopac/lists.tt2
new file mode 100644 (file)
index 0000000..eba5521
--- /dev/null
@@ -0,0 +1,333 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "lists"  
+    limit = ctx.bookbags_limit;
+    offset = ctx.bookbags_offset;
+%]
+<div id='myopac_bookbag_div' style="padding:5px;">
+
+    <!-- new list creation -->
+    <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update') %]" method="POST" id="create_form">
+        <h1>[% l('Create new list') %]</h1><a name="createnewlist"></a>
+        <table cellpadding="0" border="0" id="list_create_table">
+            <tr>
+                <td>
+                    <label for="list_create_name">[% l('Enter the name of the new list:') %]</label>
+                </td>
+                <td>
+                    [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                    <input id="list_create_name" type="text" name="name" />
+                    <input type="hidden" name="action" value="create" />
+                    [% IF ctx.add_rec %]
+                    <input type="hidden" name="add_rec" value="[% ctx.add_rec %]" />
+                    [% END %]
+                    [% IF ctx.where_from %]
+                    <input type="hidden" name="where_from" value="[% ctx.where_from %]" />
+                    [% END %]
+                </td>
+                <td>
+                    <label for="list_create_shared">[% l('Share this list?') %]</label>
+                    <select name="shared" id="list_create_shared">
+                        <option value="0">[% l('No') %]
+                        <option value="1">[% l('Yes') %]
+                    </select>
+                    <a href="javascript:void(0);" onclick="alert(document.getElementById('bb_publish_text').innerHTML);"><img alt="[% l('Sharing Help') %]"
+                        src="[% ctx.media_prefix %]/images/question-mark.png" /></a>
+                </td>
+                <td class="list-create-table-buttons">
+                    <input type="submit"
+                        value="[% l('Submit') %]"
+                        alt="[% l('Submit') %]"
+                        class="opac-button"/>
+                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                    <input type="reset"
+                        value="[% l('Cancel') %]"
+                        alt="[% l('Cancel') %]"
+                        class="opac-button" />
+                </td>
+            </tr>
+            <tr>
+                <td class="text-right-top">
+                    <label for="list_description">[% l("List description (optional):") %]</label>
+                </td>
+                <td colspan="3">
+                    <textarea cols="40" rows="3" name="description"
+                        id="list_description"></textarea>
+                </td>
+        </table>
+    </form>
+
+    <h1>[% l("Your existing lists") %]</h1>
+    [% INCLUDE "opac/parts/anon_list.tt2" %]
+    [% IF ctx.bookbags.size %]
+    <div class="header_middle">
+        <span class="float-left">[% l('Saved Lists') %]</span>
+        [% IF limit < ctx.bookbag_count; %]
+        <span class='float-left' style='padding-left: 10px;'>
+            [%- IF offset > 0 -%]
+                <a href='[% mkurl(ctx.opac_root _ '/myopac/lists', {
+                    limit => limit, offset => (offset - limit)
+                }) %]'><span class="nav_arrow_fix">&#9668;</span>[% l('Previous') %]</a>
+            [%- END; -%]
+            [%- IF (ctx.bookbag_count - offset) > limit; -%] 
+                <a href='[% mkurl(ctx.opac_root _ '/myopac/lists', {
+                    limit => limit, offset => (offset + limit)
+                }) %]'>[% l('Next') %]<span class="nav_arrow_fix">&#9658;</span></a>
+            </span>
+            [%- END; -%]
+        [% END %]
+    </div>
+    <div class="clear-both"></div>
+
+    <div id='acct_lists_prime'>
+        [% FOR bbag IN ctx.bookbags %]
+        <div class="bookbag-controls-holder">
+            <div class="bookbag-controls most">
+                [% baseurl = ctx.opac_root _ '/myopac/lists';
+                IF bbag.id != CGI.param("bbid");
+                    url = mkurl(baseurl,{bbid => bbag.id},['edit_notes','sort']);
+                    ltitle = l("Show items in list");
+                ELSE;
+                    url = mkurl(baseurl, {}, ['bbid', 'edit_notes', 'sort']);
+                    ltitle = l("Hide items in list");
+                END %]
+                <h2 class="bookbag-name"><a title="[% ltitle %]" href="[% url %]">[% bbag.name | html %]</a></h2>
+                [% IF bbag.description %]<div class="bookbag-description">[% bbag.description | html %]</div>[% END %]
+            </div>
+            [% IF ctx.add_rec %]
+            <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update', {}, 1) %]" method="POST">
+                <div class="bookbag-controls">
+                    <input type="hidden" name="action" value="add_rec" />
+                    <input type="hidden" name="list" value="[% bbag.id %]" />
+                    <input type="hidden" name="add_rec" value="[% ctx.add_rec %]" />
+                    [% IF ctx.where_from %]
+                    <input type="hidden" name="where_from" value="[% ctx.where_from %]" />
+                    [% END %]
+                    <input class="fixed" type="submit" value="[% l('Add to this list') %]" />
+                </div>
+            </form>
+            [% END %]
+            <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update') %]" method="POST">
+                <div class="bookbag-share">
+                    <input type="hidden" name="list" value="[% bbag.id %]" />
+                    [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                    [% IF bbag.pub != 't' %]
+                    <input type="hidden" name="action" value="show" />
+                    <input class="fixed" type="submit" value="[% l('Share') %]" />
+                    [% ELSE %]
+                    <input type="hidden" name="action" value="hide" />
+                    <input class="fixed" type="submit" value="[% l('Hide') %]" />
+                    [% END %]
+                </div>
+            </form>
+            <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update') %]" method="POST">
+                <div class="bookbag-controls">
+                    <input type="hidden" name="list" value="[% bbag.id %]" />
+                    <input type="hidden" name="action" value="delete" />
+                    [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                    <input type="submit" value="[% l('Delete List') %]" />
+                </div>
+            </form>
+            <form action="[% mkurl(ctx.opac_root _ '/myopac/list/print') %]" method="POST">
+                <div class="bookbag-controls">
+                    <input type="hidden" name="list" value="[% bbag.id %]" />
+                    <input type="hidden" name="sort" value="[% CGI.param('sort') | html %]" />
+                    [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                    <input type="submit" value="[% l('Download CSV') %]" />
+                </div>
+            </form>
+            [% setting = 'opac.default_list'; %]
+            <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update') %]" method="POST">
+                <div class="bookbag-controls">
+                    <input type="hidden" name="list" value="[% bbag.id %]" />
+                    [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                    [% IF ctx.user_setting_map.$setting == bbag.id %]
+                    <input type="hidden" name="action" value="remove_default" />
+                    <input type="submit" value="[% l('Remove Default List') %]" />
+                    [% ELSE %]
+                    <input type="hidden" name="action" value="make_default" />
+                    <input type="submit" value="[% l('Make Default List') %]" />
+                    [% END %]
+                </div>
+            </form>
+            <div class="bookbag-controls">
+                [% IF bbag.pub == 't'; %]
+                <a target='_blank' href='/opac/extras/feed/bookbag/rss2-full/[% bbag.id %]'><img
+                    alt="[% l('RSS Feed') %]" border="0"
+                    src="[% ctx.media_prefix %]/images/small-rss.png"/></a>
+                [% END %]
+            </div>
+            <div class="bookbag-controls">
+                [% IF bbag.pub == 't'; %]
+                <a href='[%-
+                    mkurl(
+                        ctx.opac_root _ '/results',
+                        {page => '0', bookbag => bbag.id, depth => 0, locg => ctx.search_ou},
+                        1
+                    )
+                -%]'>[% l('HTML View') %]</a>
+                [% END %]
+            </div>
+            <div class="clear-both pad-bottom-five"></div>
+        </div>
+        [% IF CGI.param("bbid") == bbag.id %]
+        <div class="bookbag-specific">
+            <div class="sort">
+                <form method="GET">
+                    <label for="opac.result.sort">[% l("Sort list items by: ") %]</label>
+                    [%- INCLUDE "opac/parts/preserve_params.tt2" params=['loc', 'query', 'qtype']; %]
+                    [% INCLUDE "opac/parts/filtersort.tt2"
+                        value=CGI.param('sort') mode='bookbag' %]
+                    <input type="hidden" name="bbid"
+                        value="[% CGI.param('bbid') | html %]" />
+                    <input type="submit" value="[% l('Sort') %]" />
+                </form>
+            </div>
+            <div class="meta">
+                <form method="POST">
+                    <input type="hidden" name="bbid" value="[% bbag.id %]" />
+                    <input type="hidden" name="action" value="editmeta" />
+                    <input type="hidden" name="limit" value="[% limit %]" />
+                    <input type="hidden" name="offset" value="[% offset %]" />
+                    [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                    <table id="bbag-name-desc-form">
+                        <tr>
+                            <th>
+                                <label for="bbag-edit-name">[% l('Name:') %]</label>
+                            </th>
+                            <td>
+                                <input name="name" type="text"
+                                    value="[% bbag.name | html %]"
+                                    id="bbag-edit-name" />
+                            </td>
+                            <td rowspan="2" class="saver">
+                                [% l("Save changes to name or description?") %]<br />
+                                <input type="submit" value="[% l('Save') %]" />
+                            </td>
+                        </tr>
+                        <tr>
+                            <th><label for="bbag-edit-description">[% l('Description:') %]</label></th>
+                            <td>
+                                <textarea name="description"
+                                    id="bbag-edit-description">[% bbag.description | html %]</textarea>
+                            </td>
+                        </tr>
+                    </table>
+                </form>
+            </div>
+        </div>
+        <br class="clear-both" />
+        <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update') %]" method="POST">
+        <input type="hidden" name="list" value="[% bbag.id %]" />
+        <input type="hidden" name="sort" value="[% CGI.param('sort') | uri %]" />
+        <table class="bookbag-specific" cellpadding='0' cellspacing='0' border='0'>
+            <thead id="acct_list_header">
+                <tr>
+                    <td class="list_checkbox">
+                    <input type="checkbox" onclick="
+                        var inputs=document.getElementsByTagName('input'); 
+                        for (i = 0; i < inputs.length; i++) { 
+                            if (inputs[i].name == 'selected_item' && !inputs[i].disabled && inputs[i].getAttribute('bbag') == [% bbag.id %]) 
+                                inputs[i].checked = this.checked;}"/>
+
+                    </td>
+                    <td class="list_entry">
+                        <a href="[% mkurl(ctx.opac_root _ '/myopac/lists', {sort=> (CGI.param('sort') == 'titlesort' ? 'titlesort.descending' : 'titlesort')}) %]">[% l('Title') %]</a>
+                    </td>
+                    <td class="list_entry">
+                        <a href="[% mkurl(ctx.opac_root _ '/myopac/lists', {sort=>(CGI.param('sort') == 'authorsort' ? 'authorsort.descending' : 'authorsort')}) %]">[% l('Author(s)') %]</a>
+                    </td>
+                    <td class="list_entry">
+                        <a href="[% mkurl(ctx.opac_root _ '/myopac/lists', {sort=>(CGI.param('sort') == 'pubdate' ? 'pubdate.descending' : 'pubdate')}) %]">[% l('Publication Date') %]</a>
+                    </td>
+                    <td class="list_entry">
+                         [% l('Format') %]
+                    </td>
+                    <td class="list_entry">
+                        [% l('Notes') %]
+                        [% IF CGI.param("edit_notes") != bbag.id %]
+                        | <a href="[% mkurl(ctx.opac_root _ '/myopac/lists', {edit_notes=> bbag.id}) %]">[% l('Edit') %]</a>
+                        [% END %]
+                    </td>
+                    <td class="list_actions">
+                        <select name="action">
+                            <option disabled="disabled">[% l('-- Actions for these items --') %]</option>
+                            <option value="del_item">[% l('Remove from list') %]</option>
+                        </select>
+                        [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                        <input type="submit" value="[% l('Go') %]" />
+                    </td>
+                </tr>
+            </thead>
+            <tbody>
+                [% UNLESS bbag.items.size %]
+                <tr><td colspan="6" class="list_is_empty">
+                    [% l("This list contains no items.") %]
+                </td></tr>
+                [% END %]
+                [% FOR item IN bbag.items;
+                    rec_id = item.target_biblio_record_entry.id;
+                    attrs = {marc_xml => ctx.bookbags_marc_xml.$rec_id};
+                    PROCESS get_marc_attrs args=attrs %]
+                <tr class="bookbag-item-row">
+                    <td class="list_checkbox">
+                        <input type="checkbox" name="selected_item" value="[% item.id %]" bbag='[% bbag.id %]'/>
+                    </td>
+                    <td class="list_entry">
+                        <a href="[% mkurl(ctx.opac_root _ '/record/' _ rec_id, {}, ['edit_notes', 'bbid']) %]">[% attrs.title | html %]</a>
+                    </td>
+                    <td class="list_entry">
+                        <a href="[%- 
+                            authorquery = attrs.author | replace('[,\.:;]', '');
+                            mkurl(ctx.opac_root _ '/results', {qtype => 'author', query => authorquery}, ['page', 'bbid', 'edit_notes'])
+                            -%]">[% attrs.author | html %]</a>
+                    </td>
+                    <td class="list_entry">
+                          [% attrs.pubdate | html %]
+                    </td>
+                    <td class="list_entry">
+                          [% attrs.format_label | html %]
+                    </td>
+                    [% IF CGI.param("edit_notes") == bbag.id %]
+                    <td class="list_entry">
+                        [% FOR note IN item.notes %]
+                        <input type="text" name="note-[% note.id %]" value="[% note.note | html %]" />
+                        [% END %]
+                        <input type="text" name="item-[% item.id %]" />
+                    </td>
+                    [% ELSE %]
+                    <td class="list_entry">
+                        [% FOR note IN item.notes %]
+                        <div>[% note.note | html %]</div>
+                        [% END %]
+                    </td>
+                    [% END %]
+                </tr>
+                [% END %]
+                [% IF CGI.param("edit_notes") == bbag.id %]
+                <tr>
+                    <td colspan="3"><!-- All space left of notes column --></td>
+                    <td class="save-notes">
+                        [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                        <input type="hidden" name="bbid" value="[% CGI.param('bbid') | html %]" />
+                        <input type="submit" name="save_notes" value="[% l('Save Notes') %]" />
+                    </td>
+                </tr>
+                [% END %]
+            </tbody>
+        </table>
+        </form>
+        [% END %]
+        [% END %]
+    </div>
+    [% END %]
+
+    <span id='bb_publish_text' class='hide_me'>
+[% |l %]Sharing a Bookbag means that the contents 
+of the Bookbag will be visible to others.  
+To see the public view of a shared Bookbag, 
+click on the Bookbag's name in the Bookbag list.[% END %]
+    </span>
+</div>
+[% END %]
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/anon_list.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/anon_list.tt2
new file mode 100644 (file)
index 0000000..b075e83
--- /dev/null
@@ -0,0 +1,69 @@
+        [% IF ctx.mylist.size %]
+        <div class="bookbag-specific">
+            <form method="GET">
+                <label for="anonsort">[% l("Sort list items by: ") %]</label>
+                [% INCLUDE "opac/parts/filtersort.tt2" mode='bookbag'
+                    id="anonsort" name="anonsort" value=CGI.param("anonsort") %]
+                <input type="hidden" name="id"
+                    value="[% CGI.param('id') | html %]" />
+                [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                <input type="submit" value="[% l('Sort') %]" />
+            </form>
+        </div>
+
+        <form action="[% mkurl(ctx.opac_root _ '/mylist/move') %]" method="GET">
+        <div>
+            <p class="big-strong">[% l('Temporary List') %]</p>
+            <table cellpadding='0' cellspacing='0' border='0'>
+                <thead id="acct_list_header_anon">
+                    <tr>
+                        <td width="1%" style="padding-left:10px;">
+                            <input type="checkbox" onclick="
+                                var inputs=document.getElementsByTagName('input'); 
+                                for (i = 0; i < inputs.length; i++) { 
+                                    if (inputs[i].name == 'record' && !inputs[i].disabled) inputs[i].checked = this.checked;}"/>
+                        </td>
+                        <td width="49%" class="opac-auto-108"><a href="[% mkurl('', {anonsort=>(CGI.param('anonsort') == 'titlesort' ? 'titlesort.descending' : 'titlesort')}) %]">[% l('Title') %]</a></td>
+                        <td width="49%" class="opac-auto-108"><a href="[% mkurl('', {anonsort=>(CGI.param('anonsort') == 'authorsort' ? 'authorsort.descending' : 'authorsort')}) %]">[% l('Author(s)') %]</a% l('Author(s)') %]</td>
+                        <td width="1%" class="nowrap">
+                            <select name="action">
+                                <option>[% l('-- Actions for these items --') %]</option>
+                                <option value="delete">[% l('Remove from list') %]</option>
+                                [% IF ctx.user AND ctx.bookbags.size %]
+                                <optgroup label="[% l('Move selected items to bookbag:') %]">
+                                    [% FOR bbag IN ctx.bookbags %]]
+                                    <option value="[% bbag.id %]" class="selector_actions_for_list_inner_option">[% bbag.name | html %]</option>
+                                    [% END %]
+                                </optgroup>
+                                [% END %]
+                            </select>
+                            [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                            <input type="submit" value="[% l('Go') %]" />
+                        </td>
+                    </tr>
+                </thead>
+                <tbody>
+                    [% FOR item IN ctx.mylist;
+                        attrs = {marc_xml => ctx.mylist_marc_xml.$item};
+                        PROCESS get_marc_attrs args=attrs %]
+                    <tr>
+                        <td class="item_list_padding" style="padding-left: 10px;">
+                            <input type="checkbox" name="record" value="[% item %]" />
+                        </td>
+                        <td class="item_list_padding" style="padding-left: 5px;"><a href="[% mkurl(ctx.opac_root _ '/record/' _ item, {}, ['edit_notes', 'id']) %]">[% attrs.title | html %]</a></td>
+                        <td class="item_list_padding" style="padding-left: 5px;"><a href="[%- 
+                            authorquery = attrs.author | replace('[,\.:;]', '');
+                            mkurl(
+                                ctx.opac_root _ '/results',
+                                {qtype => 'author', query => authorquery},
+                                ['page', 'id', 'edit_notes']
+                            )
+                        -%]">[% attrs.author | html %]</a></td>
+                    </tr>
+                    [% END %]
+                </tbody>
+            </table>
+            <br /><br />
+        </div>
+        </form>
+        [% END %]
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/base.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/base.tt2
new file mode 100644 (file)
index 0000000..30882d1
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns='http://www.w3.org/1999/xhtml' lang='[% ctx.locale %]' xml:lang='[% ctx.locale %]'>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+        [% IF ctx.refresh %]
+        <meta http-equiv="refresh" content="[% ctx.refresh %]">
+        [% ELSIF ctx.authtime %]
+        <meta http-equiv="refresh" content="[% ctx.authtime %]; url=[% ctx.logout_page %]">
+        [% END %]
+        <link rel="stylesheet" type="text/css" href="[% ctx.media_prefix %]/css/skin/default/opac/semiauto.css" />
+        <link rel="stylesheet" type="text/css" href="[% ctx.opac_root %]/css/style.css" />
+        <link rel="stylesheet" type="text/css" href="[% ctx.opac_root %]/css/style_overrides.css" />
+        <title>[% l('Catalog - [_1]', ctx.page_title) %]</title>
+        <link rel="unapi-server" type="application/xml" title="unAPI" href="/opac/extras/unapi" />
+        [% IF want_dojo %]
+        <style type="text/css">
+            @import "[% ctx.media_prefix %]/js/dojo/dijit/themes/tundra/tundra.css";
+        </style>
+        [% END %]
+        [% INCLUDE 'opac/parts/goog_analytics.tt2' %]
+    </head>
+    <body[% IF want_dojo; ' class="tundra"'; END %]>
+        [% content %] 
+        [% INCLUDE 'opac/parts/footer.tt2' %]
+        [% INCLUDE 'opac/parts/js.tt2' %]
+        [%- IF ENV.OILS_CHILIFRESH_ACCOUNT %]
+            [%- INCLUDE 'opac/parts/chilifresh.tt2' %]
+        [%- END %]
+    </body>
+</html>
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/config.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/config.tt2
new file mode 100644 (file)
index 0000000..1f93e97
--- /dev/null
@@ -0,0 +1,153 @@
+[% 
+
+##############################################################################
+# This file contains skin-level configuration settings.
+# Many of these settings will probably migrate into actor.org_unit_settings.
+##############################################################################
+
+##############################################################################
+# Holds blocking
+##############################################################################
+# Block the ability to place holds if item is available
+ctx.holds_block.enabled = 'true';
+
+##############################################################################
+# RefWorks configuration
+##############################################################################
+# RefWorks is a Web-based citation manager
+ctx.refworks.enabled = 'true';
+
+# Base URL for RefWorks
+ctx.refworks.url = 'http://librweb.laurentian.ca/login?url=http://refworks.scholarsportal.info';
+
+# Some sites have a hosted RefWorks instance at a different URL;
+# in addition, you might want to proxy access to RefWorks - for example:
+# ctx.refworks.url = 'http://librweb.laurentian.ca/login?url=http://refworks.scholarsportal.info';
+
+##############################################################################
+# OpenURL resolution
+##############################################################################
+# Evergreen provides the ability to point at an OpenURL resolver to find
+# electronic resources for a given ISSN or ISBN. Currently, only the SFX
+# resolver is supported.
+#
+# You must enable the open-ils.resolver instance in opensrf.xml to use
+# this feature.
+##############################################################################
+
+openurl.enabled = 'true';
+openurl.baseurl = 'http://sfx.scholarsportal.info/laurentian';
+
+##############################################################################
+# Google Analytics support
+##############################################################################
+# You can enable Google Analytics support in Evergreen by entering a
+# valid Google Analytics code and changing 'false' to 'true'
+##############################################################################
+google_analytics.enabled = 'true';
+google_analytics.code = 'UA-44360424-2';
+
+##############################################################################
+# Enable "Forgot your password?" prompt at login
+##############################################################################
+reset_password = 'false';
+
+##############################################################################
+# Hide various options from user preferences that you might not want to expose
+# if you rely on centralized authentication via open-ils.auth_proxy, like LDAP
+#
+# Username changes can be disabled by the opac.lock_usernames OU setting.
+##############################################################################
+disable_password_change = 'true';
+disable_email_change = 'true';
+
+##############################################################################
+# Some libraries do not do notifications by phone; if not true, then this
+# hides the user preference for phone notifications as well as the phone
+# notification portion of the hold dialogue
+##############################################################################
+allow_phone_notifications = 'false';
+
+##############################################################################
+# Misc. UI Settings
+##############################################################################
+# Option for full details as a default, esp. impt. for e-content
+# that uses resolver plumbing. Valid values are 'true', 'false' and 'hide'.
+# Setting this to 'true' shows full details by default but allows the link
+# to appear for 'Show Fewer Details'. The 'hide' option shows full details
+# and also suppresses the link from displaying at all.
+show_more_details.default = 'hide';
+
+##############################################################################
+# Size of the jacket image to display on the record detail summary.
+# Sizes vary depending on added content provider.
+# Options are "small", "medium", and "large"
+record.summary.jacket_size = 'medium';
+
+
+##############################################################################
+# Define the order in which facets are displayed.  Only facets listed here 
+# will be displayed.  To show all facets sorted by name, comment out this 
+# setting.  
+# facet.display = [] # show no facets
+facet.display = [
+    {facet_class => 'author',  facet_order => ['personal', 'corporate']},
+    {facet_class => 'subject', facet_order => ['topic']},
+    {facet_class => 'series',  facet_order => ['seriestitle']},
+    {facet_class => 'subject', facet_order => ['name', 'geographic']}
+];
+
+##############################################################################
+# Define the advanced search limiters and labels.
+# adv_label is the (translated) label for the limiter
+# adv_attr is an array of possible limiters, the first one that has any
+#   values will be used
+# adv_break will end the current row. If specified with a label/attr it
+#   will do so *after* that limiter.
+# adv_special will drop in a special entry:
+#   lib_selector will put the search library box (with limit to available)
+#   pub_year will put the publication year box
+#   sort_selector will put the sort results selector
+
+search.adv_config = [
+    {adv_label => l("Item Type"), adv_attr => ["mattype", "item_type"]},
+    {adv_label => l("Item Form"), adv_attr => "item_form"},
+    {adv_label => l("Language"),  adv_attr => "item_lang"},
+    {adv_label => l("Audience"),  adv_attr => ["audience_group", "audience"], adv_break => 1},
+    {adv_label => l("Video Format"), adv_attr => "vr_format"},
+    {adv_label => l("Bib Level"), adv_attr => "bib_level"},
+    {adv_label => l("Literary Form"), adv_attr => "lit_form", adv_break => 1},
+    {adv_label => l("Search Library"), adv_special => "lib_selector"},
+    {adv_label => l("Publication Year"), adv_special => "pub_year"},
+    {adv_label => l("Sort Results"), adv_special => "sort_selector"},
+];
+
+##############################################################################
+# For each search box the default "query type" value can be specified here
+# This is the actual backend value, not the label
+# Also note that including more than the row count entries won't add rows
+# The first entry should be used as a default for "basic" search as well
+
+search.default_qtypes = ['keyword','title','author'];
+
+##############################################################################
+# Basic Search Box definition
+# This allows selection of what, exactly, basic search uses for a selection
+# box. Previously it was hardcoded to use an attr box of mattype or item_type.
+#
+# type can be "attr" or "filter"
+# group is the attr or filter entries you want to check for
+# none_label is the label for the default nothing selected entry.
+
+search.basic_config = {
+    type => 'attr',
+    group => ['mattype','item_type'],
+    none_label => l("All Formats"),
+};
+
+##############################################################################
+# Show Google Book Previews
+# Set to 1 or 'true' to enable
+ctx.google_books_preview = 1;
+
+%]
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/css/colors.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/css/colors.tt2
new file mode 100644 (file)
index 0000000..db3dd3b
--- /dev/null
@@ -0,0 +1,36 @@
+[%
+    css_colors = {
+
+        background = "#fff", # white
+        background_alert = "#ffcccc", # pink
+        background_invert = "#252525", # charcoal
+        text = "black", # black 
+        text_alert = "red", # red
+        text_attention = "#ffcc33", # pumpkin orange
+        text_badnews = "#f41d36", # cherry red
+        text_goodnews = "#1dd93c", # lime green
+        text_greatnews = "green", # green
+        text_invert = "#fff", # white
+        text_match = "#c00", # deep red
+        primary = "#003E7E", # dark blue
+        primary_fade = "#3076BF", # medium blue
+        primary_offset = "#5689BF", # light blue
+        control = "#003E7E", # lighter green
+        accent_light = "#ccc", #  grey (light)
+        accent_lighter = "#ddd", #  grey (lighter)
+        accent_lighter2 = "#d8d8d8", #  grey (lighter again)
+        accent_lightest = "#eee", #  grey (lightest)
+        accent_ultralight = "#f0f0f0", # ivory
+        accent_medium = "#999", # gun metal grey (medium)
+        accent_mediumdark = "#888", # gun metal grey (medium dark)
+        accent_dark = "#666", # gun metal grey (dark)
+        accent_darker = "#5689BF", # gun metal grey (darker)
+        border_standard = "#e9ebf3", # light grey-blue
+        border_dark = "black", # black
+        border_alert = "red", # red
+        button_text = "#fbf9f9", # off-white 
+        button_text_shadow = "#555555", # medium grey
+        table_heading = "#d8d8d8", # grey-blue
+    };
+    
+%]
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/css/fonts.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/css/fonts.tt2
new file mode 100644 (file)
index 0000000..728e2fd
--- /dev/null
@@ -0,0 +1,11 @@
+[%-
+    css_fonts = {
+        size_base = "15px",
+        size_small = "92%", # 11px
+        size_smaller = "83%", # 10px
+        size_smallest = "75%", # 9px
+        size_big = "110%", # 13.2px
+        size_bigger = "125%",
+        size_biggest = "150%"
+    }
+%]
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/footer.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/footer.tt2
new file mode 100644 (file)
index 0000000..3a2b5c5
--- /dev/null
@@ -0,0 +1,30 @@
+<div id="footer-wrap">
+<div id="footer">
+    <a href="[% l('http://laurentian.ca/library') %]">[% l('Library Home') %]</a> |
+    <a href="[% l('http://sfx.scholarsportal.info/laurentian/az') %]">[% l('Electronic Journals (A-Z)') %]</a> |
+    <a href="[% l('http://biblio.laurentian.ca/research/guides') %]">[% l('Databases') %]</a> |
+    <a href="[% l('http://biblio.laurentian.ca/research/guides/archives') %]">[% l('Archives') %]</a> |
+    <a href="[% l('http://biblio.laurentian.ca/reserves/') %]">[% l('Course Reserves') %]</a> &nbsp;|&nbsp;
+    <a href="[% l('mailto:reference@laurentian.ca') %]">[% l('Feedback') %]</a>
+    [% IF ctx.timing %]
+    <div id="timing">
+        [% FOR event IN ctx.timing %]
+        At <span class="timing-time">[% event.0 | format("%0.4f") %]</span>:
+        <span class="timing-event">[% event.1 %]</span><br />
+        [% END %]
+    </div>
+    [% END %]
+    <div id="copyright_text" style="margin-top: 2em;">
+        [% l('Copyright &copy; 2006-[_1] Georgia Public Library Service, and others', date.format(date.now, '%Y')) %]
+    </div>
+    <div id="footer_logo">
+        [% l('Powered by') %]
+        <a href="http://evergreen-ils.org">
+            <img src="[% ctx.media_prefix %]/opac/images/eg_tiny_logo.png"
+                style="border:none; width: 94px; height: 16px;"
+                alt="[% l('Evergreen') %]"
+            />
+        </a>
+    </div>
+</div>
+</div>
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/homesearch.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/homesearch.tt2
new file mode 100644 (file)
index 0000000..1e1135e
--- /dev/null
@@ -0,0 +1,3 @@
+<div id="homesearch_main_logo">
+    <strong><center><img src="[% ctx.media_prefix %]/images/lul_logo.png" /></center></strong>
+</div>
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/login/form.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/login/form.tt2
new file mode 100644 (file)
index 0000000..e5ebeb0
--- /dev/null
@@ -0,0 +1,65 @@
+[% IF ctx.login_failed_event %]
+<div id='login-failed-message'>
+[%
+    IF ctx.login_failed_event.textcode == 'PATRON_CARD_INACTIVE';
+        l("The barcode used to login is marked as inactive.  Please contact your local library.");
+    ELSIF ctx.login_failed_event.textcode == 'PATRON_INACTIVE';
+        l("This account has been deactivated.  Please contact your local library.");
+    ELSE;
+        l("Login failed. The username or password provided was not valid.
+            Ensure Caps-Lock is off and try again.");
+        l(" Or <a href='https://sspr.laurentian.ca/'>reset your password</a>.");
+    END;
+%]
+</div>
+[% END %]
+
+<div id='login-form-box' class='login_boxes left_brain' style='float:left'>
+    <h1>[% l('Log in to Your Account') %]</h1>
+    <form method='POST'>
+        <table>
+            <tr>
+                <td style="width: 20em; vertical-align: top; padding-top: 1.5em;" class='lbl1'>
+                    <label for='username_field'>[% l('Laurentian username') %]</label>
+                    <div class="lbl2">[% l('Your username and password are the same as your Groupwise and Desire2Learn account.') %]</div>
+                </td>
+                <td style="vertical-align: top; padding-top: 1.5em;">
+                    <div class="input_bg">
+                        <input type="text" id="username_field" name="username" autofocus />
+                        <div class="lbl2" style="padding-top: 1em;">[% l('Examples: jx_smith, jsmith') %]</div>
+                    </div>
+                </td>
+            </tr>
+            <tr>
+                <td class="lbl1" style="width: 20em; vertical-align: top; padding-top: 1.5em">
+                    <label for="password_field">[% l('Password') %]</label>
+                </td>
+                <td  style="vertical-align: top; padding-top: 1.5em;">
+                    <div class="input_bg">
+                        <input id="password_field" name="password" type="password" />
+                    </div>
+                    <div>
+                        [%
+                            # If no redirect is offered or it's leading us back to the 
+                            # login form, redirect the user to My Account
+                            redirect = CGI.param('redirect_to') || ctx.referer;
+                            IF !redirect OR redirect.match(ctx.path_info _ '$');
+                                redirect = CGI.url('-full' => 1) _ '/opac/myopac/main';
+                            END;
+                            redirect = redirect  | replace('^http:', 'https:');
+                        %]
+                        <input type='hidden' name='ou_email_host' value='laurentian.ca'/>
+                        <input type='hidden' name='redirect_to' value='[% redirect %]'/>
+[%- # Disabled persistent login until we figure out how to make this work with LDAP auth -%]
+                    </div>
+                    <div style="padding-top: 1em; margin-right: 1em;">
+                        <input type="submit" value="[% l('Log in') %]" alt="[% l('Log in') %]" class="opac-button" />
+                        [% IF reset_password %]
+                        <a href='https://sspr.laurentian.ca/'>[% l('Forgot your password?') %]</a>
+                        [% END %]
+                    </div>
+                </td>
+            </tr>
+        </table>
+    </form>
+</div>
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/record/subjects.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/record/subjects.tt2
new file mode 100644 (file)
index 0000000..ea70647
--- /dev/null
@@ -0,0 +1,84 @@
+[% 
+    subjects = [
+        {
+            label => l('Subject: '),
+            xpath => '//*[@tag="600" or @tag="610" or @tag="611" or @tag="630" or @tag="650" or @tag="651"]'
+        }, {
+            label => l('Genre: '),
+            xpath => '//*[@tag="655"]'
+        }, {
+            label => l('Topic Heading: '),
+            xpath => '//*[@tag="690"]'
+        }, {
+            label => l('Geographic Setting: '),
+            xpath => '//*[@tag="691"]'
+        }, {
+            label => l('Biographical Subject: '),
+            xpath => '//*[@tag="692"]'
+        }, {
+            label => l('Character Attributes: '),
+            xpath => '//*[@tag="693"]'
+        }, {
+            label => l('Setting: '),
+            xpath => '//*[@tag="698"]'
+        }, {
+            label => l('Time Period: '),
+            xpath => '//*[@tag="699"]'
+        }
+    ];
+
+    BLOCK render_subject;
+        xpath = xpath || '//*[starts-with(@tag,"6")]';
+        FOR node IN ctx.marc_xml.findnodes(xpath);
+            all_terms = [];
+            graphics = [];
+            FOR subfield IN node.childNodes;
+                NEXT UNLESS subfield.nodeName == "subfield";
+                code = subfield.getAttribute('code');
+                IF code == '6';
+                   linked_fields = [subfield.textContent()];
+                   target_field = node.getAttribute('tag');
+                   get_linked_880s;
+                END;
+                NEXT UNLESS code.match('[a-z]');
+                IF code.match('[vxyz]'); " &gt; "; END;
+                # at this point, we actually have a partial term to use.
+                single_term = subfield.textContent | html;
+                all_terms.push(subfield.textContent.replace('\-', ' ').replace('[#"^$\+,\.:;&|\[\]()]', ''));
+                total_term = all_terms.join(" ").replace('\s+$', '');
+            %]
+<a href="[% mkurl(ctx.opac_root _ '/results', {qtype=>'subject', query=>total_term}, stop_parms); %]">[% single_term %]</a>
+            [%- END;
+            IF all_terms.size; "<br/>"; END;
+            FOREACH link880 IN graphics;
+                '<div class="graphic880"' _ link880.dir _ '>';
+                link880.value | html;
+                '</div>';
+            END;
+        END;
+    END 
+%]
+
+[%  BLOCK render_all_subjects;
+    FOREACH subj IN subjects;
+        content = PROCESS render_subject(xpath=subj.xpath);
+        IF content.match('\S');
+%]
+        <table class='rdetail_subject'>
+            <tbody>
+                <tr>
+                    <td class='rdetail_subject_type'>[% subj.label %]</td>
+                    <td class='rdetail_subject_value' itemprop='keywords'>[% content %]</td>
+                </tr>
+            </tbody>
+        </table>
+        [%- END; %]
+    [%- END; %]
+[%- END %]
+
+[%-  subject_html = PROCESS render_all_subjects;
+    IF subject_html.length > 0;
+%]
+<h2 class='rdetail_related_subjects'>[% l('Search for related items by subject') %]</h2>
+[%- subject_html %]
+[%- END %]
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/topnav_links.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/topnav_links.tt2
new file mode 100644 (file)
index 0000000..43f010f
--- /dev/null
@@ -0,0 +1,12 @@
+<div id="gold-links-holder">
+    <div id="gold-links">
+        <div id="header-links">
+            <a href="[% l('http://laurentian.ca/library') %]">[% l('Library Home') %]</a>
+            <a href="[% l('http://sfx.scholarsportal.info/laurentian/az') %]">[% l('Electronic Journals (A-Z)') %]</a>
+            <a href="[% l('http://biblio.laurentian.ca/research/guides') %]">[% l('Databases') %]</a>
+            <a href="[% l('http://biblio.laurentian.ca/research/guides/archives') %]">[% l('Archives') %]</a>
+            <a href="[% l('http://biblio.laurentian.ca/reserves/') %]">[% l('Course Reserves') %]</a>
+            <a href="[% l('mailto:reference@laurentian.ca') %]">[% l('Feedback') %]</a>
+        </div>
+    </div>
+</div>
diff --git a/Open-ILS/src/templates_laurentian/opac/parts/topnav_logo.tt2 b/Open-ILS/src/templates_laurentian/opac/parts/topnav_logo.tt2
new file mode 100644 (file)
index 0000000..1aea2b4
--- /dev/null
@@ -0,0 +1,2 @@
+       <div id="topnav_logo"><a href="http://laurentian.ca" title="Laurentian University"><img alt="[% l('Laurentian University logo') %]" 
+            src="[% ctx.media_prefix %]/images/lul_logo_small.png" /></a></div>
diff --git a/Open-ILS/web/images/lul_logo.png b/Open-ILS/web/images/lul_logo.png
new file mode 100644 (file)
index 0000000..867951c
Binary files /dev/null and b/Open-ILS/web/images/lul_logo.png differ
diff --git a/Open-ILS/web/images/lul_logo_small.png b/Open-ILS/web/images/lul_logo_small.png
new file mode 100644 (file)
index 0000000..db617a8
Binary files /dev/null and b/Open-ILS/web/images/lul_logo_small.png differ