master
Artem Sapegin 2013-10-29 21:35:33 +04:00
parent 1a3ae8cc03
commit bfbdfcc15e
5 changed files with 70 additions and 288 deletions

View File

@ -1,255 +0,0 @@
.social-likes,
.social-likes__widget {
display: inline-block;
vertical-align: middle;
text-indent: 0;
padding: 0;
border: 0;
word-spacing: 0;
*zoom: 1;
*display: inline;
}
.social-likes {
list-style: none;
}
.social-likes li {
display: inline-block;
*zoom: 1;
*display: inline;
}
.social-likes_vertical li {
display: block;
}
.social-likes__widget {
display: inline-block;
position: relative;
white-space: nowrap;
}
.social-likes__widget:before {
display: none;
}
.social-likes__button,
.social-likes__counter {
text-rendering: optimizeLegibility;
}
.social-likes__button,
.social-likes__counter {
display: inline-block;
*display: inline;
*float: left;
margin: 0;
outline: 0;
}
.social-likes__button {
position: relative;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.social-likes__button:before {
content: "";
display: inline-block;
}
.social-likes__icon {
position: absolute;
top: 0;
left: 0;
}
.social-likes__counter {
position: relative;
font-weight: normal;
cursor: default;
}
.social-likes__close {
position: absolute;
right: 0;
top: 0;
cursor: pointer;
}
.social-likes__close:before {
display: none;
}
.social-likes_vertical .social-likes__widget {
display: block;
}
.social-likes_notext .social-likes__button {
padding-left: 0;
}
.social-likes_single-w {
position: relative;
display: inline-block;
}
.social-likes_single {
position: absolute;
display: none;
text-align: left;
z-index: 99999;
}
.social-likes__button_single {
position: relative;
}
.social-likes,
.social-likes__widget {
line-height: 20px;
font-size: 14px;
}
.social-likes {
margin: -6px;
line-height: 26px;
}
.social-likes__widget {
margin: 6px;
}
.social-likes__button,
.social-likes__counter {
-moz-box-sizing: border-box;
box-sizing: border-box;
font-family: "Trebuchet MS", "Helvetica Neue", Tahoma, sans-serif;
line-height: 24px;
vertical-align: middle;
}
.social-likes__button {
padding: 1px 10px 1px 28px;
font-size: 18px;
font-weight: bold;
color: #fff;
}
.social-likes__icon {
top: 2px;
width: 25px;
height: 22px;
background-repeat: no-repeat;
}
.social-likes__counter {
padding: 1px 4px;
font-size: 15px;
font-weight: normal;
color: #000;
background: #fff;
}
.social-likes__close {
padding: 2px 4px;
font: 16px Verdana, Geneva, Tahoma, sans-serif;
color: #999;
}
.social-likes__close:hover {
color: #111;
}
.social-likes_vertical {
margin: -12px -6px;
}
.social-likes_vertical .social-likes__widget {
margin: 12px 6px;
}
.social-likes_vertical .social-likes__button {
min-width: 170px;
}
.social-likes_vertical .social-likes__counter {
min-width: 40px;
text-align: right;
}
.social-likes_notext .social-likes__button {
width: 26px;
}
.social-likes_single {
top: -6px;
left: -6px;
padding: 6px 6px 4px;
background: #fff;
box-shadow: 0 0 15px rgba(0,0,0,0.3);
}
.social-likes_single .social-likes__widget:first-of-type {
margin-right: 14px;
}
.social-likes__button_single {
background: #87c44d;
}
.social-likes__icon_single {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNSIgaGVpZ2h0PSIyMiI+PGNpcmNsZSBmaWxsPSIjZmZmIiBjeD0iMTIuNSIgY3k9IjExIiByPSIyIi8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0iTTEyLjUgMTljLTIuMTM3IDAtNC4xNDYtLjgzMy01LjY1Ni0yLjM0NWwyLjEyMi0yLjEyMWMuOTQ0Ljk0NSAyLjIgMS40NjYgMy41MzQgMS40NjYgMi4wMjUgMCAzLjgzNi0xLjIwOCA0LjYxNi0zLjA3N2wuMzg1LS45MjNoNS40OTl2M2gtMy41N2MtMS40MTYgMi40NTktNC4wMzcgNC02LjkzIDR6TTcuNSAxMGgtNS41di0zaDMuNTcyYzEuNDE1LTIuNDU5IDQuMDM2LTQgNi45MjgtNCAyLjEzNyAwIDQuMTQ2LjgzMyA1LjY1NyAyLjM0NWwtMi4xMjIgMi4xMjFjLS45NDQtLjk0NS0yLjE5OS0xLjQ2Ni0zLjUzNS0xLjQ2Ni0yLjAyMyAwLTMuODM2IDEuMjA4LTQuNjE1IDMuMDc3bC0uMzg1LjkyM3oiLz48L2c+PC9zdmc+");
left: 2px;
}
.social-likes__button_facebook {
background: #3d5b95;
}
.social-likes__icon_facebook {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNSIgaGVpZ2h0PSIyMiI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE1Ljg0MiAyMi4wNDF2LTcuOTA1aDIuNjUzbC4zOTctMy4wODFoLTMuMDUxdi0xLjk2OGMwLS44OTIuMjQ4LTEuNSAxLjUyNi0xLjVoMS42MzN2LTIuNzU2Yy0uMjgyLS4wMzctMS4yNTEtLjEyMS0yLjM3Ny0uMTIxLTIuMzUzIDAtMy45NjMgMS40MzYtMy45NjMgNC4wNzJ2Mi4yNzJoLTIuNjZ2My4wODFoMi42NnY3LjkwNWgzLjE4MnoiLz48L3N2Zz4=");
top: 4px;
}
.social-likes__button_twitter {
background: #24aadd;
}
.social-likes__icon_twitter {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNSIgaGVpZ2h0PSIyMiI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIxLjUxNyA1LjdjLS42NDkuMjg4LTEuMzQ4LjQ4My0yLjA4MS41Ny43NDgtLjQ0OCAxLjMyMy0xLjE1OSAxLjU5NC0yLjAwNS0uNzAxLjQxNi0xLjQ3Ny43MTctMi4zMDIuODc5LS42NjItLjcwNC0xLjYwNC0xLjE0NC0yLjY0Ni0xLjE0NC0yLjAwMSAwLTMuNjI0IDEuNjIzLTMuNjI0IDMuNjI1IDAgLjI4NC4wMzIuNTYuMDk0LjgyNi0zLjAxMi0uMTUyLTUuNjgyLTEuNTk1LTcuNDctMy43ODctLjMxMi41MzUtLjQ5IDEuMTU4LS40OSAxLjgyMiAwIDEuMjU3LjY0IDIuMzY3IDEuNjEyIDMuMDE3LS41OTUtLjAyLTEuMTUzLS4xODMtMS42NDItLjQ1NGwtLjAwMS4wNDVjMCAxLjc1NiAxLjI0OSAzLjIyMSAyLjkwNyAzLjU1NC0uMzA0LjA4My0uNjI0LjEyNy0uOTU0LjEyNy0uMjM0IDAtLjQ2MS0uMDIzLS42ODMtLjA2NS40NjEgMS40NCAxLjggMi40ODggMy4zODYgMi41MTctMS4yNC45NzItMi44MDMgMS41NTEtNC41MDEgMS41NTEtLjI5MiAwLS41ODEtLjAxNy0uODY0LS4wNTEgMS42MDQgMS4wMjggMy41MDggMS42MjggNS41NTUgMS42MjggNi42NjcgMCAxMC4zMTItNS41MjIgMTAuMzEyLTEwLjMxMmwtLjAxMi0uNDY5Yy43MS0uNTEgMS4zMjQtMS4xNDggMS44MS0xLjg3NHoiLz48L3N2Zz4=");
}
.social-likes__button_plusone {
background: #d23e30;
}
.social-likes__icon_plusone {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNSIgaGVpZ2h0PSIyMiI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTkuMDg4IDE1LjcyM2wtMS4xMzktLjg4N2MtLjM0Ni0uMjg1LS44Mi0uNjY1LS44Mi0xLjM2IDAtLjcuNDc1LTEuMTQ1Ljg4NC0xLjU1NSAxLjMyNy0xLjA0NiAyLjY1MS0yLjE1NiAyLjY1MS00LjUwMSAwLTIuMTQzLTEuMTQ0LTMuMzgxLTEuOTItNC4wNTRoMS43ODlsMS44NjktMS4zNjZoLTYuNTA0Yy0xLjcwNSAwLTMuODUzLjI1NC01LjY1MiAxLjc0MmwtLjI0Ni4yMjZ2Ny44MTdjLjg2Ni43MjEgMi4wMzMgMS4xODIgMy40NjcgMS4xODIuMzE1IDAgLjY2Mi0uMDMzIDEuMDExLS4wNjQtLjE1OC4zOC0uMzE1LjY5OC0uMzE1IDEuMjM3IDAgLjk4MS41MDQgMS41ODMuOTQ2IDIuMTUzLTEuMjA4LjA4Mi0zLjMwNS4yMS01LjEwOS45ODV2MS44NTFjLjY1Mi0uODg3IDEuNjg0LTEuMjcyIDIuMTQxLTEuNDM4IDEuMzI2LS40NDUgMy4wMzEtLjUwOSAzLjMxNi0uNTA5LjMxNCAwIC40NzMgMCAuNzI1LjAzMiAyLjQwMSAxLjcxMiAzLjc4MyAyLjU2NSAzLjc4MyA0LjE4NiAwIC4xNzEtLjAxNi4zMzctLjA0NS41MDFoMS43OTNjLjIzOS0uNTY1LjM2Ni0xLjE1My4zNjYtMS43MzkgMC0yLjE4Ny0xLjYwMi0zLjI2Ni0yLjk5MS00LjQzOXptLTQuMDMtMy44NThjLTIuNzE2IDAtMy45MDUtMy4zMDYtMy45MDUtNS40MjcgMC0uODI3LjE1Ni0xLjY4MS42OTMtMi4zNDguNTA3LS42MzMgMS4zOTEtMS4wNDYgMi4yMTItMS4wNDYgMi42MiAwIDMuODcyIDMuNTUxIDMuODcyIDUuODMyIDAgLjQ1OC0uMTYxIDEuMzUyLS43NTQgMi4wMzEtLjUyLjU5Mi0xLjMyOS45NTgtMi4xMTguOTU4eiIvPjwvc3ZnPg==");
top: 4px;
}
.social-likes__button_vkontakte {
background: #587e9f;
}
.social-likes__icon_vkontakte {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNSIgaGVpZ2h0PSIyMiI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiNmZmYiIGQ9Ik0xMi40NjMgMTYuOTVoMS4yMzNzLjM3Mi0uMDQxLjU2My0uMjQ2Yy4xNzQtLjE4OC4xNjktLjU0MS4xNjktLjU0MXMtLjAyNC0xLjY1NC43NDMtMS44OThjLjc1OC0uMjQgMS43MjkgMS42IDIuNzYgMi4zMDcuNzc5LjUzNSAxLjM3Mi40MTggMS4zNzIuNDE4bDIuNzU1LS4wMzlzMS40NDEtLjA4OC43NTgtMS4yMjNjLS4wNTgtLjA5Mi0uMzk4LS44MzgtMi4wNS0yLjM2OS0xLjcyOC0xLjYwNC0xLjQ5Ny0xLjM0NC41ODctNC4xMTcgMS4yNjYtMS42ODkgMS43NzEtMi43MjEgMS42MTUtMy4xNjItLjE1Mi0uNDIxLTEuMDg0LS4zMTEtMS4wODQtLjMxMWwtMy4xMDIuMDJzLS4yMy0uMDMxLS40MDIuMDdjLS4xNjUuMS0uMjczLjMzMy0uMjczLjMzM3MtLjQ5IDEuMzA4LTEuMTQ1IDIuNDJjLTEuMzgyIDIuMzQ1LTEuOTM0IDIuNDctMi4xNiAyLjMyMy0uNTI0LS4zNC0uMzkzLTEuMzYzLS4zOTMtMi4wOTIgMC0yLjI3Mi4zNDQtMy4yMjEtLjY3Mi0zLjQ2NS0uMzM4LS4wODItLjU4Ni0uMTM2LTEuNDQ5LS4xNDUtMS4xMDUtLjAxMi0yLjA0My4wMDQtMi41NzIuMjYzLS4zNTQuMTczLS42MjYuNTU4LS40Ni41OC4yMDQuMDI3LjY2OS4xMjYuOTE1LjQ2LjMxOS40MzQuMzA4IDEuNDA0LjMwOCAxLjQwNHMuMTg0IDIuNjc2LS40MjcgMy4wMDhjLS40MTguMjI5LS45OTEtLjIzNi0yLjIyMy0yLjM2NS0uNjMxLTEuMDktMS4xMDYtMi4yOTUtMS4xMDYtMi4yOTVzLS4wOTMtLjIyNS0uMjU3LS4zNDZjLS4xOTgtLjE0NS0uNDc2LS4xOTItLjQ3Ni0uMTkybC0yLjk0OS4wMTlzLS40NDEuMDE0LS42MDQuMjA2Yy0uMTQ1LjE3LS4wMTIuNTI0LS4wMTIuNTI0czIuMzA4IDUuNCA0LjkyMSA4LjEyYzIuMzk2IDIuNDk1IDUuMTE3IDIuMzMxIDUuMTE3IDIuMzMxeiIvPjwvc3ZnPg==");
left: 1px;
}
.social-likes_notext .social-likes__icon_vkontakte {
left: 0;
}
.social-likes__button_pinterest {
background: #cb132d;
}
.social-likes__icon_pinterest {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNSIgaGVpZ2h0PSIyMiI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEyLjY4NiAyLjYxOWMtNC41MjMgMC04LjE5MSAzLjY2OC04LjE5MSA4LjE5IDAgMy4zNTQgMi4wMTcgNi4yMzUgNC45MDIgNy41MDEtLjAyMi0uNTctLjAwNC0xLjI1OC4xNDMtMS44OGwxLjA1NS00LjQ2NHMtLjI2My0uNTIyLS4yNjMtMS4yOTVjMC0xLjIxNC43MDQtMi4xMiAxLjU3OS0yLjEyLjc0NiAwIDEuMTA2LjU2IDEuMTA2IDEuMjI5IDAgLjc0OS0uNDc4IDEuODctLjcyNCAyLjkwNi0uMjA1Ljg2OS40MzYgMS41NzkgMS4yOTMgMS41NzkgMS41NTEgMCAyLjU5Ny0xLjk5NSAyLjU5Ny00LjM1NSAwLTEuNzk1LTEuMjA4LTMuMTM5LTMuNDA5LTMuMTM5LTIuNDgzIDAtNC4wMzEgMS44NTItNC4wMzEgMy45MjEgMCAuNzE2LjIxIDEuMjE4LjU0IDEuNjA3LjE1MS4xNzkuMTczLjI1Mi4xMTguNDU3bC0uMTY4LjY1NWMtLjA1NS4yMDgtLjIyMy4yODItLjQwOS4yMDgtMS4xNDUtLjQ3LTEuNjc4LTEuNzIyLTEuNjc4LTMuMTMxIDAtMi4zMjYgMS45NjItNS4xMTUgNS44NTQtNS4xMTUgMy4xMjcgMCA1LjE4NSAyLjI2MiA1LjE4NSA0LjY5IDAgMy4yMTMtMS43ODYgNS42MTMtNC40MiA1LjYxMy0uODg0IDAtMS43MTYtLjQ3OC0yLjAwMS0xLjAyMSAwIDAtLjQ3NSAxLjg4OC0uNTc2IDIuMjUzLS4xNzQuNjMyLS41MTQgMS4yNjItLjgyNCAxLjc1NC43MzcuMjIgMS41MTUuMzM4IDIuMzIyLjMzOCA0LjUyMSAwIDguMTg5LTMuNjY3IDguMTg5LTguMTlzLTMuNjY4LTguMTkxLTguMTg5LTguMTkxeiIvPjwvc3ZnPg==");
}

21
src/.jscs.json Normal file
View File

@ -0,0 +1,21 @@
{
"requireCurlyBraces": ["for", "while", "do"],
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return"],
"requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true },
"disallowSpacesInFunctionExpression": { "beforeOpeningRoundBrace": true },
"disallowMultipleVarDecl": true,
"disallowSpacesInsideArrayBrackets": true,
"disallowSpaceAfterObjectKeys": true,
"disallowLeftStickedOperators": ["?", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
"requireRightStickedOperators": ["!"],
"disallowRightStickedOperators": ["?", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
"requireLeftStickedOperators": [","],
"requireKeywordsOnNewLine": ["else"],
"requireLineFeedAtFileEnd": true,
"validateJSDoc": {
"checkParamNames": true,
"checkRedundantParams": true,
"requireParamTypes": true
},
"excludeFiles": ["node_modules/**"]
}

View File

@ -14,10 +14,10 @@ module.exports = function(grunt) {
options: {
jshintrc: '.jshintrc'
},
files: [
'grunt.js',
'social-likes.js'
]
files: ['social-likes.js']
},
jscs: {
files: ['<%= jshint.files %>']
},
uglify: {
options: {
@ -94,7 +94,7 @@ module.exports = function(grunt) {
}
});
grunt.registerTask('default', ['jshint', 'uglify', 'imgo', 'webfont', 'stylus', 'csso']);
grunt.registerTask('default', ['jshint', 'jscs', 'uglify', 'imgo', 'webfont', 'stylus', 'csso']);
grunt.registerTask('build', ['uglify', 'imgo', 'webfont', 'stylus', 'csso']);
};

View File

@ -12,6 +12,7 @@
"grunt-csso": "~0.5.0",
"matchdep": "~0.3.0",
"grunt-webfont": "~0.1.12",
"autoprefixer-stylus": "0.0.2"
"autoprefixer-stylus": "0.0.2",
"grunt-jscs-checker": "~0.2.2"
}
}

