function dumpObject(obj, v) { v = $.nvl(v, false); s = obj.toString()+': '; for (a in obj) s += (v?(a+":"+eval("obj."+a)):a)+', '; alert(s); } Array.prototype.unique = function() { var unique= []; for (var i = 0; i < this.length; i += 1) { if (unique.indexOf(this[i]) == -1) { unique.push(this[i]) } } return unique; }; function array_values(input) { var tmp_arr = [], key = ''; if (input && typeof input === 'object' && input.change_key_case) { return input.values(); } for (key in input) { tmp_arr[tmp_arr.length] = input[key]; } return tmp_arr; } function hexc(colorval) { var parts = colorval.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*?(\d+)?\)/); if (parts.length == 5) { if (parts[4] == 0) return ''; delete(parts[4]); } delete(parts[0]); for (var i = 1; i <= 3; ++i) { parts[i] = parseInt(parts[i]).toString(16); if (parts[i].length == 1) parts[i] = '0' + parts[i]; } return '#' + parts.join(''); } $.builder = { workspace: null, breadcrumbs: null, frame: {}, frameActive: {}, frameResize:{}, frameControls: {}, frameResizeCoords: {}, frameResizeElement: null, frameResizing: false, currentElement: null, currentElementHandler: null, hoverElement: null, domain_id: null, page_id: null, changes: {}, // items: [ {target, index, type, value} ] save: function(doneEvent) { var btn = $('#builderButtonSave'); btn.find('.btn').prop('disabled', true); $.ajax({ url: '/_builder/save.html', type: 'post', data: {'css': $.builder.css.cssText(), 'page': $.builder.page_id, 'changes': array_values(this.changes)}, success: function() { btn.hide(); $.builder.changes = {}; if (doneEvent != undefined) doneEvent(); }, complete: function() { btn.prop('disabled', false); } }); }, saveToStack: function(type, value, element) { if (type != undefined) { var e = (element == undefined)?$.builder.currentElement:element; this.changes[e.data('row')+':'+e.data('col')+':'+e.data('index')+type] = {'row': e.data('row'), 'col': e.data('col'), 'index': e.data('index'), 'type': type, 'value': value}; } $('#builderButtonSave').show().find('label').removeClass('active'); }, reloadPage: function() { var reload = function() { var h = document.location.href; if (h.indexOf('#')) h = h.substr(0, h.indexOf('#')); document.location = h; } if ($('#builderButtonSave').css('display') == 'block') { $.builder.save(reload); } else { reload(); } }, bindElement: function(e, handler) { if ($.builder.currentElement != null && e == $.builder.currentElement[0]) return; if ($.builder.currentElementHandler != null) { $.builder.currentElementHandler.unbindElement(); } $.builder.breadcrumbs.hide(); if (e == document.documentElement) { $.builder.bindElement(); $.builder.css.current = $.stylesheet('html'); $.builder.css.currentClassName = 'html'; } if (e == undefined) { $.builder.focusOutFrame(); $.builder.currentElement = null; $.builder.currentElementHandler = null; $.builder.hoverOutFrame(); } else { $.builder.currentElement = $(e); $.builder.focusFrame(); $.builder.currentElementHandler = (handler == undefined)?null:handler; $.builder.styles.bindElement(e); if (handler) handler.bindElement(e); } if (e == document.documentElement) { $('#builderClassSelector').find('em').html('[html]'); $('#builderStylesChooseClassname').find('input, button').prop('disabled', true); $.builder.css.backdrop.css('display', 'none'); } }, init: function(domain_id, page_id, page_type_id, blocks_info) { $.builder.domain_id = domain_id; $.builder.page_id = page_id; $.builder.page_type_id = page_type_id; $.builder.configure = new BuilderConfigure(); $.builder.blocks = new BuilderBlocks(); $.builder.blocks.blocks_info = blocks_info; var b = $(document.documentElement); $.builder.workspace = $('.builder-workspace'); $.builder.workspace.css('padding', b.css('padding')).css('margin', b.css('margin')); $(document.body).css('overflow', 'hidden'); /* $(document.body).click(function(e) { if ($(e.target).parentsUntil($.builder.currentElement).length != 0) return; if ($.builder.currentElement != null) saveDesignText($.builder.currentElement); // $.builder.focusOutFrame(); }); */ $('*[data-design*="text"], *[data-design="block-main"], *[data-design="theme-post-body"], *[data-design="theme-post-title"]').each(function() { $(this).css('cursor', 'pointer').focus(function() { if ($(this).hasClass('builder-design-empty')) { $(this).html('').removeClass('builder-design-empty'); //$.builder.updateFrame(); } $.builder.css.current = null; $.builder.bindElement(this); $(this).on('keyup pastle contentDom', $.builder.updateFrame); //$.builder.currentElement = $(this); $.builder.focusFrame(); }).focusout(function() { if ($.builder.currentElement != null && $.builder.currentElement[0] == this) { $.builder.saveDesignText(); $.builder.focusOutFrame(); } var e = $(this); e.off('keyup pastle contentDom'); if (e.data('design') != 'theme-image' && e.data('design') != 'block-image') { var s = $.trim(e.html().replace('
', '').replace('
', '').replace(''+$.builder.blocks.blocks_info[t[1]]['title']+'
'); } } }); }); $('*[data-design]').each(function() { $(this).css('cursor', 'pointer'); var e = $(this); var s = $.trim(e.html().replace('', '').replace('
', '').replace(''+title+'
'); } } }).focus(function() { $(this).css('cursor', ''); }).focusout(function() { $(this).css('cursor', 'pointer'); }); $('*[data-design*="text"], *[data-design="block-main"], *[data-design="theme-post-body"]').each(function() { this.designMode = 'on'; this.contentEditable = 'true'; CKEDITOR.inline(this); }); $('*[data-design="theme-post-title"]').each(function() { this.designMode = 'on'; this.contentEditable = 'true'; }); $('*[data-design="block-contacts"]').click(function() { $.builder.css.current = null; $.builder.bindElement(this, $.builder.contacts); //$.builder.contacts.showForm($(this).data('target'), $(this).data('index')); }).dblclick(function() { $.builder.contacts.showForm(); }); $('*[data-design="block-navigation"]').click(function() { $.builder.css.current = null; $.builder.bindElement(this); }); $('*[data-design="block-maps"]').click(function() { $.builder.css.current = null; $.builder.bindElement(this, $.builder.maps); }).dblclick(function() { $.builder.maps.showForm(); }).resize(function() { var container = $(this).data('container'); if (container) container.container.fitToViewport(false); }); $('*[data-design="theme-image"], *[data-design="block-image"]').click(function() { $.builder.css.current = null; $.builder.bindElement(this, $.builder.images); }).dblclick(function() { $.builder.images.showForm(); }).each(function() { // Убираем ссылки на картинки $(this).parents('a').click(function() { return false }); }); $('*[data-design="block-forms"]').click(function() { $.builder.css.current = null; $.builder.bindElement(this, $.builder.forms); //$.builder.forms.showForm($(this).data('target'), $(this).data('index')); }).dblclick(function() { //$.builder.bindElement(this, $.builder.forms); $.builder.forms.showForm(); }).find('button').prop('disabled', true); $.builder.initFrame(); var $body = $(document.body); $.ajax({ url:'/_builder/sidebar.html?page='+$.builder.page_id, success:function(s) { $('body').css('padding-right', parseInt($('body').css('padding-right'))+240+'px'); sidebar = $('').html(s).insertBefore($body.children()[0]); $.builder.imagebrowser = new BuilderImageBrowser(); $.builder.images = new BuilderImages(); $.builder.contacts = new BuilderContacts(); $.builder.forms = new BuilderForms(); $.builder.maps = new BuilderMaps(); $.builder.styles = new BuilderStyles(); $.builder.pages = new BuilderPages(); $.builder.css = new BuilderCSS(); $.builder.posts = new BuilderPosts(); $.builder.bindElement(document.documentElement); } }); $(document).click(function(e) { if (e.target.tagName.toLowerCase() == 'ymaps') return; // yandex.maps hack var t = $(e.target); if ($.builder.currentElement == null || ($.builder.currentElement != null && e.target == $.builder.currentElement[0])) return; if (t.hasClass('modal-backdrop') || t.hasClass('builder-breadcrumbs') || t.parents('.builder-container').length != 0 || t.hasClass('cke_top') || $(e.target).parents('.cke_top').length != 0 || t.parents('[data-design]').length != 0) return; //alert(t[0].className); if ($.builder.frame.m[0] == e.target) return; //if ($.inArray($.builder.currentElement[0], $.makeArray($(e.target).parents())) != -1) return; $.builder.css.current = null; $.builder.bindElement(document.documentElement); /* var p = $('#builderStylesPlace'); var h = p[0].scrollHeight; $.builder.styles.backdrop.css({'height': h+'px', 'margin-bottom': '-'+h+'px', 'display':'block'}); p.find('input, button').prop('disabled', true); */ }); }, saveDesignText: function(e) { e = (e == undefined)?$.builder.currentElement:e; switch ($(e).data('design')) { case 'block-text': $.builder.saveToStack('block-text', e.html(), e); /* $.ajax({ url:'/_builder/blocks/textsave.html', type:'post', data:{'target':e.data('target'), 'index':e.data('index'), 'value':e.html(), 'page': $.builder.page_id} }); */ break; case 'block-main': $.builder.saveToStack('block-main', e.html(), e); /* $.ajax({ url:'/_builder/editor/save.html', type:'post', data:{page_id: $.builder.page_id, body:e.html()}, }); */ break; case 'theme-text': //TODO: remove $.builder.saveThemeOption(e.data('name'), e.html()); break; case 'theme-post-title': $.ajax({ url:'/_builder/posts/savetitle.html', type:'post', data:{'page': $.builder.page_id, 'value':e.html(), 'post': e.data('post-id')} }); break; case 'theme-post-body': $.ajax({ url:'/_builder/posts/savebody.html', type:'post', data:{'page': $.builder.page_id, 'value':e.html(), 'post': e.data('post-id')} }); break; } }, initFrame: function() { // url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsTAAALEwEAmpwYAAABnElEQVQoz2P4//8/A7kYQmAHbEDMCaUxAC7NfEpKSqpr166NOnr0aB6IBvGB4vyENIvv378/4+fPn8/+I4Hfv38/A4mD5HFp5t+1a1cGkP/3zssf/yftfPW/Zu1zMA3ig8RB8jAXoGhWVFRUB9r4/MqTb/+zFt7/X7j88f+iFY/BNIgPEv/169cLkDp0zayLFy+OAxlfufLe//g5t/8nzEVgEL9q1T2wF0DqQOqRNXNt27atGiQZ2H/hv8/ESxg4oO88WDNIHUg9smbO/v7+bJBkzNTz/82bT/03b0HCQH7stAtgzRMnTswGqUfWzCYiImL/5cuXtweuvv6vXLj3v2rFof+qlYfANIgPEgfKvwOpA6lH1swCxBp9fX09QP6/ozff/PdoP/JftWAXmAbxQeIgeZA6kHpkzYxALATELp2dnZM/f/78HjmegfwPXV1dU0DyUHWM6PHMAcRyQOzKy8ubUlhY2DNhwoQ5IBrEB4lD5TmwJRImIOaGKjACYicgdoPSIL48VJ4JV/JkgpoMcpo01CBpKJ8DphGmGQBBzpeu6b0ClgAAAABJRU5ErkJggg==) var p = ''; var r = '