From ed9423e268063a4b49312f73163938a6ce54449e Mon Sep 17 00:00:00 2001 From: Owen Leonard Date: Fri, 13 Sep 2013 09:07:50 -0400 Subject: [PATCH] Bug 10858 [Follow-up] Browse selected biblios This follow-up adds the browse functionality to the CCSR theme and adds some CSS for the "browse" link, including a new image in the image sprite. To test, apply the patch, clear your cache, and test the browsing functionality again. Confirm that the browse link looks good and works correctly in both the prog and CCSR themes. Signed-off-by: Koha Team Amu Signed-off-by: Kyle M Hall Passes koha-qa.pl, works as advertised for prog and ccsr. Not implemented for bootstrap, but doesn't affect it detrimentally either. Jonathan plans to open a new bug to implement for bootstrap. --- koha-tmpl/opac-tmpl/ccsr/en/css/opac.css | 20 +- .../opac-tmpl/ccsr/en/includes/doc-head-close.inc | 3 + koha-tmpl/opac-tmpl/ccsr/en/js/commons.js | 71 +++++++ .../en/lib/jquery/plugins/jquery.cookie.min.js | 1 + .../ccsr/en/lib/jquery/plugins/jquery.json.js | 199 ++++++++++++++++++++ koha-tmpl/opac-tmpl/ccsr/images/sprite.png | Bin 8381 -> 3380 bytes koha-tmpl/opac-tmpl/prog/en/css/opac.css | 19 +- .../opac-tmpl/prog/en/modules/opac-results.tt | 2 +- koha-tmpl/opac-tmpl/prog/images/sprite.png | Bin 3348 -> 3380 bytes 9 files changed, 312 insertions(+), 3 deletions(-) create mode 100644 koha-tmpl/opac-tmpl/ccsr/en/js/commons.js create mode 100644 koha-tmpl/opac-tmpl/ccsr/en/lib/jquery/plugins/jquery.cookie.min.js create mode 100644 koha-tmpl/opac-tmpl/ccsr/en/lib/jquery/plugins/jquery.json.js diff --git a/koha-tmpl/opac-tmpl/ccsr/en/css/opac.css b/koha-tmpl/opac-tmpl/ccsr/en/css/opac.css index 590cb19..56c4cb7 100644 --- a/koha-tmpl/opac-tmpl/ccsr/en/css/opac.css +++ b/koha-tmpl/opac-tmpl/ccsr/en/css/opac.css @@ -773,7 +773,7 @@ a.tag_add { font-size : 100%; font-weight : bold; padding-left : 31px; - color : #336699; + color : #007FAE; cursor : pointer; } .searchresults a.highlight_toggle { @@ -1149,6 +1149,10 @@ a.cancel { font-size: 90%; } +.addto { + white-space: nowrap; +} + .cartlist { margin-top : 5px; } @@ -2865,3 +2869,17 @@ a.reviewlink,a.reviewlink:visited { display: block; overflow: auto; } + +.details_link { + display : none; +} + +.details_link a { + display: inline-block; + padding : 5px 24px; + text-decoration: none; + background-image: url("../../images/sprite.png"); /* Print */ + background-position: -5px -1138px; + background-repeat: no-repeat; + white-space: nowrap; +} diff --git a/koha-tmpl/opac-tmpl/ccsr/en/includes/doc-head-close.inc b/koha-tmpl/opac-tmpl/ccsr/en/includes/doc-head-close.inc index af6e886..747e84f 100644 --- a/koha-tmpl/opac-tmpl/ccsr/en/includes/doc-head-close.inc +++ b/koha-tmpl/opac-tmpl/ccsr/en/includes/doc-head-close.inc @@ -39,6 +39,9 @@ + + + [% IF ( OPACAmazonCoverImages ) %] diff --git a/koha-tmpl/opac-tmpl/ccsr/en/js/commons.js b/koha-tmpl/opac-tmpl/ccsr/en/js/commons.js new file mode 100644 index 0000000..6661a61 --- /dev/null +++ b/koha-tmpl/opac-tmpl/ccsr/en/js/commons.js @@ -0,0 +1,71 @@ +// Extends jQuery API +// http://www.wskidmore.com/downloads/jquery-uniqueArray.min.js +jQuery.extend({uniqueArray:function(e){if($.isArray(e)){var c={};var a,b;for(b=0,a=e.length;b + */ +(function ($) { + 'use strict'; + + var escape = /["\\\x00-\x1f\x7f-\x9f]/g, + meta = { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }, + hasOwn = Object.prototype.hasOwnProperty; + + /** + * jQuery.toJSON + * Converts the given argument into a JSON representation. + * + * @param o {Mixed} The json-serializable *thing* to be converted + * + * If an object has a toJSON prototype, that will be used to get the representation. + * Non-integer/string keys are skipped in the object, as are keys that point to a + * function. + * + */ + $.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) { + if (o === null) { + return 'null'; + } + + var pairs, k, name, val, + type = $.type(o); + + if (type === 'undefined') { + return undefined; + } + + // Also covers instantiated Number and Boolean objects, + // which are typeof 'object' but thanks to $.type, we + // catch them here. I don't know whether it is right + // or wrong that instantiated primitives are not + // exported to JSON as an {"object":..}. + // We choose this path because that's what the browsers did. + if (type === 'number' || type === 'boolean') { + return String(o); + } + if (type === 'string') { + return $.quoteString(o); + } + if (typeof o.toJSON === 'function') { + return $.toJSON(o.toJSON()); + } + if (type === 'date') { + var month = o.getUTCMonth() + 1, + day = o.getUTCDate(), + year = o.getUTCFullYear(), + hours = o.getUTCHours(), + minutes = o.getUTCMinutes(), + seconds = o.getUTCSeconds(), + milli = o.getUTCMilliseconds(); + + if (month < 10) { + month = '0' + month; + } + if (day < 10) { + day = '0' + day; + } + if (hours < 10) { + hours = '0' + hours; + } + if (minutes < 10) { + minutes = '0' + minutes; + } + if (seconds < 10) { + seconds = '0' + seconds; + } + if (milli < 100) { + milli = '0' + milli; + } + if (milli < 10) { + milli = '0' + milli; + } + return '"' + year + '-' + month + '-' + day + 'T' + + hours + ':' + minutes + ':' + seconds + + '.' + milli + 'Z"'; + } + + pairs = []; + + if ($.isArray(o)) { + for (k = 0; k < o.length; k++) { + pairs.push($.toJSON(o[k]) || 'null'); + } + return '[' + pairs.join(',') + ']'; + } + + // Any other object (plain object, RegExp, ..) + // Need to do typeof instead of $.type, because we also + // want to catch non-plain objects. + if (typeof o === 'object') { + for (k in o) { + // Only include own properties, + // Filter out inherited prototypes + if (hasOwn.call(o, k)) { + // Keys must be numerical or string. Skip others + type = typeof k; + if (type === 'number') { + name = '"' + k + '"'; + } else if (type === 'string') { + name = $.quoteString(k); + } else { + continue; + } + type = typeof o[k]; + + // Invalid values like these return undefined + // from toJSON, however those object members + // shouldn't be included in the JSON string at all. + if (type !== 'function' && type !== 'undefined') { + val = $.toJSON(o[k]); + pairs.push(name + ':' + val); + } + } + } + return '{' + pairs.join(',') + '}'; + } + }; + + /** + * jQuery.evalJSON + * Evaluates a given json string. + * + * @param str {String} + */ + $.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) { + /*jshint evil: true */ + return eval('(' + str + ')'); + }; + + /** + * jQuery.secureEvalJSON + * Evals JSON in a way that is *more* secure. + * + * @param str {String} + */ + $.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) { + var filtered = + str + .replace(/\\["\\\/bfnrtu]/g, '@') + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') + .replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + + if (/^[\],:{}\s]*$/.test(filtered)) { + /*jshint evil: true */ + return eval('(' + str + ')'); + } + throw new SyntaxError('Error parsing JSON, source is not valid.'); + }; + + /** + * jQuery.quoteString + * Returns a string-repr of a string, escaping quotes intelligently. + * Mostly a support function for toJSON. + * Examples: + * >>> jQuery.quoteString('apple') + * "apple" + * + * >>> jQuery.quoteString('"Where are we going?", she asked.') + * "\"Where are we going?\", she asked." + */ + $.quoteString = function (str) { + if (str.match(escape)) { + return '"' + str.replace(escape, function (a) { + var c = meta[a]; + if (typeof c === 'string') { + return c; + } + c = a.charCodeAt(); + return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); + }) + '"'; + } + return '"' + str + '"'; + }; + +}(jQuery)); diff --git a/koha-tmpl/opac-tmpl/ccsr/images/sprite.png b/koha-tmpl/opac-tmpl/ccsr/images/sprite.png index 6ed641dddba694cf60a4284e304d1cda79b74639..646a74aed5c7814fe8694e42ebb269aa0074ba1c 100644 GIT binary patch delta 2887 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 literal 8381 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 [% END %] - + Browse selected records diff --git a/koha-tmpl/opac-tmpl/prog/images/sprite.png b/koha-tmpl/opac-tmpl/prog/images/sprite.png index a6037a9122ac7c7b3f3773bba42d7d3b745de01d..646a74aed5c7814fe8694e42ebb269aa0074ba1c 100644 GIT binary patch delta 2887 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 delta 2855 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 FV1nvl@a_Nr -- 1.7.10.4