DrawingBoard.Control.Size = DrawingBoard.Control.extend({ name: 'size', defaults: { type: "auto", dropdownValues: [1, 3, 6, 10, 20, 30, 40, 50] }, types: ['dropdown', 'range'], initialize: function() { if (this.opts.type == "auto") this.opts.type = this._iHasRangeInput() ? 'range' : 'dropdown'; var tpl = $.inArray(this.opts.type, this.types) > -1 ? this['_' + this.opts.type + 'Template']() : false; if (!tpl) return false; this.val = this.board.opts.size; this.$el.append( $( tpl ) ); this.$el.attr('data-drawing-board-type', this.opts.type); this.updateView(); var that = this; if (this.opts.type == "range") { this.$el.on('change', '.drawing-board-control-size-range-input', function(e) { that.val = $(this).val(); that.updateView(); that.board.ev.trigger('size:changed', that.val); e.preventDefault(); }); } if (this.opts.type == "dropdown") { this.$el.on('click', '.drawing-board-control-size-dropdown-current', $.proxy(function(e) { this.$el.find('.drawing-board-control-size-dropdown').toggleClass('drawing-board-utils-hidden'); }, this)); this.$el.on('click', '[data-size]', function(e) { that.val = parseInt($(this).attr('data-size'), 0); that.updateView(); that.board.ev.trigger('size:changed', that.val); e.preventDefault(); }); } }, _rangeTemplate: function() { // var tpl = '
' + // '' + // '' + // '
'; }, _dropdownTemplate: function() { var tpl = '
' + '
' + '
'; return tpl; }, onBoardReset: function(opts) { this.updateView(); }, updateView: function() { var val = this.val; this.board.ctx.lineWidth = val; this.$el.find('.drawing-board-control-size-range-current, .drawing-board-control-size-dropdown-current span').css({ width: val + 'px', height: val + 'px', borderRadius: val + 'px', marginLeft: -1*val/2 + 'px', marginTop: -1*val/2 + 'px' }); this.$el.find('.drawing-board-control-inner').attr('title', val); if (this.opts.type == 'dropdown') { var closest = null; $.each(this.opts.dropdownValues, function(i, size) { if (closest === null || Math.abs(size - val) < Math.abs(closest - val)) closest = size; }); this.$el.find('.drawing-board-control-size-dropdown').addClass('drawing-board-utils-hidden'); } }, _iHasRangeInput: function() { var inputElem = document.createElement('input'), smile = ':)', docElement = document.documentElement, inputElemType = 'range', available; inputElem.setAttribute('type', inputElemType); available = inputElem.type !== 'text'; inputElem.value = smile; inputElem.style.cssText = 'position:absolute;visibility:hidden;'; if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) { docElement.appendChild(inputElem); defaultView = document.defaultView; available = defaultView.getComputedStyle && defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' && (inputElem.offsetHeight !== 0); docElement.removeChild(inputElem); } return !!available; } });