コード例 #1
0
ファイル: Env.php プロジェクト: infrajs/layer-env
 public static function init()
 {
     global $infra, $infrajs;
     Event::handler('Infrajs.oninit', function () {
         //Обработка envs, envtochild, myenvtochild, envframe
         External::add('myenv', 'config');
         //Обрабатывается также как config
         //external::add('env', '');//Никак не обрабатывается.. будет установлено только если нечего небыло
         External::add('envs', 'childs');
         //Объединяется так же как childs
         Run::runAddKeys('envs');
         //Теперь бегаем и по envs свойству
     });
 }
コード例 #2
0
ファイル: controller.php プロジェクト: infrajs/controller
    });
}, 'crumb');
Event::handler('Layer.oninit', function (&$layer) {
    if (empty($layer['childs'])) {
        return;
    }
    foreach ($layer['childs'] as $key => &$v) {
        Each::exec($v, function &(&$l) use($key) {
            $r = null;
            if (!empty($l['crumb'])) {
                return $r;
            }
            Crumb::set($l, 'crumb', $key);
            return $r;
        });
    }
}, 'crumb');
Event::handler('Layer.ischeck', function ($layer) {
    if (empty($layer['parent'])) {
        return;
    }
    if (!Event::fire('Layer.ischeck', $layer['parent'])) {
        return false;
    }
}, 'layer');
Event::handler('Layer.ischeck', function (&$layer) {
    if (!$layer['crumb']->is) {
        return false;
    }
}, 'crumb');
Crumb::init();
コード例 #3
0
ファイル: infra.php プロジェクト: infrajs/layer-subs
Event::handler('layer.oncheck', function (&$layer) {
    if (@(!$layer['parent'])) {
        return;
    }
    if (@$layer['parent']['subs']) {
        //forx бежим по свойствам объекта, как по массивам. Массивы могут быть вложенные
        //var_dump($layer['parent']['subs']);
        $key = Each::forx($layer['parent']['subs'], function (&$l, $key) use(&$layer) {
            //Такую пробежку у родителя сразу для всех детей делать не нельзя, так как external у детей ещё не сделан.
            if (Each::isEqual($layer, $l)) {
                return $key;
            }
            //Ага, текущей слой описан у родителя в subs. Любой return останавливает цикл и возвращает иначе key был бы undefined.
        });
        if ($key) {
            //Так так теперь предопределяем свойства
            //div не круче external.(но в external div не указывается) в  tpl и tplroot не круче
            $layer['div'] = $key;
            $layer['sub'] = true;
        }
    }
    if (@$layer['sub']) {
        //if(@!$layer['div'])$layer['div']=$key;
        if (@(!$layer['tpl'])) {
            $layer['tpl'] = $layer['parent']['tpl'];
        }
        if (@(!$layer['tplroot'])) {
            $layer['tplroot'] = $layer['div'];
        }
    }
}, 'subs:external,div');
コード例 #4
0
ファイル: Event.php プロジェクト: infrajs/event
 public static function one($name, $callback, $key = '', &$obj = null)
 {
     $ready = false;
     Event::handler($name, function () use(&$ready, $callback) {
         if ($ready) {
             return;
         }
         $ready = true;
         return $callback();
     }, $key, $obj);
 }
コード例 #5
0
ファイル: infra.php プロジェクト: infrajs/layer-seojson
<?php

namespace infrajs\layer\seojson;

