| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- define(function(require, exports, module) {
- var kity = require('../core/kity');
- var keymap = require('../core/keymap');
- var Module = require('../core/module');
- var Command = require('../core/command');
- Module.register('ImageViewer', function() {
- function createEl(name, classNames, children) {
- var el = document.createElement(name);
- addClass(el, classNames);
- children && children.length && children.forEach(function (child) {
- el.appendChild(child);
- });
- return el;
- }
- function on(el, event, handler) {
- el.addEventListener(event, handler);
- }
- function addClass(el, classNames) {
- classNames && classNames.split(' ').forEach(function (className) {
- el.classList.add(className);
- });
- }
- function removeClass(el, classNames) {
- classNames && classNames.split(' ').forEach(function (className) {
- el.classList.remove(className);
- });
- }
- var ImageViewer = kity.createClass('ImageViewer', {
- constructor: function () {
- var btnClose = createEl('button', 'km-image-viewer-btn km-image-viewer-close');
- var btnSource = createEl('button', 'km-image-viewer-btn km-image-viewer-source');
- var image = this.image = createEl('img');
- var toolbar = this.toolbar = createEl('div', 'km-image-viewer-toolbar', [btnSource, btnClose]);
- var container = createEl('div', 'km-image-viewer-container', [image]);
- var viewer = this.viewer = createEl('div', 'km-image-viewer', [toolbar, container]);
- this.hotkeyHandler = this.hotkeyHandler.bind(this)
- on(btnClose, 'click', this.close.bind(this));
- on(btnSource, 'click', this.viewSource.bind(this));
- on(image, 'click', this.zoomImage.bind(this));
- on(viewer, 'contextmenu', this.toggleToolbar.bind(this));
- on(document, 'keydown', this.hotkeyHandler);
- },
- dispose: function () {
- this.close();
- document.removeEventListener('remove', this.hotkeyHandler);
- },
- hotkeyHandler: function (e) {
- if (!this.actived) {
- return;
- }
- if (e.keyCode === keymap['esc']) {
- this.close();
- }
- },
- toggleToolbar: function (e) {
- e && e.preventDefault();
- this.toolbar.classList.toggle('hidden');
- },
- zoomImage: function (restore) {
- var image = this.image;
- if (typeof restore === 'boolean') {
- restore && addClass(image, 'limited');
- }
- else {
- image.classList.toggle('limited');
- }
- },
- viewSource: function (src) {
- window.open(this.image.src);
- },
- open: function (src) {
- var input = document.querySelector('input');
- if (input) {
- input.focus();
- input.blur();
- }
- this.image.src = src;
- this.zoomImage(true);
- document.body.appendChild(this.viewer);
- this.actived = true;
- },
- close: function () {
- this.image.src = '';
- document.body.removeChild(this.viewer);
- this.actived = false;
- }
- });
- return {
- init: function() {
- this.viewer = new ImageViewer();
- },
- events: {
- 'normal.dblclick': function(e) {
- var shape = e.kityEvent.targetShape
- if (shape.__KityClassName === 'Image' && shape.url) {
- this.viewer.open(shape.url);
- }
- }
- }
- };
- });
- });
|