From eac6c5ec5db90cf4151b72b373bd5f03a456e8e7 Mon Sep 17 00:00:00 2001 From: Pavel Belyaev Date: Sun, 25 Jul 2021 19:19:18 +0500 Subject: [PATCH] V0.1.1 --- CLASSES/core/LE_PHONE.php | 53 ++++++ CLASSES/core/LE_TBL.php | 6 + CLASSES/core/TODO/LE_MAIL.php | 117 ++++++++++++ CLASSES/core/TODO/LE_RABBITMQ.php | 51 ++++++ CLASSES/core/{ => TODO}/LE_SQLITE.php | 0 CLASSES/core/TODO/LE_VK.php | 212 ++++++++++++++++++++++ CLASSES/core/TODO/LE_YC.php | 49 +++++ MODULES/admin/test.php | 2 + MODULES/main/__space_init.php | 2 + MODULES/main/welcome.php | 13 +- PUB/css/admin_interface.css | 198 ++++++++++++++++++++ PUB/css/admin_interface.min.css | 1 + PUB/css/icons.css | 22 +++ PUB/css/icons.min.css | 1 + PUB/css/le_form.css | 240 +++++++++++++++---------- PUB/css/le_form.min.css | 2 +- README.md | 66 ++++--- TPL/admin/main_body.tpl | 2 +- TPL/admin/static_list.php | 19 ++ TPL/admin/svg_icons.tpl | 55 ++++++ TPL/admin/test/main.tpl | 248 ++++++++++++++++++++++++++ TPL/admin/test/top_menu.tpl | 59 ++++++ 22 files changed, 1285 insertions(+), 133 deletions(-) create mode 100644 CLASSES/core/LE_PHONE.php create mode 100644 CLASSES/core/LE_TBL.php create mode 100644 CLASSES/core/TODO/LE_MAIL.php create mode 100644 CLASSES/core/TODO/LE_RABBITMQ.php rename CLASSES/core/{ => TODO}/LE_SQLITE.php (100%) create mode 100644 CLASSES/core/TODO/LE_VK.php create mode 100644 CLASSES/core/TODO/LE_YC.php create mode 100644 MODULES/admin/test.php create mode 100644 PUB/css/admin_interface.css create mode 100644 PUB/css/admin_interface.min.css create mode 100644 PUB/css/icons.css create mode 100644 PUB/css/icons.min.css create mode 100644 TPL/admin/svg_icons.tpl create mode 100644 TPL/admin/test/main.tpl create mode 100644 TPL/admin/test/top_menu.tpl diff --git a/CLASSES/core/LE_PHONE.php b/CLASSES/core/LE_PHONE.php new file mode 100644 index 0000000..764a5e3 --- /dev/null +++ b/CLASSES/core/LE_PHONE.php @@ -0,0 +1,53 @@ +1) $inp=$arr; + + + if (is_array($inp)) + { + for ($i=0;$i1) + { + for ($i=0;$i<$cnt;$i++) $arr[$i] = self::mobile_prepare($arr[$i]); return implode(',',$arr); + } + + return self::mobile_prepare($num); + } + + public static function mobile_prepare($num) + { + return preg_replace('/^[+]{0,1}[78]{0,1}9/','89',$num); + } + + + public static function format($num) + { + $num = self::mobile_prepare($num); + $n=strlen($num = Preg_replace(".[^0-9].", "", $num)); + if ($n==6) return preg_replace("/([0-9]{2})([0-9]{2})([0-9]{2})/", "$1-$2-$3", $num); + if ($n==7) return preg_replace("/([0-9]{3})([0-9]{2})([0-9]{2})/", "$1-$2-$3", $num); + if ($n==10) return preg_replace("/([0-9]{3})([0-9]{3})([0-9]{2})([0-9]{2})/", "($1)$2-$3-$4", $num); + if ($n==11) return preg_replace("/([0-9])([0-9]{3})([0-9]{3})([0-9]{2})([0-9]{2})/", "$1($2)$3-$4-$5", $num); + return $num; + } + +} \ No newline at end of file diff --git a/CLASSES/core/LE_TBL.php b/CLASSES/core/LE_TBL.php new file mode 100644 index 0000000..146ab50 --- /dev/null +++ b/CLASSES/core/LE_TBL.php @@ -0,0 +1,6 @@ + + + + + '; + $text.=$mail_body; + $text.=''; + + $text=iconv('UTF-8', 'windows-1251//TRANSLIT', $text); + + $subject=iconv('UTF-8', 'windows-1251//TRANSLIT', $subject); + $subject = '=?windows-1251?B?'.base64_encode($subject).'?='; + + $headers .= "MIME-Version: 1.0\n"; + $headers .="Content-Type: text/html; charset=windows-1251 \n"; + $headers .= "From: ".$sender."\r\n"; + + mail($address, $subject, $text, $headers); + } + + + + //отправка письма с вложением Mail::send("электронный@адрес", "адрес отправителя", "тема письма", "текст письма", "путь до файла", "имя файла(отображаемое в письме)") + public static function send_file($address, $sender, $subject, $text, $path, $filename) + { + $text=iconv('UTF-8', 'windows-1251//TRANSLIT', $text); + $subject=iconv('UTF-8', 'windows-1251//TRANSLIT', $subject); + $subject = '=?windows-1251?B?'.base64_encode($subject).'?='; + $fp = fopen($path,"r"); if (!$fp) {print "Файл $path не может быть прочитан"; exit();} + $file = fread($fp, filesize($path)); fclose($fp); + $boundary = "--".md5(uniqid(time())); // генерируем разделитель + $headers .= "MIME-Version: 1.0\n"; + $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; + $headers .= "From: ".$sender."\r\n"; + $multipart .= "--$boundary\n"; + $multipart .= "Content-Type: text/html; charset=windows-1251\n"; + $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; + $multipart .= "$text\n\n"; + + $message_part = "--$boundary\n"; + $message_part .= "Content-Type: application/octet-stream\n"; + $message_part .= "Content-Transfer-Encoding: base64\n"; + $message_part .= "Content-Disposition: attachment; filename = \"".$filename."\"\n\n"; + $message_part .= chunk_split(base64_encode($file))."\n"; + $multipart .= $message_part."--$boundary--\n"; + if(!mail($address, $subject, $multipart, $headers)) {echo "К сожалению, письмо не отправлено"; exit();} + } + + + public function gen_message($mailfrom,$mailto,$body,$subject,$file=false) + { + $separator = md5(time()); + + $filename = 'myfile'; + $path = 'your path goes here'; + $file = $path . "/" . $filename; + + $mailto = 'mail@mail.com'; + $subject = 'Subject'; + $message = 'My message'; + + $content = file_get_contents($file); + $content = chunk_split(base64_encode($content)); + + // a random hash will be necessary to send mixed content + + + // carriage return type (RFC) + $eol = "\r\n"; + + // main header (multipart mandatory) + $headers = "From: name " . $eol; + $headers .= "MIME-Version: 1.0" . $eol; + $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol; + $headers .= "Content-Transfer-Encoding: 7bit" . $eol; + $headers .= "This is a MIME encoded message." . $eol; + + // message + $body = "--" . $separator . $eol; + $body .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . $eol; + $body .= "Content-Transfer-Encoding: 8bit" . $eol; + $body .= $message . $eol; + + // attachment + $body .= "--" . $separator . $eol; + $body .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"" . $eol; + $body .= "Content-Transfer-Encoding: base64" . $eol; + $body .= "Content-Disposition: attachment" . $eol; + $body .= $content . $eol; + $body .= "--" . $separator . "--"; + + //SEND Mail + if (mail($mailto, $subject, $body, $headers)) { + echo "mail send ... OK"; // or use booleans here + } else { + echo "mail send ... ERROR!"; + print_r( error_get_last() ); + } + } + + + + + +} \ No newline at end of file diff --git a/CLASSES/core/TODO/LE_RABBITMQ.php b/CLASSES/core/TODO/LE_RABBITMQ.php new file mode 100644 index 0000000..dd630ba --- /dev/null +++ b/CLASSES/core/TODO/LE_RABBITMQ.php @@ -0,0 +1,51 @@ +connection = $this->connect($inp['host'],$inp['login'],$inp['pass']); + $this->channel = new AMQPChannel($this->connection); + $this->exchange = new AMQPExchange($this->channel); + } + + + function connect($host,$login,$pass) + { + $connection = new AMQPConnection(); + $connection->setHost($host); + $connection->setLogin($login); + $connection->setPassword($pass); + $connection->connect(); + return $connection; + } + + function get_q($q) + { + $queue = new AMQPQueue($this->channel); + $queue->setName($q); + $queue->setFlags(AMQP_NOPARAM); + $queue->declareQueue(); + return $queue; + } + + function send_message($m,$q) + { + $qu = $this->get_q($q); + + $this->exchange->publish($m, $q); + } + + function get_message($q,&$f) + { + $this->get_q($q)->consume($f); + } + + +} \ No newline at end of file diff --git a/CLASSES/core/LE_SQLITE.php b/CLASSES/core/TODO/LE_SQLITE.php similarity index 100% rename from CLASSES/core/LE_SQLITE.php rename to CLASSES/core/TODO/LE_SQLITE.php diff --git a/CLASSES/core/TODO/LE_VK.php b/CLASSES/core/TODO/LE_VK.php new file mode 100644 index 0000000..5e8f12f --- /dev/null +++ b/CLASSES/core/TODO/LE_VK.php @@ -0,0 +1,212 @@ +web = &$i['web']; + $this->api_v = arr_v($i,'api_v','5.92'); + $this->client_id = arr_v($i,'client_id','0'); + $this->secure_key = arr_v($i,'secure_key','0'); + $this->service_key = arr_v($i,'service_key','0'); + } + + public function getf_act($cont) + { + return $this->web->reg_find($cont,'<[^>]+action="([^"]+)"',1); + + } + + public function url2token($url) + { + $url = str_replace('https://oauth.vk.com/blank.html#', '', $url); + parse_str($url, $out); + if (!isset($out['access_token'])) return false; + return $out['access_token']; + } + + + + public function web_auth($login,$pass) + { + $ref = $inp['url'] = "https://m.vk.com"; + $html = $this->web->get_cont($inp); + + $inp['url'] = $this->getf_act($html); + $inp['ref'] = $ref; + $inp['post'] = ['email'=>$login,'pass'=>$pass]; + return true; + } + + //тут еще надо доработать на примере ботинка... + public function oauth() + { + $url = 'https://oauth.vk.com/authorize?client_id='.$this->client_id; + $url.='&display=mobile&redirect_uri=https://oauth.vk.com/blank.html'; + //https://vk.com/dev/permissions + $url.='&scope='.(2+4+8+16+64+256+1024+8192+65536+262144+524288+1048576); + $url.='&response_type=token&v='.$this->api_v; + $inp['url'] = $url; + + //return; + $inp['get_redirect'] =1; + $html = $this->web->get_cont($inp); + + echo $html.BR.BR; + + //если уже есть доступ + if ($this->web->redirect) + { + $inp['url'] = $this->web->redirect; + $html = $this->web->get_cont($inp); + return $this->url2token($this->web->redirect); + + } + + //этот момент еще недоработан/// + + + + $inp['url'] = $html; + $html = $this->web->get_cont($inp); + var_dump($html); echo BR.BR; return; + + + $inp['post'] = 1; + //echo $html.BR.BR; + + $inp['url'] = $this->getf_act($html); + return; + echo $inp['url'].BR; + + $inp['ref'] = $url; + + + + $res = $this->web->get_cont($inp); + + var_dump($res); + + return true; + } + + + + + public function query($method,$data=[],$access_token=1) + { + $inp['url'] = "https://api.vk.com/method/".$method; + if ($access_token) $data['access_token'] = $this->token; + $data['v'] = $this->api_v; + $inp['post'] = $data; + + $res = $this->web->get_cont($inp); + $res = json_decode($res,1); + if(isset($res['error'])) + { + print_r($res['error']); + return false; + } + + print_r($res); + + return $res['response']; + + + + } + + public function long_pool_init() + { + $par = ['group_id'=>$this->group_id,'access_token'=>$this->group_key]; + $c = $this->query("groups.getLongPollServer",$par); + $url = $c['server']."?act=a_check&key=".$c['key'].'&wait=25'; + return [$c,$url]; + } + + + public function long_pool(&$f=false,$timeout=0) + { + + if ($f===false) $f = function($i){return false;}; + list ($c,$url) = $this->long_pool_init(); + + + while ($r=$this->web->get_cont($url.'&ts='.$c['ts'])) + { + set_time_limit(0); + $_r = $r; //debug + $r = json_decode($r,1); + + if (isset($r['failed'])) + { + switch ($r['failed']) + { + case '1': + $c['ts'] = $r['ts']; + break; + case '2': + case '3': + list ($c,$url) = $this->long_pool_init(); + echo BR.BR."UPDATE KEY".BR.BR; + break; + } + continue; + } + if (!isset($r['ts'])) + { + echo "response hzhz".BR; + var_dump($_r); + echo "try again...".BR.BR; + sleep(3); + continue; + } + $c['ts'] = $r['ts']; + + + + if (is_array($r['updates']) && count($r['updates'])) + $f($r['updates']); + + + + } + + echo "ERROR GET URL, timeout: ".$timeout.BR; + sleep($timeout); + $timeout+=1; + $timeout*=2; + + return $this->long_pool($f,$timeout); + } + + public function bot_message($user_id,$message) + { + $data=[]; + if (is_string($message)) + $data['message'] = $message; + elseif (is_array($message)) + $data = $message; + + $data['random_id'] = rand(0,99999); + $data['peer_id'] = $this->group_id; + $data['access_token']=$this->group_key; + $data['user_id'] = $user_id; + + + $this->query("messages.send",$data,0); + } + + + + +} \ No newline at end of file diff --git a/CLASSES/core/TODO/LE_YC.php b/CLASSES/core/TODO/LE_YC.php new file mode 100644 index 0000000..b81669e --- /dev/null +++ b/CLASSES/core/TODO/LE_YC.php @@ -0,0 +1,49 @@ +token.'"}'; + + + $res = $this->web->get_cont($inp); + $res = json_decode($res,1); + //print_r($res); + $this->iam = $res['iamToken']; + return $this->iam; + + } + + + public function speech($text,$file="./out.ogg",$p=[]) + { + $post = []; + $post['lang'] = arr_v($p,'lang',$this->tts_lang); + $post['speed'] = arr_v($p,'speed',$this->tts_speed); + $post['voice'] = arr_v($p,'voice',$this->tts_voice); + $post['emotion'] = arr_v($p,'emo',$this->tts_emo); + $post['format'] = arr_v($p,'format','oggopus'); + $post['folderId']=$this->folder; + $post['text'] = $text; + $inp['url'] = "https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize"; + $inp['post'] = $post; + $inp['headers'] = ['Authorization: Bearer '.$this->iam]; + + $res = $this->web->get_cont($inp); + + + file_put_contents($file, $res); + chmod($file, 0777); + } + +} \ No newline at end of file diff --git a/MODULES/admin/test.php b/MODULES/admin/test.php new file mode 100644 index 0000000..9b47929 --- /dev/null +++ b/MODULES/admin/test.php @@ -0,0 +1,2 @@ +mod_cont .= LE::$TPL->fetch('test/main'); \ No newline at end of file diff --git a/MODULES/main/__space_init.php b/MODULES/main/__space_init.php index e69de29..1af7573 100644 --- a/MODULES/main/__space_init.php +++ b/MODULES/main/__space_init.php @@ -0,0 +1,2 @@ +set_lev(4); \ No newline at end of file diff --git a/MODULES/main/welcome.php b/MODULES/main/welcome.php index 1de5125..eacdc9f 100644 --- a/MODULES/main/welcome.php +++ b/MODULES/main/welcome.php @@ -1 +1,12 @@ -Добро пожаловать в новый мир!!! \ No newline at end of file +logout(); +LE::$ALC->set_lev(4); + + + +//тут будет контроллер +LE::$TPL->mod_cont .= "

