pointvec/desktop/sources/scripts/picker.js

101 lines
2.3 KiB
JavaScript
Raw Normal View History

2018-10-03 23:27:40 +00:00
'use strict'
2018-08-28 04:34:17 +00:00
2018-10-04 23:52:17 +00:00
DOTGRID.Picker = function() {
2018-10-03 23:27:40 +00:00
this.memory = ''
this.el = document.createElement('div')
this.el.id = 'picker'
this.is_active = false
this.input = document.createElement('input')
this.input.id = 'picker_input'
2018-03-07 00:50:41 +00:00
2018-09-12 03:27:01 +00:00
this.el.appendChild(this.input)
2018-10-03 23:27:40 +00:00
this.start = function () {
if (this.is_active) { return }
2018-09-17 01:48:39 +00:00
2018-10-03 23:27:40 +00:00
this.is_active = true
2018-09-17 01:48:39 +00:00
2018-10-04 23:52:17 +00:00
this.input.setAttribute('placeholder', `${DOTGRID.tool.style().color.replace('#', '').trim()}`)
2018-10-03 23:27:40 +00:00
this.input.setAttribute('maxlength', 6)
2018-05-06 23:15:23 +00:00
2018-10-04 23:52:17 +00:00
DOTGRID.interface.el.className = 'picker'
2018-09-12 03:27:01 +00:00
this.input.focus()
2018-10-03 23:27:40 +00:00
this.input.value = ''
2018-08-17 20:04:54 +00:00
2018-10-04 23:52:17 +00:00
try { DOTGRID.controller.set('picker') } catch (err) { }
2018-03-07 00:50:41 +00:00
}
2018-10-03 23:27:40 +00:00
this.update = function () {
if (!this.is_active) { return }
if (!is_color(this.input.value)) { return }
2018-09-12 03:27:01 +00:00
2018-10-03 23:27:40 +00:00
const hex = `#${this.input.value}`
2018-03-21 07:10:09 +00:00
2018-10-03 23:27:40 +00:00
document.getElementById('option_color').children[0].style.fill = hex
document.getElementById('option_color').children[0].style.stroke = hex
2018-09-17 01:48:39 +00:00
}
2018-05-06 23:05:25 +00:00
2018-10-03 23:27:40 +00:00
this.stop = function () {
if (!this.is_active) { return }
2018-08-17 20:04:54 +00:00
2018-10-03 23:27:40 +00:00
this.is_active = false
2018-10-04 23:52:17 +00:00
DOTGRID.interface.el.className = ''
2018-09-12 03:27:01 +00:00
this.input.blur()
2018-10-03 23:27:40 +00:00
this.input.value = ''
2018-07-26 08:40:06 +00:00
2018-10-04 23:52:17 +00:00
try { DOTGRID.controller.set() } catch (err) { console.log('No controller') }
2018-05-06 23:05:25 +00:00
2018-10-04 23:52:17 +00:00
setTimeout(() => { DOTGRID.interface.update(true); DOTGRID.guide.update() }, 250)
2018-03-07 00:50:41 +00:00
}
2018-10-03 23:27:40 +00:00
this.validate = function () {
if (!is_color(this.input.value)) { return }
2018-03-07 00:50:41 +00:00
2018-10-03 23:27:40 +00:00
const hex = `#${this.input.value}`
2018-09-12 03:27:01 +00:00
2018-10-04 23:52:17 +00:00
DOTGRID.tool.style().color = hex
DOTGRID.tool.style().fill = DOTGRID.tool.style().fill != 'none' ? hex : 'none'
2018-09-17 01:48:39 +00:00
2018-10-03 23:27:40 +00:00
this.stop()
2018-03-07 00:50:41 +00:00
}
2018-10-03 23:27:40 +00:00
this.listen = function (e, is_down = false) {
if (is_down && !is_color_char(e.key)) {
e.preventDefault()
return
2018-09-14 03:03:12 +00:00
}
2018-10-03 23:27:40 +00:00
if (e.key == 'Enter') {
this.validate()
e.preventDefault()
return
2018-03-07 00:50:41 +00:00
}
2018-10-03 23:27:40 +00:00
if (e.key == 'Escape') {
this.stop()
e.preventDefault()
return
2018-08-28 21:41:41 +00:00
}
2018-10-03 23:27:40 +00:00
this.update()
2018-03-07 00:50:41 +00:00
}
2018-10-03 23:27:40 +00:00
function is_color (val) {
if (val.length != 3 && val.length != 6) {
2018-05-06 23:05:25 +00:00
return false
}
2018-10-03 23:27:40 +00:00
const re = /[0-9A-Fa-f]/g
2018-03-21 07:10:09 +00:00
return re.test(val)
}
2018-10-03 23:27:40 +00:00
function is_color_char (val) {
const re = /[0-9A-Fa-f]/g
2018-09-14 03:03:12 +00:00
return re.test(val)
}
2018-10-04 23:52:17 +00:00
this.input.onkeydown = function (event) { DOTGRID.picker.listen(event, true) }
this.input.onkeyup = function (event) { DOTGRID.picker.listen(event) }
2018-10-03 23:27:40 +00:00
}