Hi dmitry

the dev mailing-list for the development of Pharo.

Stef

Le 4/10/16 à 19:01, CodeDmitry a écrit :
I made this two-file demo earlier today, it was really sloppy but I think
it's cute enough to share.

:>

index.html:
<!DOCTYPE html>
   <head>
</head>
   <body>
   </body>
</html>

autoexec.js:
(() => {
     'use strict';

     /* global state hooks */
     (() => {
         /**
          * sometimes we want to hook events to only get triggered once,
          * especially when alternating events
          */
         if (!('once' in EventTarget.prototype)) {
             EventTarget.prototype.once = function(eventName, callback) {
                 var wrappedCallback = function(e) {
                     callback(e);
                     this.removeEventListener(eventName, wrappedCallback);
                 };
this.addEventListener(eventName, wrappedCallback);
             };
         }
     })();
/**
      * avoid repeating myself by binding javascript object notation to css
via get/set directly.
      *
      *
      */
     const json_bind_css_property = function(object, aliasName, realName) {
         Object.defineProperty(object, aliasName, {
             get: function() {
                 return this.html.style[realName];
             },
             set: function(setValue) {
                 this.html.style[realName] = setValue;
             }
         });
     };

     const drop_handler = function(e) {
         console.log('unselecting.');
if (window.selectedMorph != null) {
             window.selectedMorph = null;
         }
     };
const css_px_to_number = (text) => {
         return Number(text.match(/\d+/));
     }
const drag_handler = function(e) {
         const start_x = window.startX;
         const start_y = window.startY;
         const mouse_x = e.clientX;
         const mouse_y = e.clientY;
         const selectedMorph = window.selectedMorph;
         const offset_x = mouse_x - start_x;
         const offset_y = mouse_y - start_y;
         const morph_start_x = window.morph_start_x;
         const morph_start_y = window.morph_start_y;
console.log({
             x1: start_x,
             y1: start_y,
             x2: mouse_x,
             y2: mouse_y
         });
selectedMorph.left = (css_px_to_number(morph_start_x) + offset_x) +
'px';
         selectedMorph.top = (css_px_to_number(morph_start_y) + offset_y) +
'px';
     };
const Morph = function() {
         var self = this;
         this.html = document.createElement('div');
         this.html.style.position = 'absolute';
         this.left = 0;
         this.top = 0;
         this.html.style.display = 'inline-block';
         this.width = '50px';
         this.height = '40px';
         let anticipate_drop = null;
         let anticipate_click = null;
anticipate_drop = function(e) {
             e.stopPropagation();
             window.selectedMorph = null;
             window.removeEventListener('mousemove', drag_handler);
             self.html.once('click', anticipate_click);
             console.log('drop');
         };
anticipate_click = function(e) {
             e.stopPropagation();
             window.morph_start_x = self.left;
             window.morph_start_y = self.top;
             window.startX = e.clientX;
             window.startY = e.clientY;
             window.selectedMorph = self;
/* once clicked, we want to have the window unselect if we click
on it */
             window.once('click', anticipate_drop);
window.addEventListener('mousemove', drag_handler);
         };
/* anticipate the click of this Morph. */
         this.html.once('click', anticipate_click);

         return this;
     };
Morph.prototype.openInWorld = function() {
         document.body.appendChild(this.html);
     };
Morph.prototype.delete = function() {
         var ref = this.get;
         ref.parentElement.removeChild(ref);
     };
Morph.new = function() {
         return new Morph;
     };

     json_bind_css_property(Morph.prototype, 'color', 'backgroundColor');
     json_bind_css_property(Morph.prototype, 'width', 'width');
     json_bind_css_property(Morph.prototype, 'height', 'height');
     json_bind_css_property(Morph.prototype, 'left', 'left');
     json_bind_css_property(Morph.prototype, 'top', 'top');
window.testMe = function() {
         var joe = new Morph;
         joe.color = 'blue';
         joe.openInWorld();
     };
window.Morph = Morph;
})();



--
View this message in context: 
http://forum.world.st/Fun-with-Morphs-in-JavaScript-tp4918046.html
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.




Reply via email to