US #2127: Discover section [3]
parent
40418839b2
commit
555a011cb5
|
@ -0,0 +1,89 @@
|
|||
/**
|
||||
* JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
|
||||
*
|
||||
* Copyright (c) 2011 Gary Court
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
|
||||
* @see http://github.com/garycourt/murmurhash-js
|
||||
* @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
|
||||
* @see http://sites.google.com/site/murmurhash/
|
||||
*
|
||||
* @param {string} key ASCII only
|
||||
* @param {number} seed Positive integer only
|
||||
* @return {number} 32-bit positive integer hash
|
||||
*/
|
||||
|
||||
function murmurhash3_32_gc(key, seed) {
|
||||
var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;
|
||||
|
||||
remainder = key.length & 3; // key.length % 4
|
||||
bytes = key.length - remainder;
|
||||
h1 = seed;
|
||||
c1 = 0xcc9e2d51;
|
||||
c2 = 0x1b873593;
|
||||
i = 0;
|
||||
|
||||
while (i < bytes) {
|
||||
k1 =
|
||||
((key.charCodeAt(i) & 0xff)) |
|
||||
((key.charCodeAt(++i) & 0xff) << 8) |
|
||||
((key.charCodeAt(++i) & 0xff) << 16) |
|
||||
((key.charCodeAt(++i) & 0xff) << 24);
|
||||
++i;
|
||||
|
||||
k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
|
||||
k1 = (k1 << 15) | (k1 >>> 17);
|
||||
k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
|
||||
|
||||
h1 ^= k1;
|
||||
h1 = (h1 << 13) | (h1 >>> 19);
|
||||
h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
|
||||
h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
|
||||
}
|
||||
|
||||
k1 = 0;
|
||||
|
||||
switch (remainder) {
|
||||
case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
|
||||
case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
|
||||
case 1: k1 ^= (key.charCodeAt(i) & 0xff);
|
||||
|
||||
k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
|
||||
k1 = (k1 << 15) | (k1 >>> 17);
|
||||
k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
|
||||
h1 ^= k1;
|
||||
}
|
||||
|
||||
h1 ^= key.length;
|
||||
|
||||
h1 ^= h1 >>> 16;
|
||||
h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
|
||||
h1 ^= h1 >>> 13;
|
||||
h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
|
||||
h1 ^= h1 >>> 16;
|
||||
|
||||
return h1 >>> 0;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
###
|
||||
# Copyright (C) 2014-2016 Taiga Agile LLC <taiga@taiga.io>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# File: project-logo.directive.coffee
|
||||
###
|
||||
|
||||
|
||||
IMAGES = [
|
||||
"/#{window._version}/images/project-logos/project-logo-01.png"
|
||||
"/#{window._version}/images/project-logos/project-logo-02.png"
|
||||
"/#{window._version}/images/project-logos/project-logo-03.png"
|
||||
"/#{window._version}/images/project-logos/project-logo-04.png"
|
||||
"/#{window._version}/images/project-logos/project-logo-05.png"
|
||||
]
|
||||
|
||||
COLORS = [
|
||||
"rgba( 153, 214, 220, 1 )"
|
||||
"rgba( 213, 156, 156, 1 )"
|
||||
"rgba( 214, 161, 212, 1 )"
|
||||
"rgba( 164, 162, 219, 1 )"
|
||||
"rgba( 152, 224, 168, 1 )"
|
||||
]
|
||||
|
||||
LOGOS = _.cartesianProduct(IMAGES, COLORS)
|
||||
|
||||
|
||||
ProjectLogoSrcDirective = ($parse) ->
|
||||
_getDefaultProjectLogo = (project) ->
|
||||
key = "#{project.get("slug")}-#{project.get("id")}"
|
||||
idx = murmurhash3_32_gc(key, 42) %% LOGOS.length
|
||||
logo = LOGOS[idx]
|
||||
|
||||
return { src: logo[0], color: logo[1] }
|
||||
|
||||
link = (scope, el, attrs) ->
|
||||
scope.$watch "project", (project) ->
|
||||
project = Immutable.fromJS(project) # Necesary for old code
|
||||
|
||||
return if not project
|
||||
|
||||
projectLogo = project.get('logo_small_url')
|
||||
|
||||
if projectLogo
|
||||
el.attr("src", projectLogo)
|
||||
el.css('background', "")
|
||||
else
|
||||
logo = _getDefaultProjectLogo(project)
|
||||
el.attr("src", logo.src)
|
||||
el.css('background', logo.color)
|
||||
|
||||
scope.$on "$destroy", -> el.off()
|
||||
|
||||
return {
|
||||
link: link
|
||||
scope: {
|
||||
project: "=tgProjectLogoSrc"
|
||||
}
|
||||
}
|
||||
|
||||
ProjectLogoSrcDirective.$inject = [
|
||||
"$parse"
|
||||
]
|
||||
|
||||
angular.module("taigaComponents").directive("tgProjectLogoSrc", ProjectLogoSrcDirective)
|
|
@ -173,7 +173,8 @@ paths.libs = [
|
|||
paths.app + "js/jquery-ui.drag-multiple-custom.js",
|
||||
paths.app + "js/jquery.ui.touch-punch.min.js",
|
||||
paths.app + "js/tg-repeat.js",
|
||||
paths.app + "js/sha1-custom.js"
|
||||
paths.app + "js/sha1-custom.js",
|
||||
paths.app + "js/murmurhash3_gc.js"
|
||||
];
|
||||
|
||||
var isDeploy = argv["_"].indexOf("deploy") !== -1;
|
||||
|
|
Loading…
Reference in New Issue