use infrajs\path\Path;
use infrajs\controller\Layer;
use infrajs\controller\Tpl;
use infrajs\event\Event;
Event::handler('layer.onshow', function (&$layer) {
    if (Layer::pop($layer, 'onlyclient')) {
        return;
    }
    Seojson::check($layer);
}, 'seojson:tpl');
コード例 #6
0
});
$r = Event::fire('onfoo');
if ($r) {
    return Ans::err($ans, 'Самозависимость');
}
if ($test != '12') {
    return Ans::err($ans, 'Динамическое управление порядком');
}
Event::handler('ohoho', function () use(&$test) {
}, 'foo:bar');
Event::handler('ohoho', function () use(&$test) {
}, 'bar:foo');
$r = false;
try {
    ob_start();
    Event::fire('ohoho');
} catch (\Exception $e) {
    ob_end_clean();
    $r = true;
}
if (!$r) {
    return Ans::err($ans, 'Должно было сработать рекурсивное исключение');
}
Event::handler('ohoho2', function () use(&$test) {
    $test = 'asdf';
}, 'some:some');
Event::fire('ohoho2');
if ($test != 'asdf') {
    return Ans::err($ans, 'Сам себя не может заблокировать');
}
return Ans::ret($ans);
コード例 #7
0
ファイル: infra.php プロジェクト: infrajs/ascroll
<?php

namespace infrajs\ascroll;

use infrajs\event\Event;
use infrajs\view\View;
use infrajs\infra\Infra;
Event::handler('onjs', function () {
    View::js('-ascroll/ascroll.js');
    View::js('-ascroll/infra.js');
});
コード例 #8
0
ファイル: event-keys.php プロジェクト: infrajs/test-akiyatkin
$ans = array();
$ans['title'] = 'Проверка ключей событий';
$test = '';
Event::handler('ontestkeys', function () use(&$test) {
    $test .= 3;
}, 'some:test');
Event::handler('ontestkeys', function () use(&$test) {
    $test .= 1;
}, 'test');
Event::handler('ontestkeys', function () use(&$test) {
    $test .= 2;
}, 'test');
Event::fire('ontestkeys');
if ($test != '123') {
    return Ans::err($ans, 'Группа событий не сработало в нужном порядке ' . $test);
}
$test = '';
Event::handler('oh.ontestkeys', function () use(&$test) {
    $test .= 2;
});
Event::handler('oh.ontestkeys', function () use(&$test) {
    $test .= 3;
}, 'test');
Event::handler('oh.ontestkeys', function () use(&$test) {
    $test .= 1;
}, 'oh');
Event::fire('oh.ontestkeys');
if ($test != '123') {
    return Ans::err($ans, 'Имя класса - ключ по умаолчанию ' . $test);
}
return Ans::ret($ans);
コード例 #9
0
ファイル: infra.php プロジェクト: infrajs/layer-config
<?php

namespace infrajs\layer\config;

use infrajs\event\Event;
use infrajs\path\Path;
use infrajs\config\Config;
Config::get('controller');
Event::handler('Infrajs.oninit', function () {
    Lconfig::init();
});
Event::handler('layer.oninit', function (&$layer) {
    Lconfig::configinherit($layer);
}, 'config');
Event::handler('layer.oncheck', function (&$layer) {
    Lconfig::configtpl($layer);
}, 'config:external');
コード例 #10
0
ファイル: infra.php プロジェクト: infrajs/layer-tpl
}, 'tpl:div,is');
Event::handler('layer.isshow', function (&$layer) {
    //tpl depricated
    if (Layer::pop($layer, 'onlyclient')) {
        return;
    }
    return Tpl::jsoncheck($layer);
}, 'tpl:div,is');
Event::handler('layer.onshow', function (&$layer) {
    if (Layer::pop($layer, 'onlyclient')) {
        return;
    }
    $layer['html'] = Tpl::getHtml($layer);
}, 'tpl:div');
Event::handler('layer.onshow', function (&$layer) {
    //tpl
    if (Layer::pop($layer, 'onlyclient')) {
        return;
    }
    if (!empty($layer['div'])) {
        $div = $layer['div'];
    } else {
        $div = null;
    }
    $r = View::html($layer['html'], $div);
    if (!$r && (!isset($layer['divcheck']) || !$layer['divcheck'])) {
        echo 'Не найден div ' . $layer['div'] . ' infra_html<br>';
    }
    unset($layer['html']);
    //нефиг в памяти весеть
}, 'tpl:div');
コード例 #11
0
ファイル: infra.php プロジェクト: infrajs/layer-parsed
<?php

