| // Copyright (C) 2014 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| Gerrit.install(function(self) { |
| |
| if (window.Polymer) { return; } |
| |
| // The code below is only used by the GWT-UI |
| |
| function onComment(e) { |
| var prefs = getPrefsFromCookie(); |
| if (prefs !== null) { |
| convertImageLinks(getLinks(e), prefs); |
| } else { |
| Gerrit.get('/accounts/self/' + self.getPluginName() + '~preference', function(prefs) { |
| storePrefsInCookie(prefs); |
| convertImageLinks(getLinks(e), prefs); |
| }); |
| } |
| } |
| |
| function getLinks(e) { |
| return e.getElementsByTagName("a"); |
| } |
| |
| function storePrefsInCookie(prefs) { |
| var date = new Date(); |
| date.setTime(date.getTime() + (1 * 24 * 60 * 60 * 1000)); // 1 day |
| document.cookie = getCookieName() |
| + "=" |
| + JSON.stringify(prefs) |
| + "; expires=" + date.toGMTString() |
| + "; path=/"; |
| } |
| |
| function getPrefsFromCookie() { |
| var cookie = document.cookie; |
| if (cookie.length > 0) { |
| var cookieName = getCookieName(); |
| var start = cookie.indexOf(cookieName + "="); |
| if (start != -1) { |
| start = start + cookieName.length + 1; |
| var end = document.cookie.indexOf(";", start); |
| if (end == -1) { |
| end = document.cookie.length; |
| } |
| return JSON.parse(unescape(document.cookie.substring(start, end))); |
| } |
| } |
| return null; |
| } |
| |
| function getCookieName() { |
| return self.getPluginName() + "~prefs"; |
| } |
| |
| function convertImageLinks(l, prefs) { |
| if (!prefs.pattern) { |
| return; |
| } |
| |
| if ('TOOLTIP' === prefs.link_decoration) { |
| addTooltips(l, prefs.pattern); |
| } else if ('INLINE' === prefs.link_decoration) { |
| inlineImages(l, prefs.pattern); |
| } |
| } |
| |
| function inlineImages(l, pattern) { |
| for(var i = 0; i < l.length; i++) { |
| if (l[i].href.match(pattern)) { |
| var a = document.createElement('a'); |
| a.setAttribute('href', l[i].href); |
| var img = document.createElement('img'); |
| img.setAttribute('src', l[i].href); |
| img.setAttribute('style', 'border: 1px solid #B3B2B2;'); |
| a.appendChild(img); |
| l[i].parentNode.replaceChild(a, l[i]); |
| } |
| } |
| } |
| |
| function addTooltips(pattern) { |
| for(var i = 0; i < l.length; i++) { |
| if (l[i].href.match(pattern)) { |
| l[i].onmouseover = function (evt) { |
| var img = document.createElement('img'); |
| img.setAttribute('src', this.href); |
| img.setAttribute('style', 'border: 1px solid #B3B2B2; position: absolute; top: ' + (this.offsetTop + this.offsetHeight) + 'px'); |
| this.parentNode.insertBefore(img, this); |
| this.onmouseout = function (evt) { |
| this.parentNode.removeChild(this.previousSibling); |
| } |
| } |
| } |
| } |
| } |
| |
| Gerrit.on('comment', onComment); |
| }); |