以下是事实:
如果我可以按Travis CI构建状态对Build列进行排序,那将是非常好的。不幸的是,构建状态仅从SELECT b.DogBreed,GROUP_CONCAT(n.DogName) FROM Breeds b
LEFT JOIN `Names` n ON n.DogId=b.DogId
GROUP BY n.DogId
标记的图像内容加载,因此<img>
在HTML本身中没有任何内容。
所以我问HTML和javascript专家!
如何通过Travis CI构建状态对此表进行排序?
一些软性要求:
答案 0 :(得分:1)
这是适合我的过程。通过最小的适应性,此方案可用于通过javascript(例如<img>
)在客户端对任何sorttable.js
元素进行排序。
<img>
绘制到自己的画布上,然后通过canvas.toDataURL()
提取base64数据。toDataURL()
的内容进行了哈希处理,以便为sorttable.js
创建自定义排序键,并将其分配给包含sorttable_customkey
的{{1}}属性。就我的目的而言,获取数据的前64个字符就足够了,但你可以为此编写任何你喜欢的哈希函数,具体取决于你的图像像素。<td>
,我将每个Tainted canvases may not be exported
<img>
复制到新src
并设置Image
,如shady sherif所示在different SO post。以下是我工作解决方案的JavaScript代码:
crossOrigin=anonymous
然后在HTML方面,将function imageData(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
// HACK: Avoid 'Tainted canvases may not be exported' error.
// See: https://stackoverflow.com/a/27260385/1207769
var anonImg = new Image();
anonImg.setAttribute('crossOrigin', 'anonymous');
anonImg.src = img.src;
canvas.getContext("2d").drawImage(anonImg, 0, 0);
return canvas.toDataURL();
}
function hashCode(s) {
// NB: Using the first 64 characters is good enough here, and much faster.
return s.substring(0, 64);
}
// See: https://stackoverflow.com/q/43686686/1207769
function makeBadgesSortable() {
var tds = document.body.getElementsByClassName("badge");
for (var i=0; i<tds.length; i++) {
var imgs = tds[i].getElementsByTagName("img");
if (imgs.length < 1) continue;
tds[i].setAttribute("sorttable_customkey", hashCode(imageData(imgs[0])));
}
}
添加到包含Travis class="badge"
徽章的表格中的每个<td>
,并将<img>
添加到onload="makeBadgesSortable()"
} element。