t1202: remove ~~text~~ from html tags + new version of dnajs

remotes/origin/search
ya_dim4ik 10 years ago
parent 8af3f69ee4
commit aba6f77bd2
  1. 82
      gulpfile.js
  2. 12
      package.json
  3. 14071
      static/client/css/main.css
  4. 2
      static/client/css_min/main.min.css
  5. 27
      static/client/js/_modules/block.search.js
  6. 510
      static/client/js/dna.js
  7. 2
      static/client/js/dna0.4.4.min.js
  8. 4
      static/client/js/vendor.js
  9. 2
      static/client/js_min/_modules/block.search.min.js
  10. 10
      static/client/js_min/vendor.min.js
  11. 81
      templates/client/gulpfile.js
  12. 23
      templates/client/popups/place.html
  13. 24
      templates/client/popups/theme.html

@ -0,0 +1,82 @@
var gulp = require('gulp'),
uglify = require('gulp-uglify'),
concat = require('gulp-concat'),
rename = require("gulp-rename"),
autoprefixer = require('gulp-autoprefixer'),
cssmin = require('gulp-cssmin'),
newer = require('gulp-newer');
gulp.task('make-vendor-js', function () {
gulp.src([
'static/client/js/plugins.js',
'static/client/js/plugins/select2.min.js',
'static/client/js/plugins/select2_locale_ru.js',
'static/client/js/jquery.ui.datepicker-ru.js',
'static/client/js/jquery.mousewheel.min.js',
'static/client/js/idangerous.swiper-2.4.min.js',
'static/client/js/jquery.mCustomScrollbar.concat.min.js',
'static/client/lib/fancybox/jquery.fancybox.js',
'static/client/js/jquery.placeholder.js',
'static/client/js/jquery.phototag.js',
'static/client/js/dna0.4.4.min.js',
'static/client/js/main.js',
'static/client/js/scripts.js',
'static/client/js/Base64.js'
])
.pipe(concat('vendor.js'))
.pipe(gulp.dest('static/client/js/'))
.pipe(uglify())
.pipe(rename('vendor.min.js'))
.pipe(gulp.dest('static/client/js_min/'))
});
gulp.task('make-vendor-css', function () {
gulp.src([
'static/client/css/normalize.min.css',
'static/client/css/idangerous.swiper.css',
'static/client/css/jquery.mCustomScrollbar.min.css',
'static/client/css/jquery-ui-1.10.3.custom.css',
'static/client/css/jquery.mousewheel.min.js',
'static/client/lib/fancybox/jquery.fancybox.css',
'static/client/css/phototag.css',
'static/client/css/regions.css',
'static/client/css/select2.css'
])
.pipe(concat('vendor.css'))
.pipe(gulp.dest('static/client/css/'))
.pipe(cssmin())
.pipe(rename('vendor.min.css'))
.pipe(gulp.dest('static/client/css_min/'))
});
gulp.task('main-css', function () {
gulp.src('static/client/css/main.css')
.pipe(newer('static/client/css_min/'))
.pipe(autoprefixer({
browsers:['> 1%', 'Opera > 11', 'Explorer >= 8', 'Firefox >20', 'Chrome > 20']
}))
.pipe(gulp.dest('static/client/css/'))
.pipe(cssmin())
.pipe(rename('main.min.css'))
.pipe(gulp.dest('static/client/css_min/'))
});
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']);
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-workflow', function (callback) {
gulp.watch(["static/client/css/main.css","static/client/js/_modules/*.js"], ["main-css","minify-modules"]);
callback();
});

