package ONO::FW::Edu::Apps::Modules::Patterns;
################################################################################
# COPYRIGHT / LICENSE #
################################################################################
#
# This file is part of the ONO Software Project.
#
# Copyright (C) 2022-2026 Jos Kirps and The Joopita Project [ASBL]
# Copyright (C) 2011-2022 Jos Kirps and Joopita Research ASBL
# Copyright (C) 2006-2011 Jos Kirps and The Joopita Project
# Copyright (C) 2001-2006 Jos Kirps and The WobbleWolf Project
#
# This file, as well as many other parts of the ONO Software Project or
# related elements, are FREE SOFTWARE available under the ARTISTIC LICENSE 2.0.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# For the full license, see /ono/osr/license/LICENSE.txt, or write to
# jos_AT_kirps_DOT_com or contact_AT_joopita_DOT_com.
#
################################################################################
# END OF COPYRIGHT / LICENSE, HERE COMES THE CODE ... #
################################################################################
#: This module is a front end application module wrapper that has been
#: created for the Morzino Project (morzino.com) and that has been released
#: as Open Source software.
#:
#: Note that this is NOT a self-contained application, it is only a wrapper
#: that makes heavy use of the ONO Perl Framework application engine.
use strict;
use ONO::IO;
use ONO::FW::Edu::Apps::ToolBox;
use ONO::FW::Edu::Apps::Modules::WorksheetMaker::Input;
use ONO::FW::Apps::PDF;
use ONO::FW::Apps::ToolBox;
use ONO::Lib::Image::Canvas::Draw;
use ONO::Lib::PDF::Draw;
use ONO::Lib::PDF::ToolBox;
use ONO::Lib::PDF::Elements::Ruler;
use ONO::Lib::UI::Check;
use ONO::FW::Apps::Core;
use ONO::FW::Apps::Core::Graphics;
use ONO::Lib::Parser;
sub learn {
my (
$self,
$option,
$vars_ref,
$HTTP,
$BASE,
) = @_;
################################################################
# INIT - BEGIN
################################################################
my (
$db,
$community,
$action_url,
$form,
$format,
$canvas,
$pdfkey,
$sec,$min,$hour,
$mday,$mon,$year,
$wday,$yday,$timestamp,
$lang,
$BLK_ref,
$vars_ref,
) = ONO::FW::Apps::Core->init($vars_ref);
my %vars = %$vars_ref;
my %BLK = %$BLK_ref;
my $app = "patterns";
my @txt = (
"pattern",
"square boxes",
"show guide lines",
);
if ($vars{'app_lang'} eq "de") {
@txt = (
"Muster",
"quadratische Kästchen",
"Hilfslinien anzeigen",
);
}
if ($vars{'app_lang'} eq "lu") {
@txt = (
"Muster",
"quadratesch Këschten",
"Hëllefslinnen uweisen",
);
}
if ($vars{'app_lang'} eq "fr") {
@txt = (
"motif",
"boîtes carrées",
"afficher lignes guides",
);
}
my @colors = (
"red:cc3333",
"orange:ff6633",
"yellow:ffcc11",
"green:44bb22",
"blue:4444ee",
"-",
"brown:aa7744",
"-",
"white:ffffff",
"grey:aaaaaa",
"black:000000",
);
# "pink:ee6666",
# "purple:5533cc",
# "-",
ONO::FW::Apps::Core->now("",$app,$vars{'app_lang'});
my $WEB;
$WEB .= ONO::FW::Apps::Core->output_paper_save($pdfkey,$BLK_ref,\%vars,$HTTP,$BASE,"$year$mon$mday");
if (ONO::FW::Apps::Core->running(\%vars,$db) || $vars{'output_web_next_question'}) {
$WEB .= ONO::FW::Apps::Core->blockbackbutton($BASE,$vars_ref);
#############################################################
# WORKSHEET MAKER
#############################################################
if ($vars{'output_worksheet_maker'}) {
$vars_ref = ONO::FW::Edu::Apps::Modules::WorksheetMaker::Input->vars(\%vars);
%vars = %$vars_ref;
}
#############################################################
# ONLINE TRAINING
#############################################################
if ($vars{'output_web'} || $vars{'output_paper'}) {
my $question_number = ONO::FW::Apps::Core->question_number($vars{'output_web_question_number'});
my ($focus_on,$page,$pages,%cache,$whilecounter,$stats_switches,$PDF_OPTS);
my ($stat_correct,$stat_wrong,$stat_todo,$stat_todo_total,@pdf_items);
my $questions_per_page = 1;
if ($vars{'output_paper'}) {
$PDF_OPTS = ONO::FW::Apps::Core->headers_options($BLK_ref,$vars_ref);
ONO::FW::Apps::PDF->new("$BASE/pdf/pdf-$pdfkey.pdf","",$format);
$questions_per_page = 4;
}
foreach my $copy (ONO::FW::Apps::Core->unique_copies($vars{'app_input_print_options_unique_copies'})) {
my ($pdf_x,$pdf_y) = (0,0);
my @corr_cache;
my (@colors_use,%color_web);
foreach my $color (@colors) {
my @cp = split(/:/,$color);
$color_web{$cp[0]} = $cp[1];
if ($vars{"app_input_color_$cp[0]"} == 1) {
@colors_use = (@colors_use,$cp[0]);
}
}
my $colors_num = @colors_use;
if (!$colors_num) {
@colors_use = ('red','yellow','green','blue','white','black');
$colors_num = @colors_use;
}
if ($vars{'output_paper'}) {
if ($copy > 1) {
ONO::FW::Apps::PDF->page("",$format);
}
ONO::FW::Apps::Core->headers(\%vars,$format);
ONO::FW::Apps::PDF->title($vars{'app_input_print_options_title'},$PDF_OPTS,$vars{'app_input_print_options_code'},$format);
ONO::FW::Apps::Core->unique_copies_info($canvas,$copy,$vars_ref);
ONO::FW::Apps::Core::Graphics->pdf_draw_item_numbers($canvas,-2,0,1,4,"HV",$vars_ref);
# ONO::Lib::PDF::ToolBox->canvas_test($canvas);
}
if ($vars{'output_web'}) {
if ($vars{'output_web_next_question'}) {
$vars{'output_web_question_number'}++;
$question_number++;
foreach my $key (keys %vars) {
if ($key =~ /^output_web_/ && $key !~ /^output_web_(mistakes|question)/) {
$vars{$key} = "";
}
}
}
$WEB .= qq~<$form>~;
$WEB .= ONO::FW::Apps::Core->question_progress($vars{'app_input_number_of_questions'},$question_number,"","i");
if (!$vars{'output_web_mistakes'}) {
$vars{'output_web_mistakes'} = 0;
}
}
if (ONO::FW::Apps::Core->question_progress_done($vars{'app_input_number_of_questions'},$question_number) || $vars{'output_web_finish'}) {
$vars{'output_progress_done'}++;
$WEB .= ONO::FW::Apps::Core->question_progress_done_msg($app,$db,$community,$form,$action_url,$vars{'app_input_number_of_questions'},$vars{'output_web_mistakes'},$lang,$BLK_ref,\%vars);
} else {
for (my $i = 0; $i < $questions_per_page; $i++) {
my $rows = $vars{'app_input_rows'};
my $cols = $vars{'app_input_cols'};
if ($vars{'output_web_cols'} && $vars{'output_web_rows'}) {
$rows = $vars{'output_web_rows'};
$cols = $vars{'output_web_cols'};
} else {
if ($vars{'app_input_rows'} =~ /rand/) {
$rows = &rand_num("","rows",$vars{'app_input_rows'});
}
if ($vars{'app_input_cols'} =~ /rand/) {
$cols = &rand_num("","cols",$vars{'app_input_cols'});
}
if (!$rows || !$cols) {
$rows = 3;
$cols = 3;
}
if ($cols > $rows*2) {
$cols = int($rows*1.5);
}
}
# output paper
if ($vars{'output_paper'}) {
my $width = 165;
my $height = 36;
my @rect = ($pdf_x+5,$pdf_y+5,$pdf_x+5+$width,$pdf_y+5+$height);
my $rand_x = 0.75+rand(1.25);
if (int(rand(100)) > 50) {
$rand_x = 0.70+rand(1.10);
}
if ($rows < 5 && $rand_x > 1.5) {
$rand_x = 1.5;
}
if ($rows < 4 && $rand_x > 1.2) {
$rand_x = 1.2;
}
if ($rows < 3 && $rand_x > 1) {
$rand_x = 1;
}
if ($rows == 1) {
$rand_x = 0.5;
}
my $size_y = $height/$rows;
my $size_x = $size_y*$rand_x;
if ($rows > 3 && $size_x < $size_y) {
$size_x = $size_y;
}
if ($rows < 3 && $size_x > 20) {
$size_x = 5 + int(rand(10));
}
my ($pos_x,$pos_y) = ($pdf_x+5,$pdf_y+5);
for (my $c = 0; $c < $cols; $c++) {
for (my $r = 0; $r < $rows; $r++) {
my $color = $colors_use[int(rand($colors_num))];
my $COLOR_PDF = ONO::Lib::PDF::Draw->color_to_pdf($color_web{$color});
my ($x1,$y1,$x2,$y2,$b) = ($pos_x,$pos_y,$pos_x+$size_x,$pos_y+$size_y,0);
ONO::Lib::PDF::Draw->rect($canvas,$x1,$y1,$x2,$y2,$b,"",$COLOR_PDF);
@corr_cache = (@corr_cache,"rect:$x1:$y1:$x2:$y2:$b:$color");
for (my $corr = 1; $corr < 99; $corr++) {
my $use_x = $pos_x+$size_x*$corr*$cols;
if ($use_x+$size_x < 170) {
my ($x1,$y1,$x2,$y2,$b) = ($use_x,$pos_y,$use_x+$size_x,$pos_y+$size_y,0);
@corr_cache = (@corr_cache,"rect:$x1:$y1:$x2:$y2:$b:$color");
}
}
$pos_y = $pos_y+$size_y;
}
$pos_x = $pos_x+$size_x;
$pos_y = $pdf_y+5;
}
my $pos_x = 5;
my ($whilecounter,$max_x);
while ($whilecounter < 256 && $pos_x+$size_x < 170) {
$whilecounter++;
my ($x1,$y1,$x2,$y2,$b) = ($pos_x,$pdf_y+5,$pos_x,$pdf_y+5+$height,0.5);
ONO::Lib::PDF::Draw->line($canvas,$x1,$y1,$x2,$y2,$b);
@corr_cache = (@corr_cache,"line:$x1:$y1:$x2:$y2:$b:");
if ($vars{'app_input_guide_lines'} && ($whilecounter-1)%$cols == 0) {
($x1,$y1,$x2,$y2,$b) = ($pos_x,$pdf_y+3,$pos_x,$pdf_y+7+$height,1);
ONO::Lib::PDF::Draw->line($canvas,$x1,$y1,$x2,$y2,$b);
@corr_cache = (@corr_cache,"line:$x1:$y1:$x2:$y2:$b:");
}
$pos_x = $pos_x + $size_x;
$max_x = $pos_x;
}
my ($x1,$y1,$x2,$y2,$b) = ($rect[0],$rect[1],$max_x,$rect[3],0.5);
ONO::Lib::PDF::Draw->rect($canvas,$x1,$y1,$x2,$y2,$b);
@corr_cache = (@corr_cache,"rect:$x1:$y1:$x2:$y2:$b:");
for (my $r = 1; $r < $rows; $r++) {
my ($x1,$y1,$x2,$y2,$b) = ($rect[0],$pdf_y+5+$r*$size_y,$max_x,$pdf_y+5+$r*$size_y,0.5);
ONO::Lib::PDF::Draw->line($canvas,$x1,$y1,$x2,$y2,$b);
@corr_cache = (@corr_cache,"line:$x1:$y1:$x2:$y2:$b:");
}
$pdf_y = $pdf_y + 47.5;
}
if ($vars{'output_web'}) {
$WEB .= qq~<div class="inline auto">
<table class="default_table">
~;
my $max_x = 16;
my $mistakes_local = 0;
$WEB .= &help_grid("",$max_x,$cols,$vars{'app_input_guide_lines'});
for (my $y = 0; $y < $rows; $y++) {
$WEB .= qq~ <tr>~;
for (my $x = 0; $x < $max_x; $x++) {
if ($x == $cols || ($x && $vars{'app_input_guide_lines'} && $x%$cols == 0)) {
$WEB .= qq~ <td class="p0" style="background-color:#333333"></td>~;
}
my $COLOR;
if ($vars{"output_web_color_${x}_${y}"}) {
$COLOR = $vars{"output_web_color_${x}_${y}"};
}
my $TD = qq~<div id="pattern_td_${x}_${y}_id" class="block48 cursorlink" onclick="pattern_color_set($x,$y)" style="background-color:#$COLOR"></div>~;
if ($x < $cols) {
# display the initial patterns
if ($vars{"output_web_color_${x}_${y}"} eq "") {
$vars{"output_web_color_${x}_${y}"} = $color_web{$colors_use[int(rand($colors_num))]};
}
$TD = qq~<div class="block48" style="background-color:#$vars{"output_web_color_${x}_${y}"}"></div>~;
} else {
# check user input
if ($vars{'output_web_exercise_running'}) {
my $chk_x = $x;
my $whilecounter;
while ($whilecounter < 256 && $chk_x > $cols-1) {
$whilecounter++;
$chk_x = $chk_x - $cols;
}
my $CORR = qq~<div id="output_web_color_${chk_x}_${y}_err" class="abs" style="top:2px;left:2px" onclick="pattern_color_set($x,$y)">
<div class="bg_paper block16 radius8">
<div class="rel" style="top:2px;left:2px"><img class="block12" src="/ono/osr/images/icons/ono/32x32/delete_inv.png" alt="mistake"></div>
</div>
</div>
~;
if ($vars{"output_web_color_${x}_${y}"} eq "") {
$vars{"output_web_color_${x}_${y}"} = "ffffff";
}
if ($vars{"output_web_color_${x}_${y}"} eq $vars{"output_web_color_${chk_x}_${y}"}) {
$TD = qq~<div id="pattern_td_${x}_${y}_id" class="block48" style="background-color:#$vars{"output_web_color_${x}_${y}"}"></div>~;
$CORR = "";
} else {
$vars{'output_web_mistakes'}++;
$mistakes_local++;
}
$TD .= $CORR;
}
}
$WEB .= qq~ <td class="bo_dark p2">
<div class="rel">$TD</div>
<input type="hidden" id="output_web_color_${x}_${y}_id" name="output_web_color_${x}_${y}" value="$vars{"output_web_color_${x}_${y}"}">
</td>
~;
}
$WEB .= qq~ </tr>~;
}
$WEB .= &help_grid("",$max_x,$cols,$vars{'app_input_guide_lines'});
my $INPUT = ONO::FW::Apps::Core->input_vars(\%vars);
if ($vars{'output_web_color'} eq "") {
$vars{'output_web_color'} = "ffffff";
}
$WEB .= qq~ </table>
</div>
~;
$WEB =~ s~###PROGRESS_INFO###~<span class="bold">$vars{'output_web_mistakes'}</span> $BLK{'mistakes'}~;
if ($vars{'output_web_mistakes'}) {
$WEB =~ s~###PROGRESS_INFO_CLASS###~bg_yellow red~;
} else {
$WEB =~ s~###PROGRESS_INFO_CLASS###~bg_green green~;
}
$WEB .= qq~<input type="hidden" name="output_web_exercise_running" value="1">
<input type="hidden" name="output_web_cols" value="$cols">
<input type="hidden" name="output_web_rows" value="$rows">
<input type="hidden" id="output_web_color_id" name="output_web_color" value="$vars{'output_web_color'}">
$INPUT
~;
if ($vars{'output_web_exercise_running'} && !$mistakes_local) {
$WEB .= qq~<input type="hidden" name="output_web_next_question" value="1">
<div class="inline auto">
<input type="submit" name="continue" value="$BLK{'continue'}..." class="button_green button_big mt20">
</div>
<script>onojs_submit();</script>
~;
} else {
$WEB .= qq~<div class="inline auto">
<table class="default_table mt10">
<tr>
<td>
<table class="default_table">
<tr>
<td class="p0">
<div id="output_web_color_preview_id" class="bo block64 radius32 mr10" style="background-color:#$vars{'output_web_color'}">
<div class="rel" style="top:7px;left:9px"><img class="block48" src="/ono/osr/images/icons/crystal/64x64/ono/edit_thick.png" alt="color"></div>
</div>
</td>
</tr>
</table>
</td>
<td>
<table class="default_table">
<tr>
~;
foreach my $color (@colors) {
if ($color ne "-") {
my @cp = split(/:/,$color);
if ($vars{"app_input_color_$cp[0]"} == 1) {
$WEB .= qq~ <td class="p0"><div class="bo block40 radius20 mr5 cursorlink" style="background-color:#$cp[1]" onclick="output_web_color_select('$cp[1]');"></div></td>~;
}
}
}
$WEB .= qq~ <td>
<input type="submit" name="submit" value="$BLK{'do_correct'}" class="button_green button_big ml20">
</td>
</tr>
</table>
</td>
</tr>
</table>
<script>
function output_web_color_select(color) {
onojs_setvalue('output_web_color_id',color);
onojs_setbgcolor('output_web_color_preview_id','#'+color);
}
function pattern_color_set(x,y) {
var color = onojs_getvalue('output_web_color_id');
onojs_setbgcolor('pattern_td_'+x+'_'+y+'_id','#'+color);
onojs_setvalue('output_web_color_'+x+'_'+y+'_id',color);
}
</script>
</div>
~;
}
}
}
if ($vars{'output_web'}) {
$WEB .= qq~</form>~;
}
}
if (ONO::FW::Apps::Core->print_corrections("$BASE/pdf/pdf-$pdfkey-corr.pdf","",$format,$vars_ref)) {
ONO::FW::Apps::Core->headers(\%vars,$format,"c");
ONO::FW::Apps::PDF->title($BLK{'Corrections'},$PDF_OPTS,$vars{'app_input_print_options_code'},$format);
ONO::FW::Apps::Core->unique_copies_info($canvas,$copy,$vars_ref);
ONO::FW::Apps::Core::Graphics->pdf_draw_item_numbers($canvas,-2,0,1,4,"HV",$vars_ref);
# ONO::Lib::PDF::ToolBox->canvas_test($canvas);
foreach my $corr (@corr_cache) {
my @cp = split(/:/,$corr);
if ($cp[0] eq "line") {
ONO::Lib::PDF::Draw->line($canvas,$cp[1],$cp[2],$cp[3],$cp[4],$cp[5]);
}
if ($cp[0] eq "rect") {
my $COLOR_PDF;
if ($cp[6] =~ /[A-Za-z0-9]/) {
$COLOR_PDF = ONO::Lib::PDF::Draw->color_to_pdf($color_web{$cp[6]});
}
ONO::Lib::PDF::Draw->rect($canvas,$cp[1],$cp[2],$cp[3],$cp[4],$cp[5],"",$COLOR_PDF);
}
}
}
}
if ($vars{'output_paper'}) {
ONO::FW::Apps::PDF->end;
$WEB .= ONO::FW::Apps::PDF->please_wait($pdfkey,\%BLK,\%vars,"",$HTTP,$BASE);
}
}
} else {
#############################################################
# EXERCISE SETUP
#############################################################
if (!$vars{'app_input_number_of_questions'}) {
$vars{'app_input_number_of_questions'} = 20;
}
$WEB .= ONO::FW::Apps::Core->infopics(
"screen:320:50:40::patterns_screenshot_1.jpg",
"sheet:168:190:140:15:patterns_sheet_1.jpg",
"sheet:168:40:150:-10:patterns_sheet_2.jpg",
);
my %sel;
my %CUSTOM;
$CUSTOM{'auto'} = qq~<div class="fr">
<a href="javascript:void(0);" onclick="pattern_level_set('1');" class="button_green button_mini button_left">$BLK{'easy'}</a>
<a href="javascript:void(0);" onclick="pattern_level_set('2');" class="button_yellow button_mini button_middle">$BLK{'normal'}</a>
<a href="javascript:void(0);" onclick="pattern_level_set('3');" class="button_red button_mini button_right">$BLK{'hard'}</a>
</div>
~;
foreach my $opt ('rows','cols') {
if ($vars{"app_input_$opt"} eq "") {
$vars{"app_input_$opt"} = "rand-normal";
}
my $EXA = qq~<div class="bb_dark"><div style="height:7px"></div></div>
<div class="bb_dark"><div style="height:7px"></div></div>
~;
my $SEL;
my ($r1,$r2) = (1,4);
foreach my $rand ("easy","normal","hard") {
my $sel;
if ($vars{"app_input_$opt"} eq "rand-$rand") {
$sel = " selected";
}
my $r1min = $r1;
if ($opt eq "cols" && $r1 < 2) {
$r1min = 2;
}
$SEL .= qq~<option value="rand-$rand"$sel>$BLK{'random'}: $BLK{$rand} ($r1min-$r2)</option>~;
$r1++;
$r2++;
}
my $sel;
if ($vars{"app_input_$opt"} eq "rand") {
$sel = " selected";
}
my $r1min = 1;
if ($opt eq "cols") {
$r1min = 2;
}
$SEL .= qq~<option value="rand">----</option>
<option value="rand"$sel>$BLK{'random'} ($r1min-6)</option>
<option value="rand">----</option>
~;
if ($opt eq "cols") {
$EXA = qq~<div class="br_dark fl"><div style="width:7px;height:23px"></div></div>
<div class="br_dark fl"><div style="width:7px;height:23px"></div></div>
~;
}
for (my $s = 1; $s < 7; $s++) {
if ($s > 1 || $opt eq "rows") {
my $sel;
if ($s == $vars{"app_input_$opt"}) {
$sel = " selected";
}
$SEL .= qq~<option value="$s"$sel>$s</option>~;
}
}
$CUSTOM{"$opt\_pic"} = qq~<div class="block24 bo_dark inline">$EXA</div>~;
my $INFO = $BLK{$opt};
if ($opt eq "cols") {
$INFO = "$txt[0] $BLK{'width'}";
}
$CUSTOM{$opt} = qq~<table class="default_table">
<tr>
<td><div class="select"><select id="app_input_${opt}_id" name="app_input_$opt">$SEL</select></div></td>
<td>$INFO</td>
</tr>
</table>
~;
}
my $color_selected;
foreach my $color (@colors) {
if ($color =~ /:/) {
my @cp = split(/:/,$color);
my $TRANS1 = " trans50";
my $TRANS2 = " trans20";
if ($vars{"app_input_color_$cp[0]"} == 1) {
$TRANS1 = "";
$TRANS2 = "";
$color_selected++;
}
$CUSTOM{'color'} .= qq~<td class="pad5_0">
<div id="app_input_color_div1_$cp[0]" class="bo block24 radius20 cursorlink$TRANS1" style="background-color:#$cp[1]" onclick="pattern_color_toggle('$cp[0]');"></div>
</td>
~;
$CUSTOM{'color2'} .= qq~<td class="p0">
<div id="app_input_color_div2_$cp[0]" class="cursorlink$TRANS2" onclick="pattern_color_toggle('$cp[0]');">
<img class="block16 auto" src="/ono/osr/images/icons/ono/32x32/checked.png" alt="checked">
</div>
<input type="hidden" id="app_input_color_$cp[0]_id" name="app_input_color_$cp[0]" value="$vars{"app_input_color_$cp[0]"}">
</td>
~;
}
}
$CUSTOM{'color'} = qq~<table class="default_table"><tr>$CUSTOM{'color'}</tr><tr>$CUSTOM{'color2'}</tr></table>~;
my $CONF;
$CONF .= ONO::FW::Apps::ToolBox->conf_input("custom", $BLK_ref,\%vars,"","",qq~$CUSTOM{'auto'}<div class="bold mt10">$txt[0]:</div>~);
$CONF .= ONO::FW::Apps::ToolBox->conf_input("custom", $BLK_ref,\%vars,"",$CUSTOM{'rows_pic'},$CUSTOM{'rows'});
$CONF .= ONO::FW::Apps::ToolBox->conf_input("custom", $BLK_ref,\%vars,"",$CUSTOM{'cols_pic'},$CUSTOM{'cols'});
$CONF .= ONO::FW::Apps::ToolBox->conf_input("spacer", $BLK_ref,\%vars,"","s");
$CONF .= ONO::FW::Apps::ToolBox->conf_input("custom", $BLK_ref,\%vars,"","",qq~<div class="bold">$BLK{'colors'}:</div>~);
$CONF .= ONO::FW::Apps::ToolBox->conf_input("custom", $BLK_ref,\%vars,"","",$CUSTOM{'color'});
$CONF .= ONO::FW::Apps::ToolBox->conf_input("spacer", $BLK_ref,\%vars,"","s");
# $CONF .= ONO::FW::Apps::ToolBox->conf_input("check", $BLK_ref,\%vars,"S","","square_boxes",$vars{'app_input_square_boxes'},"$txt[1] ($BLK{'if_possible'})");
$CONF .= ONO::FW::Apps::ToolBox->conf_input("check", $BLK_ref,\%vars,"S","","guide_lines",$vars{'app_input_guide_lines'},$txt[2]);
$CONF .= ONO::FW::Apps::ToolBox->conf_input("spacer", $BLK_ref,\%vars,"","s");
$WEB .= ONO::FW::Apps::Core->conf_box(
$db,
$community,
$app,
$form,
"",
$action_url,
$CONF,
$lang,
$BLK_ref,
\%vars,
"op-ncdi-CDI-lsu-N",
);
$WEB .= qq~<script>
function pattern_color_toggle(id) {
var color = onojs_getvalue('app_input_color_'+id+'_id');
if (color == 1) {
pattern_color_off(id);
} else {
pattern_color_on(id);
}
}
function pattern_color_on(id) {
onojs_setvalue('app_input_color_'+id+'_id','1');
onojs_class('app_input_color_div1_'+id,'bo block24 radius20 cursorlink');
onojs_class('app_input_color_div2_'+id,'cursorlink');
}
function pattern_color_off(id) {
var color = onojs_getvalue('app_input_color_'+id+'_id');
onojs_setvalue('app_input_color_'+id+'_id','2');
onojs_class('app_input_color_div1_'+id,'bo block24 radius20 cursorlink trans50');
onojs_class('app_input_color_div2_'+id,'cursorlink trans20');
}
function pattern_level_set(level) {
pattern_color_on('red');
pattern_color_off('orange');
pattern_color_on('yellow');
pattern_color_off('green');
pattern_color_on('blue');
pattern_color_off('brown');
pattern_color_on('white');
pattern_color_off('grey');
pattern_color_off('black');
if (level == 1) {
onojs_setvalue('app_input_rows_id','rand-easy');
onojs_setvalue('app_input_cols_id','rand-easy');
}
if (level == 2) {
onojs_setvalue('app_input_rows_id','rand-normal');
onojs_setvalue('app_input_cols_id','rand-normal');
pattern_color_on('green');
pattern_color_on('white');
pattern_color_on('black');
}
if (level == 3) {
onojs_setvalue('app_input_rows_id','rand-hard');
onojs_setvalue('app_input_cols_id','rand-hard');
pattern_color_on('orange');
pattern_color_on('green');
pattern_color_on('brown');
pattern_color_on('white');
pattern_color_on('grey');
pattern_color_on('black');
}
};
</script>
~;
if ($color_selected < 2) {
$WEB .= qq~<script>
pattern_color_toggle('red');
pattern_color_toggle('green');
pattern_color_toggle('yellow');
pattern_color_toggle('blue');
pattern_color_toggle('white');
</script>
~;
}
# <div id="app_input_color_div2_$cp[0]" class="cursorlink" onclick="pattern_color_toggle('$cp[0]');">
if (!$vars{'exercise'}) {
$WEB .= ONO::FW::Apps::Core->info_display(
ONO::FW::Apps::Core->info("info_online_print",$vars{'app_lang'}),
ONO::FW::Apps::Core->info("info_indiv_diff", $vars{'app_lang'}),
);
}
}
my ($status,$WEB) = ONO::Lib::Parser->parse($WEB,$vars_ref);
$WEB .= ONO::FW::Apps::Core->vardump($vars_ref);
$WEB = ONO::FW::Edu::Apps::ToolBox->apps_gate($WEB,$vars_ref);
return $WEB;
}
###################################################################
# SUBS
###################################################################
sub help_grid {
my (
$self,
$max_x,
$cols,
$force_hints,
) = @_;
my $WEB = qq~ <tr>~;
for (my $x = 0; $x < $max_x; $x++) {
if ($x == $cols || ($x && $force_hints && $x%$cols == 0)) {
$WEB.=qq~<td class="p0" style="background-color:#333333"><div style="width:2px;height:15px"></div></td>
<td class=""></td>
~;
} else {
$WEB.=qq~<td class=""></td>~;
}
}
$WEB .= qq~ </tr>~;
return $WEB;
}
sub rand_num {
my $num = 1+int(rand(6));
if ($_[1] eq "cols") {
$num = 2+int(rand(5));
}
if ($_[2] =~ /easy/) {
$num = 1+int(rand(4));
if ($_[1] eq "cols") {
$num = 2+int(rand(3));
}
}
if ($_[2] =~ /normal/) {
$num = 2+int(rand(4));
}
if ($_[2] =~ /hard/) {
$num = 3+int(rand(4));
}
return $num;
}
###################################################################
#### THAT'S IT :-D
###################################################################
1;
__END__