View File

@ -12,13 +12,14 @@
/*global define:false, socialLikesButtons:false */
(function (factory) { // Try to register as an anonymous AMD module
(function(factory) { // Try to register as an anonymous AMD module
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
} else {
}
else {
factory(jQuery);
}
}(function ($) { 'use strict';
}(function($) { 'use strict';
var prefix = 'social-likes';
var classPrefix = prefix + '__';
@ -56,8 +57,10 @@ var services = {
mailru: {
counterUrl: 'http://connect.mail.ru/share_count?url_list={url}&callback=1&func=?',
convertNumber: function(data) {
for (var url in data) if (data.hasOwnProperty(url)) {
return data[url].shares;
for (var url in data) {
if (data.hasOwnProperty(url)) {
return data[url].shares;
}
}
},
popupUrl: 'http://connect.mail.ru/share?share_url={url}&title={title}',
@ -129,9 +132,9 @@ var counters = {
return servicePromises[url];
}
else {
var options = $.extend({}, services[service], extraOptions),
deferred = $.Deferred(),
jsonUrl = options.counterUrl && makeUrl(options.counterUrl, {url: url});
var options = $.extend({}, services[service], extraOptions);
var deferred = $.Deferred();
var jsonUrl = options.counterUrl && makeUrl(options.counterUrl, {url: url});
if ($.isFunction(options.counter)) {
options.counter(jsonUrl, deferred);
@ -221,10 +224,19 @@ SocialLikes.prototype = {
this.options = {};
for (var key in this.optionsMap) {
var option = this.optionsMap[key];
this.options[key] = this.container.data(option.attr) ||
($.isFunction(option.defaultValue) ? $.proxy(option.defaultValue, this)() : option.defaultValue);
if ($.isFunction(option.convert))
this.options[key] = option.convert(this.options[key]);
var value = this.container.data(option.attr);
if (!value) {
if ($.isFunction(option.defaultValue)) {
value = $.proxy(option.defaultValue, this)();
}
else {
value = option.defaultValue;
}
}
if ($.isFunction(option.convert)) {
value = option.convert(value);
}
this.options[key] = value;
}
},
initUserButtons: function() {
@ -239,8 +251,8 @@ SocialLikes.prototype = {
container.wrap($('<div>', {'class': prefix + '_single-w'}));
var wrapper = container.parent();
var defaultLeft = parseInt(container.css('left'), 10),
defaultTop = parseInt(container.css('top'), 10);
var defaultLeft = parseInt(container.css('left'), 10);
var defaultTop = parseInt(container.css('top'), 10);
var button = $('<div>', {
'class': getElementClassNames('button', 'single'),
@ -350,8 +362,8 @@ Button.prototype = {
},
initHtml: function() {
var options = this.options,
widget = this.widget;
var options = this.options;
var widget = this.widget;
var isLink = !!options.clickUrl;
widget.removeClass(this.service);
@ -388,8 +400,10 @@ Button.prototype = {
cloneDataAttrs: function(source, destination) {
var data = source.data();
for (var key in data) if (data.hasOwnProperty(key)) {
destination.data(key, data[key]);
for (var key in data) {
if (data.hasOwnProperty(key)) {
destination.data(key, data[key]);
}
}
},
@ -414,8 +428,8 @@ Button.prototype = {
},
click: function(e) {
var options = this.options,
process = true;
var options = this.options;
var process = true;
if ($.isFunction(options.click)) {
process = options.click.call(this, e);
}
@ -441,8 +455,8 @@ Button.prototype = {
},
openPopup: function(url, params) {
var left = Math.round(screen.width/2 - params.width/2),
top = 0;
var left = Math.round(screen.width/2 - params.width/2);
var top = 0;
if (screen.height > params.height) {
top = Math.round(screen.height/3 - params.height/2);
}
@ -451,7 +465,8 @@ Button.prototype = {
'width=' + params.width + ',height=' + params.height + ',personalbar=0,toolbar=0,scrollbars=1,resizable=1');
if (win) {
win.focus();
} else {
}
else {
location.href = url;
}
}
@ -484,15 +499,15 @@ function closeOnClick(elem) {
elem.removeClass(visibleClass);
doc.off(events, handler);
}
var doc = $(document),
events = 'click touchstart keydown';
var doc = $(document);
var events = 'click touchstart keydown';
doc.on(events, handler);
}
function showInViewport(elem, offset) {
if (document.documentElement.getBoundingClientRect) {
var left = parseInt(elem.css('left'), 10),
top = parseInt(elem.css('top'), 10);
var left = parseInt(elem.css('left'), 10);
var top = parseInt(elem.css('top'), 10);
var rect = elem[0].getBoundingClientRect();
if (rect.left < offset)