Добро пожаловать в секретный раздел

"; + +LE::$TPL->mod_cont .= "kokoko2222"; + +LE::$TPL->display(); \ No newline at end of file diff --git a/PUB/css/admin_interface.css b/PUB/css/admin_interface.css new file mode 100644 index 0000000..800cbdf --- /dev/null +++ b/PUB/css/admin_interface.css @@ -0,0 +1,198 @@ +body { + font-family: sans-serif; + margin: 0; + padding: 0; +} + +h2 { + font-size: 15px; +} + +a { + color: #666; +} + +a:hover { + text-decoration: none; + color: #000; +} + + +/*navi*/ + +div.mp_navi { + background: #f1f1f1; + overflow: visible; + color: #444; + border-bottom: 1px solid #e7e7e7; + font-size: 16px; + min-height: 50px; + width: 100%; + box-sizing: border-box; +} + +div.mp_navi a { + color: inherit; + text-decoration: none; +} + +ul.mp_menu { + display: table; +} + +ul.mp_menu, +ul.mp_menu ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +.mp_navi span.logo a, +ul.mp_menu li a { + line-height: 50px +} + +.mp_navi span.logo { + display: block; + float: left; + padding: 0 10px; + background: #4caf50; + border-right: 1px solid #d0d0d0; +} + +.mp_navi span.logo a { + color: #fff; + font-size: 18px; +} + +ul.mp_menu.vertical>li { + float: left; +} + +ul.mp_menu li a { + float: left; + padding: 0 15px; +} + +ul.mp_menu li a:hover, +ul.mp_menu li.dropdown:hover>a { + background: #ddd; +} + +ul.mp_menu li a.active { + background: #4caf50; + color: #fff; +} + + +/*dropdown*/ + +.dropdown { + position: relative; + display: inline-block; +} + +.dropdown-content { + display: none; + position: absolute; + background-color: #f9f9f9; + width: auto; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + padding: 12px 16px; + z-index: 1; + top: 100%; + min-width: 250px; +} + +.dropdown a i.i-down:before { + position: relative; + top: 3px; + font-size: 20px; + margin-right: 0; +} + +ul.dropdown-content { + overflow: hidden; +} + +ul.mp_menu ul.dropdown-content li, +ul.mp_menu ul.dropdown-content li a { + width: 100%; + display: block; + font-size: 15px; + white-space: nowrap; + clear: both; +} + +.dropdown:hover .dropdown-content { + display: block; +} + + +/*footer*/ + +.mp_footer { + border-top: 1px solid #eee; + padding: 20px 15px; + font-size: 14px; + line-height: 18px; + clear: both; + text-align: center; +} + + +/*content*/ + +div#content { + min-height: 200px; + clear: both; + margin: 5px 20px; +} + + +/* +@media only screen and (max-width: 600px) { + .mpcol { + width: 100%; + } + .mpcol>div.inner { + margin: 5px; + } +} +*/ + +:focus, + :selected { + outline: none !important; +} + + +/*table*/ + +.tbl { + width: 100%; + border-collapse: collapse; +} + +.tbl td, +.tbl th { + border: 1px solid #d9d9d9; + padding: 0.8em; + text-align: left; +} + +.tbl tbody tr:nth-of-type(2n+1) { + background-color: #f8f8f8; +} + +.tbl caption { + text-align: left; + font-size: 120%; + padding: 0.8em 0.1em; + font-weight: bold; +} + +.tbl tr:hover td { + border-color: #bbb; + background-color: #f6fff6; +} \ No newline at end of file diff --git a/PUB/css/admin_interface.min.css b/PUB/css/admin_interface.min.css new file mode 100644 index 0000000..6735f4e --- /dev/null +++ b/PUB/css/admin_interface.min.css @@ -0,0 +1 @@ +body{font-family:sans-serif;margin:0;padding:0}h2{font-size:15px}a{color:#666}a:hover{text-decoration:none;color:#000}div.mp_navi{background:#f1f1f1;overflow:visible;color:#444;border-bottom:1px solid #e7e7e7;font-size:16px;min-height:50px;width:100%;box-sizing:border-box}div.mp_navi a{color:inherit;text-decoration:none}ul.mp_menu{display:table}ul.mp_menu,ul.mp_menu ul{list-style-type:none;margin:0;padding:0}.mp_navi span.logo a,ul.mp_menu li a{line-height:50px}.mp_navi span.logo{display:block;float:left;padding:0 10px;background:#4caf50;border-right:1px solid #d0d0d0}.mp_navi span.logo a{color:#fff;font-size:18px}ul.mp_menu.vertical>li{float:left}ul.mp_menu li a{float:left;padding:0 15px}ul.mp_menu li a:hover,ul.mp_menu li.dropdown:hover>a{background:#ddd}ul.mp_menu li a.active{background:#4caf50;color:#fff}.dropdown{position:relative;display:inline-block}.dropdown-content{display:none;position:absolute;background-color:#f9f9f9;width:auto;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);padding:12px 16px;z-index:1;top:100%;min-width:250px}.dropdown a i.i-down:before{position:relative;top:3px;font-size:20px;margin-right:0}ul.dropdown-content{overflow:hidden}ul.mp_menu ul.dropdown-content li,ul.mp_menu ul.dropdown-content li a{width:100%;display:block;font-size:15px;white-space:nowrap;clear:both}.dropdown:hover .dropdown-content{display:block}.mp_footer{border-top:1px solid #eee;padding:20px 15px;font-size:14px;line-height:18px;clear:both;text-align:center}div#content{min-height:200px;clear:both;margin:5px 20px}:focus,:selected{outline:0!important}.tbl{width:100%;border-collapse:collapse}.tbl td,.tbl th{border:1px solid #d9d9d9;padding:.8em;text-align:left}.tbl tbody tr:nth-of-type(2n+1){background-color:#f8f8f8}.tbl caption{text-align:left;font-size:120%;padding:.8em .1em;font-weight:700}.tbl tr:hover td{border-color:#bbb;background-color:#f6fff6} \ No newline at end of file diff --git a/PUB/css/icons.css b/PUB/css/icons.css new file mode 100644 index 0000000..5ea581d --- /dev/null +++ b/PUB/css/icons.css @@ -0,0 +1,22 @@ +[class^="lei_"], +svg { + width: 1.2em; + height: 1.2em; + fill: currentColor; + vertical-align: -0.2em; +} + +.lei_r { + margin-right: -0.35em; + margin-left: .2em; +} + +.lei_l { + margin-left: -0.35em; + margin-right: .2em; +} + +.lei_c { + margin-left: -0.3em; + margin-right: -0.3em; +} \ No newline at end of file diff --git a/PUB/css/icons.min.css b/PUB/css/icons.min.css new file mode 100644 index 0000000..4da98bb --- /dev/null +++ b/PUB/css/icons.min.css @@ -0,0 +1 @@ +[class^=lei_],svg{width:1.2em;height:1.2em;fill:currentColor;vertical-align:-.2em}.lei_r{margin-right:-.35em;margin-left:.2em}.lei_l{margin-left:-.35em;margin-right:.2em}.lei_c{margin-left:-.3em;margin-right:-.3em} \ No newline at end of file diff --git a/PUB/css/le_form.css b/PUB/css/le_form.css index d7f3e70..745b083 100644 --- a/PUB/css/le_form.css +++ b/PUB/css/le_form.css @@ -1,44 +1,44 @@ /*sys*/ + body { - font-family: sans-serif; + font-family: sans-serif; } /*reset form*/ -input, select, button, textarea { - border:1px solid #b8b8b8; - border-radius: 0; + +input, +select, +textarea { + border: 1px solid #b8b8b8; + border-radius: 0; -webkit-border-radius: 0px; - border-radius:0; - padding:1px 5px; + border-radius: 0; + padding: 1px 5px; height: 40px; box-sizing: border-box; font-family: inherit; - font-size:16px; + font-size: 16px; } textarea { min-height: 200px; - padding:8px 8px; + padding: 8px 8px; } select { --webkit-appearance: none; --moz-appearance: none; -padding-right: 20px; -background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A") -, -linear-gradient(to bottom, #ffffff 0%,#ffffff 100%); -background-repeat: no-repeat; -/*background-position: 100% 50%;*/ -background-size: 30px auto, 100%; - -background-position: right -5px top 50%, 0 0; + -webkit-appearance: none; + -moz-appearance: none; + padding-right: 20px; + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"), linear-gradient(to bottom, #ffffff 0%, #ffffff 100%); + background-repeat: no-repeat; + /*background-position: 100% 50%;*/ + background-size: 30px auto, 100%; + background-position: right -5px top 50%, 0 0; } - -input[type=radio], input[type=checkbox] -{ +input[type=radio], +input[type=checkbox] { display: inline-block; height: 16px; width: 16px; @@ -53,7 +53,7 @@ input[type=radio], input[type=checkbox] border: 1px solid #ccc; transition: .2s ease-in-out; transition-property: all; - transition-property: background-color,border; + transition-property: background-color, border; margin-right: 4px; } @@ -63,10 +63,10 @@ input[type=radio] { } input[type=radio]:checked { - background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E"); + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E"); background-color: #1e87f0; border-color: transparent; - background-size: 30px auto; + background-size: 30px auto; } input[type=checkbox]:checked { @@ -75,24 +75,24 @@ input[type=checkbox]:checked { border-color: transparent; } -input:focus:not([type="checkbox"]):not([type="radio"]), select:focus, textarea:focus { +input:focus:not([type="checkbox"]):not([type="radio"]), +select:focus, +textarea:focus { outline: none; - border-color:#70aae4; + border-color: #70aae4; box-shadow: inset 0 0 3px -2px #117de9; } - - /*form blocks style*/ + .le_form { display: block; overflow: hidden; margin: 10px 0; - padding:25px; - color:#555; - - } + padding: 25px; + color: #555; +} .le_form_head { display: block; @@ -100,40 +100,35 @@ input:focus:not([type="checkbox"]):not([type="radio"]), select:focus, textarea:f padding-bottom: 10px; border-bottom: 1px solid #d9d9d9; margin-bottom: 20px; - } .le_shadow { box-shadow: 0 2px 10px rgba(94, 94, 94, 0.08); - border:1px solid #ececec; + border: 1px solid #ececec; } - .le_he .le_inp { - margin-left:300px; + margin-left: 300px; } .le_fl { - font-size: 14px; - + font-size: 14px; } .le_he .le_fl { - width:290px; - float:left; - display: flex; - + width: 290px; + float: left; + display: flex; align-items: center; min-height: 40px; - } -.le_he, .le_ve { - margin-bottom: 25px; -overflow: hidden; -border-bottom: 1px solid #e9e9e9; -padding-bottom: 25px; - +.le_he, +.le_ve { + margin-bottom: 25px; + overflow: hidden; + border-bottom: 1px solid #e9e9e9; + padding-bottom: 25px; } .le_ve .le_fl { @@ -143,80 +138,131 @@ padding-bottom: 25px; .le_inp input:not([type="checkbox"]):not([type="radio"]), .le_inp select, -.le_inp textarea -{ +.le_inp textarea { max-width: 100%; - width:100%; + width: 100%; } + /*le multi elements*/ -.le_me label{ -display: block; -padding-top:8px; + +.le_me label { + display: block; + padding-top: 8px; } + /*Multi Element Horizontal*/ -.le_meh label{ -float:left; -margin-right:10px; -} +.le_meh label { + float: left; + margin-right: 10px; +} .le_he { - display:flex; - flex-wrap: wrap; + display: flex; + flex-wrap: wrap; } .le_he .le_fl { -min-width: 200px; -flex:40%; -flex-grow: 1; + min-width: 200px; + flex: 40%; + flex-grow: 1; } .le_he .le_inp { -margin-left:0; -flex-grow: 1; /*растягиваться на свободное пространство*/ -min-width: 200px; -flex:60%; + margin-left: 0; + flex-grow: 1; + /*растягиваться на свободное пространство*/ + min-width: 200px; + flex: 60%; } .le_fl sup { - color:red; -font-size: 17px; -font-weight: bold; -padding-left: 2px; + color: red; + font-size: 17px; + font-weight: bold; + padding-left: 2px; } - /*buttons*/ + +[class^="le_btn"] { + cursor: pointer; + display: inline-block; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + padding: .375rem .75rem; + font-size: 1rem; + line-height: 1.5; + transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; + margin: 2px 1px; + border-radius: 2px; + border-style: solid; + border-width: 1px; + color: #fff; +} + .le_btn { -display: inline-block; -font-weight: 400; -text-align: center; -white-space: nowrap; -vertical-align: middle; --webkit-user-select: none; --moz-user-select: none; --ms-user-select: none; -user-select: none; -border: 1px solid #c9c9c9; + background-color: #f9f9f9; + border-color: #c9c9c9; + color: #444; +} + +.le_btn:hover { + background: #f3f3f3; + border-color: #b5b5b5; +} -padding: .375rem .75rem; -font-size: 1rem; -line-height: 1.5; -transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out; -background-color: #f9f9f9; -background: linear-gradient(to bottom, #f9f9f9,#f9f9f9); +.le_btn_gr { + background-color: #449d44; + border-color: #398439; } - .le_btn:hover { - background: linear-gradient(to bottom, #f9f9f9,#f3f3f3); - border-color:#b5b5b5; +.le_btn_gr:hover { + background-color: #0a8f0a; + border-color: #229322; +} + +.le_btn_bl { + background-color: #337ab7; + border-color: #2e6da4; +} + +.le_btn_bl:hover { + background-color: #286090; + border-color: #204d74; +} + +.le_btn_rd { + background-color: #d9534f; + border-color: #d43f3a; +} + +.le_btn_rd:hover { + background-color: #c9302c; + border-color: #ac2925; +} + + +/*color-bl*/ + +._green { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; } /*гамбургеры и крестики*/ + #nav-icon6 { width: 60px; height: 45px; @@ -225,6 +271,7 @@ background: linear-gradient(to bottom, #f9f9f9,#f9f9f9); margin: 48px auto 12px auto; cursor: pointer; } + #nav-icon6 span { height: 9px; width: 60px; @@ -232,8 +279,9 @@ background: linear-gradient(to bottom, #f9f9f9,#f9f9f9); border-radius: 20px; position: absolute; transition-duration: .25s; - transition-delay: .25s; + transition-delay: .25s; } + #nav-icon6 span:before { left: 0; position: absolute; @@ -246,6 +294,7 @@ background: linear-gradient(to bottom, #f9f9f9,#f9f9f9); transition-duration: .25s; transition: transform .25s, top .25s .25s; } + #nav-icon6 span:after { left: 0; position: absolute; @@ -258,16 +307,19 @@ background: linear-gradient(to bottom, #f9f9f9,#f9f9f9); transition-duration: .25s; transition: transform .25s, top .25s .25s; } + #nav-icon6.open span { transition-duration: 0.1s; transition-delay: .25s; background: transparent; } + #nav-icon6.open span:before { transition: top .25s, transform .25s .25s; top: 0px; transform: rotateZ(-45deg); } + #nav-icon6.open span:after { transition: top 0.4s, transform .25s .25s; top: 0px; diff --git a/PUB/css/le_form.min.css b/PUB/css/le_form.min.css index 5cb54cd..b18a34f 100644 --- a/PUB/css/le_form.min.css +++ b/PUB/css/le_form.min.css @@ -1 +1 @@ -body{font-family:sans-serif}button,input,select,textarea{border:1px solid #b8b8b8;border-radius:0;-webkit-border-radius:0;border-radius:0;padding:1px 5px;height:40px;box-sizing:border-box;font-family:inherit;font-size:16px}textarea{min-height:200px;padding:8px 8px}select{-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"),linear-gradient(to bottom,#fff 0,#fff 100%);background-repeat:no-repeat;background-size:30px auto,100%;background-position:right -5px top 50%,0 0}input[type=checkbox],input[type=radio]{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-1px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:transparent;background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:.2s ease-in-out;transition-property:all;transition-property:background-color,border;margin-right:4px}input[type=radio]{border-radius:50%;margin-top:-4px}input[type=radio]:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E");background-color:#1e87f0;border-color:transparent;background-size:30px auto}input[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-color:#1e87f0;border-color:transparent}input:focus:not([type=checkbox]):not([type=radio]),select:focus,textarea:focus{outline:0;border-color:#70aae4;box-shadow:inset 0 0 3px -2px #117de9}.le_form{display:block;overflow:hidden;margin:10px 0;padding:25px;color:#555}.le_form_head{display:block;font-size:150%;padding-bottom:10px;border-bottom:1px solid #d9d9d9;margin-bottom:20px}.le_shadow{box-shadow:0 2px 10px rgba(94,94,94,.08);border:1px solid #ececec}.le_he .le_inp{margin-left:300px}.le_fl{font-size:14px}.le_he .le_fl{width:290px;float:left;display:flex;align-items:center;min-height:40px}.le_he,.le_ve{margin-bottom:25px;overflow:hidden;border-bottom:1px solid #e9e9e9;padding-bottom:25px}.le_ve .le_fl{margin-bottom:3px;display:block}.le_inp input:not([type=checkbox]):not([type=radio]),.le_inp select,.le_inp textarea{max-width:100%;width:100%}.le_me label{display:block;padding-top:8px}.le_meh label{float:left;margin-right:10px}.le_he{display:flex;flex-wrap:wrap}.le_he .le_fl{min-width:200px;flex:40%;flex-grow:1}.le_he .le_inp{margin-left:0;flex-grow:1;min-width:200px;flex:60%}.le_fl sup{color:red;font-size:17px;font-weight:700;padding-left:2px}.le_btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid #c9c9c9;padding:.375rem .75rem;font-size:1rem;line-height:1.5;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;background-color:#f9f9f9;background:linear-gradient(to bottom,#f9f9f9,#f9f9f9)}.le_btn:hover{background:linear-gradient(to bottom,#f9f9f9,#f3f3f3);border-color:#b5b5b5}#nav-icon6{width:60px;height:45px;position:relative;transition-duration:1s;margin:48px auto 12px auto;cursor:pointer}#nav-icon6 span{height:9px;width:60px;background-color:#337ab7;border-radius:20px;position:absolute;transition-duration:.25s;transition-delay:.25s}#nav-icon6 span:before{left:0;position:absolute;top:-18px;height:9px;width:60px;background-color:#337ab7;content:"";border-radius:20px;transition-duration:.25s;transition:transform .25s,top .25s .25s}#nav-icon6 span:after{left:0;position:absolute;top:18px;height:9px;width:60px;background-color:#337ab7;content:"";border-radius:20px;transition-duration:.25s;transition:transform .25s,top .25s .25s}#nav-icon6.open span{transition-duration:.1s;transition-delay:.25s;background:0 0}#nav-icon6.open span:before{transition:top .25s,transform .25s .25s;top:0;transform:rotateZ(-45deg)}#nav-icon6.open span:after{transition:top .4s,transform .25s .25s;top:0;transform:rotateZ(45deg)} \ No newline at end of file +body{font-family:sans-serif}input,select,textarea{border:1px solid #b8b8b8;border-radius:0;-webkit-border-radius:0;border-radius:0;padding:1px 5px;height:40px;box-sizing:border-box;font-family:inherit;font-size:16px}textarea{min-height:200px;padding:8px 8px}select{-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A"),linear-gradient(to bottom,#fff 0,#fff 100%);background-repeat:no-repeat;background-size:30px auto,100%;background-position:right -5px top 50%,0 0}input[type=checkbox],input[type=radio]{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-1px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:transparent;background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:.2s ease-in-out;transition-property:all;transition-property:background-color,border;margin-right:4px}input[type=radio]{border-radius:50%;margin-top:-4px}input[type=radio]:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E");background-color:#1e87f0;border-color:transparent;background-size:30px auto}input[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-color:#1e87f0;border-color:transparent}input:focus:not([type=checkbox]):not([type=radio]),select:focus,textarea:focus{outline:0;border-color:#70aae4;box-shadow:inset 0 0 3px -2px #117de9}.le_form{display:block;overflow:hidden;margin:10px 0;padding:25px;color:#555}.le_form_head{display:block;font-size:150%;padding-bottom:10px;border-bottom:1px solid #d9d9d9;margin-bottom:20px}.le_shadow{box-shadow:0 2px 10px rgba(94,94,94,.08);border:1px solid #ececec}.le_he .le_inp{margin-left:300px}.le_fl{font-size:14px}.le_he .le_fl{width:290px;float:left;display:flex;align-items:center;min-height:40px}.le_he,.le_ve{margin-bottom:25px;overflow:hidden;border-bottom:1px solid #e9e9e9;padding-bottom:25px}.le_ve .le_fl{margin-bottom:3px;display:block}.le_inp input:not([type=checkbox]):not([type=radio]),.le_inp select,.le_inp textarea{max-width:100%;width:100%}.le_me label{display:block;padding-top:8px}.le_meh label{float:left;margin-right:10px}.le_he{display:flex;flex-wrap:wrap}.le_he .le_fl{min-width:200px;flex:40%;flex-grow:1}.le_he .le_inp{margin-left:0;flex-grow:1;min-width:200px;flex:60%}.le_fl sup{color:red;font-size:17px;font-weight:700;padding-left:2px}[class^=le_btn]{cursor:pointer;display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:.375rem .75rem;font-size:1rem;line-height:1.5;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;margin:2px 1px;border-radius:2px;border-style:solid;border-width:1px;color:#fff}.le_btn{background-color:#f9f9f9;border-color:#c9c9c9;color:#444}.le_btn:hover{background:#f3f3f3;border-color:#b5b5b5}.le_btn_gr{background-color:#449d44;border-color:#398439}.le_btn_gr:hover{background-color:#0a8f0a;border-color:#229322}.le_btn_bl{background-color:#337ab7;border-color:#2e6da4}.le_btn_bl:hover{background-color:#286090;border-color:#204d74}.le_btn_rd{background-color:#d9534f;border-color:#d43f3a}.le_btn_rd:hover{background-color:#c9302c;border-color:#ac2925}._green{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}#nav-icon6{width:60px;height:45px;position:relative;transition-duration:1s;margin:48px auto 12px auto;cursor:pointer}#nav-icon6 span{height:9px;width:60px;background-color:#337ab7;border-radius:20px;position:absolute;transition-duration:.25s;transition-delay:.25s}#nav-icon6 span:before{left:0;position:absolute;top:-18px;height:9px;width:60px;background-color:#337ab7;content:"";border-radius:20px;transition-duration:.25s;transition:transform .25s,top .25s .25s}#nav-icon6 span:after{left:0;position:absolute;top:18px;height:9px;width:60px;background-color:#337ab7;content:"";border-radius:20px;transition-duration:.25s;transition:transform .25s,top .25s .25s}#nav-icon6.open span{transition-duration:.1s;transition-delay:.25s;background:0 0}#nav-icon6.open span:before{transition:top .25s,transform .25s .25s;top:0;transform:rotateZ(-45deg)}#nav-icon6.open span:after{transition:top .4s,transform .25s .25s;top:0;transform:rotateZ(45deg)} \ No newline at end of file diff --git a/README.md b/README.md index 8255650..2ae30c6 100644 --- a/README.md +++ b/README.md @@ -86,52 +86,46 @@ SYSCONF::$MOD_ALIASES['admin'] = [ ```nginx #project1.loc server { - listen 80; - default_type text/html; - server_name project1.loc; - root /www/projects/project1/web; - - location ~* ^/pub/(.+\.(?:gif|jpe?g|png|js|css|woff|ttf|svg|eot|html|htm|txt))$ - { - alias /www/kernel/PUB/$1; - access_log off; - expires 10d; - } - - index index.php; - - location ~* ^.+\.(txt|jpe?g|gif|png|ico|css|txt|bmp|rtf|js|svg|eot|ttf|woff|html?)$ - { - access_log off; - add_header Cache-Control "public, max-age=31536000, immutable"; - } + +listen 80; +default_type text/html; +server_name project1.loc; +root /www/projects/project1/web; + +location ~* ^/pub/(.+\.(?:gif|jpe?g|png|js|css|woff|ttf|svg|eot|html|htm|txt))$ +{ + alias /www/kernel/PUB/$1; + access_log off; + expires 10d; +} + +index index.php; + +location ~* ^.+\.(txt|jpe?g|gif|png|ico|css|txt|bmp|rtf|js|svg|eot|ttf|woff|html?)$ +{ + access_log off; + add_header Cache-Control "public, max-age=31536000, immutable"; +} - #все запросы направить на index.php - location / { - rewrite ^/(.*)$ /index.php; - } +#все запросы направить на index.php +location / { + rewrite ^/(.*)$ /index.php; +} - location ~ \.php$ { - include snippets/fastcgi-php.conf; - fastcgi_pass unix:/run/php/php7.3-fpm.sock; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - } +location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/run/php/php7.3-fpm.sock; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +} } ``` -## ToDo -* add class **LE_SQLITE** - иногда нужно делать мини-приложения типа домашней бухгалтерии -* add class **LE_CALENDAR** - простейшие операции с датами, удобно для формирования всяких графиков платежей, например для кредитных калькуляторов -* add class **LE_FORMGEN** - генератор типовых формочек с заполнением полей данными из БД, удобно для быстрого клепания редакторов в админке -* add class **LE_XML**, **LE_CSV** - чтение и генерация форматов для экспорта/импорта -* внедрить сторонние библиотеки для работы с xls, xlsx (SimpleXLS, SimpleXLSX, PHPSpreadsheet, etc...) -* слепить простейший UIKIT, должен состоять как из CSS, так и из JS и бэкендные функции на PHP для генерации всяких модальных окон, нужно еще переопределить всякие алерты и конфирмы на свои, чтобы все вписывалось в интерфейс -> Весь процесс разработки логируется на [YouTube в виде видеоуроков](https://www.youtube.com/watch?v=hEfP0tYnmd4&list=PL0WBDVO8h9xcHuyw19JnOVjbxS-p6X3VF) +> Весь процесс разработки логируется на [YouTube в виде видеоуроков](https://www.youtube.com/watch?v=hEfP0tYnmd4&list=PL0WBDVO8h9xcHuyw19JnOVjbxS-p6X3VF), но пока нет времени, так что следите за гитхабом. diff --git a/TPL/admin/main_body.tpl b/TPL/admin/main_body.tpl index 51980c7..7ff7977 100644 --- a/TPL/admin/main_body.tpl +++ b/TPL/admin/main_body.tpl @@ -1,4 +1,4 @@ -
+
mod_cont;?>
\ No newline at end of file diff --git a/TPL/admin/static_list.php b/TPL/admin/static_list.php index d73d067..5f25057 100644 --- a/TPL/admin/static_list.php +++ b/TPL/admin/static_list.php @@ -2,6 +2,25 @@ $st_cnf = &LE::$TPL->static_list; $st_dep = &LE::$TPL->static_dep; +$st_cnf[] = [ +// 'mod'=>'default', + 'pos'=>'top', + 'type'=>'css', + 'link'=>'/pub/css/icons.css']; + +$st_cnf[] = [ +// 'mod'=>'default', + 'pos'=>'top', + 'type'=>'css', + 'link'=>'/pub/css/le_form.css']; + +$st_cnf[] = [ +// 'mod'=>'default', + 'pos'=>'top', + 'type'=>'css', + 'link'=>'/pub/css/admin_interface.css']; + + $st_cnf[] = [ 'mod'=>'highlight.js', 'pos'=>'top', diff --git a/TPL/admin/svg_icons.tpl b/TPL/admin/svg_icons.tpl new file mode 100644 index 0000000..0310c87 --- /dev/null +++ b/TPL/admin/svg_icons.tpl @@ -0,0 +1,55 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/TPL/admin/test/main.tpl b/TPL/admin/test/main.tpl new file mode 100644 index 0000000..963af4f --- /dev/null +++ b/TPL/admin/test/main.tpl @@ -0,0 +1,248 @@ +fetch('svg_icons')?> +fetch('test/top_menu')?> + +'; +} + +?> + + + + + + + +
+ + + + + + + + + +
+

Кнопки

+ + + + + + + + + + + +
+ + + + + + + +

Иконки

+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
CRUD-табличка
+ + +Header1Header2Header3
val1val2val3
val1val2val3
val1val2val3
val1val2val3
val1val2val3
val1val2val3
+ + +

Формочка

+ +
+Заголовок формы + +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
Горизонтальный селект
+
+ +
+ +
+ +
+
Радиокнопки
+
+ + +
+
+ +
+
Радиокнопки вертикально
+
+ + +
+
+ +
+
Чекбоксы*
+
+ + +
+
+ +
+
Радиокнопки в линию
+
+ + +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ + +
+ + + + +
+ +
+ + + + + + + + +

Алерты

+

Конфирмы

+

Модальные окошки

+ ++ + + + + + + + +
+ \ No newline at end of file diff --git a/TPL/admin/test/top_menu.tpl b/TPL/admin/test/top_menu.tpl new file mode 100644 index 0000000..b752776 --- /dev/null +++ b/TPL/admin/test/top_menu.tpl @@ -0,0 +1,59 @@ + \ No newline at end of file