namespace infrajs\controller;

use infrajs\path\Path;
use infrajs\event\Event;
Event::handler('oninit', function () {
    ext\parsed::init();
});
コード例 #12
0
<?php

namespace infrajs\event;

use infrajs\ans\Ans;
if (!is_file('vendor/autoload.php')) {
    chdir('../../../../');
    require_once 'vendor/autoload.php';
}
$ans = array();
$ans['title'] = 'Последовательность событий';
$obj1 = array('id' => 'a');
$obj2 = array('id' => 'b');
Event::$classes['testlayer'] = function ($obj) {
    return $obj['id'];
};
$test = '';
Event::handler('testlayer.oncheck', function (&$obj) use(&$test) {
    $test .= '2:' . $obj['id'] . "#";
}, 'env:external');
Event::handler('testlayer.oncheck', function (&$obj) use(&$test) {
    $test .= '1:' . $obj['id'] . '-';
}, 'external');
Event::fire('testlayer.oncheck', $obj1);
Event::fire('testlayer.oncheck', $obj2);
Event::clear('testlayer');
if ($test !== '1:a-2:a#1:b-2:b#') {
    return Ans::err($ans, 'Некорректный порядок ' . $test);
}
return Ans::ret($ans);
コード例 #13
0
ファイル: tester.php プロジェクト: infrajs/event
    return Ans::err($ans, 'Некорректное выполнение ' . implode('', $test));
}
//Звонок в дверь
Event::fire('Звонок в дверь');
$res = null;
Event::handler('Звонок в дверь', function () use(&$res) {
    $res = true;
    return false;
}, 'Anton:Vika');
Event::handler('Звонок в дверь', function () use(&$res) {
    $res = false;
    return false;
}, 'Vika');
if (!$res) {
    return Ans::err($ans, 'Звонок в дверь не выполнен');
}
//Звонок по телефону
$res = null;
Event::handler('Звонок по телефону', function () use(&$res) {
    $res = false;
    return false;
}, 'Anton:Vika');
Event::handler('Звонок по телефону', function () use(&$res) {
    $res = true;
    return false;
}, 'Vika');
Event::fire('Звонок по телефону');
if (!$res) {
    return Ans::err($ans, 'Звонок по телефону не выполнен');
}
return Ans::ret($ans);
コード例 #14
0
$r=Event::fire('test.ontest', $obj);
if($test!='ab'||!$r) return Ans::err($ans,'Событие с объектом '.$test);
*/
$obj1 = array('id' => 1);
$obj2 = array('id' => 2);
$obj3 = array('id' => 3);
Event::$classes['layer'] = function ($obj) {
    return $obj['id'];
};
$test = '';
Event::handler('layer.ontest', function (&$obj) use(&$test, &$obj2) {
    $test .= $obj['id'];
    if ($obj['id'] == $obj2['id']) {
        if (!Each::isEqual($obj, $obj2)) {
            return;
        }
    }
    if ($obj['id'] === 1) {
        return false;
    }
    $test .= $obj['id'];
});
$r = Event::fire('layer.ontest', $obj2);
if (!$r) {
    return Ans::err($ans, 'Событие анализирую объект возвращает true');
}
$r = Event::fire('layer.ontest', $obj1);
if ($r) {
    return Ans::err($ans, 'Событие анализирую объект возвращает false');
}
$r = Event::fire('layer.ontest', $obj3);
if (!$r) {
コード例 #15
0
ファイル: infra.php プロジェクト: infrajs/layer-unick
<?php

namespace infrajs\controller;

use infrajs\path\Path;
use infrajs\event\Event;
Event::handler('oninit', function () {
    ext\unick::init();
});
Event::handler('layer.oninit:external', function (&$layer) {
    ext\unick::check($layer);
}, 'unick');
コード例 #16
0
ファイル: infra.php プロジェクト: infrajs/layer-css
<?php

namespace infrajs\layer\css;

use infrajs\controller\Layer;
use infrajs\event\Event;
Event::handler('layer.onshow', function (&$layer) {
    if (Layer::pop($layer, 'onlyclient')) {
        return;
    }
    Css::check($layer);
}, 'css');
コード例 #17
0
ファイル: infra.php プロジェクト: infrajs/activelink
<?php

namespace infrajs\activelink;

use infrajs\event\Event;
use infrajs\view\View;
Event::handler('onjs', function () {
    View::js('-activelink/activelink.js');
    View::js('-activelink/infra.js');
});
コード例 #18
0
ファイル: infra.php プロジェクト: infrajs/layer-env
<?php

namespace infrajs\layer\env;

use infrajs\path\Path;
use infrajs\event\Event;
use infrajs\controller\Layer;
use infrajs\config\Config;
Config::get('controller');
Event::handler('Infrajs.oninit', function () {
    Env::init();
    Layer::parsedAdd('envval');
});
Event::handler('layer.oncheck', function (&$layer) {
    Env::checkinit($layer);
}, 'env:config,external');
Event::handler('layer.oncheck', function (&$layer) {
    Env::envtochild($layer);
}, 'env:config,external');
Event::handler('layer.oncheck', function (&$layer) {
    Env::envframe($layer);
}, 'env:config,external');
Event::handler('layer.oncheck', function (&$layer) {
    Env::envframe2($layer);
}, 'env:config,external');
Event::handler('layer.oncheck', function (&$layer) {
    Env::envmytochild($layer);
}, 'env:config,external');
Event::handler('layer.isshow', function (&$layer) {
    return Env::check($layer);
}, 'env:counter,tpl,div,is');
コード例 #19
0
ファイル: infra.php プロジェクト: infrajs/layer-deep
<?php

use infrajs\event\Event;
Event::handler('layer.ischeck', function ($layer) {
    if (!isset($layer['deep'])) {
        return;
    }
    $deep = (int) $layer['deep'];
    if (!$deep) {
        return;
    }
    $state =& $layer['crumb'];
    while ($deep && $state->child) {
        $deep--;
        $state =& $state->child;
    }
    if ($deep) {
        $layer['is_save_branch'] = false;
        return false;
    }
}, 'deep:div');
コード例 #20
0
ファイル: infra.php プロジェクト: infrajs/layer-div
        return;
    }
    $layer['div'] = Template::parse(array($layer['divtpl']), $layer);
}, 'div:env,config,external');
Event::handler('layer.isshow', function (&$layer) {
    if (empty($layer['div']) && !empty($layer['parent'])) {
        return false;
    }
    //Такой слой игнорируется, события onshow не будет, но обработка пройдёт дальше у других дивов
    $start = false;
    if (Run::exec(Controller::$layers, function (&$l) use(&$layer, &$start) {
        //Пробежка не по слоям на ветке, а по всем слоям обрабатываемых после.. .то есть и на других ветках тоже
        if (!$start) {
            if (Each::isEqual($layer, $l)) {
                $start = true;
            }
            return;
        }
        if (@$l['div'] !== @$layer['div']) {
            return;
        }
        //ищим совпадение дивов впереди
        if (Controller::fire('layer.isshow', $l)) {
            $layer['is_save_branch'] = Layer::isParent($l, $layer);
            return true;
            //Слой который дальше показывается в томже диве найден
        }
    })) {
        return false;
    }
}, 'div:is');
コード例 #21
0
ファイル: infra.php プロジェクト: infrajs/layer-layers
<?php

namespace infrajs\controller;

use infrajs\path\Path;
use infrajs\event\Event;
Path::req('*controller/infra.php');
Event::handler('oninit', function () {
    ext\layers::init();
});