diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..00fedbe --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/Data +/Public/data +*[Ss]ecrets* +.sass-cache \ No newline at end of file diff --git a/JSON/Sizerboard.languages_iso.json b/JSON/Sizerboard.languages_iso.json new file mode 100644 index 0000000..2a8e707 --- /dev/null +++ b/JSON/Sizerboard.languages_iso.json @@ -0,0 +1,186 @@ +{ + "aa" : "afar", + "ab" : "abjasio", + "ae" : "avéstico", + "af" : "afrikáans", + "ak" : "akano", + "am" : "amhárico", + "an" : "aragonés", + "ar" : "alarabiyah", + "as" : "asamés", + "av" : "avar", + "ay" : "aimara", + "az" : "azerbaycanca", + "ba" : "baskir", + "be" : "bielorruso", + "bg" : "búlgaro", + "bh" : "bhoyapurí", + "bi" : "bislama", + "bm" : "bambara", + "bn" : "bengalí", + "bo" : "tibetano", + "br" : "bretón", + "bs" : "bosnio", + "ca" : "catalan", + "ce" : "checheno", + "ch" : "chamorro", + "co" : "corso", + "cr" : "cree", + "cs" : "cestina", + "cu" : "eslavo eclesiástico antiguo", + "cv" : "chuvasio", + "cy" : "galés", + "da" : "dansk", + "de" : "alemán", + "dv" : "maldivo", + "dz" : "dzongkha", + "ee" : "ewé", + "el" : "ellinika", + "en" : "english", + "eo" : "esperanto", + "es" : "espanol", + "et" : "estonio", + "eu" : "euskera", + "fa" : "farsi", + "ff" : "fula", + "fi" : "suomi", + "fj" : "fiyiano", + "fo" : "feroés", + "fr" : "francais", + "fy" : "frisón", + "ga" : "gaeilge", + "gd" : "gaélico escocés", + "gl" : "gallego", + "gn" : "guaraní", + "gu" : "guyaratí", + "gv" : "manés", + "ha" : "hausa", + "he" : "ivrit", + "hi" : "hindi", + "ho" : "hiri motu", + "hr" : "croata", + "ht" : "haitiano", + "hu" : "magyar", + "hy" : "armenio", + "hz" : "herero", + "ia" : "interlingua", + "id" : "indonesia", + "ie" : "occidental", + "ig" : "igbo", + "ii" : "yi de Sichuán", + "ik" : "iñupiaq", + "io" : "ido", + "is" : "islandés", + "it" : "italiano", + "iu" : "inuktitut", + "ja" : "nihongo", + "jv" : "javanés", + "ka" : "georgiano", + "kg" : "kongo", + "ki" : "kikuyu", + "kj" : "kuanyama", + "kk" : "kazajo", + "kl" : "groenlandés", + "km" : "camboyano", + "kn" : "canarés", + "ko" : "hangugeo", + "kr" : "kanuri", + "ks" : "cachemiro", + "ku" : "kurdo", + "kv" : "komi", + "kw" : "córnico", + "ky" : "kirguís", + "la" : "latín", + "lb" : "luxemburgués", + "lg" : "luganda", + "li" : "limburgués", + "ln" : "lingala", + "lo" : "lao", + "lt" : "lituano", + "lu" : "luba-katanga", + "lv" : "letón", + "mg" : "malgache", + "mh" : "marshalés", + "mi" : "maorí", + "mk" : "macedonio", + "ml" : "malayalam", + "mn" : "mongol", + "mr" : "maratí", + "ms" : "malayo", + "mt" : "maltés", + "my" : "birmano", + "na" : "nauruano", + "nb" : "noruego bokmål", + "nd" : "ndebele del norte", + "ne" : "nepalí", + "ng" : "ndonga", + "nl" : "nederlands", + "nn" : "nynorsk", + "no" : "noruego", + "nr" : "ndebele del sur", + "nv" : "navajo", + "ny" : "chichewa", + "oc" : "occitano", + "oj" : "ojibwa", + "om" : "oromo", + "or" : "oriya", + "os" : "osético", + "pa" : "panyabí", + "pi" : "pali", + "pl" : "polski", + "ps" : "pastú", + "pt" : "portugues", + "qc" : "quechua", + "rm" : "romanche", + "rn" : "kirundi", + "ro" : "rumano", + "ru" : "russkiy", + "rw" : "ruandés", + "sa" : "sánscrito", + "sc" : "sardo", + "sd" : "sindhi", + "se" : "sami septentrional", + "sg" : "sango", + "si" : "cingalés", + "sk" : "eslovaco", + "sl" : "slovencina", + "sm" : "samoano", + "sn" : "shona", + "so" : "somalí", + "sq" : "albanés", + "sr" : "serbio", + "ss" : "suazi", + "st" : "sesotho", + "su" : "sundanés", + "sv" : "svenska", + "sw" : "suajili", + "ta" : "tamil", + "te" : "télugu", + "tg" : "tayiko", + "th" : "thai", + "ti" : "tigriña", + "tk" : "turcomano", + "tl" : "tagalo", + "tn" : "setsuana", + "to" : "tongano", + "tr" : "turkce", + "ts" : "tsonga", + "tt" : "tártaro", + "tw" : "twi", + "ty" : "tahitiano", + "ug" : "uigur", + "uk" : "ukrainska", + "ur" : "urdu", + "uz" : "uzbeko", + "ve" : "venda", + "vi" : "vietnamita", + "vo" : "volapük", + "wa" : "valón", + "wo" : "wolof", + "xh" : "xhosa", + "yi" : "yídish", + "yo" : "yoruba", + "za" : "chuan", + "zh" : "zhongwen", + "zu" : "zulú" +} \ No newline at end of file diff --git a/PHP/Sizerboard.php b/PHP/Sizerboard.php new file mode 100644 index 0000000..0196c64 --- /dev/null +++ b/PHP/Sizerboard.php @@ -0,0 +1,143 @@ +slash = strpos(__DIR__, '/') === null ? '\\' : '/'; + + $this->inputs = $inputs; + + } + + public function nulls($nulls = null){ + return is_bool($nulls) ? $nulls : $this->settings("nulls", null, false, false); + } + + public function default_value($default = null, $nulls = null){ + return $default !== null || $this->nulls($nulls) ? $default : $this->settings("default_value", null, null, true); + } + + public static function is_dictionary($value){ + return is_array($value) && array_values($value) != $value; + } + + public function settings($keys, $inputs = null, $default = null, $nulls = null){ + + $keys = array_filter(array_unique(array_map(fn($key) => is_string($key) && ($key = trim($key)) ? $key : null, $keys)), fn($key) => $key); + + if(count($keys)){ + + $nulls = $this->nulls($nulls); + + foreach(array_merge( + is_array($inputs) ? (self::is_dictionary($inputs) ? [$inputs] : $inputs) : [], + [$this->inputs, $this->custom_settings, self::$default_settings] + ) as $subinputs) + if(self::is_dictionary($subinputs)) + foreach($keys as $key) + if(isset($subinputs[$key]) && ($nulls || $subinputs[$key] !== null)) + return $subinputs[$key]; + }; + return $this->default_value($default, $nulls); + } + + public static function string_variables($string, $variables = null, $default = null){ + + $variables = array_filter(is_array($variables) ? (self::is_dictionary($variables) ? [$variables] : $variables) : [], fn($item) => self::is_dictionary($item)); + + return preg_replace_callback('/\{([^\{\}]+)\}/', function($values) use($variables){ + foreach($variables as $subset) + if(isset($subset[$values[1]])) + return $subset[$values[1]]; + return $default ?? $values[0]; + }, $string); + } + + public static function check($conditions, $shift = 0){ + + $error = 0; + $k = 0; + $i = -1; + + if(is_array($conditions) && !self::is_dictionary($conditions)) + foreach($conditions as $condition){ + $ignore = false; + $i ++; + if(is_array($condition)){ + if(($l = count($condition)) == 2) + list($condition, $ignore) = $condition; + else + list($suberror, $sub_k) = self::check($condition); + }; + if(is_callable($condition) ? $condition() : (is_bool($condition) ? $condition : false)){ + $ignore || + ($error |= 1 << ($shift + $k + $i)); + break; + }; + }; + + return [$error, $k + $shift + $i]; + } + + public function fix_path($path){ + + $error = self::check([ + fn() => $path === null, + fn() => !is_string($path), + [fn() => !$path, true] + ], 1)[0]; + $results = null; + + $error || + ($results = preg_replace('/[\/\\\\]+/', $this->slash, self::string_variables($path, [ + "project_path" => self::root_project_path + ]))); + + return [$results, $error]; + } + + public function get_absolute_path($path){ + + $error = self::check([ + fn() => $path === null, + fn() => !is_string($path), + [fn() => !$path, true] + ], 1)[0]; + $absolute_path = null; + + if(!$error){ + foreach($this->root_paths as $root) + if(file_exists($full_path = $this->fix_path($root . '/' . $path)[0])){ + $absolute_path = $full_path; + break; + }; + $absolute_path === null && + ($error |= 1 << 4); + }; + + return [$absolute_path, $error]; + } + + public function load_file($path){ + + list($path, $error) = $this->absolute_path($path); + $data = null; + + if(!$error) + try{ + $data = file_get_contents($path); + }catch(\Exception $exception){ + $error |= 1 << 0; + }; + + return [$data, $error]; + } + + }; \ No newline at end of file diff --git a/Public/.htaccess b/Public/.htaccess new file mode 100755 index 0000000..0596cc2 --- /dev/null +++ b/Public/.htaccess @@ -0,0 +1,6 @@ +Header set Access-Control-Allow-Origin "*" +RewriteEngine On +RewriteBase / +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] \ No newline at end of file diff --git a/Public/css/Sizerboard.icons.css b/Public/css/Sizerboard.icons.css new file mode 100644 index 0000000..c4025b2 --- /dev/null +++ b/Public/css/Sizerboard.icons.css @@ -0,0 +1,12 @@ +.sizerboard [data-icon=home]::before{content : "\f015"; font-family : "FA5FS";} +.sizerboard [data-icon=documentation]::before{content : "\f05a"; font-family : "FA5FS";} +.sizerboard [data-icon=git]::before{content : "\f841"; font-family : "FA5FB";} +.sizerboard [data-icon=search]::before{content : "\f002"; font-family : "FA5FS";} +.sizerboard [data-icon=add]::before{content : "\f067"; font-family : "FA5FS";} +.sizerboard [data-icon=html]::before{content : "\f121"; font-family : "FA5FS";} +.sizerboard [data-icon=canvas]::before{content : "\f1c5"; font-family : "FA5FR";} +.sizerboard [data-icon=svg]::before{content : "\f279"; font-family : "FA5FS";} +.sizerboard [data-icon=text]::before{content : "\f1c9"; font-family : "FA5FR";} +.sizerboard [data-icon=upload]::before{content : "\f093"; font-family : "FA5FS";} +.sizerboard [data-icon=save]::before{content : "\f0c7"; font-family : "FA5FS";} +.sizerboard [data-icon=download]::before{content : "\f019"; font-family : "FA5FS";} \ No newline at end of file diff --git a/Public/ecma/Sizerboard.Base.ecma.js b/Public/ecma/Sizerboard.Base.ecma.js new file mode 100644 index 0000000..a16af21 --- /dev/null +++ b/Public/ecma/Sizerboard.Base.ecma.js @@ -0,0 +1,103 @@ +Sizerboard.Base = function(sizerboard, inputs){ + + const self = this, + screen_cache = {x : 0, y : 0}, + texts_cache = {} + let started = false, + thread = null; + + const construct = () => { + + sizerboard.print("info", "sizerboard_base_building"); + + sizerboard.print("ok", "sizerboard_base_built"); + + }; + + const changes_thread_method = () => { + + if(screen_cache.x != sizerboard.item_self.offsetWidth || screen_cache.y != sizerboard.item_self.offsetHeight){ + + screen_cache.x = sizerboard.item_self.offsetWidth; + screen_cache.y = sizerboard.item_self.offsetHeight; + + sizerboard.item_self.style.fontSize = (screen_cache[screen_cache.x < screen_cache.y ? "x" : "y"] / Number(sizerboard.item_self.getAttribute("data-cells"))) + "px"; + + }; + + ["projects_menu", "draw_box"].forEach(key => { + + const text_box = sizerboard.item_self.querySelector("p[data-i18n=" + key + "_text]"); + let y; + + if(text_box && ( + !texts_cache[key] || + text_box.innerText != texts_cache[key].text || + (y = text_box.offsetHeight / Number(sizerboard.item_self.style.fontSize.slice(0, -2))) != texts_cache[key].y + )){ + + (texts_cache[key] || (texts_cache[key] = {})).text = text_box.innerText; + texts_cache[key].y = y; + + text_box.parentNode.querySelector("p+ul").style.top = y + "em"; + text_box.parentNode.querySelector("p+ul+*").style.top = (1.4 + y) + "em"; + + }; + + }); + + }; + + this.start = callback => { + + const end = status => typeof callback == "function" && callback(status); + + sizerboard.print("info", "sizerboard_base_starting"); + + if(started){ + sizerboard.print("warn", "sizerboard_base_already_started"); + end(false); + return false; + }; + started = true; + + sizerboard.preload(sizerboard.settings("position"), (position, error, asynchronous) => { + if(error) + return; + + const classes = sizerboard.settings("class"), + hash = sizerboard.hash(); + + position.innerHTML = sizerboard.views.get("base_view", { + application : sizerboard.settings(["application_name", "application"]), + git : sizerboard.settings(["application_git", "git"]), + url : sizerboard.settings(["application_url", "url"]), + hash : hash, + classes : classes ? " " + classes : "", + cells : sizerboard.settings("cells"), + main_menu_items : sizerboard.views.get_multiple_items("main_menu_item", sizerboard.settings("main_menu_items"))[0], + preloader : sizerboard.build_preloader((view, error, asynchronous) => { + if(error) + return; + + const self_error = sizerboard.set_self(view, hash); + + if(self_error) + return; + + thread = sizerboard.thread_add(changes_thread_method); + + sizerboard.print("ok", "sizerboard_base_started"); + end(true); + + }), + projects : sizerboard.views.get_multiple_items("project_option", [])[0] + })[0]; + }); + + return true; + }; + + construct(); + +}; \ No newline at end of file diff --git a/Public/ecma/Sizerboard.DrawBox.ecma.js b/Public/ecma/Sizerboard.DrawBox.ecma.js new file mode 100644 index 0000000..e8bc0a5 --- /dev/null +++ b/Public/ecma/Sizerboard.DrawBox.ecma.js @@ -0,0 +1,48 @@ +Sizerboard.DrawBox = function(sizerboard, inputs){ + + const self = this; + let started = false; + + const construct = () => { + + sizerboard.print("info", "sizerboard_draw_box_building"); + + sizerboard.print("ok", "sizerboard_draw_box_built"); + + }; + + this.start = callback => { + + const end = status => typeof callback == "function" && callback(status); + + sizerboard.print("info", "sizerboard_draw_box_starting"); + + if(started){ + sizerboard.print("warn", "sizerboard_draw_box_already_started"); + end(false); + return false; + }; + started = true; + + sizerboard.print("ok", "sizerboard_draw_box_started"); + end(true); + + return true; + }; + + this.show = (item, event, key) => { + if(item.hasAttribute("disabled")) + return; + + sizerboard.item_self.querySelector(".draw-box").setAttribute("data-mode", key); + sizerboard.item_self.querySelectorAll(".draw-box .fields>[data-visible=true]").forEach(section => section.setAttribute("data-visible", false)); + item.parentNode.parentNode.querySelectorAll("[disabled]").forEach(button => button.removeAttribute("disabled")); + + sizerboard.item_self.querySelector(".draw-box .fields>." + key).setAttribute("data-visible", true); + item.setAttribute("disabled", true); + + }; + + construct(); + +}; \ No newline at end of file diff --git a/Public/ecma/Sizerboard.Projects.ecma.js b/Public/ecma/Sizerboard.Projects.ecma.js new file mode 100644 index 0000000..3b81cbf --- /dev/null +++ b/Public/ecma/Sizerboard.Projects.ecma.js @@ -0,0 +1,90 @@ +Sizerboard.Projects = function(sizerboard, inputs){ + + const self = this; + let started = false, + cache = "", + autosearch_thread; + + const construct = () => { + + sizerboard.print("info", "sizerboard_projects_building"); + + sizerboard.print("ok", "sizerboard_projects_built"); + + }; + + this.start = callback => { + + const end = status => typeof callback == "function" && callback(status); + + sizerboard.print("info", "sizerboard_projects_starting"); + + if(started){ + sizerboard.print("warn", "sizerboard_projects_already_started"); + end(false); + return false; + }; + started = true; + + sizerboard.preload("#projects_menu_search", (item, error, asynchronous) => ( + error || + (autosearch_thread = sizerboard.thread_add(autosearch_thread_method)) + )); + + sizerboard.print("ok", "sizerboard_projects_started"); + end(true); + + return true; + }; + + const autosearch_thread_method = () => { + + const text = sizerboard.item_self.querySelector(".projects-menu .search-box [name=search]").value; + + if(text != cache){ + cache = text; + sizerboard.item_self.querySelectorAll(".projects-menu nav li").forEach(item => item.setAttribute("data-visible", !cache || item.innerText.includes(cache))); + }; + + }; + + this.search = (item, event) => {}; + + this.add = (item, event) => { + + let name = item.parentNode.parentNode.querySelector("[type=text]").value, + error = ( + name === undefined ? 1 << 0 : + name === null ? 1 << 1 : + typeof name != "string" ? 1 << 2 : + !name ? 1 << 3 : + !(name = name.trim()) ? 1 << 4 : + /[^a-z0-9_\- ]/i.test(name) ? 1 << 5 : + sizerboard.item_self.querySelector(".projects-menu nav li[data-name=" + name + "]") ? 1 << 6 : + ["null"].includes(name) ? 1 << 7 : + 0) << 1; + + error || + (sizerboard.item_self.querySelector(".projects-menu nav>ul").innerHTML += sizerboard.views.get("project_option", { + name : name, + i : sizerboard.item_self.querySelectorAll(".projects-menu nav li").length + })[0]); + + }; + + this.get_in_gui = (item, event) => { + + sizerboard.item_self.querySelectorAll(".projects-menu nav li[data-selected=true]").forEach(item => { + item.hasAttribute("disabled") && item.removeAttribute("disabled"); + item.setAttribute("data-selected", false); + }); + + sizerboard.item_self.querySelector(".draw-box").setAttribute("data-selected", item.getAttribute("data-name")); + item.setAttribute("data-selected", true); + item.setAttribute("disabled", true); + + }; + + construct(); + +}; \ No newline at end of file diff --git a/Public/ecma/Sizerboard.Views.ecma.js b/Public/ecma/Sizerboard.Views.ecma.js new file mode 100644 index 0000000..2cdf56b --- /dev/null +++ b/Public/ecma/Sizerboard.Views.ecma.js @@ -0,0 +1,186 @@ +Sizerboard.Views = function(sizerboard, inputs){ + + const self = this, + views = {}; + let started = false, + default_overwrite = false; + + const construct = () => { + + sizerboard.print("info", "sizerboard_views_building"); + + sizerboard.print("ok", "sizerboard_views_built"); + + }; + + this.start = callback => { + + const end = status => typeof callback == "function" && callback(status); + + sizerboard.print("info", "sizerboard_views_starting"); + + if(started){ + sizerboard.print("warn", "sizerboard_views_already_started"); + end(false); + return false; + }; + started = true; + + default_overwrite = sizerboard.settings(["views_overwrite", "overwrite"]); + + sizerboard.execute_array_items(["default_views_files", "views_files"], (key, callback) => { + self.add(sizerboard.settings(key), true, callback); + }, () => { + sizerboard.print("ok", "sizerboard_views_started"); + end(true); + }); + + return true; + }; + + const add_json = (data, overwrite, callback) => { + + let json; + + try{ + json = JSON.parse(data); + }catch(exception){}; + + if(json) + add(json instanceof Array ? json : [json], overwrite, callback, 0); + else + callback(); + + }; + + const add = (inputs, overwrite, callback, i) => { + + if(!inputs || (i || (i = 0)) >= inputs.length){ + typeof callback == "function" && callback(); + return; + }; + + const end = () => add(inputs, overwrite, callback, i + 1); + + if(!inputs[i]){ + end(); + return; + }; + + switch(typeof inputs[i]){ + case "string": + if(/^(\[(.+|[\r\n]+)\]|\{(.+|[\r\n]+)\})$/.test(inputs[i].trim())) + add_json(inputs[i], overwrite, end); + else if(/^[^\s][^\r\n]+[^\s]$/.test(inputs[i])) + sizerboard.load_file(inputs[i], response => add([response], overwrite, end, 0)); + else{ + + let matches; + + while(matches = inputs[i].match(/\<\!\-{2} *\[{2}([^\[\]]+)\]{2} *\-{2}\>/)){ + + const key = matches[1].trim(); + + inputs[i] = inputs[i].substring(matches.index + matches[0].length); + + if(matches = inputs[i].match(new RegExp("\\<\\!\\-{2} *\\[{2} *" + key + " *\\]{2} *\\-{2}\\>"))){ + (overwrite || views[key] === undefined) && (views[key] = inputs[i].substring(0, matches.index)); + inputs[i] = inputs[i].substring(matches.index + matches[0].length); + }; + + }; + + end(); + + }; + break; + case "object": + if(inputs[i] instanceof Array) + add(inputs[i], overwrite, end, 0); + else{ + for(const key in inputs[i]) + typeof inputs[i] == "string" && (overwrite || views[key] === undefined) && (views[key] = inputs[i]); + end(); + }; + break; + default: + end(); + break; + }; + + }; + + this.add = (inputs, overwrite, callback) => add( + typeof inputs == "object" && inputs instanceof Array ? inputs : [inputs], + typeof overwrite == "boolean" ? overwrite : default_overwrite, + callback, + 0 + ); + + this.validate = key => ( + key === undefined ? 1 << 0 : + key === null ? 1 << 1 : + typeof key != "string" ? 1 << 2 : + !key ? 1 << 3 : + !(key = key.trim()) ? 1 << 4 : + views[key] === undefined ? 1 << 5 : + 0); + + const set_variables = (view, variables, _default) => view.replace(/(object_name)/g, "{$1}").replace(/\{([^\{\}]+)\}|\{{2}([^\{\}]+)\}{2}/g, (all, key, i18n) => { + if(key){ + for(let i = 0, l = variables.length; i < l; i ++) + if(variables[i][key] !== undefined) + return variables[i][key]; + }else{ + + for(let i = 0, l = variables.length; i < l; i ++) + if(variables[i][i18n] !== undefined){ + i18n = variables[i][i18n]; + break; + }; + + const text = sizerboard.i18n(i18n, variables, _default === undefined ? null : _default); + + return text !== null ? text : i18n; + }; + return all; + }); + + const get_variables_array = variables => ( + variables && typeof variables == "object" ? variables instanceof Array ? variables : [variables] : [] + ).filter(subset => subset && typeof subset == "object"); + + this.get = (key, variables, _default) => { + + let error = self.validate(key) << 1, + view = _default; + + !error && (view = set_variables(views[key], get_variables_array(variables).concat([{ + object_name : sizerboard.object_name + }]), _default)); + + return [view, error]; + }; + + this.get_multiple_items = (key, items, variables, _default) => { + + let error = ( + (self.validate(key) << 0) | + (( + items === undefined ? 1 << 0 : + items === null ? 1 << 1 : + typeof items != "object" ? 1 << 2 : + !(items instanceof Array) ? 1 << 3 : + items.some(item => !item || typeof item != "object") ? 1 << 4 : + 0) << 7) | + 0), + results = null; + + !error && (results = items.map(item => set_variables(views[key], get_variables_array(variables).concat([item]), _default)).join("")); + + return [results, error]; + }; + + construct(); + +}; \ No newline at end of file diff --git a/Public/ecma/Sizerboard.ecma.js b/Public/ecma/Sizerboard.ecma.js index e074f9c..0f693e1 100644 --- a/Public/ecma/Sizerboard.ecma.js +++ b/Public/ecma/Sizerboard.ecma.js @@ -7,19 +7,88 @@ Sizerboard = function(inputs){ default_text : "", autostart : true, default_language : "english", - timeout : 2000 + timeout : 2000, + print_format : "[{type}] {yyyy}{mm}{dd} {hh}{ii}{ss} [{line}]{file}({method}): {message}", + gui_mode : "light", + frames_per_second : 24, + position : "body", + default_settings_files : [ + "/json/Sizerboard.settings.json", + "/json/Sizerboard.settings.secrets.json" + ], + object_name : "sizerboard" }, settings = {}, - sentences = {}; + sentences = {}, + print_types = [ + ["unkn", "unknown"], + ["info", "information"], + [" ok ", "ok", "yes", "y"], + ["erro", "error", "wrong"], + ["warn", "warning"], + ["exce", "except", "exception"], + ["note", "test", "tests", "notes", "data"] + ], + print_styles = { + unkn : { + dark : "color : #AAA;", + light : "color : #666;" + }, + info : { + dark : "color : #99F;", + light : "color : #009;" + }, + ok : { + dark : "color : #9F9;", + light : "color : #090;" + }, + note : { + dark : "color : #222;", + light : "color : #EFEFEF;" + } + }, + threads = [], + hashes = []; let started = false, language, default_language, allow_settings_nulls, default_text, default_value, - ajax_timeout; + ajax_timeout, + print_format = "[{type}] {yyyy}{mm}{dd} {hh}{ii}{ss} [{line}]{file}({method}): {message}", + gui_mode = "light", + threads_interval, + frames_per_second = 24, + preload_timeout = 2000, + hashes_alphabet, hashes_length; + + const re_trace_block = new RegExp("^(" + [ + /\s*at\s+(([^\s]+)\s+\()?(([^\(\)\:]+\:)?[^\(\)\:]+)(\:([0-9]+)\:[0-9]+)?\)?/.source, // Webkit + /([^\@]+)\@([^:]+\:[^\:]+)\:([0-9]+)\:[0-9]+/.source, // Gecko + ].join("|") + ")$"); + + let object_name = this.object_name; + let item_self = this.item_self = document; + let hash_self = this.hash_self; + + let base = this.base; + let views = this.views; + let projects = this.projects; + let draw_box = this.draw_box; const construct = () => { basic_values(); + self.print("info", "sizerboard_building"); + + object_name = self.object_name = self.settings("object_name"); + + base = self.base = new Sizerboard.Base(self, inputs); + views = self.views = new Sizerboard.Views(self, inputs); + projects = self.projects = new Sizerboard.Projects(self, inputs); + draw_box = self.draw_box = new Sizerboard.DrawBox(self, inputs); + + self.print("ok", "sizerboard_built"); + self.settings("autostart") && self.start(); }; @@ -32,26 +101,52 @@ Sizerboard = function(inputs){ language = self.settings(["language", "default_language"]); default_language = self.settings(["default_language", "language"]); ajax_timeout = self.settings(["ajax_timeout", "timeout"]); + print_format = self.settings("print_format"); + gui_mode = self.settings("gui_mode"); }; this.start = callback => { const end = status => typeof callback == "function" && callback(status); + + self.print("info", "sizerboard_starting"); if(started){ + self.print("warn", "sizerboard_already_started"); end(false); return false; }; started = true; + basic_values(); + + self.print("info", "settings_loading"); self.execute_array_items(["default_settings_files", "settings_files"], (key, callback) => { self.settings_add(self.settings(key), true, callback); + basic_values(); }, () => { + self.print("ok", "settings_loaded"); + + frames_per_second = self.settings("frames_per_second"); + preload_timeout = self.settings(["preload_timeout", "timeout"]); + hashes_alphabet = self.settings(["hashes_alphabet", "alphabet"]); + hashes_length = self.settings(["hashes_length", "length"]); + + threads_interval = setInterval(threads_method, 1000 / frames_per_second); + + self.print("info", "i18n_loading"); self.execute_array_items(["default_i18n_files", "i18n_files"], (key, callback) => { self.i18n_add(self.settings(key), true, callback); }, () => { - end(true); + self.print("ok", "i18n_loaded"); + + self.execute_array_items([views, base, projects, draw_box], (item, callback) => { + item.start(callback); + }, () => { + self.print("ok", "sizerboard_started"); + end(true); + }); }); }); @@ -61,15 +156,17 @@ Sizerboard = function(inputs){ this.nulls = nulls => typeof nulls == "boolean" ? nulls : allow_settings_nulls; this.default_value = (_default, nulls) => _default !== undefined && (_default !== null || self.nulls(nulls)) ? _default : default_value; + + this.set_keys = keys => (typeof keys == "object" && keys instanceof Array ? keys : [keys]).filter(key => typeof key == "string" && key.trim()).map(key => key.trim()); - this.settings = (keys, inputs, _default, nulls) => { + this.settings = (keys, own_inputs, _default, nulls) => { - const m = (keys = (typeof inputs == "object" && inputs instanceof Array ? inputs : [inputs]).filter(subinputs => typeof subinpunts == "string" && subinputs.trim()).map(subinputs => subinputs.trim())).length; + const m = (keys = self.set_keys(keys)).length; if(m){ - const l = (inputs = ( - inputs == "object" ? inputs instanceof Array ? inputs : [inputs] : [] + const l = (own_inputs = ( + own_inputs == "object" ? own_inputs instanceof Array ? own_inputs : [own_inputs] : [] ).concat( [inputs, settings, default_settings] )).length; @@ -77,10 +174,10 @@ Sizerboard = function(inputs){ nulls = self.nulls(nulls); for(let i = 0; i < l; i ++) - if(typeof inputs[i] == "object") + if(own_inputs[i] && typeof own_inputs[i] == "object") for(let j = 0; j < m; j ++) - if(inputs[i][keys[j]] !== undefined && (nulls || inputs[i][keys[j]] !== null)) - return inputs[i][keys[j]]; + if(own_inputs[i][keys[j]] !== undefined && (nulls || own_inputs[i][keys[j]] !== null)) + return own_inputs[i][keys[j]]; }; return self.default_value(_default, nulls); }; @@ -93,7 +190,7 @@ Sizerboard = function(inputs){ timeout = ajax_timeout, date = Date.now(); - ajax.send("get", url, true); + ajax.open("get", url, true); ajax.timeout = timeout; ajax.onreadystatechange = () => { if(ended) @@ -111,17 +208,32 @@ Sizerboard = function(inputs){ return ajax; }; + + this.execute_json = (data, yes, no) => { + + let json; + + try{ + json = JSON.parse(data); + }catch(exception){}; + + if(json) + typeof yes == "function" && yes(json); + else + typeof no == "function" && no(); + + }; this.execute_array_dictionaries = (inputs, partial_callback, full_callback, i) => { - if(typeof inputs != "object" || inputs instanceof Array || (i || (i = 0)) >= inputs.length){ + if(!inputs || typeof inputs != "object" || !(inputs instanceof Array) || (i || (i = 0)) >= inputs.length){ typeof full_callback == "function" && full_callback(); return; }; const end = () => { - inputs[i] && typeof partial_callback == "function" && partial_callback(inputs[i]); - execute_array_dictionaries(inputs, partial_callback, full_callback, i + 1); + inputs[i] && typeof inputs[i] == "object" && typeof partial_callback == "function" && partial_callback(inputs[i]); + self.execute_array_dictionaries(inputs, partial_callback, full_callback, i + 1); }; if(!inputs[i]){ @@ -130,25 +242,16 @@ Sizerboard = function(inputs){ }; if(typeof inputs[i] == "object"){ - if(inputs[i] instanceof Array){ + if(inputs[i] instanceof Array) self.execute_array_dictionaries(inputs[i], partial_callback, end, 0); - return; - }; + else + end(); }else if(typeof inputs[i] == "string"){ - - let json; - - if(/^(\{(.|[\r\n])*\}|\[(.|[\r\n])*)\])$/.test(inputs[i].trim())){ - try{ - json = JSON.parse(inputs[i]); - }catch(exception){}; - json && self.execute_array_dictionaries(json instanceof Array ? json : [json], partial_callback, end, 0); - }else + if(/^(\{(.|[\r\n])*\}|\[(.|[\r\n])*\])$/.test(inputs[i].trim())) + self.execute_json(inputs[i], json => self.execute_array_dictionaries(json instanceof Array ? json : [json], partial_callback, end, 0), end); + else self.load_file(inputs[i], data => { - try{ - json = JSON.parse(data); - }catch(exception){}; - json && self.execute_array_dictionaries(json instanceof Array ? json : [json], partial_callback, end, 0); + self.execute_json(data, json => self.execute_array_dictionaries(json instanceof Array ? json : [json], partial_callback, end, 0), end); }); }else end(); @@ -158,12 +261,12 @@ Sizerboard = function(inputs){ this.execute_array_items = (items, action, callback, i) => { (typeof items != "object" || !(items instanceof Array)) && (items = [items]); - if(!items || i >= items.length){ + if(!items || (i || (i = 0)) >= items.length){ typeof callback == "function" && callback(); return; }; - const end = () => execute_array_items(items, action, callback, i + 1); + const end = () => self.execute_array_items(items, action, callback, i + 1); if(typeof action == "function") action(items[i], end); @@ -176,8 +279,9 @@ Sizerboard = function(inputs){ typeof overwrite != "boolean" && (overwrite = settings_overwrite); self.execute_array_dictionaries(inputs, data => { for(const key in data) - if(overwrite || settings[key] === undefined) - settings[key] = data[key]; + (overwrite || settings[key] === undefined) && + !/^Sizerboard.*_(start|end)$/.test(key) && + (settings[key] = data[key]); }, callback); }; @@ -189,6 +293,7 @@ Sizerboard = function(inputs){ if(typeof data[language] == "object") for(const key in data[language]) (overwrite || sentences[language][key] === undefined) && + !/^Sizerboard.*_(start|end)$/.test(key) && (sentences[language][key] = data[language][key]); }; }, callback); @@ -200,7 +305,7 @@ Sizerboard = function(inputs){ typeof variables == "object" && variables instanceof Array ? variables : [variables] ).filter(variables => typeof variables == "object")).length; - return string.replace(/\{([^\{\}]+)\}/g, (all, key) => { + return ("" + string).replace(/\{([^\{\}]+)\}/g, (all, key) => { for(let i = 0; i < l; i ++) if(variables[i][key] !== undefined) return variables[i][key]; @@ -212,24 +317,285 @@ Sizerboard = function(inputs){ const i18n = (keys, _default) => { - const j = (keys = (typeof keys == "object" && keys instanceof Array ? keys : [keys]).filter(key => typeof key == "string").map(key => key.trim()).filter(key => key)); + const m = (keys = self.set_keys(keys)).length; - if(j){ + if(m){ - const languages = [language, default_language].concat(Object.keys(sentences)), + const languages = [language, default_language].concat(Object.keys(sentences)).filter((language, i, array) => array.indexOf(language) == i), l = languages.length; for(let i = 0; i < l; i ++) - if(languages[i] && typeof languages[i] == "object") - for(let j = 0; j < l; j ++) - if(languages[i][keys[j]] !== undefined) - return languages[i][keys[j]]; + if(sentences[languages[i]]) + for(let j = 0; j < m; j ++) + if(sentences[languages[i]][keys[j]] !== undefined) + return sentences[languages[i]][keys[j]]; return keys[0]; }; return self.default_text(_default); }; - this.i18n = (keys, variables, _default) => self.string_variables(i18n(keys, _default), variables, _default); + this.i18n = (keys, variables, _default) => { + + const text = i18n(keys, _default); + + return self.string_variables(typeof text == "object" ? text.join("") : text, variables, _default); + }; + + this.get_print_type = type => { + + const l = print_types.length; + + type = type.toLowerCase(); + + for(let i = 0; i < l; i ++) + if(print_types[i].includes(type)) + return print_types[i][0].toUpperCase(); + return print_types[0][0]; + }; + + this.get_trace = i => (new Error()).stack.replace(/^Error\s*?[\r\n]+/, "").trim().split(/[\r\n]+/).slice(1 + (i || 0)).map(line => { + + const matches = line.match(re_trace_block); + + return matches ? { + file : matches[4] || matches[9], + method : matches[3] || matches[8] || "", + line : Number(matches[7] || matches[10]) + } : null; + }).filter(line => line); + + this.print = (type, message, variables, i) => { + + const date = new Date(), + own = { + ...(( + variables ? typeof variables == "object" ? [variables] : variables instanceof Array ? variables : [] : [] + ).reduce((results, set) => typeof set == "object" ? {...results, ...set} : results, {})), + ...self.get_trace(i || 1)[0], + raw_type : type, + type : self.get_print_type(type) + }; + + ["year", "month", "day", "hours", "minutes", "seconds"].forEach(key => { + + const k = key != "minutes" ? key[0] : "i"; + + own[k + k] = ("00" + (own[k] = (own[key] = date["get" + ( + key == "year" ? "FullYear" : + key == "day" ? "Date" : + key[0].toUpperCase() + key.substring(1) + )]()) % 100)).slice(-2); + + }); + own.yyyy = own.year; + + const final_message = self.string_variables(print_format, { + ...own, + message : self.i18n(message, own) + }); + + switch(own.type){ + case "INFO": + console.log("%c" + final_message, print_styles.info[gui_mode]); + break; + case " OK ": + console.log("%c" + final_message, print_styles.ok[gui_mode]); + break; + case "ERRO": + case "EXCE": + console.error(final_message); + break; + case "WARN": + console.warn(final_message); + break; + case "NOTE": + console.log("%c" + final_message, print_styles.note[gui_mode]); + break; + case "UNKN": + default: + console.log("%c" + final_message, print_styles.unkn[gui_mode]); + break; + }; + + }; + + const threads_method = () => threads.forEach(thread => { + if(thread) + try{ + thread(); + }catch(exception){}; + }); + + this.thread_add = callback => { + + let error = ( + callback === undefined ? 1 << 0 : + callback === null ? 1 << 1 : + typeof callback != "function" ? 1 << 2 : + 0) << 1, + i = null; + + if(!error){ + + const l = threads.length; + + for(i = 0; i < l; i ++) + if(!threads[i]) + break; + + threads[i] = callback; + + }; + + return [i, error]; + }; + + this.thread_remove = i => { + + let error = ( + i === undefined ? 1 << 0 : + i === null ? 1 << 1 : + isNaN(i) ? 1 << 2 : + i != i >> 0 ? 1 << 3 : + i < 0 ? 1 << 4 : + i >= threads.length ? 1 << 5 : + 0) << 1; + + !i && (threads[i] = null); + + return error; + }; + + this.preload = (selector, callback) => { + + let callback_is_function = typeof callback == "function", + error = ( + (( + selector === undefined ? 1 << 0 : + selector === null ? 1 << 1 : + 0) << 0) | + (( + callback === undefined ? 1 << 0 : + callback === null ? 1 << 1 : + !callback_is_function ? 1 << 2 : + 0) << 10) | + 0) << 1, + item = null, + asynchronous = false; + const end = () => callback_is_function && callback(item, error, asynchronous); + + if(!error){ + switch(typeof selector){ + case "string": + if(!(error |= ( + !selector ? 1 << 5 : + !(selector = selector.trim()) ? 1 << 6 : + 0) << 5)){ + + try{ + (item = item_self.querySelector(selector)) && end(); + }catch(exception){ + error |= 1 << 7; + end(); + }; + + if(!item && !error){ + + const date = Date.now(), + [thread, suberror] = self.thread_add(() => { + if(item = item_self.querySelector(selector)){ + self.thread_remove(thread); + end(); + }else if(Date.now() - date > preload_timeout){ + self.thread_remove(thread); + error |= 1 << 8; + end(); + }; + }); + + }; + + }; + break; + case "object": + if(selector.tagName || selector.nodeName) + item = selector; + else + error |= 1 << 4; + end(); + break; + default: + error |= 1 << 3; + end(); + break; + }; + }; + + return error; + }; + + this.hash = () => { + + let hash; + const l = hashes_alphabet.length; + + do{ + hash = ""; + while((hash += hashes_alphabet[Math.random() * l >> 0]).length < hashes_length); + }while( + hashes.includes(hash) || + /^[0-9]/.test(hash) || + document.querySelector("#" + hash + ",." + hash + ",[name=" + hash + "]") + ); + hashes.push(hash); + + return hash; + }; + + this.build_preloader = callback => { + + const hash = self.hash(); + + self.preload("[data-preloader=" + hash + "]", (preloader, error, asynchronous) => { + typeof callback == "function" && callback(error ? null : preloader.parentNode, error, asynchronous); + preloader.remove(); + }); + + return `
`; + }; + + this.set_self = (item, hash) => { + + let error = (( + ((item_self.tagName || item_self.nodeName) != "#document" ? 1 << 0 : 0) | + (hash_self ? 1 << 1 : 0) | + 0) || ( + (( + item === undefined ? 1 << 0 : + item === null ? 1 << 1 : + typeof item != "object" ? 1 << 2 : + !item.tagName && !item.nodeName ? 1 << 3 : + (item.tagName || item.nodeName) == "#document" ? 1 << 4 : + 0) << 2) | + (( + hash === undefined ? 1 << 0 : + hash === null ? 1 << 1 : + typeof hash != "string" ? 1 << 2 : + !hash ? 1 << 3 : + !hash.trim() ? 1 << 4 : + hash != hash.trim() ? 1 << 5 : + hash.split("").some(character => !hashes_alphabet.includes(character)) ? 1 << 6 : + hash.length < hashes_length ? 1 << 7 : + 0) << 7) | + 0)) << 1; + + if(!error){ + item_self = self.item_self = item; + hash_self = self.hash_self = hash; + }; + + return error; + }; construct(); diff --git a/Public/html/Sizerboard.views.html b/Public/html/Sizerboard.views.html new file mode 100644 index 0000000..3021c24 --- /dev/null +++ b/Public/html/Sizerboard.views.html @@ -0,0 +1,151 @@ + + + + Sizerboard - Views + + + + + + + +
+
+

+ + + {{sizerboard}} + +

+ +
+
+
+
+ {{projects_menu}} +

{{projects_menu_text}}

+ + +
+
+
+
+ {{draw_box}} +

{{draw_box_text}}

+
    +
  • +
  • +
  • +
  • +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ {{actions}} +

{{actions_text}}

+ +
+
+ + {preloader} +
+ + + + + + \ No newline at end of file diff --git a/Public/index.html b/Public/index.html deleted file mode 100644 index 6481d1a..0000000 --- a/Public/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - Sizerboard - - - - - - - - diff --git a/Public/index.php b/Public/index.php new file mode 100644 index 0000000..a0f452c --- /dev/null +++ b/Public/index.php @@ -0,0 +1,58 @@ + 1 && + ($language_code = $matches[1][0]); + + if($language_code != $default_language_code && isset($languages_dictionary[$language_code])) + $languages[] = $languages_dictionary[$language_code]; + else + $language_code = $default_language_code; + +?> + + + Sizerboard + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Public/json/Sizerboard.settings.json b/Public/json/Sizerboard.settings.json new file mode 100644 index 0000000..432cab6 --- /dev/null +++ b/Public/json/Sizerboard.settings.json @@ -0,0 +1,33 @@ +{ + "nulls" : false, + "default_value" : null, + "default_text" : "", + "autostart" : true, + "default_language" : "english", + "timeout" : 2000, + "print_format" : "[{type}] {yyyy}{mm}{dd} {hh}{ii}{ss} [{line}]{file}({method}): {message}", + "gui_mode" : "light", + "frames_per_second" : 24, + "position" : "body", + "views_overwrite" : false, + "default_views_files" : "/html/Sizerboard.views.html", + "logo" : "/images/Sizerboard.webp", + "application_name" : "Sizerboard", + "application_url" : "https://sizerboard.k3y.pw/", + "application_git" : "https://git.k3y.pw/KyMAN/Sizerboard", + "cells" : 40, + "main_menu_items" : [ + {"i18n" : "home", "icon" : "home", "url" : "/", "target" : "_self"}, + {"i18n" : "documentation", "icon" : "documentation", "url" : "/doc", "target" : "_blank"}, + {"i18n" : "git", "icon" : "git", "url" : "https://git.k3y.pw/KyMAN/Sizerboard", "target" : "_blank"} + ], + "default_i18n_files" : [ + "/json/i18n/Sizerboard.i18n.english.json", + "/json/i18n/Sizerboard.i18n.espanol.json", + "/json/i18n/Sizerboard.i18n.nihongo.json", + "/json/i18n/Sizerboard.i18n.russkiy.json", + "/json/i18n/Sizerboard.i18n.alarabiyah.json" + ], + "hashes_alphabet" : "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", + "hashes_length" : 11 +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.alarabiyah.json b/Public/json/i18n/Sizerboard.i18n.alarabiyah.json new file mode 100644 index 0000000..9d77f93 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.alarabiyah.json @@ -0,0 +1,34 @@ +{ + "alarabiyah" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "المدير", + "documentation" : "الوثائق", + "git" : "Git", + "projects_menu" : "قائمة بالمشروع", + "projects_menu_text" : "هذه قائمة المشروع ثم يمكنك التصفية باسم المشاريع التي تملكها، وإذا لم يكن هناك اسم، يمكنك خلقه.", + "search" : "البحث", + "add" : "مضافا إليها", + "draw_box" : "الإطار", + "draw_box_text" : "وسيتضمن هذا الإطار رسومات وأدوات وصناديق نصية للتحرير.", + "html" : "HTML", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "النص", + "code" : "المدونة", + "actions" : "الإجراءات", + "actions_text" : "ويتضمن هذا الإطار الإجراءات العامة ضد مشاريعكم.", + "upload" : "فوق", + "save" : "أنقذ", + "download" : "تحميل", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.azerbaycanca.json b/Public/json/i18n/Sizerboard.i18n.azerbaycanca.json new file mode 100644 index 0000000..8ca6e35 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.azerbaycanca.json @@ -0,0 +1,34 @@ +{ + "azerbaycanca" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : " Principal", + "documentation" : "Tarix", + "git" : "Qeydiyyat", + "projects_menu" : "Elanlar", + "projects_menu_text" : "Bu layihə meneceridir. Sonra siz öz layihələrin adı ilə filter edə bilərsiniz, və adı varsa, onu yaraya bilərsiniz.", + "search" : "Axtarış", + "add" : "Axtarış", + "draw_box" : "Tarix", + "draw_box_text" : "Bu səhifə konfiqurasiyalar, alətlər və məhsul qutusu daxil edəcək.", + "html" : " HTML", + "canvas" : "Qeydiyyat", + "svg" : "QALEREYA", + "text" : "Tarix", + "code" : "Qeydiyyat", + "actions" : "Proqramlar", + "actions_text" : "Bu səhifə sizin layihələrinə qarşı ümumi həyata malikdir.", + "upload" : "Qeydiyyat", + "save" : "Daxil ol", + "download" : "Pulsuz", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.catala.json b/Public/json/i18n/Sizerboard.i18n.catala.json new file mode 100644 index 0000000..c681ace --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.catala.json @@ -0,0 +1,34 @@ +{ + "catala" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Principal", + "documentation" : "Documentació", + "git" : "Git", + "projects_menu" : "Menú del projecte", + "projects_menu_text" : "Aquest és el menú del projecte. Si no hi ha cap nom, podeu crear-lo.", + "search" : "Cerca", + "add" : "Afegir", + "draw_box" : "Box dibuixat", + "draw_box_text" : "Aquest marc conté dibuixos representatius, eines i caixa de text per a l'edició.", + "html" : "HTML", + "canvas" : "Llenç", + "svg" : "SVG", + "text" : "Text", + "code" : "Codi", + "actions" : "Accions", + "actions_text" : "Aquest marc conté les accions generals contra els vostres projectes.", + "upload" : "Amunt", + "save" : "Save", + "download" : "Descàrrega", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.cestina.json b/Public/json/i18n/Sizerboard.i18n.cestina.json new file mode 100644 index 0000000..6d5f46c --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.cestina.json @@ -0,0 +1,34 @@ +{ + "cestina" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Čeština", + "documentation" : "Odkazy", + "git" : "Čeština", + "projects_menu" : "Nabídka projektu", + "projects_menu_text" : "Jedná se o nabídku projektu. Poté můžete filtrovat podle názvu projektů, které vlastníte, a pokud není jméno, můžete jej vytvořit.", + "search" : "Hledat", + "add" : "Čeština", + "draw_box" : "Box nakreslený", + "draw_box_text" : "Tento rámec bude obsahovat reprezentativní výkresy, nástroje a textové pole pro úpravy.", + "html" : "ČEŠTINA", + "canvas" : "Čeština", + "svg" : "ČEŠTINA", + "text" : "Čeština", + "code" : "Kód", + "actions" : "Akce", + "actions_text" : "Tento rámec obsahuje obecné akce proti svým projektům.", + "upload" : "Nahoru", + "save" : "Čeština", + "download" : "Čeština", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.dansk.json b/Public/json/i18n/Sizerboard.i18n.dansk.json new file mode 100644 index 0000000..6379914 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.dansk.json @@ -0,0 +1,34 @@ +{ + "dansk" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "I NÆRHEDEN AF Sizerboard", + "home" : "Fyrste", + "documentation" : "Dokumentation", + "git" : "Git", + "projects_menu" : "Projektmenu", + "projects_menu_text" : "Dette er projektmenuen. Så kan du filtrere ved at nævne de projekter, du ejer, og hvis der ikke er noget navn, kan du oprette det.", + "search" : "Søg Søg Søg", + "add" : "Tilføj Tilføj Tilføj Tilføj", + "draw_box" : "Box tegnet", + "draw_box_text" : "Denne ramme indeholder repræsentative tegninger, værktøjer og tekstboks til redigering.", + "html" : "HTML", + "canvas" : "Fotolærred", + "svg" : "SVG", + "text" : "Tekst tekst", + "code" : "Kodekode", + "actions" : "Handlinger", + "actions_text" : "Denne ramme indeholder de generelle handlinger mod dine projekter.", + "upload" : "Up Up Up Up", + "save" : "Gem Gem Gem Gem Gem Gem", + "download" : "Download Download Download Download", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.deutsch.json b/Public/json/i18n/Sizerboard.i18n.deutsch.json new file mode 100644 index 0000000..dcab14c --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.deutsch.json @@ -0,0 +1,34 @@ +{ + "deutsch" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Auftraggeber", + "documentation" : "Dokumentation", + "git" : "Gier", + "projects_menu" : "Projektmenü", + "projects_menu_text" : "Das ist das Projektmenü. Dann können Sie mit Namen die Projekte filtern, die Sie besitzen, und wenn es keinen Namen gibt, können Sie es erstellen.", + "search" : "Suche", + "add" : "Hinzufügen", + "draw_box" : "Feld gezogen", + "draw_box_text" : "Dieser Rahmen enthält repräsentative Zeichnungen, Werkzeuge und Textbox zur Bearbeitung.", + "html" : "HTML", + "canvas" : "~", + "svg" : "SVG", + "text" : "Text", + "code" : "Code", + "actions" : "Maßnahmen", + "actions_text" : "Dieser Rahmen enthält die allgemeinen Aktionen gegen Ihre Projekte.", + "upload" : "Nach oben", + "save" : "Speichern", + "download" : "Downloads", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.ellinika.json b/Public/json/i18n/Sizerboard.i18n.ellinika.json new file mode 100644 index 0000000..9e04205 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.ellinika.json @@ -0,0 +1,52 @@ +{ + "ellinika" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Πριγκιπ Πριγκιερ", + "documentation" : "Τεκμηρίωση", + "git" : "Git Git", + "projects_menu" : "Πρόγραμμα μενού μενού", + "projects_menu_text" : [ + "Αυτό είναι το μενού του έργου. Στη συνέχεια μπορείτε να ", + "φιλτράρετε με το όνομα τα έργα που διαθέτετε και αν δεν υπάρχει ", + "όνομα, μπορείτε να το δημιουργήσετε." + ], + "search" : "Αναζήτηση Αναζήτηση Αναζήτηση", + "add" : "Προσθήκη Προσθήκη", + "draw_box" : "Box", + "draw_box_text" : "Αυτό το πλαίσιο θα περιέχει αντιπροσωπευτικά σχέδια, εργαλεία και πλαίσιο κειμένου για επεξεργασία.", + "html" : "HTML HTML HTML HTML", + "canvas" : "Canvas", + "svg" : "MODE", + "text" : "Κείμενο κείμενο κείμενο κείμενο κείμενο κείμενο κείμενο κείμενο κείμενο κείμενο", + "code" : "Κώδικα κώδικα", + "actions" : "Δράση", + "actions_text" : "Το πλαίσιο αυτό περιέχει τις γενικές δράσεις κατά των έργων σας.", + "upload" : [ + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up Up ", + "Up Up Up Up" + ], + "save" : "Εξοικονομήστε", + "download" : "Download Download Download", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.english.json b/Public/json/i18n/Sizerboard.i18n.english.json new file mode 100644 index 0000000..261ee17 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.english.json @@ -0,0 +1,34 @@ +{ + "english" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Principal", + "documentation" : "Documentation", + "git" : "Git", + "projects_menu" : "Project menu", + "projects_menu_text" : "This is the project menu. Then you can filter by name the projects you own, and if there is no name, you can create it.", + "search" : "Search", + "add" : "Add", + "draw_box" : "Box drawn", + "draw_box_text" : "This framework will contain representative drawings, tools and text box for editing.", + "html" : "HTML", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "Text", + "code" : "Code", + "actions" : "Actions", + "actions_text" : "This framework contains the general actions against your projects.", + "upload" : "Up", + "save" : "Save", + "download" : "Download", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.espanol.json b/Public/json/i18n/Sizerboard.i18n.espanol.json new file mode 100644 index 0000000..7b4a317 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.espanol.json @@ -0,0 +1,37 @@ +{ + "espanol" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Principal", + "documentation" : "Documentación", + "git" : "Git", + "projects_menu" : "Menú de proyectos", + "projects_menu_text" : [ + "Este es el menú de proyectos. A continuación podrás filtrar por nombre los proyectos que ", + "posees, y en caso de no existir el nombre, lo podrás crear." + ], + "search" : "Buscar", + "add" : "Añadir", + "draw_box" : "Caja de dibujado", + "draw_box_text" : "Este marco contendrá los dibujos representativos, sus herramientas y el cuadro de texto para edición.", + "html" : "HTML", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "Texto", + "code" : "Código", + "actions" : "Acciones", + "actions_text" : "Este marco contiene las acciones generales contra tus proyectos.", + "upload" : "Subir", + "save" : "Guardar", + "download" : "Descargar", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.esperanto.json b/Public/json/i18n/Sizerboard.i18n.esperanto.json new file mode 100644 index 0000000..4ed6dbe --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.esperanto.json @@ -0,0 +1,34 @@ +{ + "esperanto" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Ĉefa rektoro", + "documentation" : "Dokumentado", + "git" : "Git", + "projects_menu" : "Projekto menuo", + "projects_menu_text" : "Tio estas la projekto menuo. Tiam vi povas filtri laŭ la projektoj, kiujn vi posedas, kaj se ne ekzistas nomo, vi povas krei ĝin.", + "search" : "Serĉo", + "add" : "Aldonu", + "draw_box" : "La skatolo", + "draw_box_text" : "Tiu kadro enhavos reprezentajn desegnaĵojn, ilojn kaj tekstkeston por redaktado.", + "html" : "HTML HTML HTML HTML", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "Teksto teksto", + "code" : "Kodo", + "actions" : "Agoj", + "actions_text" : "Ĉi tiu kadro enhavas la ĝeneralajn agojn kontraŭ viaj projektoj.", + "upload" : "Supren ĝis", + "save" : "Savi", + "download" : "Elŝutu", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.farsi.json b/Public/json/i18n/Sizerboard.i18n.farsi.json new file mode 100644 index 0000000..0f92858 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.farsi.json @@ -0,0 +1,34 @@ +{ + "farsi" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "مدیر ارشد", + "documentation" : "مستندات", + "git" : "Git", + "projects_menu" : "Project menu", + "projects_menu_text" : "این منو پروژه است. سپس می توانید با نام پروژه هایی که مالک آن هستید فیلتر کنید و اگر نامی وجود نداشته باشد، می توانید آن را ایجاد کنید.", + "search" : "جستجو جستجو", + "add" : "Add Add", + "draw_box" : "جعبه", + "draw_box_text" : "این چارچوب شامل نقشه های نمایندگی، ابزار و جعبه متن برای ویرایش خواهد بود.", + "html" : "HTML HTML", + "canvas" : "بوم بوم", + "svg" : "SVG SVG", + "text" : "متن متن متن متن", + "code" : "کد", + "actions" : "اقدامات", + "actions_text" : "این چارچوب شامل اقدامات عمومی علیه پروژه های شما است.", + "upload" : "Up Up Up", + "save" : "Save Save", + "download" : "Download", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.francais.json b/Public/json/i18n/Sizerboard.i18n.francais.json new file mode 100644 index 0000000..cdce96f --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.francais.json @@ -0,0 +1,34 @@ +{ + "francais" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Principal", + "documentation" : "Documentation", + "git" : "Git", + "projects_menu" : "Menu du projet", + "projects_menu_text" : "C'est le menu du projet. Ensuite, vous pouvez filtrer par nom les projets que vous possédez, et s'il n'y a pas de nom, vous pouvez le créer.", + "search" : "Recherche", + "add" : "Add", + "draw_box" : "Encadré", + "draw_box_text" : "Ce cadre comprendra des dessins représentatifs, des outils et une boîte de texte pour l'édition.", + "html" : "HTML", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "Texte", + "code" : "Code", + "actions" : "Mesures à prendre", + "actions_text" : "Ce cadre contient les actions générales contre vos projets.", + "upload" : "Debout", + "save" : "Save", + "download" : "Télécharger", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.gaeilge.json b/Public/json/i18n/Sizerboard.i18n.gaeilge.json new file mode 100644 index 0000000..3ecd1bd --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.gaeilge.json @@ -0,0 +1,38 @@ +{ + "gaeilge" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "SEIRBHÍS DO CHUSTAIMÉIRÍ", + "home" : "Príomhoide", + "documentation" : "Cáipéisí", + "git" : "Bláthanna cumhra: cumhráin", + "projects_menu" : "Roghchlár Tionscadail", + "projects_menu_text" : [ + "Is é seo an roghchlár tionscadail. Ansin, is féidir leat na ", + "tionscadail a bhfuil tú féin a scagadh de réir ainm, agus mura ", + "bhfuil aon ainm ann, is féidir leat é a chruthú." + ], + "search" : "Cuardaigh Cuardaigh Cuardaigh", + "add" : "Déan teagmháil linn", + "draw_box" : "Bosca tarraingt", + "draw_box_text" : "Beidh líníochtaí ionadaíocha, uirlisí agus bosca téacs le haghaidh eagarthóireachta sa chreat seo.", + "html" : "HTML", + "canvas" : "Canbhás", + "svg" : "SVG", + "text" : "Téacs téacs", + "code" : "Cód an Chóid", + "actions" : "Gníomhaíochtaí", + "actions_text" : "Tá na gníomhaíochtaí ginearálta i gcoinne do thionscadail sa chreat seo.", + "upload" : "Suas", + "save" : "Sábháil Sábháil", + "download" : "Íoslódáil", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.hangugeo.json b/Public/json/i18n/Sizerboard.i18n.hangugeo.json new file mode 100644 index 0000000..5371742 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.hangugeo.json @@ -0,0 +1,34 @@ +{ + "hangugeo" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard의 특징", + "home" : "주 메뉴", + "documentation" : "회사연혁", + "git" : "사이트맵", + "projects_menu" : "프로젝트 메뉴", + "projects_menu_text" : "프로젝트 메뉴입니다. 그런 다음 당신은 자신의 프로젝트 이름을 입력 할 수 있습니다, 그리고 이름이없는 경우, 당신은 그것을 만들 수 있습니다.", + "search" : "제품정보", + "add" : "기타", + "draw_box" : "회사 소개", + "draw_box_text" : "이 프레임 워크는 편집을위한 대표 도면, 도구 및 텍스트 상자를 포함합니다.", + "html" : "HTML 지원", + "canvas" : "인기 카테고리", + "svg" : "사이트맵", + "text" : "이름 *", + "code" : "* 이름", + "actions" : "기타", + "actions_text" : "이 프레임 워크는 프로젝트에 대한 일반적인 조치를 포함합니다.", + "upload" : "지원하다", + "save" : "제품 정보", + "download" : "다운로드", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.hindi.json b/Public/json/i18n/Sizerboard.i18n.hindi.json new file mode 100644 index 0000000..797a493 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.hindi.json @@ -0,0 +1,34 @@ +{ + "hindi" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "प्रधान", + "documentation" : "प्रलेखन", + "git" : "गिट", + "projects_menu" : "परियोजना मेनू", + "projects_menu_text" : "यह परियोजना मेनू है। फिर आप अपनी परियोजनाओं को नाम से फ़िल्टर कर सकते हैं और यदि कोई नाम नहीं है तो आप इसे बना सकते हैं।.", + "search" : "खोज", + "add" : "जोड़ें", + "draw_box" : "बॉक्स खींचा", + "draw_box_text" : "इस ढांचे में संपादन के लिए प्रतिनिधि चित्र, उपकरण और टेक्स्ट बॉक्स शामिल होंगे।.", + "html" : "एचटीएमएल", + "canvas" : "कैनवास", + "svg" : "SVG", + "text" : "पाठ", + "code" : "कोड", + "actions" : "कार्य", + "actions_text" : "इस ढांचे में आपकी परियोजनाओं के खिलाफ सामान्य कार्य शामिल हैं।.", + "upload" : "ऊपर", + "save" : "सहेजें", + "download" : "डाउनलोड", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.indonesia.json b/Public/json/i18n/Sizerboard.i18n.indonesia.json new file mode 100644 index 0000000..1d4bda1 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.indonesia.json @@ -0,0 +1,34 @@ +{ + "indonesia" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "LOGIN", + "home" : "Login", + "documentation" : "Sitemap", + "git" : "Login", + "projects_menu" : "Menu Proyek", + "projects_menu_text" : "Ini adalah menu proyek. Kemudian Anda dapat menyaring dengan nama proyek yang Anda miliki, dan jika tidak ada nama, Anda dapat membuatnya.", + "search" : "Sitemap", + "add" : "Login", + "draw_box" : "Kotak ditarik", + "draw_box_text" : "Kerangka ini akan berisi gambar perwakilan, alat dan kotak teks untuk mengedit.", + "html" : "LOGIN", + "canvas" : "Login", + "svg" : "LOGIN", + "text" : "Login", + "code" : "Login", + "actions" : "Sitemap", + "actions_text" : "Kerangka ini berisi tindakan umum terhadap proyek Anda.", + "upload" : "Sitemap", + "save" : "Sitemap", + "download" : "Login", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.italiano.json b/Public/json/i18n/Sizerboard.i18n.italiano.json new file mode 100644 index 0000000..8558e9d --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.italiano.json @@ -0,0 +1,34 @@ +{ + "italiano" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Principale", + "documentation" : "Documentazione", + "git" : "Gi", + "projects_menu" : "Menu di progetto", + "projects_menu_text" : "Questo è il menu del progetto. Quindi è possibile filtrare per nome i progetti che si possiede, e se non c'è un nome, è possibile crearlo.", + "search" : "Ricerca", + "add" : "Aggiungi", + "draw_box" : "Designazione delle merci", + "draw_box_text" : "Questo quadro conterrà disegni rappresentativi, strumenti e casella di testo per la modifica.", + "html" : "HTML", + "canvas" : "Telaio", + "svg" : "SVG", + "text" : "Testo", + "code" : "Codice", + "actions" : "Azioni", + "actions_text" : "Questo quadro contiene le azioni generali contro i vostri progetti.", + "upload" : "Su", + "save" : "Salva", + "download" : "Scarica", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.ivrit.json b/Public/json/i18n/Sizerboard.i18n.ivrit.json new file mode 100644 index 0000000..5442704 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.ivrit.json @@ -0,0 +1,34 @@ +{ + "ivrit" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "ראשי", + "documentation" : "מסמך", + "git" : "Git", + "projects_menu" : "תפריט Project", + "projects_menu_text" : "זהו תפריט הפרויקט. לאחר מכן תוכל לסנן בשם הפרויקטים שבבעלותך, ואם אין שם, תוכל ליצור את זה.", + "search" : "חיפוש חיפוש", + "add" : "הוסף", + "draw_box" : "Box", + "draw_box_text" : "מסגרת זו תכיל רישומים מייצגים, כלים ותיבת טקסט לעריכה.", + "html" : "HTML", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "טקסט", + "code" : "קודקוד", + "actions" : "פעולות", + "actions_text" : "מסגרת זו כוללת את הפעולות הכלליות נגד הפרויקטים שלך.", + "upload" : "למעלה", + "save" : "להציל", + "download" : "הורד Download", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.magyar.json b/Public/json/i18n/Sizerboard.i18n.magyar.json new file mode 100644 index 0000000..adf3405 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.magyar.json @@ -0,0 +1,34 @@ +{ + "magyar" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Elnök", + "documentation" : "Dokumentáció", + "git" : "Ajándék", + "projects_menu" : "Project menü", + "projects_menu_text" : "Ez a projekt menü. Ezután szűrheti a saját projekteket, és ha nincs neve, létrehozhatja.", + "search" : "Keresés", + "add" : "Hozzáadás", + "draw_box" : "Box rajz", + "draw_box_text" : "Ez a keret reprezentatív rajzokat, eszközöket és szövegdobozokat tartalmaz a szerkesztéshez.", + "html" : "HTML", + "canvas" : "Vászon", + "svg" : "SVG", + "text" : "Szöveg", + "code" : "Kód", + "actions" : "Akciók", + "actions_text" : "Ez a keret tartalmazza az általános intézkedéseket a projektek ellen.", + "upload" : "Felül", + "save" : "Mentés", + "download" : "Letöltés", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.nederlands.json b/Public/json/i18n/Sizerboard.i18n.nederlands.json new file mode 100644 index 0000000..01f719c --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.nederlands.json @@ -0,0 +1,34 @@ +{ + "nederlands" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Directeur", + "documentation" : "Document", + "git" : "Git", + "projects_menu" : "Project Menu", + "projects_menu_text" : "Dit is het project menu. Dan filter je met naam de projecten die je bezit, en als er geen naam is, kun je het creëren.", + "search" : "Zoek", + "add" : "Advocaat", + "draw_box" : "Box getekend", + "draw_box_text" : "Dit framewerk bevat representatieve tekeningen, gereedschap en tekstbus voor editing.", + "html" : "HTM", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "Text", + "code" : "Code", + "actions" : "Actie", + "actions_text" : "Dit framewerk bevat de algemene acties tegen je projecten.", + "upload" : "Omhoog", + "save" : "Red", + "download" : "Download", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.nihongo.json b/Public/json/i18n/Sizerboard.i18n.nihongo.json new file mode 100644 index 0000000..b4ac211 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.nihongo.json @@ -0,0 +1,34 @@ +{ + "nihongo" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboardの特長", + "home" : "代表取締役", + "documentation" : "ドキュメント", + "git" : "ログイン", + "projects_menu" : "プロジェクトメニュー", + "projects_menu_text" : "プロジェクトメニューです。 そこで、自分のプロジェクト名を絞り、名前がない場合、作成できます。.", + "search" : "アクセス", + "add" : "追加する", + "draw_box" : "ボックス描画", + "draw_box_text" : "このフレームワークには、編集用の代表的な図面、ツール、テキストボックスが含まれます。.", + "html" : "アーカイブ", + "canvas" : "キャンバス", + "svg" : "SVGの特長", + "text" : "テキスト", + "code" : "コードコード", + "actions" : "アクション", + "actions_text" : "このフレームワークには、プロジェクトに対する一般的なアクションが含まれています。.", + "upload" : "ニュース", + "save" : "保存する", + "download" : "ダウンロード", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.polski.json b/Public/json/i18n/Sizerboard.i18n.polski.json new file mode 100644 index 0000000..d5714aa --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.polski.json @@ -0,0 +1,34 @@ +{ + "polski" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "MKWBZK", + "home" : "Wydawca", + "documentation" : "Dokumentacja", + "git" : "Git", + "projects_menu" : "Project menu", + "projects_menu_text" : "Jest to projekt menu. Wtedy możesz filtrować, nazywać je własnymi projektami i jeśli nie ma imienia, to możesz ją stworzyć.", + "search" : "Search Search", + "add" : "Addd", + "draw_box" : "Box", + "draw_box_text" : "Takie ramy zawierają rysunki reprezentacyjne, narzędzia i skrzynie tekstowe do edycji.", + "html" : "HTML", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "Tekst", + "code" : "Kodeks", + "actions" : "Akcja", + "actions_text" : "Zasady te obejmują działania przeciwko projektom.", + "upload" : "Up", + "save" : "Save", + "download" : "Download", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.portugues.json b/Public/json/i18n/Sizerboard.i18n.portugues.json new file mode 100644 index 0000000..84190a7 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.portugues.json @@ -0,0 +1,34 @@ +{ + "portugues" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Director", + "documentation" : "Documentação", + "git" : "Git", + "projects_menu" : "Menu de projeto", + "projects_menu_text" : "Este é o menu do projeto. Então você pode filtrar por nome os projetos que você possui, e se não houver nenhum nome, você pode criá-lo.", + "search" : "Pesquisar", + "add" : "Adicionar", + "draw_box" : "Caixa retirada", + "draw_box_text" : "Esta estrutura conterá desenhos representativos, ferramentas e caixa de texto para edição.", + "html" : "HTML", + "canvas" : "Lona", + "svg" : "SVG", + "text" : "Texto", + "code" : "Código", + "actions" : "Acções", + "actions_text" : "Esta estrutura contém as ações gerais contra seus projetos.", + "upload" : "Para cima", + "save" : "Salvar", + "download" : "Baixar", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.russkiy.json b/Public/json/i18n/Sizerboard.i18n.russkiy.json new file mode 100644 index 0000000..2711f36 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.russkiy.json @@ -0,0 +1,34 @@ +{ + "russkiy" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Principal", + "documentation" : "Документация", + "git" : "Git", + "projects_menu" : "Меню проекта", + "projects_menu_text" : "Это меню проекта. Затем вы можете отфильтровать по названию проекты, которые у вас есть, и если нет имени, вы можете его создать.", + "search" : "Поиск", + "add" : "Добавить", + "draw_box" : "Вставка", + "draw_box_text" : "Эти рамки будут содержать репрезентативные чертежи, инструменты и текстовые ящики для редактирования.", + "html" : "HTML", + "canvas" : "Холст", + "svg" : "SVG", + "text" : "Текст", + "code" : "Код", + "actions" : "Действия", + "actions_text" : "Эта основа содержит общие действия против ваших проектов.", + "upload" : "Вверх", + "save" : "Сохранить", + "download" : "Скачать", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.slovencina.json b/Public/json/i18n/Sizerboard.i18n.slovencina.json new file mode 100644 index 0000000..1671c5e --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.slovencina.json @@ -0,0 +1,34 @@ +{ + "slovencina" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Všeobecný", + "documentation" : "Aktuality", + "git" : "Všeobecný", + "projects_menu" : "Ponuka projektu", + "projects_menu_text" : "Toto je ponuka projektu. Potom môžete filtrovať podľa názvu projektov, ktoré vlastníte, a ak neexistuje názov, môžete ho vytvoriť.", + "search" : "Vyhľadávanie", + "add" : "Pridať", + "draw_box" : "Box nakreslený", + "draw_box_text" : "Tento rámec bude obsahovať reprezentatívne výkresy, nástroje a text box pre editáciu.", + "html" : "AKTUALITY", + "canvas" : "Canvas", + "svg" : "SVOJE", + "text" : "Aktuality", + "code" : "Kód", + "actions" : "Akcie", + "actions_text" : "Tento rámec obsahuje všeobecné akcie proti vašim projektom.", + "upload" : "Hore", + "save" : "Uložiť", + "download" : "Na stiahnutie", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.suomi.json b/Public/json/i18n/Sizerboard.i18n.suomi.json new file mode 100644 index 0000000..04a9f0b --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.suomi.json @@ -0,0 +1,34 @@ +{ + "suomi" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Pääasiallinen", + "documentation" : "Dokumentointi", + "git" : "Git", + "projects_menu" : "Hankkeen menu", + "projects_menu_text" : "Tämä on projektin menu. Sitten voit suodattaa omistamiasi projekteja nimeltä ja jos nimeä ei ole, voit luoda sen.", + "search" : "Etsintä", + "add" : "Lisää", + "draw_box" : "Box piirretty", + "draw_box_text" : "Tämä kehys sisältää edustavia piirustuksia, työkaluja ja tekstiruudun editointiin.", + "html" : "HTML", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "Teksti", + "code" : "Code", + "actions" : "Toimia", + "actions_text" : "Tämä kehys sisältää yleiset toimet projektejasi vastaan.", + "upload" : "Up", + "save" : "Säästäminen", + "download" : "Download Download", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.svenska.json b/Public/json/i18n/Sizerboard.i18n.svenska.json new file mode 100644 index 0000000..db694f6 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.svenska.json @@ -0,0 +1,34 @@ +{ + "svenska" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "Principal", + "documentation" : "Dokumentation", + "git" : "Git", + "projects_menu" : "Projektmeny", + "projects_menu_text" : "Detta är projektmenyn. Då kan du filtrera efter namn på de projekt du äger, och om det inte finns något namn kan du skapa det.", + "search" : "Sök efter Sök", + "add" : "Lägg till", + "draw_box" : "Box dras", + "draw_box_text" : "Denna ram kommer att innehålla representativa ritningar, verktyg och textruta för redigering.", + "html" : "HTML", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "Texttext", + "code" : "Kodkod", + "actions" : "Åtgärder", + "actions_text" : "Detta ramverk innehåller de allmänna åtgärderna mot dina projekt.", + "upload" : "Upp", + "save" : "Spara", + "download" : "Ladda ner", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.thai.json b/Public/json/i18n/Sizerboard.i18n.thai.json new file mode 100644 index 0000000..5114b0a --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.thai.json @@ -0,0 +1,34 @@ +{ + "thai" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "ข้อมูล", + "documentation" : "เอกสาร", + "git" : "Git", + "projects_menu" : "เมนู", + "projects_menu_text" : "นี่คือเมนูโครงการ จากนั้นคุณสามารถกรองโดยชื่อโครงการที่คุณเป็นเจ้าของและถ้าไม่มีชื่อคุณสามารถสร้าง.", + "search" : "ค้นหา", + "add" : "เพิ่ม", + "draw_box" : "กล่องวาด", + "draw_box_text" : "กรอบนี้มีภาพวาดเครื่องมือและเครื่องมือข้อความสําหรับการแก้ไข.", + "html" : "HTML", + "canvas" : "ผ้าใบ", + "svg" : "SVG", + "text" : "ข้อความ", + "code" : "รหัส", + "actions" : "การกระทํา", + "actions_text" : "กรอบนี้มีการกระทําทั่วไปกับโครงการของคุณ.", + "upload" : "ขึ้น", + "save" : "บันทึก", + "download" : "ดาวน์โหลด", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.turkce.json b/Public/json/i18n/Sizerboard.i18n.turkce.json new file mode 100644 index 0000000..f7c2f86 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.turkce.json @@ -0,0 +1,51 @@ +{ + "turkce" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "MVBCKYR", + "home" : "Müdür", + "documentation" : "Dokümantasyon", + "git" : "Git Git Git Git", + "projects_menu" : "Project menu", + "projects_menu_text" : "Bu proje menüsüdür. Sonra kendi olduğunuz projelerle filtreleyebilirsiniz ve isim yoksa onu yaratabilirsiniz.", + "search" : "Arama Arama", + "add" : [ + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add ", + "Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add Add" + ], + "draw_box" : "Kutu", + "draw_box_text" : "Bu çerçeve, düzenleme için temsilci çizimleri, araçları ve metin kutusu içerecektir.", + "html" : "HTML HTML HTML HTML", + "canvas" : "Blood", + "svg" : "SVG", + "text" : "Text Text Text Text", + "code" : "Kod Kodu", + "actions" : "Eylemler", + "actions_text" : "Bu çerçeve, projelerinize karşı genel eylemleri içerir.", + "upload" : "Up Up Up Up", + "save" : "Kaydet Kaydet Kaydet", + "download" : "Download Download Download Download Download", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.ukrainska.json b/Public/json/i18n/Sizerboard.i18n.ukrainska.json new file mode 100644 index 0000000..a65e55f --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.ukrainska.json @@ -0,0 +1,34 @@ +{ + "ukrainska" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "МКВБКГКСБ", + "home" : "Головна", + "documentation" : "Документація", + "git" : "Навігація", + "projects_menu" : "Меню проекту", + "projects_menu_text" : "Це меню проекту. Тоді ви можете відфільтрувати свої проекти, і якщо немає назви, ви можете створити його.", + "search" : "Пошук", + "add" : "Додати", + "draw_box" : "Коробка намальована", + "draw_box_text" : "Цей каркас буде містити представницькі креслення, інструменти та текстове поле для редагування.", + "html" : "УКРАЇНСЬКА", + "canvas" : "Полотно", + "svg" : "СВГ", + "text" : "Головна", + "code" : "Коди", + "actions" : "Акції", + "actions_text" : "У цьому розділі зібрані загальні дії щодо ваших проектів.", + "upload" : "Вгору", + "save" : "Зберегти", + "download" : "Завантажити", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/json/i18n/Sizerboard.i18n.zhongwen.json b/Public/json/i18n/Sizerboard.i18n.zhongwen.json new file mode 100644 index 0000000..f0cbd91 --- /dev/null +++ b/Public/json/i18n/Sizerboard.i18n.zhongwen.json @@ -0,0 +1,34 @@ +{ + "zhongwen" : { + + "Sizerboard_common_start" : null, + "Sizerboard_common_end" : null, + + "Sizerboard_start" : null, + "Sizerboard_end" : null, + + "Sizerboard_base_start" : null, + "sizerboard" : "Sizerboard", + "home" : "特等", + "documentation" : "文件", + "git" : "专 员", + "projects_menu" : "项目菜单", + "projects_menu_text" : "这就是项目菜单。 然后,你可以以你自己的项目的名义进行过滤,如果没有名字,你可以创建。.", + "search" : "搜索", + "add" : "增 编", + "draw_box" : "方框", + "draw_box_text" : "这一框架将包含有代表性的图画、工具和文字箱以供编辑。.", + "html" : "传真", + "canvas" : "Canvas", + "svg" : "SVG", + "text" : "案文", + "code" : "法典", + "actions" : "行动", + "actions_text" : "该框架载有针对贵项目的一般行动。.", + "upload" : "页: 1", + "save" : "Save", + "download" : "下载", + "Sizerboard_base_end" : null + + } +} \ No newline at end of file diff --git a/Public/scss/Sizerboard.base.scss b/Public/scss/Sizerboard.base.scss new file mode 100644 index 0000000..7c69c31 --- /dev/null +++ b/Public/scss/Sizerboard.base.scss @@ -0,0 +1,348 @@ +.sizerboard{ + + position : absolute; + top : 0em; + left : 0em; + width : 100%; + height : 100%; + overflow : hidden; + + &,input,button,textarea{font-family : $font-family;} + + [data-visible=false]{display : none;} + + [data-icon]::before{ + font-family : $font-family; + margin-right : .4em; + } + + a[href]{text-decoration : none;} + a[href],[onmousedown],[onmouseup],[onclick]{ + color : $color-primary; + cursor : pointer; + transition-property : color; + transition-duration : $transition-out; + &:hover,&:focus{ + color : $color-secondary; + transition-duration : $transition-in; + } + } + [type=text],[type=password],[type=date],[type=datetime],[type=time],textarea{ + width : 100%; + box-sizing : border-box; + } + button,[type=button],[type=submit],[type=reset],[rol=button],[type=text],[type=password],[type=date],[type=datetime],[type=time],textarea{ + color : $color-primary; + font-size : 1em; + border : .1em solid $color-primary; + box-shadow : 0em 0em .4em inset $color-primary; + border-radius : $border-radius; + transition-property : color,border-color,box-shadow; + transition-duration : $transition-out; + &:hover,&:focus{ + color : $color-secondary; + border-color : $color-secondary; + box-shadow : 0em 0em .4em inset $color-secondary; + transition-duration : $transition-in; + } + } + button,[type=button],[type=submit],[type=reset],[rol=button]{cursor : pointer;} + a[href],[onmousedown],[onmouseup],[onclick]{ + outline : none; + &[disabled],&[readonly],&[data-selected=true]{&,&:hover{ + color : $color-grey; + cursor : default; + }} + } + button,[type=button],[type=submit],[type=reset],[rol=button],[type=text],[type=password],[type=date],[type=datetime],[type=time],textarea{ + outline : none; + box-sizing : border-box; + &[disabled],&[readonly],&[data-selected=true]{&,&:hover,&:focus{ + color : $color-grey; + border-color : $color-grey; + cursor : default; + box-shadow : 0em 0em .4em inset $color-grey; + }} + } + + label{ + padding : 0em .4em; + font-weight : 900; + white-space : nowrap; + border : .1em solid $color-grey; + border-radius : $border-radius; + box-shadow : 0em 0em .4em inset $color-grey; + &>*{font-size : .9em;} + &::after{content : ":";} + } + + .group{ + display : table; + margin : 0em; + padding : 0em; + list-style-type : none; + border-collapse : collapse; + li{ + display : table-cell; + &>*{ + border-radius : 0em; + padding : .1em .4em; + padding-block : none; + padding-inline : none; + } + } + &>:first-child>*{border-radius : $border-radius 0em 0em $border-radius;} + &>:last-child>*{border-radius : 0em $border-radius $border-radius 0em;} + } + + header,main,footer{ + position : absolute; + left : 0em; + width : 100%; + } + header,footer{ + background-color : $color-fore; + color : $color-back; + } + + header{ + top : 0em; + height : $header-height; + z-index : 20; + } + + main{ + top : $header-height; + bottom : $footer-height; + background-color : $color-back; + color : $color-fore; + z-index : 10; + overflow : hidden; + &>form{ + display : block; + position : absolute; + top : 0em; + height : 100%; + overflow : hidden; + &>fieldset{ + position : absolute; + top : 0em; + left : 0em; + right : 0em; + bottom : 0em; + margin : $box-margin; + padding : 0em; + border : none; + &>legend{ + display : block; + width : 100%; + font-size : 1.2em; + font-weight : 900; + border-bottom : .15em solid $color-fore; + } + &>p{ + margin : 0em; + padding : 1em 0em; + font-size : .85em; + } + } + } + } + + footer{ + bottom : 0em; + height : $footer-height; + z-index : 30; + } + + .main-menu{ + position : absolute; + bottom : 0em; + left : 50%; + margin-bottom : .2em; + margin-left : -20em; + width : 40em; + text-align : center; + ul{ + margin : 0em; + padding : 0em; + list-style-type : none; + } + li{ + display : inline-block; + margin : 0em 1em; + } + } + + h1{ + margin : 0em; + } + + .projects-menu{ + left : 0em; + width : $projects-menu-width; + } + + .search-box{ + position : absolute; + top : 7.6em; + width : 100%; + &>:first-child>*{border-bottom-left-radius : 0em;} + &>:last-child>*{border-bottom-right-radius : 0em;} + &>:nth-child(2){width : 100%;} + label{ + font-weight : 400; + &::after{content : "";} + } + [data-icon]{ + &::before{margin : 0em;} + &+[data-i18n]{display : none;} + } + button[data-i18n=search]{display : none;} + &+nav{ + position : absolute; + top : 9em; + left : 0em; + bottom : 0em; + width : 100%; + border : .1em solid $color-fore; + background-color : $color-back; + overflow : auto; + box-sizing : border-box; + border-radius : 0em 0em $border-radius $border-radius; + box-shadow : .1em .1em .2em $color-grey; + &>ul{ + margin : 0em; + padding : 0em; + list-style-type : none; + // &>:last-child{border-radius : 0em 0em $border-radius $border-radius;} + } + li{ + padding : .2em .4em; + border-radius : 0em; + box-sizing : border-box; + } + } + } + + .draw-box{ + left : $projects-menu-width; + right : 0em; + .group{ + position : absolute; + top : 2.6em; + left : 0em; + &>:first-child>button{border-bottom-left-radius : 0em;} + &>:last-child>button{border-bottom-right-radius : 0em;} + } + .fields{ + position : absolute; + top : 4em; + left : 0em; + bottom : 0em; + width : 100%; + border : .1em solid $color-fore; + background-color : $color-back; + box-sizing : border-box; + border-radius : 0em $border-radius $border-radius $border-radius; + box-shadow : .1em .1em .2em $color-fore; + &>section{&,&>*{ + position : absolute; + top : 0em; + left : 0em; + width : 100%; + height : 100%; + }} + &>section>*{border-radius : 0em $border-radius $border-radius $border-radius;} + textarea{ + font-family : $font-mono; + color : $color-fore; + resize : none; + } + } + .curtain{ + position : absolute; + top : 0em; + left : 0em; + width : 100%; + height : 100%; + background-color : $color-back; + opacity : .8; + } + &:not([data-selected=null])>.curtain{display : none;} + } + + .actions-box{ + position : absolute; + right : 0em; + bottom : 0em; + border : none; + &>legend,&>p{display : none;} + ul{ + position : absolute; + right : 0em; + bottom : 0em; + margin : .5em; + padding : 0em; + list-style-type : none; + overflow : visible; + &>li{ + display : "block"; + position : relative; + text-align : right; + } + } + li{margin : .2em 0em;} + button{ + min-width : 2em; + height : 2em; + text-align : right; + white-space : nowrap; + box-sizing : border-box; + border-radius : 1em; + span{ + font-size : 1.3em; + font-weight : 900; + } + [data-icon]{ + display : inline-block; + position : absolute; + top : 0em; + right : 0em; + width : 1.5em; + text-align : center; + margin : .2em 0em; + &::before{margin : 0em;} + } + [data-i18n]{ + display : block; + padding-right : 0em; + width : 0em; + overflow : hidden; + opacity : 0; + transition-property : padding-right,width,opacity; + transition-duration : $transition-out; + } + &:hover>[data-i18n]{ + padding-right : 1.3em; + width : 6em; + opacity : 1; + transition-duration : $transition-in; + } + } + } + + .licences{ + display : block; + width : 100%; + text-align : center; + font-size : .85em; + font-weight : 900; + img{ + width : auto; + height : 1em; + } + a>*{vertical-align : middle;} + } + +} \ No newline at end of file diff --git a/Public/scss/Sizerboard.css b/Public/scss/Sizerboard.css new file mode 100644 index 0000000..f3c07d6 --- /dev/null +++ b/Public/scss/Sizerboard.css @@ -0,0 +1,301 @@ +.sizerboard { + position: absolute; + top: 0em; + left: 0em; + width: 100%; + height: 100%; + overflow: hidden; } + .sizerboard, .sizerboard input, .sizerboard button, .sizerboard textarea { + font-family: "Roboto"; } + .sizerboard [data-visible=false] { + display: none; } + .sizerboard [data-icon]::before { + font-family: "Roboto"; + margin-right: .4em; } + .sizerboard a[href] { + text-decoration: none; } + .sizerboard a[href], .sizerboard [onmousedown], .sizerboard [onmouseup], .sizerboard [onclick] { + color: #2282D4; + cursor: pointer; + transition-property: color; + transition-duration: 1s; } + .sizerboard a[href]:hover, .sizerboard a[href]:focus, .sizerboard [onmousedown]:hover, .sizerboard [onmousedown]:focus, .sizerboard [onmouseup]:hover, .sizerboard [onmouseup]:focus, .sizerboard [onclick]:hover, .sizerboard [onclick]:focus { + color: #D48222; + transition-duration: 0.2s; } + .sizerboard [type=text], .sizerboard [type=password], .sizerboard [type=date], .sizerboard [type=datetime], .sizerboard [type=time], .sizerboard textarea { + width: 100%; + box-sizing: border-box; } + .sizerboard button, .sizerboard [type=button], .sizerboard [type=submit], .sizerboard [type=reset], .sizerboard [rol=button], .sizerboard [type=text], .sizerboard [type=password], .sizerboard [type=date], .sizerboard [type=datetime], .sizerboard [type=time], .sizerboard textarea { + color: #2282D4; + font-size: 1em; + border: 0.1em solid #2282D4; + box-shadow: 0em 0em 0.4em inset #2282D4; + border-radius: 0.3em; + transition-property: color,border-color,box-shadow; + transition-duration: 1s; } + .sizerboard button:hover, .sizerboard button:focus, .sizerboard [type=button]:hover, .sizerboard [type=button]:focus, .sizerboard [type=submit]:hover, .sizerboard [type=submit]:focus, .sizerboard [type=reset]:hover, .sizerboard [type=reset]:focus, .sizerboard [rol=button]:hover, .sizerboard [rol=button]:focus, .sizerboard [type=text]:hover, .sizerboard [type=text]:focus, .sizerboard [type=password]:hover, .sizerboard [type=password]:focus, .sizerboard [type=date]:hover, .sizerboard [type=date]:focus, .sizerboard [type=datetime]:hover, .sizerboard [type=datetime]:focus, .sizerboard [type=time]:hover, .sizerboard [type=time]:focus, .sizerboard textarea:hover, .sizerboard textarea:focus { + color: #D48222; + border-color: #D48222; + box-shadow: 0em 0em 0.4em inset #D48222; + transition-duration: 0.2s; } + .sizerboard button, .sizerboard [type=button], .sizerboard [type=submit], .sizerboard [type=reset], .sizerboard [rol=button] { + cursor: pointer; } + .sizerboard a[href], .sizerboard [onmousedown], .sizerboard [onmouseup], .sizerboard [onclick] { + outline: none; } + .sizerboard a[href][disabled], .sizerboard a[href][disabled]:hover, .sizerboard a[href][readonly], .sizerboard a[href][readonly]:hover, .sizerboard a[href][data-selected=true], .sizerboard a[href][data-selected=true]:hover, .sizerboard [onmousedown][disabled], .sizerboard [onmousedown][disabled]:hover, .sizerboard [onmousedown][readonly], .sizerboard [onmousedown][readonly]:hover, .sizerboard [onmousedown][data-selected=true], .sizerboard [onmousedown][data-selected=true]:hover, .sizerboard [onmouseup][disabled], .sizerboard [onmouseup][disabled]:hover, .sizerboard [onmouseup][readonly], .sizerboard [onmouseup][readonly]:hover, .sizerboard [onmouseup][data-selected=true], .sizerboard [onmouseup][data-selected=true]:hover, .sizerboard [onclick][disabled], .sizerboard [onclick][disabled]:hover, .sizerboard [onclick][readonly], .sizerboard [onclick][readonly]:hover, .sizerboard [onclick][data-selected=true], .sizerboard [onclick][data-selected=true]:hover { + color: #898989; + cursor: default; } + .sizerboard button, .sizerboard [type=button], .sizerboard [type=submit], .sizerboard [type=reset], .sizerboard [rol=button], .sizerboard [type=text], .sizerboard [type=password], .sizerboard [type=date], .sizerboard [type=datetime], .sizerboard [type=time], .sizerboard textarea { + outline: none; + box-sizing: border-box; } + .sizerboard button[disabled], .sizerboard button[disabled]:hover, .sizerboard button[disabled]:focus, .sizerboard button[readonly], .sizerboard button[readonly]:hover, .sizerboard button[readonly]:focus, .sizerboard button[data-selected=true], .sizerboard button[data-selected=true]:hover, .sizerboard button[data-selected=true]:focus, .sizerboard [type=button][disabled], .sizerboard [type=button][disabled]:hover, .sizerboard [type=button][disabled]:focus, .sizerboard [type=button][readonly], .sizerboard [type=button][readonly]:hover, .sizerboard [type=button][readonly]:focus, .sizerboard [type=button][data-selected=true], .sizerboard [type=button][data-selected=true]:hover, .sizerboard [type=button][data-selected=true]:focus, .sizerboard [type=submit][disabled], .sizerboard [type=submit][disabled]:hover, .sizerboard [type=submit][disabled]:focus, .sizerboard [type=submit][readonly], .sizerboard [type=submit][readonly]:hover, .sizerboard [type=submit][readonly]:focus, .sizerboard [type=submit][data-selected=true], .sizerboard [type=submit][data-selected=true]:hover, .sizerboard [type=submit][data-selected=true]:focus, .sizerboard [type=reset][disabled], .sizerboard [type=reset][disabled]:hover, .sizerboard [type=reset][disabled]:focus, .sizerboard [type=reset][readonly], .sizerboard [type=reset][readonly]:hover, .sizerboard [type=reset][readonly]:focus, .sizerboard [type=reset][data-selected=true], .sizerboard [type=reset][data-selected=true]:hover, .sizerboard [type=reset][data-selected=true]:focus, .sizerboard [rol=button][disabled], .sizerboard [rol=button][disabled]:hover, .sizerboard [rol=button][disabled]:focus, .sizerboard [rol=button][readonly], .sizerboard [rol=button][readonly]:hover, .sizerboard [rol=button][readonly]:focus, .sizerboard [rol=button][data-selected=true], .sizerboard [rol=button][data-selected=true]:hover, .sizerboard [rol=button][data-selected=true]:focus, .sizerboard [type=text][disabled], .sizerboard [type=text][disabled]:hover, .sizerboard [type=text][disabled]:focus, .sizerboard [type=text][readonly], .sizerboard [type=text][readonly]:hover, .sizerboard [type=text][readonly]:focus, .sizerboard [type=text][data-selected=true], .sizerboard [type=text][data-selected=true]:hover, .sizerboard [type=text][data-selected=true]:focus, .sizerboard [type=password][disabled], .sizerboard [type=password][disabled]:hover, .sizerboard [type=password][disabled]:focus, .sizerboard [type=password][readonly], .sizerboard [type=password][readonly]:hover, .sizerboard [type=password][readonly]:focus, .sizerboard [type=password][data-selected=true], .sizerboard [type=password][data-selected=true]:hover, .sizerboard [type=password][data-selected=true]:focus, .sizerboard [type=date][disabled], .sizerboard [type=date][disabled]:hover, .sizerboard [type=date][disabled]:focus, .sizerboard [type=date][readonly], .sizerboard [type=date][readonly]:hover, .sizerboard [type=date][readonly]:focus, .sizerboard [type=date][data-selected=true], .sizerboard [type=date][data-selected=true]:hover, .sizerboard [type=date][data-selected=true]:focus, .sizerboard [type=datetime][disabled], .sizerboard [type=datetime][disabled]:hover, .sizerboard [type=datetime][disabled]:focus, .sizerboard [type=datetime][readonly], .sizerboard [type=datetime][readonly]:hover, .sizerboard [type=datetime][readonly]:focus, .sizerboard [type=datetime][data-selected=true], .sizerboard [type=datetime][data-selected=true]:hover, .sizerboard [type=datetime][data-selected=true]:focus, .sizerboard [type=time][disabled], .sizerboard [type=time][disabled]:hover, .sizerboard [type=time][disabled]:focus, .sizerboard [type=time][readonly], .sizerboard [type=time][readonly]:hover, .sizerboard [type=time][readonly]:focus, .sizerboard [type=time][data-selected=true], .sizerboard [type=time][data-selected=true]:hover, .sizerboard [type=time][data-selected=true]:focus, .sizerboard textarea[disabled], .sizerboard textarea[disabled]:hover, .sizerboard textarea[disabled]:focus, .sizerboard textarea[readonly], .sizerboard textarea[readonly]:hover, .sizerboard textarea[readonly]:focus, .sizerboard textarea[data-selected=true], .sizerboard textarea[data-selected=true]:hover, .sizerboard textarea[data-selected=true]:focus { + color: #898989; + border-color: #898989; + cursor: default; + box-shadow: 0em 0em 0.4em inset #898989; } + .sizerboard label { + padding: 0em .4em; + font-weight: 900; + white-space: nowrap; + border: 0.1em solid #898989; + border-radius: 0.3em; + box-shadow: 0em 0em 0.4em inset #898989; } + .sizerboard label > * { + font-size: .9em; } + .sizerboard label::after { + content: ":"; } + .sizerboard .group { + display: table; + margin: 0em; + padding: 0em; + list-style-type: none; + border-collapse: collapse; } + .sizerboard .group li { + display: table-cell; } + .sizerboard .group li > * { + border-radius: 0em; + padding: .1em .4em; + padding-block: none; + padding-inline: none; } + .sizerboard .group > :first-child > * { + border-radius: 0.3em 0em 0em 0.3em; } + .sizerboard .group > :last-child > * { + border-radius: 0em 0.3em 0.3em 0em; } + .sizerboard header, .sizerboard main, .sizerboard footer { + position: absolute; + left: 0em; + width: 100%; } + .sizerboard header, .sizerboard footer { + background-color: #222; + color: #EFEFEF; } + .sizerboard header { + top: 0em; + height: 4em; + z-index: 20; } + .sizerboard main { + top: 4em; + bottom: 1em; + background-color: #EFEFEF; + color: #222; + z-index: 10; + overflow: hidden; } + .sizerboard main > form { + display: block; + position: absolute; + top: 0em; + height: 100%; + overflow: hidden; } + .sizerboard main > form > fieldset { + position: absolute; + top: 0em; + left: 0em; + right: 0em; + bottom: 0em; + margin: 0.4em; + padding: 0em; + border: none; } + .sizerboard main > form > fieldset > legend { + display: block; + width: 100%; + font-size: 1.2em; + font-weight: 900; + border-bottom: 0.15em solid #222; } + .sizerboard main > form > fieldset > p { + margin: 0em; + padding: 1em 0em; + font-size: .85em; } + .sizerboard footer { + bottom: 0em; + height: 1em; + z-index: 30; } + .sizerboard .main-menu { + position: absolute; + bottom: 0em; + left: 50%; + margin-bottom: .2em; + margin-left: -20em; + width: 40em; + text-align: center; } + .sizerboard .main-menu ul { + margin: 0em; + padding: 0em; + list-style-type: none; } + .sizerboard .main-menu li { + display: inline-block; + margin: 0em 1em; } + .sizerboard h1 { + margin: 0em; } + .sizerboard .projects-menu { + left: 0em; + width: 10em; } + .sizerboard .search-box { + position: absolute; + top: 7.6em; + width: 100%; } + .sizerboard .search-box > :first-child > * { + border-bottom-left-radius: 0em; } + .sizerboard .search-box > :last-child > * { + border-bottom-right-radius: 0em; } + .sizerboard .search-box > :nth-child(2) { + width: 100%; } + .sizerboard .search-box label { + font-weight: 400; } + .sizerboard .search-box label::after { + content: ""; } + .sizerboard .search-box [data-icon]::before { + margin: 0em; } + .sizerboard .search-box [data-icon] + [data-i18n] { + display: none; } + .sizerboard .search-box button[data-i18n=search] { + display: none; } + .sizerboard .search-box + nav { + position: absolute; + top: 9em; + left: 0em; + bottom: 0em; + width: 100%; + border: 0.1em solid #222; + background-color: #EFEFEF; + overflow: auto; + box-sizing: border-box; + border-radius: 0em 0em 0.3em 0.3em; + box-shadow: 0.1em 0.1em 0.2em #898989; } + .sizerboard .search-box + nav > ul { + margin: 0em; + padding: 0em; + list-style-type: none; } + .sizerboard .search-box + nav li { + padding: .2em .4em; + border-radius: 0em; + box-sizing: border-box; } + .sizerboard .draw-box { + left: 10em; + right: 0em; } + .sizerboard .draw-box .group { + position: absolute; + top: 2.6em; + left: 0em; } + .sizerboard .draw-box .group > :first-child > button { + border-bottom-left-radius: 0em; } + .sizerboard .draw-box .group > :last-child > button { + border-bottom-right-radius: 0em; } + .sizerboard .draw-box .fields { + position: absolute; + top: 4em; + left: 0em; + bottom: 0em; + width: 100%; + border: 0.1em solid #222; + background-color: #EFEFEF; + box-sizing: border-box; + border-radius: 0em 0.3em 0.3em 0.3em; + box-shadow: 0.1em 0.1em 0.2em #222; } + .sizerboard .draw-box .fields > section, .sizerboard .draw-box .fields > section > * { + position: absolute; + top: 0em; + left: 0em; + width: 100%; + height: 100%; } + .sizerboard .draw-box .fields > section > * { + border-radius: 0em 0.3em 0.3em 0.3em; } + .sizerboard .draw-box .fields textarea { + font-family: "Roboto Mono"; + color: #222; + resize: none; } + .sizerboard .draw-box .curtain { + position: absolute; + top: 0em; + left: 0em; + width: 100%; + height: 100%; + background-color: #EFEFEF; + opacity: .8; } + .sizerboard .draw-box:not([data-selected=null]) > .curtain { + display: none; } + .sizerboard .actions-box { + position: absolute; + right: 0em; + bottom: 0em; + border: none; } + .sizerboard .actions-box > legend, .sizerboard .actions-box > p { + display: none; } + .sizerboard .actions-box ul { + position: absolute; + right: 0em; + bottom: 0em; + margin: .5em; + padding: 0em; + list-style-type: none; + overflow: visible; } + .sizerboard .actions-box ul > li { + display: "block"; + position: relative; + text-align: right; } + .sizerboard .actions-box li { + margin: .2em 0em; } + .sizerboard .actions-box button { + min-width: 2em; + height: 2em; + text-align: right; + white-space: nowrap; + box-sizing: border-box; + border-radius: 1em; } + .sizerboard .actions-box button span { + font-size: 1.3em; + font-weight: 900; } + .sizerboard .actions-box button [data-icon] { + display: inline-block; + position: absolute; + top: 0em; + right: 0em; + width: 1.5em; + text-align: center; + margin: .2em 0em; } + .sizerboard .actions-box button [data-icon]::before { + margin: 0em; } + .sizerboard .actions-box button [data-i18n] { + display: block; + padding-right: 0em; + width: 0em; + overflow: hidden; + opacity: 0; + transition-property: padding-right,width,opacity; + transition-duration: 1s; } + .sizerboard .actions-box button:hover > [data-i18n] { + padding-right: 1.3em; + width: 6em; + opacity: 1; + transition-duration: 0.2s; } + .sizerboard .licences { + display: block; + width: 100%; + text-align: center; + font-size: .85em; + font-weight: 900; } + .sizerboard .licences img { + width: auto; + height: 1em; } + .sizerboard .licences a > * { + vertical-align: middle; } + +/*# sourceMappingURL=Sizerboard.css.map */ diff --git a/Public/scss/Sizerboard.css.map b/Public/scss/Sizerboard.css.map new file mode 100644 index 0000000..146f182 --- /dev/null +++ b/Public/scss/Sizerboard.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["Sizerboard.base.scss","Sizerboard.settings.scss"], +"names": [], +"file": "Sizerboard.css" +} diff --git a/Public/scss/Sizerboard.scss b/Public/scss/Sizerboard.scss new file mode 100644 index 0000000..925eccb --- /dev/null +++ b/Public/scss/Sizerboard.scss @@ -0,0 +1 @@ +@import "Sizerboard.settings.scss", "Sizerboard.base.scss"; \ No newline at end of file diff --git a/Public/scss/Sizerboard.settings.scss b/Public/scss/Sizerboard.settings.scss new file mode 100644 index 0000000..3b49e75 --- /dev/null +++ b/Public/scss/Sizerboard.settings.scss @@ -0,0 +1,23 @@ +// colors +$color-primary : #2282D4; +$color-secondary : #D48222; +$color-fore : #222; +$color-back : #EFEFEF; +$color-grey : mix($color-fore, $color-back, 50%); + +// Sizes +$header-height : 4em; +$footer-height : 1em; +$projects-menu-width : 10em; +$border-radius : .3em; +$box-margin : .4em; + +// Fonts +$font-family : "Roboto"; +$font-mono : "Roboto Mono"; +$font-icons : "FA5FS"; + +// Transitions +$transition-in : .2s; +$transition-out : 1s; +$transition : ($transition-out - $transition-in) * .5 + $transition-in; \ No newline at end of file diff --git a/Sizerboard.apache2.conf b/Sizerboard.apache2.conf new file mode 100755 index 0000000..dc94eed --- /dev/null +++ b/Sizerboard.apache2.conf @@ -0,0 +1,14 @@ + + ServerName sizerboard.local + DocumentRoot /Projects/Sizerboard/Public + + Options +Indexes +FollowSymLinks +MultiViews + DirectoryIndex index.html index.php + AllowOverride all + Order Allow,Deny + Allow from all + Require all granted + + ErrorLog ${APACHE_LOG_DIR}/error_sizerboard_80.log + CustomLog ${APACHE_LOG_DIR}/access_sizerboard_80.log combined + diff --git a/Tools/sass.sh b/Tools/sass.sh new file mode 100755 index 0000000..92e61ff --- /dev/null +++ b/Tools/sass.sh @@ -0,0 +1,3 @@ +#!/bin/bash +directory=`dirname $(readlink -f "$0")` +sass $directory/../Public/scss/Sizerboard.scss ../Public/scss/Sizerboard.css; \ No newline at end of file diff --git a/version b/version new file mode 100644 index 0000000..b0a1227 --- /dev/null +++ b/version @@ -0,0 +1 @@ +0.0.10 \ No newline at end of file