telegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchat
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
5.9 KiB
209 lines
5.9 KiB
/** |
|
* Simple helper class for easily creating image components. This renders an image tag to |
|
* the DOM with the configured src. |
|
* |
|
* {@img Ext.Img/Ext.Img.png Ext.Img component} |
|
* |
|
* ## Example usage: |
|
* |
|
* var changingImage = Ext.create('Ext.Img', { |
|
* src: 'http://www.sencha.com/img/20110215-feat-html5.png', |
|
* width: 184, |
|
* height: 90, |
|
* renderTo: Ext.getBody() |
|
* }); |
|
* |
|
* // change the src of the image programmatically |
|
* changingImage.setSrc('http://www.sencha.com/img/20110215-feat-perf.png'); |
|
* |
|
* By default, only an img element is rendered and that is this component's primary |
|
* {@link Ext.Component#getEl element}. If the {@link Ext.Component#autoEl} property |
|
* is other than 'img' (the default), the a child img element will be added to the primary |
|
* element. This can be used to create a wrapper element around the img. |
|
* |
|
* ## Wrapping the img in a div: |
|
* |
|
* var wrappedImage = Ext.create('Ext.Img', { |
|
* src: 'http://www.sencha.com/img/20110215-feat-html5.png', |
|
* autoEl: 'div', // wrap in a div |
|
* renderTo: Ext.getBody() |
|
* }); |
|
* |
|
* ## Image Dimensions |
|
* |
|
* You should include height and width dimensions for any image owned by a parent |
|
* container. By omitting dimensions, an owning container will not know how to |
|
* size and position the image in the initial layout. |
|
*/ |
|
Ext.define('Ext.Img', { |
|
extend: 'Ext.Component', |
|
alias: ['widget.image', 'widget.imagecomponent'], |
|
|
|
autoEl: 'img', |
|
|
|
baseCls: Ext.baseCSSPrefix + 'img', |
|
|
|
/** |
|
* @cfg {String} src |
|
* The image src. |
|
*/ |
|
src: '', |
|
|
|
/** |
|
* @cfg {String} alt |
|
* The descriptive text for non-visual UI description. |
|
*/ |
|
alt: '', |
|
|
|
/** |
|
* @cfg {String} title |
|
* Specifies addtional information about the image. |
|
*/ |
|
title: '', |
|
|
|
/** |
|
* @cfg {String} imgCls |
|
* Optional CSS classes to add to the img element. |
|
*/ |
|
imgCls: '', |
|
|
|
/** |
|
* @cfg {Number/String} glyph |
|
* A numeric unicode character code to serve as the image. If this option is used |
|
* The image will be rendered using a div with innerHTML set to the html entity |
|
* for the given character code. The default font-family for glyphs can be set |
|
* globally using {@link Ext#setGlyphFontFamily Ext.setGlyphFontFamily()}. Alternatively, |
|
* this config option accepts a string with the charCode and font-family separated by |
|
* the `@` symbol. For example '65@My Font Family'. |
|
*/ |
|
|
|
ariaRole: 'img', |
|
|
|
maskOnDisable: false, |
|
|
|
initComponent: function() { |
|
if (this.glyph) { |
|
this.autoEl = 'div'; |
|
} |
|
this.callParent(); |
|
}, |
|
|
|
getElConfig: function() { |
|
var me = this, |
|
autoEl = me.autoEl, |
|
config = me.callParent(), |
|
glyphFontFamily = Ext._glyphFontFamily, |
|
glyph = me.glyph, |
|
img, glyphParts; |
|
|
|
// It is sometimes helpful (like in a panel header icon) to have the img wrapped |
|
// by a div. If our autoEl is not 'img' then we just add an img child to the el. |
|
if (autoEl === 'img' || (Ext.isObject(autoEl) && autoEl.tag === 'img')) { |
|
img = config; |
|
} else if (me.glyph) { |
|
if (typeof glyph === 'string') { |
|
glyphParts = glyph.split('@'); |
|
glyph = glyphParts[0]; |
|
glyphFontFamily = glyphParts[1] || glyphFontFamily; |
|
} |
|
config.html = '&#' + glyph + ';'; |
|
if (glyphFontFamily) { |
|
config.style = config.style || {}; |
|
config.style.fontFamily = glyphFontFamily; |
|
} |
|
} else { |
|
config.cn = [img = { |
|
tag: 'img', |
|
role: me.ariaRole, |
|
id: me.id + '-img' |
|
}]; |
|
} |
|
|
|
if (img) { |
|
if (me.imgCls) { |
|
img.cls = (img.cls ? img.cls + ' ' : '') + me.imgCls; |
|
} |
|
|
|
img.src = me.src || Ext.BLANK_IMAGE_URL; |
|
} |
|
|
|
if (me.alt) { |
|
(img || config).alt = me.alt; |
|
} |
|
if (me.title) { |
|
(img || config).title = me.title; |
|
} |
|
|
|
return config; |
|
}, |
|
|
|
onRender: function () { |
|
var me = this, |
|
autoEl = me.autoEl, |
|
el; |
|
|
|
me.callParent(arguments); |
|
|
|
el = me.el; |
|
|
|
if (autoEl === 'img' || (Ext.isObject(autoEl) && autoEl.tag === 'img')) { |
|
me.imgEl = el; |
|
} else { |
|
me.imgEl = el.getById(me.id + '-img'); |
|
} |
|
}, |
|
|
|
onDestroy: function () { |
|
var me = this, |
|
imgEl = me.imgEl; |
|
|
|
// Only clean up when the img is a child, otherwise it will get handled |
|
// by the element destruction in the parent |
|
if (imgEl && me.el !== imgEl) { |
|
imgEl.destroy(); |
|
} |
|
this.imgEl = null; |
|
this.callParent(); |
|
}, |
|
|
|
/** |
|
* Updates the {@link #src} of the image. |
|
* @param {String} src |
|
*/ |
|
setSrc: function(src) { |
|
var me = this, |
|
imgEl = me.imgEl; |
|
|
|
me.src = src; |
|
|
|
if (imgEl) { |
|
imgEl.dom.src = src || Ext.BLANK_IMAGE_URL; |
|
} |
|
}, |
|
|
|
/** |
|
* Updates the {@link #glyph} of the image. |
|
* @param {Number/String} glyph |
|
*/ |
|
setGlyph: function(glyph) { |
|
var me = this, |
|
glyphFontFamily = Ext._glyphFontFamily, |
|
old = me.glyph, |
|
el = me.el, |
|
glyphParts; |
|
|
|
me.glyph = glyph; |
|
if (me.rendered && glyph !== old) { |
|
if (typeof glyph === 'string') { |
|
glyphParts = glyph.split('@'); |
|
glyph = glyphParts[0]; |
|
glyphFontFamily = glyphParts[1] || glyphFontFamily; |
|
} |
|
|
|
el.dom.innerHTML = '&#' + glyph + ';'; |
|
if (glyphFontFamily) { |
|
el.setStyle('font-family', glyphFontFamily); |
|
} |
|
} |
|
} |
|
}); |