@ -1,7 +1,7 @@
{
"name": "kotzilla",
"version": "0.0.0",
"description": "",
"description": "Expomap project #mysql sudo apt-get install mysql-server mysql-client libmysqlclient-dev mysql-workbench",
"main": "gulpfile.js",
"dependencies": {
"gulp": "~3.9.0"
@ -26,5 +26,13 @@
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "BSD-2-Clause"
"license": "BSD-2-Clause",
"directories": {
"doc": "docs"
},
"repository": {
"type": "git",
"url": "git+ssh://git@bitbucket.org/Bonus_05/expomap.git"
},
"homepage": "https://bitbucket.org/Bonus_05/expomap#readme"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -627,7 +627,6 @@ if (EXPO.searchBlock){
// for dna.clone definition see dnajs.org
for (index ; index < data.length; index++) {
self.sublist[template][data[index].id] = dna.clone(tmplId, data[index]);
}
handler(data.length);
}else{
@ -1133,11 +1132,17 @@ if (EXPO.searchBlock){
createTag = function (it) {
var item = common.closest(it,itemClass),
tagTrigger = item.querySelector('.'+triggerClass),
tagText = tagTrigger.innerHTML,
tagText = '',
id = it.getAttribute('id'),
tagObj = {'id':id,'text':tagText};
self._addTag(id, tagObj);
tagsPanelToggle();
tagObj = {};
//setTimeout(function(){
tagText = tagTrigger.innerHTML,
tagObj = {'id':id,'text':tagText}
self._addTag(id, tagObj);
tagsPanelToggle();
//}, 200)
},
tagsPanelToggle = function () {
if($selectedItemsWrap.find('.'+tagButtonClass).length && $selectedItemsWrap.find('.'+tagButtonClass)[0].getAttribute(tagIdAttribute) != "~~id~~"){
@ -1352,8 +1357,8 @@ if (EXPO.searchBlock){
// for dna.clone definition see dnajs.org
for (index ; index < data.length; index++) {
self.curDNA[template][data[index].id] = dna.clone(tmplId, data[index]);
}
$('.'+tmplId).parents('.level1').addClass('active');
handler(data.length);
}else{
@ -1372,13 +1377,16 @@ if (EXPO.searchBlock){
*/
_renderNested: function (dataObj, handler, template, item) {
var self = this,
tmplId = template.substr(0, template.lastIndexOf("-")),
index = 0,
cities, $parent,
Uri = Json2URI(dataObj),
ajaxHandler = function (data) {
if(data.length){
dna.load(template, (self.opt.ajaxUrl + Uri),{callback: function () {
handler(data.length);
},container:self.curDNA[template][item]});
dna.rest.get(template, (self.opt.ajaxUrl + Uri),{callback: function () {
handler(data.length);
}, container: self.curDNA[template][item]});
}
};
self._getAjax(dataObj, ajaxHandler);
@ -1672,7 +1680,6 @@ if (EXPO.searchBlock){
};
$waiter.hide();
if($checkbox.length && getObjectLength(self.curDNA[sublistTemplateId+'-sub']) == length){
nestedObj = {
name:dataObj.name,
id:dataObj.id

@ -0,0 +1,510 @@
// dna.js Template Cloner ~~ v0.2.9
// MIT/GPLv3 ~~ dnajs.org/license.html
// Copyright (c) 2013-2014 Center Key Software and other contributors
var dna = {
// API:
// dna.clone()
// dna.cloneSubTemplate()
// dna.load()
// dna.getModel()
// dna.empty()
// dna.mutate()
// dna.mutateAll()
// dna.destroy()
// dna.getClone()
// dna.getClones()
// dna.bye()
// dna.registerInitializer()
// dna.clearInitializers()
// dna.info()
// See: http://dnajs.org/manual.html#api
clone: function(name, data, options) {
var settings = { fade: false, top: false, container: null, empty: false,
html: false, callback: null };
$.extend(settings, options);
var template = dna.store.getTemplate(name);
if (template.nested && !settings.container)
dna.core.berserk('Container missing for nested template: ' + name);
if (settings.empty)
dna.empty(name);
var list = data instanceof Array ? data : [data];
var clones = $();
for (var i = 0; i < list.length; i++){
console.log('-----------------------------')
console.log(template)
console.log(list[i])
console.log(i+1)
console.log(settings)
clones = clones.add(dna.core.replicate(template, list[i], i + 1, settings));
}
console.log('//////')
console.log(clones)
console.log('//////')
return clones;
},
cloneSubTemplate: function(holderClone, arrayField, data, options) {
var name = dna.compile.subTemplateName(holderClone, arrayField);
var selector = '.dna-contains-' + name;
var settings = { container: holderClone.find(selector).addBack(selector) };
$.extend(settings, options);
dna.clone(name, data, settings);
var array = dna.getModel(holderClone)[arrayField];
function append() { array.push(this); }
$.each(data instanceof Array ? data : [data], append);
return holderClone;
},
load: function(name, url, options) {
function processJson(data) { dna.core.unload(name, data, options); }
return $.getJSON(url, processJson);
},
getModel: function(nameOrClone) {
function getModelArray() {
var model = [];
dna.getClones(nameOrClone).each(
function() { model.push($(this).data('dna-model')); });
return model;
}
return nameOrClone instanceof jQuery ?
dna.getClone(nameOrClone).data('dna-model') : getModelArray();
},
empty: function(name, options) {
var settings = { fade: false };
$.extend(settings, options);
var clones = dna.store.getTemplate(name).container.find('.dna-clone');
return settings.fade ? dna.ui.slideFadeDelete(clones) : clones.remove();
},
mutate: function(clone, data, options) {
var settings = { html: false };
$.extend(settings, options);
clone = dna.getClone(clone);
if (!data)
data = dna.getModel(clone);
dna.core.inject(clone, data, null, settings);
return clone;
},
mutateAll: function(name) {
function mutate() { dna.mutate($(this)); }
return dna.getClones(name).each(mutate);
},
destroy: function(clone, options) {
var settings = { fade: false };
$.extend(settings, options);
clone = dna.getClone(clone);
function removeArrayItem(holder, field) {
var arrayClones = holder.children('.' + dna.compile.subTemplateName(holder, field));
dna.getModel(holder)[field].splice(arrayClones.index(clone), 1);
}
if (clone.hasClass('dna-array'))
removeArrayItem(clone.parent(), clone.data().dnaRules.array);
return settings.fade ? dna.ui.slideFadeDelete(clone) : clone.remove();
},
getClone: function(elem) {
return elem instanceof jQuery ? elem.closest('.dna-clone') : $();
},
getClones: function(name) {
return dna.store.getTemplate(name).container.children().filter('.dna-clone');
},
bye: function(elemOrEventOrIndex) {
return dna.destroy(dna.ui.toElem(elemOrEventOrIndex, this), { fade: true });
},
registerInitializer: function(func, options) {
var settings = { onDocumentLoad: true };
$.extend(settings, options);
if (settings.onDocumentLoad)
dna.util.apply(func, [settings.selector ? $(settings.selector).not('.dna-template ' +
settings.selector).addClass('dna-initialized') : $(document)].concat(settings.params));
return dna.events.initializers.push(
{ func: func, selector: settings.selector, params: settings.params });
},
clearInitializers: function() {
dna.events.initializers = [];
},
info: function() {
var names = Object.keys(dna.store.templates);
console.log('~~ dns.js v0.2.9 ~~');
console.log('templates:', names.length);
console.log('names:', names);
console.log('store:', dna.store.templates);
console.log('initializers:', dna.events.initializers.length);
return navigator.appVersion;
}
};
dna.util = {
toCamel: function(codeStr) { //example: 'ready-set-go' ==> 'readySetGo'
function hump(match, char) { return char.toUpperCase(); }
return ('' + codeStr).replace(/\-(.)/g, hump);
},
toCode: function(camelCaseStr) { //example: 'readySetGo' ==> 'ready-set-go'
function dash(word) { return '-' + word.toLowerCase(); }
return ('' + camelCaseStr).replace(/([A-Z])/g, dash).replace(/\s|^-/g, '');
},
value: function(data, field) { //example: dna.util.value({ a: { b: 7 }}, 'a.b'); ==> 7
if (typeof field === 'string')
field = field.split('.');
return (data === null || data === undefined || field === undefined) ? null :
(field.length === 1 ? data[field[0]] : this.value(data[field[0]], field.slice(1)));
},
realTruth: function(value) { //returns a boolean
// Example true values: true, 7, '7', [5], 't', 'T', 'TRue', {}, 'Colbert'
// Example false values: false, 0, '0', [], 'f', 'F', 'faLSE', null, undefined, NaN
function falseyStr() { return /^(f|false|0)$/i.test(value); }
function emptyArray() { return value instanceof Array && value.length === 0; }
return value ? !emptyArray() && !falseyStr() : false;
},
apply: function(func, params) { //calls func (string name or actual function) passing in params
// Example: dna.util.apply('app.cart.buy', 7); ==> app.cart.buy(7);
var args = [].concat(params);
var elem = args[0], result;
function contextApply(obj, names) {
if (!obj || (names.length == 1 && typeof obj[names[0]] !== 'function'))
dna.core.berserk('Callback function not found: ' + func);
else if (names.length == 1)
result = obj[names[0]].apply(elem, args); //'app.cart.buy' ==> window['app']['cart']['buy']
else
contextApply(obj[names[0]], names.slice(1));
}
if (elem instanceof jQuery && elem.length === 0)
result = elem;
else if (typeof func === 'function')
result = func.apply(elem, args);
else if (elem && elem[func])
result = elem[func](args[1], args[2], args[3]);
else if (func === '' || $.inArray(typeof func, ['number', 'boolean']) !== -1)
dna.core.berserk('Invalid callback function: ' + func);
else if (typeof func === 'string' && func.length > 0)
contextApply(window, func.split('.'));
return result;
}
};
dna.ui = {
toElem: function(elemOrEventOrIndex, that) {
return elemOrEventOrIndex instanceof jQuery ? elemOrEventOrIndex :
elemOrEventOrIndex ? $(elemOrEventOrIndex.target) : $(that);
},
deleteElem: function(elemOrEventOrIndex) { //example: $('.box').fadeOut(dna.ui.deleteElem);
return dna.ui.toElem(elemOrEventOrIndex, this).remove();
},
slideFade: function(elem, callback, show) {
var obscure = { opacity: 0.0, transition: 'opacity 0s ease 0s' };
var easyIn = { opacity: 1.0, transition: 'opacity 0.4s ease-in' };
var easyOut = { opacity: 0.0, transition: 'opacity 0.4s ease-out' };
var reset = { transition: 'opacity 0s ease 0s' };
function clearOpacityTransition() { elem.css(reset); }
window.setTimeout(clearOpacityTransition, 1000); //keep clean for other animations
if (show)
elem.css(obscure).hide().slideDown({ complete: callback }).css(easyIn);
else
elem.css(easyOut).slideUp({ complete: callback });
return elem;
},
slideFadeIn: function(elem, callback) {
return dna.ui.slideFade(elem, callback, true);
},
slideFadeOut: function(elem, callback) {
return dna.ui.slideFade(elem, callback, false);
},
slideFadeToggle: function(elem, callback) {
return dna.ui.slideFade(elem, callback, elem.is(':hidden'));
},
slideFadeDelete: function(elem) {
return dna.ui.slideFadeOut(elem, dna.ui.deleteElem);
},
slidingFlasher: function(elem, callback) {
return elem.is(':hidden') ? dna.ui.slideFadeIn(elem, callback) : elem.hide().fadeIn();
}
};
dna.compile = {
// Pre-compile Example Post-compile class + data().dnaRules
// ----------- -------------------------------- ------------------------------------
// templates <p id=ad class=dna-template> class=dna-clone
// arrays <p data-dna-array=~~tags~~> class=dna-nucleotide + array='tags'
// fields <p>~~tag~~</p> class=dna-nucleotide + text='tag'
// attributes <p id=~~num~~> class=dna-nucleotide + attrs=['id', ['', 'num', '']]
// rules <p data-dna-truthy=~~on~~> class=dna-nucleotide + truthy='on'
// attr rules <p data-dna-attr-src=~~url~~> class=dna-nucleotide + attrs=['src', ['', 'url', '']]
// prop rules <input data-dna-prop-checked=~~on~~> class=dna-nucleotide + props=['checked', 'on']
//
// Rules data().dnaRules
// --------------------------------------------- ---------------
// data-dna-class=~~field,name-true,name-false~~ class=['field','name-true','name-false']
// data-dna-attr-{NAME}=pre~~field~~post attrs=['{NAME}', ['pre', 'field', 'post']]
// data-dna-prop-{NAME}=pre~~field~~post props=['{NAME}', 'field']
// data-dna-require=~~field~~ require='field'
// data-dna-missing=~~field~~ missing='field'
// data-dna-truthy=~~field~~ truthy='field'
// data-dna-falsey=~~field~~ falsey='field'
//
regexDnaField: /^[\s]*(~~|\{\{).*(~~|\}\})[\s]*$/, //example: ~~title~~
regexDnaBasePair: /~~|{{|}}/, //matches the '~~' string
regexDnaBasePairs: /~~|\{\{|\}\}/g, //matches the two '~~' strings so they can be removed
setupNucleotide: function(elem) {
if (elem.data().dnaRules === undefined)
elem.data().dnaRules = {};
return elem.addClass('dna-nucleotide');
},
isDnaField: function() {
var firstNode = $(this)[0].childNodes[0];
return firstNode && firstNode.nodeValue &&
firstNode.nodeValue.match(dna.compile.regexDnaField);
},
field: function() {
// Example:
// <p>~~name~~</p> ==> <p class=dna-nucleotide data-dnaRules={ text: 'name' }></p>
var elem = dna.compile.setupNucleotide($(this));
console.log(elem)
elem.data().dnaRules.text = $.trim(elem.text()).replace(dna.compile.regexDnaBasePairs, '');
return elem.empty();
},
propsAndAttrs: function() {
// Examples:
// <option data-dna-prop-selected=~~set~~> ==> <option class=dna-nucleotide + data-dnaRules={ props: ['selected', 'set'] }>
// <p id=~~num~~> ==> <p class=dna-nucleotide + data-dnaRules={ attrs: ['id', ['', 'num', '']] }>
// <p data-dna-attr-src=~~url~~> ==> <p class=dna-nucleotide + data-dnaRules={ attrs: ['src', ['', 'url', '']] }>
var elem = $(this);
var props = [];
var attrs = [];
var names = [];
function compile() {
if ((/^data-dna-prop-/).test(this.name))
props.push(this.name.replace(/^data-dna-prop-/, ''),
this.value.replace(dna.compile.regexDnaBasePairs, ''));
else if (this.value.split(dna.compile.regexDnaBasePair).length === 3)
attrs.push(this.name.replace(/^data-dna-attr-/, ''),
this.value.split(dna.compile.regexDnaBasePair));
else
return;
names.push(this.name);
}
$.each(elem.get(0).attributes, compile);
if (props.length > 0)
dna.compile.setupNucleotide(elem).data().dnaRules.props = props;
if (attrs.length > 0)
dna.compile.setupNucleotide(elem).data().dnaRules.attrs = attrs;
return elem.removeAttr(names.join(' '));
},
getDataField: function(elem, type) {
// Example:
// <p dna-array=~~tags~~>, 'array' ==> 'tags'
return $.trim(elem.data('dna-' + type).replace(dna.compile.regexDnaBasePairs, ''));
},
subTemplateName: function(holder, arrayField) { //holder can be element or template name
// Example: subTemplateName('book', 'authors') ==> 'book-authors-instance'
var mainTemplateName = holder instanceof jQuery ?
dna.getClone(holder).data().dnaRules.template : holder;
return mainTemplateName + '-' + arrayField + '-instance';
},
rules: function(elems, type, isList) {
// Example:
// <p data-dna-require=~~title~~>, 'require' ==> <p data-dnaRules={ require: 'title' }>
function add() {
var elem = dna.compile.setupNucleotide($(this));
var field = dna.compile.getDataField(elem, type);
elem.data().dnaRules[type] = isList ? field.split(',') : field;
}
return elems.filter('[data-dna-' + type + ']').each(add).removeAttr('data-dna-' + type);
},
template: function(name) { //prepare template to be cloned
var elem = $('#' + name);
if (!elem.length)
dna.core.berserk('Template not found: ' + name);
function saveName() { $(this).data().dnaRules = { template: $(this).attr('id') }; }
elem.find('.dna-template').addBack().each(saveName).removeAttr('id');
var elems = elem.find('*').addBack();
console.log(dna.compile.field)
elems.filter(dna.compile.isDnaField).each(dna.compile.field);
dna.compile.rules(elems, 'array').addClass('dna-array');
dna.compile.rules(elems, 'class', true);
dna.compile.rules(elems, 'require');
dna.compile.rules(elems, 'missing');
dna.compile.rules(elems, 'truthy');
dna.compile.rules(elems, 'falsey');
elems.each(dna.compile.propsAndAttrs);
return dna.store.stash(elem);
}
};
dna.store = {
// Handles storage and retrieval of templates
templates: {},
stash: function(elem) {
var name = elem.data().dnaRules.template;
function move() {
var elem = $(this);
var name = elem.data().dnaRules.template;
var template = {
name: name,
elem: elem,
container: elem.parent().addClass('dna-container').addClass('dna-contains-' + name),
nested: elem.parent().closest('.dna-clone').length !== 0,
index: elem.index(),
clones: 0
};
dna.store.templates[name] = template;
elem.removeClass('dna-template').addClass('dna-clone').addClass(name).detach();
}
function prepLoop() {
// Pre (sub-template array loops -- data-dna-array):
// class=dna-array data().dnaRules.array='field'
// Post (elem):
// data().dnaRules.template='{NAME}-{FIELD}-instance'
// Post (container)
// class=dna-nucleotide + data().dnaRules.loop={ name: '{NAME}-{FIELD}-instance', field: 'field' }
var elem = $(this);
var field = elem.data().dnaRules.array;
var sub = dna.compile.subTemplateName(name, field);
dna.compile.setupNucleotide(elem.parent()).data().dnaRules.loop =
{ name: sub, field: field };
elem.data().dnaRules.template = sub;
}
elem.find('.dna-template').addBack().each(move);
elem.find('.dna-array').each(prepLoop).each(move);
return dna.store.templates[name];
},
getTemplate: function(name) {
return dna.store.templates[name] || dna.compile.template(name);
}
};
dna.events = {
initializers: [], //example: [{ func: 'app.bar.setup', selector: '.progress-bar' }]
elementSetup: function(root, data) {
// Example (outside of template):
// <p class=dna-setup data-dna-setup=app.cart.setup>
// Example (within template):
// <select data-dna-setup=app.dropDown.setup>
function setup() { dna.util.apply($(this).data('dna-setup'), [$(this), data]); }
var selector = '[data-dna-setup]';
var elems = root ? root.find(selector).addBack(selector) : $('.dna-setup');
return elems.each(setup).addClass('dna-initialized');
},
runInitializers: function(elem, data) {
// Executes both the data-dna-setup functions and the registered initializers
dna.events.elementSetup(elem, data);
function init() { dna.util.apply(this.func, [(this.selector ?
elem.find(this.selector).addBack(this.selector) : elem).addClass('dna-initialized')]
.concat(this.params)); }
$.each(dna.events.initializers, init);
return elem;
},
runner: function(elem, type, event) {
// Finds elements for given type and executes callback passing in the element and the event
// Types: click|change|key-up|key-down|key-press|enter-key
elem = elem.closest('[data-dna-' + type + ']');
return dna.util.apply(elem.data('dna-' + type), [elem, event]);
},
handle: function(event) {
return dna.events.runner($(event.target), event.type.replace('key', 'key-'), event);
},
handleEnterKey: function(event) {
return event.which === 13 ? dna.events.runner($(event.target), 'enter-key', event) : null;
},
setup: function() {
$(document)
.click(dna.events.handle)
.change(dna.events.handle)
.keyup(dna.events.handle)
.keyup(dna.events.handleEnterKey)
.keydown(dna.events.handle)
.keypress(dna.events.handle);
dna.events.elementSetup();
}
};
$(dna.events.setup);
dna.core = {
inject: function(clone, data, count, settings) {
// Inserts data into clone and runs rules
function injectField(elem, field) {
var value = typeof data === 'object' ? dna.util.value(data, field) :
field === '[count]' ? count : field === '[value]' ? data : null;
var printableTypes = ['string', 'number', 'boolean'];
function printable(value) { return $.inArray(typeof value, printableTypes) !== -1; }
if (printable(value))
elem = settings.html ? elem.html(value) : elem.text(value);
}
function injectProps(elem, props) {
for (var x = 0; x < props.length / 2; x++)
elem.prop(props[x*2], dna.util.realTruth(dna.util.value(data, props[x*2 + 1])));
}
function injectAttrs(elem, attrs) {
for (var x = 0; x < attrs.length / 2; x++) {
var attr = attrs[x*2];
var parts = attrs[x*2 + 1]; //ex: 'J~~code.num~~' --> ['J', 'code.num', '']
var value = [parts[0], dna.util.value(data, parts[1]), parts[2]].join('');
elem.attr(attr, value);
if (attr === 'value')
elem.val(value);
}
}
function injectClass(elem, classList) {
// classList = ['field', 'class-true', 'class-false']
var value = dna.util.value(data, classList[0]);
var truth = dna.util.realTruth(value);
if (classList.length === 1) {
elem.addClass(value);
}
else if (classList.length > 1) {
elem.toggleClass(classList[1], truth);
if (classList[2])
elem.toggleClass(classList[2], !truth);
}
}
function processLoop(elem, loop) {
var dataArray = dna.util.value(data, loop.field);
if (dataArray)
dna.clone(loop.name, dataArray, { container: elem });
}
function process() {
var elem = $(this);
var dnaRules = elem.data().dnaRules;
if (dnaRules.text)
injectField(elem, dnaRules.text);
if (dnaRules.props)
injectProps(elem, dnaRules.props);
if (dnaRules.attrs)
injectAttrs(elem, dnaRules.attrs);
if (dnaRules.class)
injectClass(elem, dnaRules.class);
if (dnaRules.require)
elem.toggle(dna.util.value(data, dnaRules.require) !== undefined);
if (dnaRules.missing)
elem.toggle(dna.util.value(data, dnaRules.missing) === undefined);
if (dnaRules.truthy)
elem.toggle(dna.util.realTruth(dna.util.value(data, dnaRules.truthy)));
if (dnaRules.falsey)
elem.toggle(!dna.util.realTruth(dna.util.value(data, dnaRules.falsey)));
if (dnaRules.loop)
processLoop(elem, dnaRules.loop);
}
clone.find('.dna-array').remove();
clone.find('.dna-nucleotide').addBack('.dna-nucleotide').each(process);
return clone.data('dna-model', data);
},
replicate: function(template, data, count, settings) { //make and setup the clone
var clone = template.elem.clone(true, true);
template.clones++;
dna.core.inject(clone, data, count, settings);
var selector = '.dna-contains-' + template.name;
var container = settings.container ?
settings.container.find(selector).addBack(selector) : template.container;
container[settings.top ? 'prepend' : 'append'](clone);
dna.events.runInitializers(clone, data);
if (settings.callback)
settings.callback(clone, data);
if (settings.fade)
dna.ui.slideFadeIn(clone);
return clone;
},
unload: function(name, data, options) { //use rest data to make clone
if (!data.error)
dna.clone(name, data, options);
},
berserk: function(message) { //oops, file a tps report
throw 'dna.js error -> ' + message;
}
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,81 +0,0 @@
var gulp = require('gulp'),
uglify = require('gulp-uglify'),
concat = require('gulp-concat'),
rename = require("gulp-rename"),
autoprefixer = require('gulp-autoprefixer'),
cssmin = require('gulp-cssmin'),
newer = require('gulp-newer');
gulp.task('make-vendor-js', function () {
gulp.src([
'static_client/js/plugins.js',
'static_client/js/plugins/select2.min.js',
'static_client/js/plugins/select2_locale_ru.js',
'static_client/js/jquery.ui.datepicker-ru.js',
'static_client/js/jquery.mousewheel.min.js',
'static_client/js/idangerous.swiper-2.4.min.js',
'static_client/js/jquery.mCustomScrollbar.concat.min.js',
'static_client/lib/fancybox/jquery.fancybox.js',
'static_client/js/jquery.placeholder.js',
'static_client/js/jquery.phototag.js',
'static_client/js/dna.min.js',
'static_client/js/main.js',
'static_client/js/scripts.js',
'static_client/js/Base64.js'
])
.pipe(concat('vendor.js'))
.pipe(gulp.dest('static_client/js/'))
.pipe(uglify())
.pipe(rename('vendor.min.js'))
.pipe(gulp.dest('static_client/js_min/'))
});
gulp.task('make-vendor-css', function () {
gulp.src([
'static_client/css/normalize.min.css',
'static_client/css/idangerous.swiper.css',
'static_client/css/jquery.mCustomScrollbar.min.css',
'static_client/css/jquery-ui-1.10.3.custom.css',
'static_client/css/jquery.mousewheel.min.js',
'static_client/lib/fancybox/jquery.fancybox.css',
'static_client/css/phototag.css',
'static_client/css/regions.css',
'static_client/css/select2.css'
])
.pipe(concat('vendor.css'))
.pipe(gulp.dest('static_client/css/'))
.pipe(cssmin())
.pipe(rename('vendor.min.css'))
.pipe(gulp.dest('static_client/css_min/'))
});
gulp.task('main-css', function () {
gulp.src('static_client/css/main.css')
.pipe(newer('static_client/css_min/'))
.pipe(autoprefixer({
browsers:['> 1%', 'Opera > 11', 'Explorer >= 8', 'Firefox >20', 'Chrome > 20']
}))
.pipe(gulp.dest('static_client/css/'))
.pipe(cssmin())
.pipe(rename('main.min.css'))
.pipe(gulp.dest('static_client/css_min/'))
});
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']);
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-workflow', function () {
gulp.watch(["static_client/css/main.css","static_client/js/_modules/*.js"], ["main-css","minify-modules"]);
});

@ -2,6 +2,13 @@
{% load i18n %}
{% load template_filters %}
<script>
function updateTextFields(elem){
if ($(elem).data('insertedText'))
elem.text($(this).data('insertedText'))
};
</script>
<div id="{{formId}}" class="popup-window pw-place">
<header class="clearfix">
<div class="pw-title">{% trans 'Место' %}</div>
@ -19,12 +26,10 @@
<div id="{{autoCompleteId}}" ></div>
</div>
<div class="csb-selected-items" id="{{selectedItemsContainer}}">
<!-- noindex -->
<div class="csb-selected dna-template " id="{{selectedItemTemplate}}">
<div class="csbs-text">~~text~~</div>
<div class="csbs-text" data-inserted-text="~~text~~" data-callback="updateTextFields">{# ~~text~~ #}</div>
<a class="csbs-del" href="#" data-checkbox-id="~~id~~">x</a>
</div>
<!--/ noindex -->
</div>
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
@ -38,7 +43,7 @@
{% comment %}<span class="custom-radio-check">&nbsp;</span> {% endcomment %}
<label>
<input type="checkbox" name="area" id="id_{{ prefix }}{{ value }}" class="csb-menu-input" value="{{ value }}" {% for option in search_form.area.value %}{% if option == value|slugify %}checked="checked"{% endif %}{% endfor %}/>
<!--<span class="hidden">{{ text }}</span>-->
{# <span class="hidden">{{ text }}</span> #}
</label>
<a href="#" data-name="area" data-id="{{ value }}" data-nested="false" data-template-id="{{prefix}}template{{ value }}" data-sub="true" class="trigger">{{ text }}</a>
@ -46,18 +51,14 @@
<li class="level2 dna-template level" id="{{prefix}}template{{ value }}">
<label>
<input type="checkbox" id="id_{{ prefix }}~~id~~" name="~~name~~" value="~~id~~" class="csb-menu-input"/>
<!--<span class="hidden">~~text~~</span>-->
{# <span class="hidden">~~text~~</span>--> #}
</label>
<!-- noindex -->
<a data-sub="~~sub~~" class="trigger" data-name="~~name~~" data-nested="true" data-id="~~id~~" data-template-id="{{prefix}}template{{ value }}-sub" rel="nofollow">~~text~~</a>
<!--/ noindex -->
<a data-sub="~~sub~~" class="trigger" data-name="~~name~~" data-nested="true" data-id="~~id~~" data-template-id="{{prefix}}template{{ value }}-sub" rel="nofollow" data-inserted-text="~~text~~" data-callback="updateTextFields">{# ~~text~~ #}</a>
<ul class='final-tire sublist'>
<li id="{{prefix}}template{{ value }}-sub" class='dna-template level'>
<!-- noindex -->
<label>
<input type="checkbox" id="id_{{ prefix }}~~id~~" name="~~name~~" class="nested-input csb-menu-input" value="~~id~~"/><span class="trigger">~~text~~</span>
<input type="checkbox" id="id_{{ prefix }}~~id~~" name="~~name~~" class="nested-input csb-menu-input" value="~~id~~"/><span class="trigger" data-inserted-text="~~text~~" data-callback="updateTextFields">{# ~~text~~ #}</span>
</label>
<!--/ noindex -->
</li>
</ul>
</li>

@ -37,12 +37,10 @@
</div>
<div class="csb-selected-items" id="{{selectedItemsContainer}}">
<!-- noindex -->
<div class="csb-selected dna-template " id="{{selectedItemTemplate}}">
<div class="csbs-text">~~text~~</div>
<a class="csbs-del" href="#" data-checkbox-id="~~id~~">x</a>
</div>
<!--/noindex -->
<div class="csb-selected dna-template " id="{{selectedItemTemplate}}">
<div class="csbs-text" data-inserted-text="~~text~~" data-callback="updateTextFields"></div>
<a class="csbs-del" href="#" data-checkbox-id="~~id~~">x</a>
</div>
</div>
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
@ -57,14 +55,12 @@
<a href="#" data-name="th" data-id="{{ value }}" data-sub="true" data-template-id="{{ prefix }}subj-template{{ value }}" class="trigger">{{ text }}</a>
<ul class="sublist">
<li class="level dna-template" id="{{ prefix }}subj-template{{ value }}">
<!-- noindex -->
<label class="custom-radio-check">
<span class="custom-checkbox">
<input type="checkbox" class="csb-menu-input" name="~~name~~" value="~~id~~" id="tgid_{{ prefix }}~~id~~"/>
</span>
<span class="trigger">~~text~~</span>
</label>
<!--/ noindex -->
<label class="custom-radio-check">
<span class="custom-checkbox">
<input type="checkbox" class="csb-menu-input" name="~~name~~" value="~~id~~" id="tgid_{{ prefix }}~~id~~"/>
</span>
<span class="trigger" data-inserted-text="~~text~~" data-callback="updateTextFields"></span>
</label>
</li>
</ul>
</li>

Loading…
Cancel
Save