[limb-svn] r6480 - in 3.x/trunk/limb/cms: shared/js template/_cms
svn at limb-project.com
svn at limb-project.com
Thu Nov 1 15:12:57 MSK 2007
Author: momental
Date: 2007-11-01 15:12:57 +0300 (Thu, 01 Nov 2007)
New Revision: 6480
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6480
Added:
3.x/trunk/limb/cms/shared/js/cp_forms.js
3.x/trunk/limb/cms/shared/js/cp_layout.js
Removed:
3.x/trunk/limb/cms/shared/js/cp.js
Modified:
3.x/trunk/limb/cms/template/_cms/js.html
Log:
-- cp.js was divided into 3 files: cp_forms.js, cp_layout.js, cp_common_controls.js
Deleted: 3.x/trunk/limb/cms/shared/js/cp.js
===================================================================
--- 3.x/trunk/limb/cms/shared/js/cp.js 2007-11-01 09:03:58 UTC (rev 6479)
+++ 3.x/trunk/limb/cms/shared/js/cp.js 2007-11-01 12:12:57 UTC (rev 6480)
@@ -1,512 +0,0 @@
-var LIMB_WINDOW_DEFAULT_PARAMS = { width: 890, height:500, resizable: true, noautoresize: true };
-var ShowFilterDefault = 'Показать фильтр';
-var HideFilterDefault = 'Скрыть фильтр';
-
-function control_error()
-{
- if(jQuery('.message_error .content ol').css('display')=='none')
- jQuery('.message_error .content ol').slideDown('fast');
- else
- jQuery('.message_error .content ol').slideUp('fast');
-}
-
-Limb.namespace('CMS.forms');
-
-CMS.forms.upload_file = function(uri, field_id, on_complete)
-{
- var input = document.getElementById(field_id);
- if(!input || !input.value)
- throw "Файл является обязательным полем";
-
- var parent = input.parentNode;
-
- var iframe_id = field_id + '_worker_frame';
- if(Limb.Browser.is_ie)
- var iframe = document.createElement('<iframe id="' + iframe_id + '" name="' + iframe_id + '" />');
- else
- {
- var iframe = document.createElement('iframe');
- iframe.id = iframe_id;
- iframe.name = iframe_id;
- }
- iframe.src = '';
-
- var form = document.createElement('form');
- form.action = uri;
- form.method = 'post';
- form.target = iframe_id;
- form.style.display = 'none';
-
- if(form.encoding)
- form.encoding = 'multipart/form-data';
- else
- form.enctype = 'multipart/form-data';
-
- var hidden = document.createElement('input');
- hidden.type = 'hidden';
- hidden.name = 'UPLOAD_IDENTIFIER';
- hidden.value = field_id;
-
- parent.removeChild(input);
- parent.appendChild(form);
- form.appendChild(iframe);
- form.appendChild(hidden);
- form.appendChild(input);
-
- var new_file = document.createElement('input');
- new_file.type = 'hidden';
- new_file.name = 'video_id';
-
- function callback()
- {
- setTimeout(function () {
- var error = iframe.contentWindow.file_error;
- var file_name = iframe.contentWindow.file_name;
- if(!file_name)
- error = 'При загрузке файла произошла ошибка';
- var file_size = iframe.contentWindow.file_size;
- new_file.value = file_name;
- parent.appendChild(new_file);
- parent.removeChild(form);
- on_complete(file_name, file_size, error);
- }, 100);
- }
-
- if(window.attachEvent)
- iframe.attachEvent('onload', callback);
- else
- iframe.addEventListener('load', callback, false);
-
- form.submit();
-}
-
-CMS.forms.clear_image = function(form, field_id, hidden_id)
-{
- hidden_id = hidden_id ? hidden_id : field_id + '_id';
- var hidden = document.getElementById(hidden_id);
- if(!hidden)
- {
- hidden = document.createElement('input');
- hidden.type = 'hidden';
- hidden.id = hidden_id;
- hidden.name = hidden_id;
- form.appendChild(hidden);
- }
-
- hidden.value = '';
-
- var img = document.getElementById(field_id + '_preview');
- if(!img)
- return;
-
- img.parentNode.removeChild(img);
-}
-
-Limb.Class('CMS.UploadProgress',
-{
- __construct: function(url, options)
- {
- this.options = options;
- this.onProgressStart = this.options.onProgressStart;
- this.onProgressComplete = this.options.onProgressComplete;
- this.onProgressChange = this.options.onProgressChange;
- this.onFailure = this.options.onFailure;
-
- this.frequency = this.options.frequency || 1000;
-
- this.request = {};
- this.url = url;
- this.error = 0;
- this.in_progress = false;
-
- this.start();
- },
-
- start: function()
- {
- this.in_progress = true;
- this.options.onProgressComplete = this.updateComplete.bind(this);
- (this.onProgressStart || function(){}).apply(this);
- this.onTimerEvent();
- },
-
- stop: function()
- {
- this.request.options.onProgressComplete = undefined;
- this.request.options.onFailure = undefined;
- clearTimeout(this.timer);
- this.onTimerEvent();
- this.in_progress = false;
- },
-
- updateComplete: function(request)
- {
- if(!this.in_progress)
- {
- if(this.error == 1)
- (this.onFailure || function(){}).apply(this, arguments);
- else
- (this.onProgressComplete || function(){}).apply(this, arguments);
- return;
- }
-
- if(request.responseText == 'stop')
- {
- this.error = 1;
- this.stop();
- return;
- }
-
- if(request.responseText == 'complete')
- {
- this.stop();
- return;
- }
-
- if(request.responseText != 'undefined')
- {
- (this.onProgressChange || function(){}).apply(this, [request.responseText]);
- }
-
- this.timer = setTimeout(this.onTimerEvent.bind(this), this.frequency);
- },
-
- onTimerEvent: function()
- {
- this.request = jQuery.ajax({
- url: this.url,
- error: this.onFailure,
- success: this.updateComplete
- });
- }
-});
-
-/////// LAYOUT POSTPROCESSING HELPERS
-
-/**
- Filter formatting
-
- обрабатывает форму фильтра поиска при выводе списков в панели управления
- позволяет скрывать/показывать фильтр. при необходимости отображает форму поиска в конце списка.
- запоминает состояние отображения (скрыт/доуступен) конкретного фильтра в cookies
-
- TODO: продублировать описание на английском. показать пример использования.
-*/
-Limb.Class('CMS.Filter',
-{
- __construct:function()
- {
- var filter = jQuery('.filter');
- var filterForm = jQuery('.filter form');
- var list = jQuery('.list');
-
- if (!filter.is('div'))
- return;
-
- var activeFilterHTML = '<a class="active_filter"><span>' + ShowFilterDefault + '</span></a>';
- var htmlText = '<div class="filter_bottom"><a class="active_filter_bottom"><span>' + ShowFilterDefault + '</span></a></div>';
-
- filter.prepend(activeFilterHTML);
- list.css('margin','0');
- list.after(htmlText);
- this._initBehavior();
-
- this.activeFilter = jQuery('.filter .active_filter span');
- this.activeFilterBelowList = jQuery('.filter_bottom .active_filter_bottom span');
-
- if(Limb.cookie(window.location + '.filter') == 1){
- filterForm.show();
- this.activeFilter.text(HideFilterDefault);
- this.activeFilter.addClass('show');
-
- }
- else {
- filterForm.hide();
- this.activeFilter.text(ShowFilterDefault);
- }
-
- },
-
- initActiveFilterClick: function()
- {
- var filterForm = jQuery('.filter form');
- var filterFormBelowList = jQuery('.filter_bottom form');
-
- if (filterFormBelowList.is('form')){
- filterFormBelowList.hide();
- filterFormBelowList.clone().appendTo(".filter").show('fast');
- filterFormBelowList.remove();
- }
- else
- filterForm.toggle('slow');
-
- this.setFilterCookie();
- this.initActiveFilter();
- },
-
- initActiveFilterBelowListClick:function()
- {
- var filterForm = jQuery('.filter form');
- var filterFormBelowList = jQuery('.filter_bottom form');
-
- if (filterFormBelowList.is('form'))
- filterFormBelowList.toggle('slow');
- else {
- filterForm.hide();
- filterForm.clone().prependTo(".filter_bottom").show('slow');
- filterForm.remove();
- }
-
- this.setFilterCookie();
- this.initActiveFilter();
-
- },
-
- initActiveFilter:function (){
- var filterForm = jQuery('.filter form');
-
- if (filterForm.is('form')){
-
- if (this.activeFilter.attr('class')== 'show')
- this.activeFilter.removeClass('show').text(ShowFilterDefault);
- else {
- this.activeFilter.addClass('show').text(HideFilterDefault);
- this.activeFilterBelowList.removeClass('show').text(ShowFilterDefault);
- }
- }
- else{
-
- if (this.activeFilterBelowList.attr('class')== 'show')
- this.activeFilterBelowList.removeClass('show').text(ShowFilterDefault);
- else {
- this.activeFilterBelowList.addClass('show').text(HideFilterDefault);
- this.activeFilter.removeClass('show').text(ShowFilterDefault);
- }
-
- }
- },
-
- setFilterCookie: function(){
-
- if(Limb.cookie(window.location + '.filter') == 1)
- Limb.cookie(window.location + '.filter', 0);
- else
- Limb.cookie(window.location + '.filter', 1);
- },
-
- _initBehavior: function(){
- jQuery('.active_filter').click(this.initActiveFilterClick.bind(this));
- jQuery('.active_filter_bottom').click(this.initActiveFilterBelowListClick.bind(this));
- }
-
-});
-
-
-function initImgResize(){
-jQuery('img[@resize]')
- .one('load', function()
- {
- var current_img = jQuery(this);
- var size = current_img.attr('resize').replace('x','');
- var width_bool = false;
- var height_bool = false;
- var width = current_img.width();
- var height = current_img.height();
-
- current_img.css({position:'absolute',top:'3000'});
-
- if (current_img.attr('resize').indexOf('x') == 0)
- height_bool = true;
- else if (current_img.attr('resize').indexOf('x') == current_img.attr('resize').length - 1)
- width_bool = true;
- else if (current_img.attr('resize').indexOf('x') < 0)
- if (width > height)
- height_bool = true;
- else
- width_bool = true;
-
- var link = jQuery('<a class="magnifier" href="' + this.src + '" target="_blank"><img src="/shared/cms/images/icon/magnifier.gif" width="13" height="13" alt="magnifier"/></a>').get()[0];
-
- if(height_bool)
- {
- current_img.height(size);
- }
- else if (width_bool)
- {
- current_img.width(size);
- }
-
- jQuery(link).css('top', current_img.height() - 13);
- jQuery(link).css('left', current_img.width() - 16);
-
- current_img.css({position : 'static', top : '0'});
- current_img.before(link);
-
- });
-};
-
-Limb.Class('CMS.SidebarToggle',
-{
- __construct:function()
- {
- this.sidebar = jQuery('#sidebar');
- this.content = jQuery('#content');
- this.bool = false;
-
-
- var SidebarHTML = this.sidebar.html();
- var toggleHTML = '<div class="sidebar_toggle"><span class="text">Навигация</span><span class="arrow"><img src="images/1x1.gif" width="8" height="7" alt="<<" /></span></div>';
-
- this.sidebar.empty();
- this.sidebar.prepend('<div class="inner"></div>');
- this.inner = jQuery('#sidebar .inner');
- this.inner.prepend(SidebarHTML);
-
- this.sidebar.prepend(toggleHTML);
- this.toggle = jQuery('.sidebar_toggle');
- this.toggle_text = jQuery('.sidebar_toggle .text');
- this.toggle_arrow = jQuery('.sidebar_toggle .arrow');
-
- if(Limb.cookie('sidebar_toggle') == 1){
- this.inner.hide();
- this.toggle_text.hide();
- this.hideSidebar();
- }
- this._initBehavior();
- },
-
- initSidebarStatus: function(){
- if (this.sidebar.attr('class') == 'hide')
- this.bool = true;
- else
- this.bool = false;
- return this.bool;
- },
-
- showSidebar: function(){
- this.inner.show('slow');
- this.toggle_text.show('slow');
- this.sidebar.removeClass('hide');
- this.toggle.css('height','');
- this.content.css('margin-left','225px');
-
- },
-
- hideSidebar: function(){
- this.inner.hide('slow');
- this.toggle_text.hide('slow');
- this.sidebar.addClass('hide');
- this.toggle.height(jQuery('body').height()-53);
- this.sidebar.height(jQuery('body').height()-40);
- this.content.css('margin-left','38px');
- },
-
-
- initToggleClick:function(){
- if (this.initSidebarStatus())
- this.showSidebar();
- else
- this.hideSidebar();
-
- this.setToggleCookie();
-
- return false;
- },
-
- setToggleCookie: function(){
- if(Limb.cookie('sidebar_toggle') == 1)
- Limb.cookie('sidebar_toggle', 0);
- else
- Limb.cookie('sidebar_toggle', 1);
- },
-
- _initBehavior: function(){
- jQuery('.sidebar_toggle .arrow').click(this.initToggleClick.bind(this));
- }
-
-});
-
-
-function initDocumentStructure(){
- var container = jQuery('#container');
- var sidebar = jQuery('#sidebar');
- container.css({
- position:'absolute',
- overflow: 'auto',
- top: '38px',
- left: '0',
- zIndex: 10
- });
- sidebar.css({
- position:'absolute',
- overflow: 'auto',
- top: '38px',
- left: '0',
- zIndex: 20
- });
-
- var bodyHeight = jQuery('body').height()-40;
- container.height(bodyHeight);
- sidebar.height(bodyHeight);
-
-};
-
-function initMainMenu(){
- //left navigation current item highlight
- var url = window.location.toString();
- var max = 0;
- var link = null;
- jQuery("#main_menu > dd > ul > li > a").each(function()
- {
- //finding the longest href
- if(url.indexOf(this.href) >= 0 && this.href.length > max)
- {
- link = this;
- max = this.href.length;
- }
- });
-
- if(link)
- jQuery(link).parent().attr('class', 'current');
-
-
- //sliding navigation support
- if(Limb.isFunction(jQuery.fn.accordion_cp))
- jQuery('#main_menu').accordion_cp();
-
-};
-
-
-/*============================== WINDOW READY ==============================*/
-jQuery(window).ready(function(){
- initDocumentStructure();
- jQuery(window).resize(initDocumentStructure);
-
- jQuery('.button').wrap('<span class="button_wrapper"></span>');
-
- new CMS.SidebarToggle('sidebar_toggle');
-
- // Fiter up/down sliding control
- new CMS.Filter('filter');
-
- jQuery('.message_error .show_hidden').bind('click', control_error);
-
- jQuery('img[@src$=.png], .shadow_bottom span, .shadow_left span, .shadow_right span').ifixpng();
-
- initImgResize();
-
- //resized images
-
- //duplicating h1 popup in title
- jQuery('.popup h1').each(
- function()
- {
- document.title = jQuery(this).text();
- }
- );
-
- initMainMenu();
-
-});
-
-
Added: 3.x/trunk/limb/cms/shared/js/cp_forms.js
===================================================================
--- 3.x/trunk/limb/cms/shared/js/cp_forms.js (rev 0)
+++ 3.x/trunk/limb/cms/shared/js/cp_forms.js 2007-11-01 12:12:57 UTC (rev 6480)
@@ -0,0 +1,172 @@
+Limb.namespace('CMS.forms');
+
+CMS.forms.upload_file = function(uri, field_id, on_complete)
+{
+ var input = document.getElementById(field_id);
+ if(!input || !input.value)
+ throw "Файл является обязательным полем";
+
+ var parent = input.parentNode;
+
+ var iframe_id = field_id + '_worker_frame';
+ if(Limb.Browser.is_ie)
+ var iframe = document.createElement('<iframe id="' + iframe_id + '" name="' + iframe_id + '" />');
+ else
+ {
+ var iframe = document.createElement('iframe');
+ iframe.id = iframe_id;
+ iframe.name = iframe_id;
+ }
+ iframe.src = '';
+
+ var form = document.createElement('form');
+ form.action = uri;
+ form.method = 'post';
+ form.target = iframe_id;
+ form.style.display = 'none';
+
+ if(form.encoding)
+ form.encoding = 'multipart/form-data';
+ else
+ form.enctype = 'multipart/form-data';
+
+ var hidden = document.createElement('input');
+ hidden.type = 'hidden';
+ hidden.name = 'UPLOAD_IDENTIFIER';
+ hidden.value = field_id;
+
+ parent.removeChild(input);
+ parent.appendChild(form);
+ form.appendChild(iframe);
+ form.appendChild(hidden);
+ form.appendChild(input);
+
+ var new_file = document.createElement('input');
+ new_file.type = 'hidden';
+ new_file.name = 'video_id';
+
+ function callback()
+ {
+ setTimeout(function () {
+ var error = iframe.contentWindow.file_error;
+ var file_name = iframe.contentWindow.file_name;
+ if(!file_name)
+ error = 'При загрузке файла произошла ошибка';
+ var file_size = iframe.contentWindow.file_size;
+ new_file.value = file_name;
+ parent.appendChild(new_file);
+ parent.removeChild(form);
+ on_complete(file_name, file_size, error);
+ }, 100);
+ }
+
+ if(window.attachEvent)
+ iframe.attachEvent('onload', callback);
+ else
+ iframe.addEventListener('load', callback, false);
+
+ form.submit();
+}
+
+CMS.forms.clear_image = function(form, field_id, hidden_id)
+{
+ hidden_id = hidden_id ? hidden_id : field_id + '_id';
+ var hidden = document.getElementById(hidden_id);
+ if(!hidden)
+ {
+ hidden = document.createElement('input');
+ hidden.type = 'hidden';
+ hidden.id = hidden_id;
+ hidden.name = hidden_id;
+ form.appendChild(hidden);
+ }
+
+ hidden.value = '';
+
+ var img = document.getElementById(field_id + '_preview');
+ if(!img)
+ return;
+
+ img.parentNode.removeChild(img);
+}
+
+Limb.Class('CMS.UploadProgress',
+{
+ __construct: function(url, options)
+ {
+ this.options = options;
+ this.onProgressStart = this.options.onProgressStart;
+ this.onProgressComplete = this.options.onProgressComplete;
+ this.onProgressChange = this.options.onProgressChange;
+ this.onFailure = this.options.onFailure;
+
+ this.frequency = this.options.frequency || 1000;
+
+ this.request = {};
+ this.url = url;
+ this.error = 0;
+ this.in_progress = false;
+
+ this.start();
+ },
+
+ start: function()
+ {
+ this.in_progress = true;
+ this.options.onProgressComplete = this.updateComplete.bind(this);
+ (this.onProgressStart || function(){}).apply(this);
+ this.onTimerEvent();
+ },
+
+ stop: function()
+ {
+ this.request.options.onProgressComplete = undefined;
+ this.request.options.onFailure = undefined;
+ clearTimeout(this.timer);
+ this.onTimerEvent();
+ this.in_progress = false;
+ },
+
+ updateComplete: function(request)
+ {
+ if(!this.in_progress)
+ {
+ if(this.error == 1)
+ (this.onFailure || function(){}).apply(this, arguments);
+ else
+ (this.onProgressComplete || function(){}).apply(this, arguments);
+ return;
+ }
+
+ if(request.responseText == 'stop')
+ {
+ this.error = 1;
+ this.stop();
+ return;
+ }
+
+ if(request.responseText == 'complete')
+ {
+ this.stop();
+ return;
+ }
+
+ if(request.responseText != 'undefined')
+ {
+ (this.onProgressChange || function(){}).apply(this, [request.responseText]);
+ }
+
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.frequency);
+ },
+
+ onTimerEvent: function()
+ {
+ this.request = jQuery.ajax({
+ url: this.url,
+ error: this.onFailure,
+ success: this.updateComplete
+ });
+ }
+});
+
+
Copied: 3.x/trunk/limb/cms/shared/js/cp_layout.js (from rev 6479, 3.x/trunk/limb/cms/shared/js/cp.js)
===================================================================
--- 3.x/trunk/limb/cms/shared/js/cp_layout.js (rev 0)
+++ 3.x/trunk/limb/cms/shared/js/cp_layout.js 2007-11-01 12:12:57 UTC (rev 6480)
@@ -0,0 +1,372 @@
+var LIMB_WINDOW_DEFAULT_PARAMS = { width: 890, height:500, resizable: true, noautoresize: true };
+var ShowFilterDefault = 'Показать фильтр';
+var HideFilterDefault = 'Скрыть фильтр';
+
+function control_error()
+{
+ if(jQuery('.message_error .content ol').css('display')=='none')
+ jQuery('.message_error .content ol').slideDown('fast');
+ else
+ jQuery('.message_error .content ol').slideUp('fast');
+}
+
+/////// LAYOUT POSTPROCESSING HELPERS
+
+/**
+ Filter formatting
+
+ обрабатывает форму фильтра поиска при выводе списков в панели управления
+ позволяет скрывать/показывать фильтр. при необходимости отображает форму поиска в конце списка.
+ запоминает состояние отображения (скрыт/доуступен) конкретного фильтра в cookies
+
+ TODO: продублировать описание на английском. показать пример использования.
+*/
+Limb.Class('CMS.Filter',
+{
+ __construct:function(showFilterStr, hideFilterStr)
+ {
+ var filter = jQuery('.filter');
+ var filterForm = jQuery('.filter form');
+ var list = jQuery('.list');
+ if (!filter.is('div'))
+ return;
+
+ var activeFilterHTML = '<a class="active_filter"><span>' + showFilterStr + '</span></a>';
+ var htmlText = '<div class="filter_bottom"><a class="active_filter_bottom"><span>' + showFilterStr + '</span></a></div>';
+
+ filter.prepend(activeFilterHTML);
+ list.css('margin','0');
+ list.after(htmlText);
+ this._initBehavior();
+
+ this.activeFilter = jQuery('.filter .active_filter span');
+ this.activeFilterBelowList = jQuery('.filter_bottom .active_filter_bottom span');
+
+ if(Limb.cookie(window.location + '.filter') == 1){
+ filterForm.show();
+ this.activeFilter.text(hideFilterStr);
+ this.activeFilter.addClass('show');
+
+ }
+ else {
+ filterForm.hide();
+ this.activeFilter.text(showFilterStr);
+ }
+
+ },
+
+ initActiveFilterClick: function()
+ {
+ var filterForm = jQuery('.filter form');
+ var filterFormBelowList = jQuery('.filter_bottom form');
+
+ if (filterFormBelowList.is('form')){
+ filterFormBelowList.hide();
+ filterFormBelowList.clone().appendTo(".filter").show('slow');
+ filterFormBelowList.remove();
+ }
+ else
+ filterForm.toggle('slow');
+
+ this.setFilterCookie();
+ this.initActiveFilter();
+ },
+
+ initActiveFilterBelowListClick:function()
+ {
+ var filterForm = jQuery('.filter form');
+ var filterFormBelowList = jQuery('.filter_bottom form');
+
+ if (filterFormBelowList.is('form'))
+ filterFormBelowList.toggle('slow');
+ else {
+ filterForm.hide();
+ filterForm.clone().prependTo(".filter_bottom").show('slow');
+ filterForm.remove();
+ }
+
+ this.setFilterCookie();
+ this.initActiveFilter();
+
+ },
+
+ initActiveFilter:function (){
+ var filterForm = jQuery('.filter form');
+
+ if (filterForm.is('form')){
+
+ if (this.activeFilter.attr('class')== 'show')
+ this.activeFilter.removeClass('show').text(showFilterStr);
+ else {
+ this.activeFilter.addClass('show').text(hideFilterStr);
+ this.activeFilterBelowList.removeClass('show').text(showFilterStr);
+ }
+ }
+ else{
+
+ if (this.activeFilterBelowList.attr('class')== 'show')
+ this.activeFilterBelowList.removeClass('show').text(showFilterStr);
+ else {
+ this.activeFilterBelowList.addClass('show').text(hideFilterStr);
+ this.activeFilter.removeClass('show').text(showFilterStr);
+ }
+
+ }
+ },
+
+ setFilterCookie: function(){
+
+ if(Limb.cookie(window.location + '.filter') == 1)
+ Limb.cookie(window.location + '.filter', 0);
+ else
+ Limb.cookie(window.location + '.filter', 1);
+ },
+
+ _initBehavior: function(){
+ jQuery('.active_filter').click(this.initActiveFilterClick.bind(this));
+ jQuery('.active_filter_bottom').click(this.initActiveFilterBelowListClick.bind(this));
+ }
+
+});
+
+/**
+ Resize Image
+
+ Все изображения с атрибутом "resize", ресайзит до размера указанного в значении атрибута "resize".
+ Если значение атрибута:
+ "xЧисло" то изображение меняет пропорционально свои размеры, где высота равна значению атрибут.
+ "Числоx" то изображение меняет пропорционально свои размеры, где ширина равна значению атрибут.
+ "Число" то изображение меняет пропорционально свои размеры, в зависимости от того что больше высота или ширина,
+ то и принимает значение атрибута.
+
+ TODO: продублировать описание на английском. показать пример использования.
+*/
+
+
+function initImgResize(){
+jQuery('img[@resize]')
+ .one('load', function()
+ {
+ var current_img = jQuery(this);
+ var size = current_img.attr('resize').replace('x','');
+ var width_bool = false;
+ var height_bool = false;
+ var width = current_img.width();
+ var height = current_img.height();
+
+ current_img.css({position:'absolute',top:'3000'});
+
+ if (current_img.attr('resize').indexOf('x') == 0)
+ height_bool = true;
+ else if (current_img.attr('resize').indexOf('x') == current_img.attr('resize').length - 1)
+ width_bool = true;
+ else if (current_img.attr('resize').indexOf('x') < 0)
+ if (width > height)
+ height_bool = true;
+ else
+ width_bool = true;
+
+ var link = jQuery('<a class="magnifier" href="' + this.src + '" target="_blank"><img src="/shared/cms/images/icon/magnifier.gif" width="13" height="13" alt="magnifier"/></a>').get()[0];
+
+ if(height_bool)
+ {
+ current_img.height(size);
+ }
+ else if (width_bool)
+ {
+ current_img.width(size);
+ }
+
+ jQuery(link).css('top', current_img.height() - 13);
+ jQuery(link).css('left', current_img.width() - 16);
+
+ current_img.css({position : 'static', top : '0'});
+ current_img.before(link);
+
+ });
+};
+
+
+/**
+ Sidebar Toggle
+
+ обрабатывает боковую панель, создаёт для нее манипулятор для скрытия/показа панели.
+ запоминает состояние отображения панели (скрыт/доуступен) в cookies
+
+ TODO: продублировать описание на английском. показать пример использования.
+*/
+
+Limb.Class('CMS.SidebarToggle',
+{
+ __construct:function()
+ {
+ this.sidebar = jQuery('#sidebar');
+ this.content = jQuery('#content');
+ this.bool = false;
+
+
+ var SidebarHTML = this.sidebar.html();
+ var toggleHTML = '<div class="sidebar_toggle"><span class="text">Навигация</span><span class="arrow"><img src="images/1x1.gif" width="8" height="7" alt="<<" /></span></div>';
+
+ this.sidebar.empty();
+ this.sidebar.prepend('<div class="inner"></div>');
+ this.inner = jQuery('#sidebar .inner');
+ this.inner.prepend(SidebarHTML);
+
+ this.sidebar.prepend(toggleHTML);
+ this.toggle = jQuery('.sidebar_toggle');
+ this.toggle_text = jQuery('.sidebar_toggle .text');
+ this.toggle_arrow = jQuery('.sidebar_toggle .arrow');
+
+ if(Limb.cookie('sidebar_toggle') == 1){
+ this.inner.hide();
+ this.toggle_text.hide();
+ this.hideSidebar();
+ }
+ this._initBehavior();
+ },
+
+ initSidebarStatus: function(){
+ if (this.sidebar.attr('class') == 'hide')
+ this.bool = true;
+ else
+ this.bool = false;
+ return this.bool;
+ },
+
+ showSidebar: function(){
+ this.inner.show('slow');
+ this.toggle_text.show('slow');
+ this.sidebar.removeClass('hide');
+ this.toggle.css('height','');
+ this.content.css('margin-left','225px');
+
+ },
+
+ hideSidebar: function(){
+ this.inner.hide('slow');
+ this.toggle_text.hide('slow');
+ this.sidebar.addClass('hide');
+ this.toggle.height(jQuery('body').height()-53);
+ this.sidebar.height(jQuery('body').height()-40);
+ this.content.css('margin-left','38px');
+ },
+
+
+ initToggleClick:function(){
+ if (this.initSidebarStatus())
+ this.showSidebar();
+ else
+ this.hideSidebar();
+
+ this.setToggleCookie();
+
+ return false;
+ },
+
+ setToggleCookie: function(){
+ if(Limb.cookie('sidebar_toggle') == 1)
+ Limb.cookie('sidebar_toggle', 0);
+ else
+ Limb.cookie('sidebar_toggle', 1);
+ },
+
+ _initBehavior: function(){
+ jQuery('.sidebar_toggle .arrow').click(this.initToggleClick.bind(this));
+ }
+
+});
+
+/*
+ Добавляет свойства к контентой части и боковой панели, благодоря которым
+ скроллер для прокрутки доболяется не у документа, а у боковой панели, либо у контента
+
+ TODO: продублировать описание на английском. показать пример использования.
+*/
+
+function initDocumentStructure(){
+ var container = jQuery('#container');
+ var sidebar = jQuery('#sidebar');
+ container.css({
+ position:'absolute',
+ overflow: 'auto',
+ top: '38px',
+ left: '0',
+ zIndex: 10
+ });
+ sidebar.css({
+ position:'absolute',
+ overflow: 'auto',
+ top: '38px',
+ left: '0',
+ zIndex: 20
+ });
+
+ var bodyHeight = jQuery('body').height()-40;
+ container.height(bodyHeight);
+ sidebar.height(bodyHeight);
+
+};
+
+function initMainMenu(){
+ //left navigation current item highlight
+ var url = window.location.toString();
+ var max = 0;
+ var link = null;
+ jQuery("#main_menu > dd > ul > li > a").each(function()
+ {
+ //finding the longest href
+ if(url.indexOf(this.href) >= 0 && this.href.length > max)
+ {
+ link = this;
+ max = this.href.length;
+ }
+ });
+
+ if(link)
+ jQuery(link).parent().attr('class', 'current');
+
+
+ //sliding navigation support
+ if(Limb.isFunction(jQuery.fn.accordion_cp))
+ jQuery('#main_menu').accordion_cp();
+
+};
+
+
+/*============================== WINDOW READY ==============================*/
+jQuery(window).ready(function(){
+ initDocumentStructure();
+ jQuery(window).resize(initDocumentStructure);
+
+ /*Nice Button*/
+ jQuery('.button').wrap('<span class="button_wrapper"></span>');
+
+ /*SideBar Toggle*/
+ new CMS.SidebarToggle('sidebar_toggle');
+
+ // Fiter up/down sliding control
+ new CMS.Filter(ShowFilterDefault, HideFilterDefault);
+
+ jQuery('.message_error .show_hidden').bind('click', control_error);
+
+ /*Fix PNG*/
+ jQuery('img[@src$=.png], .shadow_bottom span, .shadow_left span, .shadow_right span').ifixpng();
+
+ /*Image Resize*/
+ initImgResize();
+
+ //duplicating h1 popup in title
+ jQuery('.popup h1').each(
+ function()
+ {
+ document.title = jQuery(this).text();
+ }
+ );
+
+ /*Main Menu*/
+ initMainMenu();
+
+});
+
+
Modified: 3.x/trunk/limb/cms/template/_cms/js.html
===================================================================
--- 3.x/trunk/limb/cms/template/_cms/js.html 2007-11-01 09:03:58 UTC (rev 6479)
+++ 3.x/trunk/limb/cms/template/_cms/js.html 2007-11-01 12:12:57 UTC (rev 6480)
@@ -9,6 +9,6 @@
<script src="/shared/cms/js/tabs.js"></script>
<script src="/shared/cms/js/auto_tabs.js"></script>
<script src="/shared/cms/js/fixpng.js"></script>
-<script src="/shared/cms/js/cp.js"></script>
+<script src="/shared/cms/js/cp_layout.js"></script>
<script src="/shared/cms/js/cp_common_controls.js"></script>
More information about the limb-svn
mailing list