; (function ($) { /** * 标签控件 * * @example * var $root = $('<div>').css({position : 'absolute', top : 5, left : 20}).appendTo('body'); * var label = new FR.Label({ * renderEl : $root, * width : 200, * height : 40, * value : "我是一个标签", * textalign : "right", //对齐方式 * border : true, //是否有边框 * title : "FineReport", //悬浮提示信息 * wrap : true, //true换行,false不换行(默认) * verticalcenter : true, //是否垂直居中 * fontsize : 16, //字体大小 * color : "red", //文字颜色 * decoration : "underline", //文字修饰 * fontfamily : "SimSun", //字体 * fontweight : "normal", //文字粗细 * fontstyle : "normal" //字体风格 * }); * * @class FR.Label * @extends FR.BaseEditor * * @cfg {JSON} options 配置属性 * @cfg {String} options.cls 文字层样式类 * @cfg {String} options.value 文字内容 * @cfg {Boolean} [options.border=false] 是否有边框 * @cfg {String} [options.title] 悬浮提示信息 * @cfg {Boolean} [options.noWrap=false] 是否不换行,true表示不换行 * @cfg {Boolean} [options.verticalcenter=false] 是否垂直居中 * @cfg {Number} [options.fontsize] 文字大小 * @cfg {String} [options.color] 文字颜色 * @cfg {String} [options.decoration] 文字修饰 * @cfg {Number} [options.lineheight] 行间距 * @cfg {String} [options.textalign] 对齐方式 * @cfg {String} [options.fontfamily] 字体 * @cfg {Number} [options.fontweight] 文字粗细 * @cfg {String} [options.fontstyle] 字体风格 */ FR.Label = FR.extend(FR.BaseEditor, /**@class FR.Label*/{ _defaultConfig: function () { return $.extend(FR.Label.superclass._defaultConfig.apply(), { cls: 'fr-label', wrap: true, width: 120, height: 24 }); }, _init: function () { FR.Label.superclass._init.apply(this, arguments); // 控件属性 this.element.css('overflow', 'hidden'); var o = this.options; //<pre/> 文字层,用于丰富的字体样式 this.labelComp = $("<pre/>").addClass(o.cls); //<table/> 容器层,用于调整文字位置 this.textContainer = $('<table cellpadding="0" cellspacing="0"/>'); this.textContainer.css({ 'table-layout': 'fixed', width: this.options.width, height: this.options.height, '-webkit-text-size-adjust': 'none' //CSS3,文字大小不随设备(浏览器)来调整 }).append($('<tr/>').append($('<td/>').append(this.labelComp))).appendTo(this.element); var self = this; this.labelComp.click(function () { if (self.isEnabled()) { self.fireEvent(FR.Events.CLICK); } }); if (this._getEvents().click) { this.labelComp.addClass('fr-widget-click'); } if (o.fontsize) { this.labelComp.css('font-size', o.fontsize); } if (o.color) { this.labelComp.css('color', o.color); } if (o.decoration) { this.labelComp.css('text-decoration', o.decoration); } if (o.lineheight) { this.labelComp.css('line-height', o.lineheight + 'px'); } if (o.textalign) { this.labelComp.css('text-align', o.textalign); } if (o.fontfamily) { this.labelComp.css('font-family', o.fontfamily); } if (o.fontweight) { this.labelComp.css('font-weight', o.fontweight); } if (o.fontstyle) { this.labelComp.css('font-style', o.fontstyle); } if (o.border === true) { this.labelComp.css({ border: "1px solid #AAAAAA" }); } // 背景给整个控件区域,不是内容区域 if (o.widgetBackground) { //ie8低版本, 设置图片背景, 无效, position从父容器继承的, 不知道为啥无效, 再设置一下又好了 if(FR.Browser.isIE8Before()){ this.textContainer.css('position', 'absolute'); } FR.setBackground(this.element, o.widgetBackground, this.element.height()); } //表单处标题用到边框,为组件边框 if (o.borderStyle) { //为标题控件时不画边框阴影 this.element.css('border-style', o.borderStyle.type); this.element.css('border-color', o.borderStyle.color); this.element.css('border-width', o.borderStyle.width); this.element.css('border-bottom-width', 0); } if (o.width > -1) { this.element.css({ width: o.width }); } if (o.height > -1) { this.element.css({ height: o.height }); } if (o.title) { this.labelComp.attr('title', o.title); } if (o.id) { this.labelComp.attr('id', o.id); } if (o.wrap) { this.labelComp.css('word-wrap', 'break-word').css( 'white-space', 'pre-wrap'); } else { if (!FR.Browser.isIE()) { this.labelComp.css('white-space', 'pre'); } else { this.labelComp.css('white-space', 'pre-wrap').css( 'word-break', "keep-all"); } } if (o.value != null) { //标签的值改变事件在初始化的时候还是触发一下 this.setValue(o.value); } }, setValue: function (value) { var oldValue = this.getValue(); this.options.value = value; if (FR.Browser.isIE()) { this.labelComp[0].innerText = value || ''; } else { this.labelComp.text(value); } if (arguments[1] !== false) { this.fireEvent(FR.Events.CHANGE, value, oldValue); } }, getValue: function () { return this.options.value; }, doResize: function (give) { FR.Label.superclass.doResize.call(this, give); this.textContainer.css({ width: give.width, height: give.height }); this.labelComp.css({ width: give.width }); if (!this.options.verticalcenter) { this.labelComp.css('height', give.height + 'px'); } } }); $.shortcut("label", FR.Label); })(jQuery);