Implement identicon representation for devices.

The first fifteen characters of device IDs are now used to procedurally
generate psuedo-unique avatars for their respective devices. The avatars
are represented using SVG elements that replace the icons previously
shown next to device names in the GUI.
This commit is contained in:
Chris Joel committed 2014-10-16 12:28:43 -07:00
1 parent e82e912151
commit ac079f0f83
4 files changed
+113 -7

No files matched your search

+65
View File
@@ -1231,3 +1231,68 @@ syncthing.directive('modal', function () {
},
};
});
syncthing.directive('identicon', ['$window', function ($window) {
var svgNS = 'http://www.w3.org/2000/svg';
function Identicon (value, size) {
var svg = document.createElementNS(svgNS, 'svg');
var shouldFillRectAt = function (row, col) {
return !($window.parseInt(value.charCodeAt(row + col * size), 10) % 2);
};
var shouldMirrorRectAt = function (row, col) {
return !(size % 2 && col === middleCol)
};
var mirrorColFor = function (col) {
return size - col - 1;
};
var fillRectAt = function (row, col) {
var rect = document.createElementNS(svgNS, 'rect');
rect.setAttribute('x', (col * rectSize) + '%');
rect.setAttribute('y', (row * rectSize) + '%');
rect.setAttribute('width', rectSize + '%');
rect.setAttribute('height', rectSize + '%');
svg.appendChild(rect);
};
var rect;
var row;
var col;
var middleCol;
var rectSize;
svg.setAttribute('class', 'identicon');
size = size || 5;
rectSize = 100 / size;
middleCol = Math.ceil(size / 2) - 1;
if (value) {
value = value.toString().replace(/[\W_]/i, '');
for (row = 0; row < size; ++row) {
for (col = middleCol; col > -1; --col) {
if (shouldFillRectAt(row, col)) {
fillRectAt(row, col);
if (shouldMirrorRectAt(row, col)) {
fillRectAt(row, mirrorColFor(col));
}
}
}
}
}
return svg;
}
return {
restrict: 'E',
scope: {
value: '='
},
link: function (scope, element, attributes) {
element.append(new Identicon(scope.value));
}
}
}]);
+2 -3
View File
@@ -190,7 +190,7 @@
<div class="panel panel-default" ng-repeat="deviceCfg in [thisDevice()]">
<div class="panel-heading" data-toggle="collapse" href="#device-this" style="cursor: pointer">
<h3 class="panel-title">
<span class="glyphicon glyphicon-home"></span>&emsp;{{deviceName(deviceCfg)}}
<identicon data-value="deviceCfg.DeviceID"></identicon>&emsp;{{deviceName(deviceCfg)}}
</h3>
</div>
<div id="device-this" class="panel-collapse collapse in">
@@ -236,7 +236,7 @@
<div class="panel panel-{{deviceClass(deviceCfg)}}" ng-repeat="deviceCfg in otherDevices()">
<div class="panel-heading" data-toggle="collapse" data-parent="#devices" href="#device-{{$index}}" style="cursor: pointer">
<h3 class="panel-title">
<span class="glyphicon glyphicon-retweet"></span>&emsp;{{deviceName(deviceCfg)}}
<identicon data-value="deviceCfg.DeviceID"></identicon>&emsp;{{deviceName(deviceCfg)}}
<span class="pull-right hidden-xs">
<span ng-if="connections[deviceCfg.DeviceID] && completion[deviceCfg.DeviceID]._total == 100">
<span translate>Up to Date</span> (100%)
@@ -822,7 +822,6 @@
</ul>
</modal>
<script src="angular/angular.min.js"></script>
<script src="angular/angular-translate.min.js"></script>
<script src="angular/angular-translate-loader.min.js"></script>
+37
View File
@@ -28,6 +28,43 @@ ul+h5 {
margin-top: 1.5em;
}
identicon {
display: inline-block;
position: relative;
width: 1em;
height: 1em;
line-height: 1em;
overflow: visible;
}
.identicon {
width: 30px;
height: 30px;
}
.identicon rect {
opacity: 0.5;
fill: #aaa;
}
.panel-heading .identicon {
display: block;
position: absolute;
top: -4px;
left: -9px;
}
.panel-heading {
position: relative;
overflow: hidden;
}
[class*="-info"] .identicon rect,
[class*="-success"] .identicon rect,
[class*="-primary"] .identicon rect {
fill: #fff;
}
.text-monospace {
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
}
+9 -4
View File
@@ -8,10 +8,15 @@ import (
)
func Assets() map[string][]byte {
var assets = make(map[string][]byte, 32)
var assets = make(map[string][]byte, 33)
var bs []byte
var gr *gzip.Reader
bs, _ = base64.StdEncoding.DecodeString("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 truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
assets[".app.js.swp"] = bs
bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/0SPsW4iMRCG+3sKM0I6W7L8AKCrTtw16ZIOURh7nDXx2pvxLAQtvHucJZBuPP413/fb/DomS6YvfkwoYbDV2TQQuo4Nk801WUZQJljHhc4Slo/tM1uO7l9MWJ+K9Uigt7B8Bw3LjnkAHcbsOJYsrd6riZBHyuKxdGqKQS7c5bJwphFD/JjHOoY2Ku6onETGk9gQFZLwt4zJ598sUoOJOsNF+KJrkYu4XRCFxO2AqAO6GCL6Baj10ZLwf6zxGJCkWn/L7OU0Ulpt7wLamTc867vEzhxKzBJA6R65K34F/zcvoAdLtq8rgKtqSeewVvlTVk3eENaSjtgeLYJzgUfg9n9Ax3LGtYj2TaD0seL1ulPrX58AAAD//wEAAP//1rAncZcBAAA=")
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
@@ -27,7 +32,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["angular/angular.min.js"] = bs
bs, _ = base64.StdEncoding.DecodeString("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 truncated
bs, _ = base64.StdEncoding.DecodeString("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 truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
assets["app.js"] = bs
@@ -92,7 +97,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["img/logo-text-64.png"] = bs
bs, _ = base64.StdEncoding.DecodeString("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 truncated
bs, _ = base64.StdEncoding.DecodeString("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 truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
assets["index.html"] = bs
@@ -167,7 +172,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["modal.html"] = bs
bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/5xWb0/juBN+308xv30F/Jq2FNiV2tPqumjZ7Wm3oFK04qUTO42FY0e2Q9o78d3vcf6UwlF0ukopjT3z+JmZZ8YMT3rDIV2aYmvlOvN0dHlM49HpOf3BHkxMX4xdE9McFtpbGZfeWEdHTgjymaDL68VqOf9yt7pe3lIqlTgeAC4grjLpqLBmbVlO+JlauDiT+opZMaGtKSlhmqzg0jXAgqQPRw2NpdxwmW6xEKBKzYWtj/PC5o5MWr98W9zRN6GFZYpuyljJhH7IRGgniOHosOIywSne1uZXIBDQblsOdGUAzLw0uk9CwsTSo7AO73TWndEC9gmcjpgPtC2ZIjgdBzCmt6SYf3Y9FP5zlJykrrEzU4QkAhVxV1IpigWVTqSl6hMs6dd89f36bhXgZot7+jVbLmeL1f0Uxj4zMBCPooGSeaEkkBGXZdpvA/2fX5eX32E/+zL/MV/dI4IAdDVfLb7e3tLV9ZJmdDNbruaXdz9mS7q5W95c334d0G1b2nfSmzZYuUEWufBMKtfFfY+6OpBTnDL2KFDfRMhHUGOUQGP/pnbK6HWAClHC+DmPA5qnpI3vU5Dfb5n3xWQ4rKpqsNblAEIdqgbDDT8PeifDXi82fEt/9QifgnEu9TqKjfcmn9CnUbGZ1jsplB2lLJdqO6EP34V6FF4mjBaiFB/6tFvo08xKhto4pl3khJXptPfU62WnfcrGeM7wnOO5aI98CbxkSlRsC8T/cEap/r+DzZldSx15U0zodHAh8tpi4MXGR7nRxhUsEW9R+Cm0Mn36aTRL8Bcd7YxiDoQuIWsJES9EBTY7kBaYxUpEiUEXIrf8M+rH8G3xo0//3A05P7ybGuMP7+6Q+bvIb+7ukHkbe2ws5kaTJ210G40ya/MikRMaTfcVsnuvHaOLTiaFcTL0/QSaRstD1C0gOjvSJopLpYRvoetF57eg6LeFaAi05iCtyly3lhgMhWKojtRKahHFyiQPzYk5qlxJ7jOoNVR5r/j1rEb5u+WYJQ9rGwZaQDcWJNfx0fjsY5/G56PwdXo83c+KZVyWbkJnu/C66E+LDZ13q12Kxlgch8Wn/QggEj3ACGUvlalECm6jRpqvAjkddYu1XpmS65DREM70vXyE1KF7E2XYw+vMhdzS/zADjfWYfnuqxfhojatMehHVqg4OlWXFXvdXosnn+Wj0wpu/Gh5NZGOMjkPn8YHLmVLRXlbePBoutcdrHbc+zSqiw5if4GLdCB583nbZ0TS4hFJlqgllkmNzL9HPW0IpWTjppu+R+z3HvczoKGebtnKfPn4qNsf79A7zCJ/hSbgmMEti/FdARYYaObQUxjtYUChtbAV7cOE2DBMfXYUxDx8FeQ5dhhua11fADvGEGtm5AWG2d6uvArDIfhPZU6MZ9hgz2/RLyw7Mah5QXnPHQMVCdZhdqbsOu2hU3xvUVlF9oxwoWiv/7oZppcRVlBkr/4TOmApvGpc0UsA7Pm1nnI+6kw568Lf67GPr9zcAAAD//wEAAP//ExGPmckJAAA=")
bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/5xW728iNxD9zl8xTb8kKQvk10WF9lQuutxR3ZGIEJ2iqh+8u17Witde2V4IPd3/3uf9FSAhqopEwno9z29m3sy4f9zp9+lK52sjFqmjw6sjOh2cnNOf7FGH9EGbBTEVY4dyRoSF08bSoeWcXMrp6mY6n00+3M9vZneUCMmPeoDziPNUWMqNXhiWEX4mBiZWJ27FDB/SWhcUMUWGx8JWwJyE80f1taFMxyJZY8FDFSrmpjzOcZNZ0kn58Gl6T5+44oZJui1CKSL6IiKuLCeGo/2KTXlM4brcfg0CHu2u5kDXGsDMCa26xAW2GFpyY/FMZ80ZNWCXwOmQOU/bkM690ZEHY2pNkrln033uP3sZk1AldqpzH0Sgwu+VkJJCToXlSSG7hJ30bTL/fHM/93Dj6QN9G89m4+n8YYTNLtXYwJe8ghJZLgWQ4Zdhyq09/a8fZ1efsX/8YfJlMn+ABx7oejKffry7o+ubGY3pdjybT67uv4xndHs/u725+9ijuzq1b4Q3qbAyjSjG3DEhbeP3A/JqQU7GlLIlR34jLpagxiiCxv5L7qRWCw/lvcTm5zj2aJKQ0q5LXn6/pc7lw35/tVr1FqroQah9WWHY/vte57jf6YQ6XtP3DuGTszgWahGE2jmdDelykD+NyjcJlB0kLBNyPaSDz1wuuRMRoykv+EGX2oUujY1gyI1lygaWG5GMOj86nfSkS+kpvmf4nuN7UR+5DTxjkq/YGoj/44xC/tLCZswshAqczod00rvgWblDxFwBAeL1uyC3XDIcK5QUigeh1NGjdzfXVnj1DpEZCBep8asrEbsUaB6LKOW+E7SPJcDOmobcE6lXQ1oKK0LJSw69bRIt7lkb6wamWtk2gVRcbadzFgkH+oPeRZ0k1MeQfmaMVWY5U1yCFfNJpRcHt/63jm+6zkKrJUqxWi8DGZw3FCVPQDD4tSG4fdL3HajNKG6GJRUxKJUIf0WSWXv8+0EgVKIP/qYdn7sbO2wRRdzatzflRkAD65ebGt1VsUqSSjs9x59ckGmlLcLKXxPnV66k7tJXrViE/+j1CBCzkOoVGp5Ae5vyFXTagtTADJkPcHrsqy5+73yU3juDH116+dZX4/63idZu/9sWOX4T+dW3LXJc+x5qg4lSVZDSqvZG6oXeKjHIb7TZO9rnSjEXjWJeU0MJiJ4fKB2EhZS8SU65aN0aFN065xWBejtIyyJ7oeHdGgY/1H9dW5dVQbZtwWzVKXxl0ePC+FHn0bUByUV4eHr2rkun5wP/5+RotBkVA6EXFiXautd4f5I/UVsmTYhOsXha1cqGBxCJ6mG4su2eVdXWoGpaO46cDJrFUq9MioWPqHdn9FY8fOjQ1yOp2eNu5Hxs6SdMR20c5uKGajFYmh6VCseDUtXeYGVYvjEXVnXDOh8MtqzjnbFSeXaKtrbvvLhnMyZlsBGVV4+GSWmxq+PaplqFd7gADFHqTzz2Nq+btDRfNqY20M+vuJQit8KO3iL3R4YbG6PDjD3Vmbt8d5k/HW3S28/Df/rH/gKBXhLivkh5ihxZlBQGP1iU0yY0nD1af0/ydwFUFS4AsJGQZ9+muLvF5eWgRTymSna2R5j6zeqOAwbRrzz7UWmGLUNmqnqp2YFZyQPKq24fZe9vMJtUNxV2sT0hyrvGnqTV8m/uHrWUYowVbcQ/0BmT/knh+oYQxG57fJ63w3KvRfxanb2r7f4FAAD//wEAAP//EXNpHOMLAAA=")
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
assets["overrides.css"] = bs