diff --git a/templates/client/gulpfile.js b/templates/client/gulpfile.js
index 6eb865e1..3de420a3 100644
--- a/templates/client/gulpfile.js
+++ b/templates/client/gulpfile.js
@@ -3,7 +3,8 @@ var gulp = require('gulp'),
concat = require('gulp-concat'),
rename = require("gulp-rename"),
autoprefixer = require('gulp-autoprefixer'),
- cssmin = require('gulp-cssmin');
+ cssmin = require('gulp-cssmin'),
+ newer = require('gulp-newer');
gulp.task('make-vendor-js', function () {
gulp.src([
@@ -50,6 +51,7 @@ gulp.task('make-vendor-css', function () {
});
gulp.task('main-css', function () {
gulp.src('static_client/css/main.css')
+ .pipe(newer('static_client/css/'))
.pipe(autoprefixer({
browsers:['> 1%', 'Opera > 11', 'Explorer >= 8', 'Firefox >20', 'Chrome > 20']
}))
@@ -61,9 +63,19 @@ gulp.task('main-css', function () {
});
gulp.task('minify-modules', function () {
gulp.src('static_client/js/_modules/*.js')
+ .pipe(newer('static_client/js_min/_modules'))
.pipe(uglify())
.pipe(rename({extname: ".min.js"}))
.pipe(gulp.dest('static_client/js_min/_modules'))
});
-gulp.task('production',['make-vendor-js','make-vendor-css','main-css','minify-modules']);
\ No newline at end of file
+gulp.task('production',['make-vendor-js','make-vendor-css','main-css','minify-modules']);
+gulp.task('watch-js', function () {
+ gulp.watch("static_client/js/_modules/*.js", ["minify-modules"]);
+});
+gulp.task('watch-css', function () {
+ gulp.watch("static_client/css/main.css", ["main-css"]);
+});
+gulp.task('watch-vorkflow', function () {
+ gulp.watch(["static_client/css/main.css","static_client/js/_modules/*.js"], ["main-css","minify-modules"]);
+});
diff --git a/templates/client/includes/exposition/exposition_object.html b/templates/client/includes/exposition/exposition_object.html
index 907ee50e..5dfe44ca 100644
--- a/templates/client/includes/exposition/exposition_object.html
+++ b/templates/client/includes/exposition/exposition_object.html
@@ -179,7 +179,7 @@
{% if exposition.web_page %}
{% trans 'Веб-сайт' %}:
- {{ exposition.web_page }}
+ {{ exposition.web_page }}
{% endif %}
@@ -404,6 +404,8 @@
buttonClass:'note-button',
inputClass:'note-text'
},
+ seoLinksClass : 'link-encode',
+ dataKey:'data-type',
addCalendarText:"{% trans 'В расписание' %}",
removeCalendarText:"{% trans 'Из расписания' %}"
});
diff --git a/templates/client/static_client/js/_modules/block.common.js b/templates/client/static_client/js/_modules/block.common.js
index 90a8ec4a..ec9bf977 100644
--- a/templates/client/static_client/js/_modules/block.common.js
+++ b/templates/client/static_client/js/_modules/block.common.js
@@ -389,7 +389,41 @@ if (EXPO.common){
self.DOM.style.marginLeft = -(self.opt.size[self.id].width/2)+'px';
self.DOM.style.marginTop = -(self.opt.size[self.id].height/2)+'px';
}
- }
+ };
+ /**
+ * implementation of well known algorithm SEOhie.js (http://goo.gl/MyuQl9)
+ * hides external links or text from search engines
+ * depends on Base64.js (http://goo.gl/iblGuK)
+ * @public
+ * @type {{seoContent: {}, seoHrefs: {}, decode: Function}}
+ * @prop {object} seoContent - hashes to find proper content to hide
+ * @prop {object} seoHrefs - hashes to find proper links to hide on page
+ * @method decode - decode bas64-code to html
+ */
+ that.SEOhide = {
+ seoContent:{},
+ seoHrefs:{},
+
+ /**
+ * @param dataKey - key to find hashes
+ */
+ decode: function (dataKey) {
+ var $elements = $('['+dataKey+']');
+ for(var i = 0, count = $elements.length; i < count; i++) {
+ var $element = $elements.eq(i);
+ var key = $element.data("key");
+ switch($element.data("type")) {
+ case "href":
+ $element.attr("href", Base64.decode(this.seoHrefs[key]));
+ break;
+ case "content":
+ $element.replaceWith(Base64.decode(this.seoContent[key]));
+ break;
+ }
+ }
+ }
+
+ };
return that;
}());
}
diff --git a/templates/client/static_client/js/_modules/page.exposition.object.js b/templates/client/static_client/js/_modules/page.exposition.object.js
index 630b547b..0dfecda4 100644
--- a/templates/client/static_client/js/_modules/page.exposition.object.js
+++ b/templates/client/static_client/js/_modules/page.exposition.object.js
@@ -79,6 +79,24 @@ if (EXPO.exposition.object){
com.opt.addCalendarText = this.opt.addCalendarText;
com.opt.removeCalendarText = this.opt.removeCalendarText;
+ // seohide
+ $(function () {
+
+ /**
+ * setup SEOhide params
+ */
+ $('.'+self.opt.seoLinksClass).each(function () {
+ var hash = $(self).attr('data-hash'),
+ url = $(self).attr('data-url');
+
+ com.SEOhide.seoHrefs[hash] = url;
+ });
+ /**
+ * launch algorithm
+ */
+ com.SEOhide.decode(self.opt.dataKey);
+ });
+
};
return that;
}());
diff --git a/templates/client/static_client/js_min/_modules/block.common.min.js b/templates/client/static_client/js_min/_modules/block.common.min.js
index c6475dd4..e2d9d7e9 100644
--- a/templates/client/static_client/js_min/_modules/block.common.min.js
+++ b/templates/client/static_client/js_min/_modules/block.common.min.js
@@ -1 +1 @@
-var EXPO=EXPO||{};EXPO.common?console.warn("WARNING: EXPO.common is already defined!"):EXPO.common=function(){var e={},t=function(e,t){return(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector).call(e,t)};e.opt={};var s=function(e){this.fields=[],this.allIsClear=!1,this.ajaxUrl=e.getAttribute("action"),this.DOM=e,this._initFields(),this._eventController()};return s.prototype={_eventController:function(){var e=this;this.DOM.addEventListener?this.DOM.addEventListener("submit",function(t){return e.validate(),t.preventDefault(),!1},!1):this.DOM.attachEvent&&this.DOM.attachEvent("onsubmit",function(t){return e.validate(),t.preventDefault(),!1})},_initFields:function(){},validate:function(){var e,t=this,s=$(t.DOM).serialize(),i={},o="err-message-box",n=t.DOM.querySelector("."+o),a=n.innerHTML,r=function(s){if(e=s,t.unHighlightFields(),e.success)n&&EXPO.common.removeClass(n,"active"),window.location.reload();else{EXPO.common.removeClass(n,"active"),i={},t.fields=[];for(var o in e.errors)e.errors.hasOwnProperty(o)&&("__all__"!=o?(i={name:o,id:"id_"+o,errorText:e.errors[o]},t.fields.push(i)):n&&(EXPO.common.addClass(n,"active"),a.indexOf(e.errors[o])<0&&n.insertAdjacentHTML("beforeend",e.errors[o]+" ")));t.highliteFields()}};t.unHighlightFields(),EXPO.common.postRequest(s,t.ajaxUrl,r)},highliteFields:function(){for(var e,t,s=0;s").parent();i.addClass("custom-radio-check"),e(),t.on("change",e)})},$("input[type='checkbox'], input[type='radio']").customRadioCheck()}),e.init=function(e){$.extend(this.opt,e);{var t,s=this,i=this.opt.addCalendarClass,o=this.opt.removeCalendarClass,n=this.opt.addCalendarText,a=this.opt.removeCalendarText,r=s.opt.staticValidation.errorClass,l=s.opt.staticValidation.containerClass;s.opt.staticValidation.blobClass}$(function(){t=$("."+r),$("."+i+", ."+o).on("click",function(e){n=s.opt.addCalendarText,a=s.opt.removeCalendarText,e.preventDefault();var t=$(this),r=t.attr("href");$.get(r,function(e){e.not_authorized?$.fancybox.open("#"+s.opt.loginModalId):e.success&&(e.in?t.removeClass(i).addClass(o).text(a):t.removeClass(o).addClass(i).text(n))})}),t.length&&t.find("input:text").on("keyup",function(){""!=$.trim($(this).val())?$(this).closest("."+r).removeClass(r):$(this).closest("."+l).addClass(r)})})},e.hasClass=function(e,t){return e.classList?e.classList.contains(t):new RegExp("(^| )"+t+"( |$)","gi").test(el.className)},e.addClass=function(t,s){return e.hasClass(t,s)||(t.classList?t.classList.add(s):t.className+=" "+s),t},e.removeClass=function(t,s){var i=" "+t.className.replace(/[\t\r\n]/g," ")+" ";if(e.hasClass(t,s))if(t.classList)t.classList.remove(s);else{for(;i.indexOf(" "+s+" ")>=0;)i=i.replace(" "+s+" "," ");t.className=i.replace(/^\s+|\s+$/g," ")}return t},e.closest=function(t,s){for(var i=function(s){return e.hasClass(t,s)};t;){if(i(s))return t;t=t.parentNode}},e.children=function(e,s){for(var i,o=[],i=0,n=e.childNodes.length;n>i;++i)t(e.childNodes[i],s)&&o.push(e.childNodes[i]);return o},e.postRequest=function(e,t,s){e||(e=""),$.ajax({type:"POST",url:t,data:e,success:function(e){return"function"!=typeof s?e:(console.log("data recieved:"),console.log(e),console.log(JSON.stringify(e)),s(e),void 0)}})},e.getRequest=function(e,t,s){e||(e=""),$.ajax({type:"GET",url:t,data:e,success:function(e){return"function"!=typeof s?e:(console.log("data recieved:"),console.log(e),console.log(JSON.stringify(e)),s(e),void 0)}})},e.Modal=function(e){var t=this;this.id,this.opt=e,this.DOMwrap=document.getElementById(e.id),this.DOM=this.DOMwrap.querySelector("."+e.wrapClass),$(".modal-close",this.DOM).on("click",function(){t.close()}),$(".modals > *").on("click",function(e){$(e.target.parentNode).find(t.DOMwrap).length&&t.close()})},e.Modal.prototype={pullData:function(e){this.id=e.substr(1),$(e).show().siblings().hide(),this.refresh()},open:function(){$(this.DOMwrap).fadeIn(),e.addClass(document.body,"ov-hidden")},close:function(){$(this.DOMwrap).fadeOut(),e.removeClass(document.body,"ov-hidden")},refresh:function(){var e=this;e.DOM.style.width=e.opt.size[e.id].width+"px",e.DOM.style.minHeight=e.opt.size[e.id].height+"px",e.DOM.style.marginLeft=-(e.opt.size[e.id].width/2)+"px",e.DOM.style.marginTop=-(e.opt.size[e.id].height/2)+"px"}},e}();
\ No newline at end of file
+var EXPO=EXPO||{};EXPO.common?console.warn("WARNING: EXPO.common is already defined!"):EXPO.common=function(){var e={},t=function(e,t){return(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector).call(e,t)};e.opt={};var s=function(e){this.fields=[],this.allIsClear=!1,this.ajaxUrl=e.getAttribute("action"),this.DOM=e,this._initFields(),this._eventController()};return s.prototype={_eventController:function(){var e=this;this.DOM.addEventListener?this.DOM.addEventListener("submit",function(t){return e.validate(),t.preventDefault(),!1},!1):this.DOM.attachEvent&&this.DOM.attachEvent("onsubmit",function(t){return e.validate(),t.preventDefault(),!1})},_initFields:function(){},validate:function(){var e,t=this,s=$(t.DOM).serialize(),o={},i="err-message-box",a=t.DOM.querySelector("."+i),n=a.innerHTML,r=function(s){if(e=s,t.unHighlightFields(),e.success)a&&EXPO.common.removeClass(a,"active"),window.location.reload();else{EXPO.common.removeClass(a,"active"),o={},t.fields=[];for(var i in e.errors)e.errors.hasOwnProperty(i)&&("__all__"!=i?(o={name:i,id:"id_"+i,errorText:e.errors[i]},t.fields.push(o)):a&&(EXPO.common.addClass(a,"active"),n.indexOf(e.errors[i])<0&&a.insertAdjacentHTML("beforeend",e.errors[i]+" ")));t.highliteFields()}};t.unHighlightFields(),EXPO.common.postRequest(s,t.ajaxUrl,r)},highliteFields:function(){for(var e,t,s=0;s").parent();o.addClass("custom-radio-check"),e(),t.on("change",e)})},$("input[type='checkbox'], input[type='radio']").customRadioCheck()}),e.init=function(e){$.extend(this.opt,e);{var t,s=this,o=this.opt.addCalendarClass,i=this.opt.removeCalendarClass,a=this.opt.addCalendarText,n=this.opt.removeCalendarText,r=s.opt.staticValidation.errorClass,c=s.opt.staticValidation.containerClass;s.opt.staticValidation.blobClass}$(function(){t=$("."+r),$("."+o+", ."+i).on("click",function(e){a=s.opt.addCalendarText,n=s.opt.removeCalendarText,e.preventDefault();var t=$(this),r=t.attr("href");$.get(r,function(e){e.not_authorized?$.fancybox.open("#"+s.opt.loginModalId):e.success&&(e.in?t.removeClass(o).addClass(i).text(n):t.removeClass(i).addClass(o).text(a))})}),t.length&&t.find("input:text").on("keyup",function(){""!=$.trim($(this).val())?$(this).closest("."+r).removeClass(r):$(this).closest("."+c).addClass(r)})})},e.hasClass=function(e,t){return e.classList?e.classList.contains(t):new RegExp("(^| )"+t+"( |$)","gi").test(el.className)},e.addClass=function(t,s){return e.hasClass(t,s)||(t.classList?t.classList.add(s):t.className+=" "+s),t},e.removeClass=function(t,s){var o=" "+t.className.replace(/[\t\r\n]/g," ")+" ";if(e.hasClass(t,s))if(t.classList)t.classList.remove(s);else{for(;o.indexOf(" "+s+" ")>=0;)o=o.replace(" "+s+" "," ");t.className=o.replace(/^\s+|\s+$/g," ")}return t},e.closest=function(t,s){for(var o=function(s){return e.hasClass(t,s)};t;){if(o(s))return t;t=t.parentNode}},e.children=function(e,s){for(var o,i=[],o=0,a=e.childNodes.length;a>o;++o)t(e.childNodes[o],s)&&i.push(e.childNodes[o]);return i},e.postRequest=function(e,t,s){e||(e=""),$.ajax({type:"POST",url:t,data:e,success:function(e){return"function"!=typeof s?e:(console.log("data recieved:"),console.log(e),console.log(JSON.stringify(e)),s(e),void 0)}})},e.getRequest=function(e,t,s){e||(e=""),$.ajax({type:"GET",url:t,data:e,success:function(e){return"function"!=typeof s?e:(console.log("data recieved:"),console.log(e),console.log(JSON.stringify(e)),s(e),void 0)}})},e.Modal=function(e){var t=this;this.id,this.opt=e,this.DOMwrap=document.getElementById(e.id),this.DOM=this.DOMwrap.querySelector("."+e.wrapClass),$(".modal-close",this.DOM).on("click",function(){t.close()}),$(".modals > *").on("click",function(e){$(e.target.parentNode).find(t.DOMwrap).length&&t.close()})},e.Modal.prototype={pullData:function(e){this.id=e.substr(1),$(e).show().siblings().hide(),this.refresh()},open:function(){$(this.DOMwrap).fadeIn(),e.addClass(document.body,"ov-hidden")},close:function(){$(this.DOMwrap).fadeOut(),e.removeClass(document.body,"ov-hidden")},refresh:function(){var e=this;e.DOM.style.width=e.opt.size[e.id].width+"px",e.DOM.style.minHeight=e.opt.size[e.id].height+"px",e.DOM.style.marginLeft=-(e.opt.size[e.id].width/2)+"px",e.DOM.style.marginTop=-(e.opt.size[e.id].height/2)+"px"}},e.SEOhide={seoContent:{},seoHrefs:{},decode:function(e){for(var t=$("["+e+"]"),s=0,o=t.length;o>s;s++){var i=t.eq(s),a=i.data("key");switch(i.data("type")){case"href":i.attr("href",Base64.decode(this.seoHrefs[a]));break;case"content":i.replaceWith(Base64.decode(this.seoContent[a]))}}}},e}();
\ No newline at end of file
diff --git a/templates/client/static_client/js_min/_modules/page.exposition.object.min.js b/templates/client/static_client/js_min/_modules/page.exposition.object.min.js
index 60f73ace..7b3efd55 100644
--- a/templates/client/static_client/js_min/_modules/page.exposition.object.min.js
+++ b/templates/client/static_client/js_min/_modules/page.exposition.object.min.js
@@ -1 +1 @@
-var EXPO=EXPO||{};EXPO.exposition=EXPO.exposition||{},EXPO.exposition.object?console.warn("WARNING: EXPO.exposition.object is already defined!"):EXPO.exposition.object=function(){var t=EXPO.common,n={},o=function(t,n){this.opt=n,this.DOMthis=t,this.DOMbutton=t.querySelector("."+n.buttonClass),this.DOMinput=t.querySelector("."+n.inputClass),this.inputName=this.DOMinput.getAttribute("name"),this.url=this.DOMbutton.getAttribute("href"),this._controller()};return o.prototype={_init:function(){},_controller:function(){var t=this;$(this.DOMinput).on("blur",function(){t.send()}),$(this.DOMbutton).on("click",function(){return!1})},send:function(){var n,o={},e=this,i=function(t){t.success?(console.log("ok"),$(e.DOMbutton).addClass("active")):console.log("data not send")};o[this.inputName]=this.DOMinput.value,n=t.getRequest(o,this.url,i)}},n.opt={},$(function(){}),n.init=function(n){$.extend(this.opt,n);var e=this,i=$(document.getElementById(e.opt.visitButton.visitorsListId)),s=$(document.getElementById(e.opt.visitButton.wrapId));this.notes=[],i.children().length||s.show(),$("."+this.opt.note.wrapClass).each(function(){var t=new o(this,e.opt.note);e.notes.push(t)}),$("."+this.opt.note.wrapDisabledClass).on("click",function(){return $.fancybox.open("#pw-login"),!1}),t.opt.addCalendarText=this.opt.addCalendarText,t.opt.removeCalendarText=this.opt.removeCalendarText},n}();
\ No newline at end of file
+var EXPO=EXPO||{};EXPO.exposition=EXPO.exposition||{},EXPO.exposition.object?console.warn("WARNING: EXPO.exposition.object is already defined!"):EXPO.exposition.object=function(){var t=EXPO.common,n={},o=function(t,n){this.opt=n,this.DOMthis=t,this.DOMbutton=t.querySelector("."+n.buttonClass),this.DOMinput=t.querySelector("."+n.inputClass),this.inputName=this.DOMinput.getAttribute("name"),this.url=this.DOMbutton.getAttribute("href"),this._controller()};return o.prototype={_init:function(){},_controller:function(){var t=this;$(this.DOMinput).on("blur",function(){t.send()}),$(this.DOMbutton).on("click",function(){return!1})},send:function(){var n,o={},e=this,i=function(t){t.success?(console.log("ok"),$(e.DOMbutton).addClass("active")):console.log("data not send")};o[this.inputName]=this.DOMinput.value,n=t.getRequest(o,this.url,i)}},n.opt={},$(function(){}),n.init=function(n){$.extend(this.opt,n);var e=this,i=$(document.getElementById(e.opt.visitButton.visitorsListId)),s=$(document.getElementById(e.opt.visitButton.wrapId));this.notes=[],i.children().length||s.show(),$("."+this.opt.note.wrapClass).each(function(){var t=new o(this,e.opt.note);e.notes.push(t)}),$("."+this.opt.note.wrapDisabledClass).on("click",function(){return $.fancybox.open("#pw-login"),!1}),t.opt.addCalendarText=this.opt.addCalendarText,t.opt.removeCalendarText=this.opt.removeCalendarText,$(function(){$("."+e.opt.seoLinksClass).each(function(){var n=$(e).attr("data-hash"),o=$(e).attr("data-url");t.SEOhide.seoHrefs[n]=o}),t.SEOhide.decode(e.opt.dataKey)})},n}();
\ No newline at end of file