MediaWiki:Skin/Projekt:Adventure2/lib.js: Unterschied zwischen den Versionen

aus Kamelopedia, der wüsten Enzyklopädie
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 76: Zeile 76:
     $("#a2image area[href='#_D']").css('cursor','url("/images/6/62/Downarrow.png") 15 30, s-resize');
     $("#a2image area[href='#_D']").css('cursor','url("/images/6/62/Downarrow.png") 15 30, s-resize');


     $("#a2image area").droppable({
     $("#a2image img").droppable({
         drop: function (event, ui) {
         drop: function (event, ui) {
             a2.fireEvent("apply."+ui.draggable.attr("data.item")+"."+this.hash.substr(1));
            var target = a2.ui.getDroparea(event);
             a2.fireEvent("apply."+ui.draggable.attr("data.item")+"."+target.attr(hash).substr(1));
         }
         }
     });
     });

Version vom 7. Juli 2012, 17:32 Uhr

// A2lib

a2 = {};
a2.events = {};

a2.clearScope = function clearScope(sc) {
    delete a2.events[sc];
};

a2.registerEventHandler = function registerEventHandler(e) {
    var sc = (e.scope[0] == "page") ? ":page:" : e.scope[1];

    if (!a2.events[sc])
        a2.events[sc]={};

    for(var i=0; i<e.trigger.length; i++){
        var tr = e.trigger[i];
        if (!a2.events[sc][tr])
            a2.events[sc][tr] = [];
    
        a2.events[sc][tr].push(function(){
            a2.log("run", e.name);
            if (e.condition())
                e.action();
        });
    }
};

if (window.console && window.console.log)
    a2.log = function () { try {window.console.log;} catch (e) {} };
else
    a2.log = function () {return;};

a2.fireEvent = function fireEvent (event) {
    a2.log("Fire", event);
    var e = a2.events;
    for(i in e)
       try {
           for(j=0; j<e[i][event].length; j++){
               a2.log("Event", i, event, j, e[i][event][j]);
               e[i][event][j]();
           }
       } catch (e) {
           a2.log("Event Exception", e);
       }
};

a2.makeUrl = function makeUrl(p){
    var script = mw.config.get("wgScript");
    var page = mw.config.get("wgPageName");
    return [script, page, p].join("/");
}

a2.loadPage = function loadPage(n){
    a2.clearScope(":page:");
    a2.fireEvent("leave."+a2.cpage);
    response = $.ajax({
        url: a2.makeUrl(parseInt(n)+"?action=render"),
        async: false
    });
 
    a2.cpage = n;
    $content = $(response.responseText)
    $content.append('<scr'+'ipt type="text/javascript">setTimeout(function(){a2.fireEvent("enter."+a2.cpage);}, 100);</scr'+'ipt>');
 
    $("#a2image").empty().append($content);
    console.log($("#a2image a"));

    $("#a2image area").click(function (ev) {
        a2.fireEvent("click."+ev.target.hash.substr(1));
        return false;
    });
    $("#a2image area[href='#_L']").css('cursor','url("/images/4/41/Leftarrow.png") 0 15, w-resize');
    $("#a2image area[href='#_R']").css('cursor','url("/images/b/b9/Rightarrow.png") 30 15, e-resize');
    $("#a2image area[href='#_U']").css('cursor','url("/images/3/37/Uparrow.png") 15 0, n-resize');
    $("#a2image area[href='#_D']").css('cursor','url("/images/6/62/Downarrow.png") 15 30, s-resize');

    $("#a2image img").droppable({
        drop: function (event, ui) {
            var target = a2.ui.getDroparea(event);
            a2.fireEvent("apply."+ui.draggable.attr("data.item")+"."+target.attr(hash).substr(1));
        }
    });


 

};

a2.util = {
    print: function (s) { 
        $("#a2text").text(s);
    },
    goto: function (p) {
        a2.loadPage(p);
    }
};


a2.items = {};
a2.loadItem = function loadItem(n){
    a2.log("load", n);
    a2.clearScope(n);
    response = $.ajax({
        url: a2.makeUrl("item/"+n+"?action=render"),
        async: false
    });
    a2.items[n] = response.responseText;
    a2.log(a2.items);
    a2.renderItems();
};

a2.renderItems = function renderItems(){
    $("#a2items").empty()
    for (item in a2.items){
        $fl=$('<div style="float:left;" class="a2item" />');
        $fl.append(a2.items[item]);
        $("#a2items").append($fl);
        $fl.draggable({
            cursorAt: {top: -5, left: -5},
            revert: true,
            zIndex: 10000,
            start: function(event, ui) {
                ui.helper.bind("click.prevent", function(event) { event.preventDefault(); });
            },
            stop: function(event, ui) {
                setTimeout(function(){ui.helper.unbind("click.prevent");}, 300);
            }
        });
        $fl.click(function () {a2.fireEvent("activate."+item);});
        $fl.attr("data.item",item);
        $fl.droppable({
            drop: function (event, ui) {
                a2.fireEvent("combine."+ui.draggable.attr("data.item")+"."+$(this).attr("data.item"));
                return false;
            }
        });
        a2.log($("#a2items"))
    }
}

a2.util.add = function add (i) {
    a2.loadItem(i);
};
a2.util.remove = function remove(i) {
    delete a2.items[i]; 
    delete a2.events[i];
    a2.renderItems();
};

a2.ui = {};
a2.ui.getAreaBox = function getAreaBox (area) {
    $area = $(area);
    shape = $area.attr("shape");
    p = $area.attr("coords");
    p = p.split(",")
    p = $.map(p, function(x){ return parseInt(x);});

    if (shape == "circle"){
        var x1 = p[0] - p[2];
        var y1 = p[1] - p[2];
        var x2 = p[0] + p[2];
        var y2 = p[1] + p[2];
    } else {
        var x1 = Infinity;
        var y1 = Infinity;
        var x2 = -Infinity;
        var y2 = -Infinity;
        for(var i=0; i<p.length; i=i+2){
            if (p[i] < x1) x1 = p[i];
            if (p[i+1] < y1) y1 = p[i+1];
            if (p[i] > x2) x2 = p[i];
            if (p[i+1] > y2) y2 = p[i+1];
        }
    }

    return {x1:x1, y1:y1, x2:x2, y2:y2};
};

a2.ui.getDroparea = function getDroparea (e) {
    $areas = $("area");
    return $areas.filter(function () {
        var b = a2.ui.getAreaBox(this);
        var s = 25; // half itemsize

        var xm = (b.x1 + b.x2) / 2;
        var ym = (b.y1 + b.y2) / 2;

        return (b.x1 < e.layerX && e.layerX < b.x2 &&
                b.y1 < e.layerY && e.layerY < b.y2) ||
               (e.layerX - s < xm && xm < e.layerX + s &&
                e.layerY - s < ym && ym < e.layerY + s);            
    }).first();
}