如何在moodle中覆盖YUI函数?

时间:2014-11-07 20:55:28

标签: yui moodle

我需要覆盖moodle中的M.util.init_block_hider函数。原因是用我的自定义覆盖块。我可以在函数中看到一段代码,如下所示:

Y.extend(blockhider, Y.Base, blockhider.prototype, {
    NAME : 'blockhider',
    ATTRS : {
                id : {},
                preference : {},
                iconVisible : {
                    value : M.util.image_url('t/switch_minus', 'moodle')
                },
                iconHidden : {
                    value : M.util.image_url('t/switch_plus', 'moodle')
                },
                block : {
                    setter : function(node) {
                        return Y.one(node);
                    }
                }
            }
        });

其中说明了图像的网址。我想重用此函数并覆盖我的主题中的url,以便只能替换块图标。欢迎任何想法和想法。 这是/lib/javascript-static.js文件中的完整函数:

M.util.init_block_hider = function(Y, config) {
  Y.use('base', 'node', function(Y) {
    M.util.block_hider = M.util.block_hider || (function(){
        var blockhider = function() {
            blockhider.superclass.constructor.apply(this, arguments);
        };
        blockhider.prototype = {
            initializer : function(config) {
                this.set('block', '#'+this.get('id'));
                var b = this.get('block'),
                    t = b.one('.title'),
                    a = null;
                if (t && (a = t.one('.block_action'))) {
                    var hide = Y.Node.create('<img class="block-hider-hide" tabindex="0" alt="'+config.tooltipVisible+'" title="'+config.tooltipVisible+'" />');
                    hide.setAttribute('src', this.get('iconVisible')).on('click', this.updateState, this, true);
                    hide.on('keypress', this.updateStateKey, this, true);
                    var show = Y.Node.create('<img class="block-hider-show" tabindex="0" alt="'+config.tooltipHidden+'" title="'+config.tooltipHidden+'" />');
                    show.setAttribute('src', this.get('iconHidden')).on('click', this.updateState, this, false);
                    show.on('keypress', this.updateStateKey, this, false);
                    a.insert(show, 0).insert(hide, 0);
                }
            },
            updateState : function(e, hide) {
                M.util.set_user_preference(this.get('preference'), hide);
                if (hide) {
                    this.get('block').addClass('hidden');
                } else {
                    this.get('block').removeClass('hidden');
                }
            },
            updateStateKey : function(e, hide) {
                if (e.keyCode == 13) { //allow hide/show via enter key
                    this.updateState(this, hide);
                }
            }
        };
        Y.extend(blockhider, Y.Base, blockhider.prototype, {
            NAME : 'blockhider',
            ATTRS : {
                id : {},
                preference : {},
                iconVisible : {
                    value : M.util.image_url('t/switch_minus', 'moodle')
                },
                iconHidden : {
                    value : M.util.image_url('t/switch_plus', 'moodle')
                },
                block : {
                    setter : function(node) {
                        return Y.one(node);
                    }
                }
            }
        });
        return blockhider;
    })();
    new M.util.block_hider(config);
});
};

1 个答案:

答案 0 :(得分:0)

这应该有效...然后你只需设置新的vis / invis图标并调用this.get('iconVisible')它就应该链接。

Y.extend(blockhider, Y.Base, blockhider.prototype, {
    NAME : 'blockhider',
    ATTRS : {
                id : {},
                preference : {},
                iconVisible : {
                    value : M.util.image_url(this.get('visIcon'), 'moodle')
                },
                iconHidden : {
                    value : M.util.image_url(this.get('invisIcon'), 'moodle')
                },
                visIcon:{value: 't/switch_plus'},
                invisIcon:{value: 't/switch_minus'}
                block : {
                    setter : function(node) {
                        return Y.one(node);
                    }
                }
            }
        });