123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- (function (){
- var browser = baidu.editor.browser,
- domUtils = baidu.editor.dom.domUtils,
- uiUtils = baidu.editor.ui.uiUtils;
-
- var TPL_STATEFUL = 'onmousedown="$$.Stateful_onMouseDown(event, this);"' +
- ' onmouseup="$$.Stateful_onMouseUp(event, this);"' +
- ( browser.ie ? (
- ' onmouseenter="$$.Stateful_onMouseEnter(event, this);"' +
- ' onmouseleave="$$.Stateful_onMouseLeave(event, this);"' )
- : (
- ' onmouseover="$$.Stateful_onMouseOver(event, this);"' +
- ' onmouseout="$$.Stateful_onMouseOut(event, this);"' ));
-
- baidu.editor.ui.Stateful = {
- alwalysHoverable: false,
- target:null,//目标元素和this指向dom不一样
- Stateful_init: function (){
- this._Stateful_dGetHtmlTpl = this.getHtmlTpl;
- this.getHtmlTpl = this.Stateful_getHtmlTpl;
- },
- Stateful_getHtmlTpl: function (){
- var tpl = this._Stateful_dGetHtmlTpl();
- // 使用function避免$转义
- return tpl.replace(/stateful/g, function (){ return TPL_STATEFUL; });
- },
- Stateful_onMouseEnter: function (evt, el){
- this.target=el;
- if (!this.isDisabled() || this.alwalysHoverable) {
- this.addState('hover');
- this.fireEvent('over');
- }
- },
- Stateful_onMouseLeave: function (evt, el){
- if (!this.isDisabled() || this.alwalysHoverable) {
- this.removeState('hover');
- this.removeState('active');
- this.fireEvent('out');
- }
- },
- Stateful_onMouseOver: function (evt, el){
- var rel = evt.relatedTarget;
- if (!uiUtils.contains(el, rel) && el !== rel) {
- this.Stateful_onMouseEnter(evt, el);
- }
- },
- Stateful_onMouseOut: function (evt, el){
- var rel = evt.relatedTarget;
- if (!uiUtils.contains(el, rel) && el !== rel) {
- this.Stateful_onMouseLeave(evt, el);
- }
- },
- Stateful_onMouseDown: function (evt, el){
- if (!this.isDisabled()) {
- this.addState('active');
- }
- },
- Stateful_onMouseUp: function (evt, el){
- if (!this.isDisabled()) {
- this.removeState('active');
- }
- },
- Stateful_postRender: function (){
- if (this.disabled && !this.hasState('disabled')) {
- this.addState('disabled');
- }
- },
- hasState: function (state){
- return domUtils.hasClass(this.getStateDom(), 'edui-state-' + state);
- },
- addState: function (state){
- if (!this.hasState(state)) {
- this.getStateDom().className += ' edui-state-' + state;
- }
- },
- removeState: function (state){
- if (this.hasState(state)) {
- domUtils.removeClasses(this.getStateDom(), ['edui-state-' + state]);
- }
- },
- getStateDom: function (){
- return this.getDom('state');
- },
- isChecked: function (){
- return this.hasState('checked');
- },
- setChecked: function (checked){
- if (!this.isDisabled() && checked) {
- this.addState('checked');
- } else {
- this.removeState('checked');
- }
- },
- isDisabled: function (){
- return this.hasState('disabled');
- },
- setDisabled: function (disabled){
- if (disabled) {
- this.removeState('hover');
- this.removeState('checked');
- this.removeState('active');
- this.addState('disabled');
- } else {
- this.removeState('disabled');
- }
- }
- };
- })();
|