diff --git a/.editorconfig b/.editorconfig index 317d36083..40f166a06 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,3 +1,5 @@ +root = true + [*] charset = utf-8 end_of_line = lf @@ -11,7 +13,7 @@ ij_formatter_off_tag = @formatter:off ij_formatter_on_tag = @formatter:on ij_formatter_tags_enabled = false ij_smart_tabs = false -ij_visual_guides = 80, 120, 140 +ij_visual_guides = 140 ij_wrap_on_typing = true [*.css] @@ -33,53 +35,9 @@ ij_css_space_after_colon = true ij_css_space_before_opening_brace = true ij_css_value_alignment = 0 -[*.csv] -max_line_length = 2147483647 -ij_wrap_on_typing = false -ij_csv_wrap_long_lines = false - -[*.feature] -indent_size = 2 -ij_gherkin_keep_indents_on_empty_lines = false - -[*.less] -indent_size = 2 -ij_less_align_closing_brace_with_properties = false -ij_less_blank_lines_around_nested_selector = 1 -ij_less_blank_lines_between_blocks = 1 -ij_less_brace_placement = 0 -ij_less_hex_color_long_format = false -ij_less_hex_color_lower_case = false -ij_less_hex_color_short_format = false -ij_less_hex_color_upper_case = false -ij_less_keep_blank_lines_in_code = 2 -ij_less_keep_indents_on_empty_lines = false -ij_less_keep_single_line_blocks = false -ij_less_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow -ij_less_space_after_colon = true -ij_less_space_before_opening_brace = true -ij_less_value_alignment = 0 - -[*.sass] -indent_size = 2 -ij_sass_align_closing_brace_with_properties = false -ij_sass_blank_lines_around_nested_selector = 1 -ij_sass_blank_lines_between_blocks = 1 -ij_sass_brace_placement = 0 -ij_sass_hex_color_long_format = false -ij_sass_hex_color_lower_case = false -ij_sass_hex_color_short_format = false -ij_sass_hex_color_upper_case = false -ij_sass_keep_blank_lines_in_code = 2 -ij_sass_keep_indents_on_empty_lines = false -ij_sass_keep_single_line_blocks = false -ij_sass_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow -ij_sass_space_after_colon = true -ij_sass_space_before_opening_brace = true -ij_sass_value_alignment = 0 - [*.scss] indent_style = tab +ij_smart_tabs = true ij_scss_align_closing_brace_with_properties = false ij_scss_blank_lines_around_nested_selector = 1 ij_scss_blank_lines_between_blocks = 1 @@ -99,7 +57,6 @@ ij_scss_value_alignment = 0 [*.twig] indent_style = tab ij_smart_tabs = true -ij_wrap_on_typing = false ij_twig_keep_indents_on_empty_lines = false ij_twig_spaces_inside_delimiters = true ij_twig_spaces_inside_variable_delimiters = true @@ -112,7 +69,212 @@ ij_editorconfig_space_before_colon = false ij_editorconfig_space_before_comma = false ij_editorconfig_spaces_around_assignment_operators = true -[{*.cjs,*.js}] +[{*.ctp,*.phtml,*.module,*.php,*.php5,*.php4,*.hphp,*.inc}] +indent_style = tab +ij_continuation_indent_size = 4 +ij_smart_tabs = true +ij_wrap_on_typing = false +ij_php_align_assignments = false +ij_php_align_class_constants = false +ij_php_align_group_field_declarations = false +ij_php_align_inline_comments = false +ij_php_align_key_value_pairs = false +ij_php_align_multiline_array_initializer_expression = false +ij_php_align_multiline_binary_operation = false +ij_php_align_multiline_chained_methods = false +ij_php_align_multiline_extends_list = false +ij_php_align_multiline_for = true +ij_php_align_multiline_parameters = false +ij_php_align_multiline_parameters_in_calls = false +ij_php_align_multiline_ternary_operation = false +ij_php_align_phpdoc_comments = false +ij_php_align_phpdoc_param_names = false +ij_php_api_weight = 1 +ij_php_array_initializer_new_line_after_left_brace = true +ij_php_array_initializer_right_brace_on_new_line = true +ij_php_array_initializer_wrap = on_every_item +ij_php_assignment_wrap = off +ij_php_author_weight = 7 +ij_php_binary_operation_sign_on_next_line = false +ij_php_binary_operation_wrap = off +ij_php_blank_lines_after_class_header = 0 +ij_php_blank_lines_after_function = 1 +ij_php_blank_lines_after_imports = 1 +ij_php_blank_lines_after_opening_tag = 0 +ij_php_blank_lines_after_package = 1 +ij_php_blank_lines_around_class = 1 +ij_php_blank_lines_around_constants = 0 +ij_php_blank_lines_around_field = 0 +ij_php_blank_lines_around_method = 1 +ij_php_blank_lines_before_class_end = 0 +ij_php_blank_lines_before_imports = 1 +ij_php_blank_lines_before_method_body = 0 +ij_php_blank_lines_before_package = 1 +ij_php_blank_lines_before_return_statement = 1 +ij_php_block_brace_style = end_of_line +ij_php_call_parameters_new_line_after_left_paren = false +ij_php_call_parameters_right_paren_on_new_line = false +ij_php_call_parameters_wrap = normal +ij_php_catch_on_new_line = false +ij_php_category_weight = 28 +ij_php_class_brace_style = end_of_line +ij_php_comma_after_last_array_element = true +ij_php_concat_spaces = false +ij_php_copyright_weight = 28 +ij_php_deprecated_weight = 28 +ij_php_do_while_brace_force = always +ij_php_else_if_style = as_is +ij_php_else_on_new_line = true +ij_php_example_weight = 3 +ij_php_extends_keyword_wrap = off +ij_php_extends_list_wrap = off +ij_php_fields_default_visibility = private +ij_php_filesource_weight = 28 +ij_php_finally_on_new_line = false +ij_php_for_brace_force = always +ij_php_for_statement_new_line_after_left_paren = false +ij_php_for_statement_right_paren_on_new_line = false +ij_php_for_statement_wrap = off +ij_php_force_short_declaration_array_style = false +ij_php_global_weight = 28 +ij_php_group_use_wrap = on_every_item +ij_php_if_brace_force = always +ij_php_if_lparen_on_next_line = false +ij_php_if_rparen_on_next_line = false +ij_php_ignore_weight = 28 +ij_php_import_sorting = alphabetic +ij_php_indent_break_from_case = true +ij_php_indent_case_from_switch = true +ij_php_indent_code_in_php_tags = false +ij_php_internal_weight = 0 +ij_php_keep_blank_lines_after_lbrace = 2 +ij_php_keep_blank_lines_before_right_brace = 2 +ij_php_keep_blank_lines_in_code = 2 +ij_php_keep_blank_lines_in_declarations = 2 +ij_php_keep_control_statement_in_one_line = true +ij_php_keep_first_column_comment = true +ij_php_keep_indents_on_empty_lines = false +ij_php_keep_line_breaks = true +ij_php_keep_rparen_and_lbrace_on_one_line = true +ij_php_keep_simple_methods_in_one_line = false +ij_php_lambda_brace_style = end_of_line +ij_php_license_weight = 28 +ij_php_line_comment_add_space = false +ij_php_line_comment_at_first_column = true +ij_php_link_weight = 28 +ij_php_lower_case_boolean_const = true +ij_php_lower_case_null_const = true +ij_php_method_brace_style = end_of_line +ij_php_method_call_chain_wrap = off +ij_php_method_parameters_new_line_after_left_paren = true +ij_php_method_parameters_right_paren_on_new_line = true +ij_php_method_parameters_wrap = normal +ij_php_method_weight = 28 +ij_php_modifier_list_wrap = false +ij_php_multiline_chained_calls_semicolon_on_new_line = false +ij_php_namespace_brace_style = 1 +ij_php_null_type_position = in_the_end +ij_php_package_weight = 28 +ij_php_param_weight = 4 +ij_php_parentheses_expression_new_line_after_left_paren = false +ij_php_parentheses_expression_right_paren_on_new_line = false +ij_php_phpdoc_blank_line_before_tags = true +ij_php_phpdoc_blank_lines_around_parameters = true +ij_php_phpdoc_keep_blank_lines = true +ij_php_phpdoc_param_spaces_between_name_and_description = 1 +ij_php_phpdoc_param_spaces_between_tag_and_type = 1 +ij_php_phpdoc_param_spaces_between_type_and_name = 1 +ij_php_phpdoc_use_fqcn = true +ij_php_phpdoc_wrap_long_lines = true +ij_php_place_assignment_sign_on_next_line = false +ij_php_place_parens_for_constructor = 0 +ij_php_property_read_weight = 28 +ij_php_property_weight = 28 +ij_php_property_write_weight = 28 +ij_php_return_type_on_new_line = false +ij_php_return_weight = 5 +ij_php_see_weight = 2 +ij_php_since_weight = 28 +ij_php_sort_phpdoc_elements = true +ij_php_space_after_colon = true +ij_php_space_after_colon_in_return_type = true +ij_php_space_after_comma = true +ij_php_space_after_for_semicolon = true +ij_php_space_after_quest = true +ij_php_space_after_type_cast = false +ij_php_space_after_unary_not = false +ij_php_space_before_array_initializer_left_brace = false +ij_php_space_before_catch_keyword = true +ij_php_space_before_catch_left_brace = true +ij_php_space_before_catch_parentheses = true +ij_php_space_before_class_left_brace = true +ij_php_space_before_closure_left_parenthesis = true +ij_php_space_before_colon = true +ij_php_space_before_colon_in_return_type = false +ij_php_space_before_comma = false +ij_php_space_before_do_left_brace = true +ij_php_space_before_else_keyword = true +ij_php_space_before_else_left_brace = true +ij_php_space_before_finally_keyword = true +ij_php_space_before_finally_left_brace = true +ij_php_space_before_for_left_brace = true +ij_php_space_before_for_parentheses = true +ij_php_space_before_for_semicolon = false +ij_php_space_before_if_left_brace = true +ij_php_space_before_if_parentheses = true +ij_php_space_before_method_call_parentheses = false +ij_php_space_before_method_left_brace = true +ij_php_space_before_method_parentheses = false +ij_php_space_before_quest = true +ij_php_space_before_switch_left_brace = true +ij_php_space_before_switch_parentheses = true +ij_php_space_before_try_left_brace = true +ij_php_space_before_unary_not = false +ij_php_space_before_while_keyword = true +ij_php_space_before_while_left_brace = true +ij_php_space_before_while_parentheses = true +ij_php_space_between_ternary_quest_and_colon = false +ij_php_spaces_around_additive_operators = true +ij_php_spaces_around_arrow = false +ij_php_spaces_around_assignment_in_declare = false +ij_php_spaces_around_assignment_operators = true +ij_php_spaces_around_bitwise_operators = true +ij_php_spaces_around_equality_operators = true +ij_php_spaces_around_logical_operators = true +ij_php_spaces_around_multiplicative_operators = true +ij_php_spaces_around_null_coalesce_operator = true +ij_php_spaces_around_relational_operators = true +ij_php_spaces_around_shift_operators = true +ij_php_spaces_around_unary_operator = false +ij_php_spaces_around_var_within_brackets = false +ij_php_spaces_within_array_initializer_braces = false +ij_php_spaces_within_brackets = false +ij_php_spaces_within_catch_parentheses = false +ij_php_spaces_within_for_parentheses = false +ij_php_spaces_within_if_parentheses = false +ij_php_spaces_within_method_call_parentheses = false +ij_php_spaces_within_method_parentheses = false +ij_php_spaces_within_parentheses = false +ij_php_spaces_within_short_echo_tags = true +ij_php_spaces_within_switch_parentheses = false +ij_php_spaces_within_while_parentheses = false +ij_php_special_else_if_treatment = false +ij_php_subpackage_weight = 28 +ij_php_ternary_operation_signs_on_next_line = false +ij_php_ternary_operation_wrap = off +ij_php_throws_weight = 6 +ij_php_todo_weight = 28 +ij_php_unknown_tag_weight = 28 +ij_php_upper_case_boolean_const = false +ij_php_upper_case_null_const = false +ij_php_uses_weight = 28 +ij_php_var_weight = 28 +ij_php_variable_naming_style = mixed +ij_php_version_weight = 28 +ij_php_while_brace_force = always +ij_php_while_on_new_line = false + +[{*.js,*.cjs}] indent_style = tab ij_continuation_indent_size = 4 ij_smart_tabs = true @@ -134,13 +296,13 @@ ij_javascript_array_initializer_wrap = off ij_javascript_assignment_wrap = off ij_javascript_binary_operation_sign_on_next_line = false ij_javascript_binary_operation_wrap = off -ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**/* +ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**/*,@angular/material,@angular/material/typings/** ij_javascript_blank_lines_after_imports = 1 ij_javascript_blank_lines_around_class = 1 ij_javascript_blank_lines_around_field = 0 ij_javascript_blank_lines_around_function = 1 ij_javascript_blank_lines_around_method = 1 -ij_javascript_block_brace_style = next_line +ij_javascript_block_brace_style = end_of_line ij_javascript_call_parameters_new_line_after_left_paren = false ij_javascript_call_parameters_right_paren_on_new_line = false ij_javascript_call_parameters_wrap = off @@ -148,7 +310,7 @@ ij_javascript_catch_on_new_line = false ij_javascript_chained_call_dot_on_new_line = true ij_javascript_class_brace_style = end_of_line ij_javascript_comma_on_new_line = false -ij_javascript_do_while_brace_force = never +ij_javascript_do_while_brace_force = always ij_javascript_else_on_new_line = true ij_javascript_enforce_trailing_comma = keep ij_javascript_extends_keyword_wrap = off @@ -156,7 +318,7 @@ ij_javascript_extends_list_wrap = off ij_javascript_field_prefix = _ ij_javascript_file_name_style = relaxed ij_javascript_finally_on_new_line = false -ij_javascript_for_brace_force = never +ij_javascript_for_brace_force = always ij_javascript_for_statement_new_line_after_left_paren = false ij_javascript_for_statement_right_paren_on_new_line = false ij_javascript_for_statement_wrap = off @@ -272,216 +434,11 @@ ij_javascript_use_path_mapping = always ij_javascript_use_public_modifier = false ij_javascript_use_semicolon_after_statement = true ij_javascript_var_declaration_wrap = normal -ij_javascript_while_brace_force = never +ij_javascript_while_brace_force = always ij_javascript_while_on_new_line = false ij_javascript_wrap_comments = false -[{*.module,*.hphp,*.phtml,*.php5,*.php4,*.php,*.ctp,*.inc}] -indent_style = tab -ij_continuation_indent_size = 4 -ij_smart_tabs = true -ij_wrap_on_typing = false -ij_php_align_assignments = false -ij_php_align_class_constants = false -ij_php_align_group_field_declarations = false -ij_php_align_inline_comments = false -ij_php_align_key_value_pairs = false -ij_php_align_multiline_array_initializer_expression = false -ij_php_align_multiline_binary_operation = false -ij_php_align_multiline_chained_methods = false -ij_php_align_multiline_extends_list = false -ij_php_align_multiline_for = true -ij_php_align_multiline_parameters = false -ij_php_align_multiline_parameters_in_calls = false -ij_php_align_multiline_ternary_operation = false -ij_php_align_phpdoc_comments = false -ij_php_align_phpdoc_param_names = false -ij_php_api_weight = 1 -ij_php_array_initializer_new_line_after_left_brace = true -ij_php_array_initializer_right_brace_on_new_line = true -ij_php_array_initializer_wrap = on_every_item -ij_php_assignment_wrap = off -ij_php_author_weight = 7 -ij_php_binary_operation_sign_on_next_line = false -ij_php_binary_operation_wrap = off -ij_php_blank_lines_after_class_header = 0 -ij_php_blank_lines_after_function = 1 -ij_php_blank_lines_after_imports = 1 -ij_php_blank_lines_after_opening_tag = 0 -ij_php_blank_lines_after_package = 1 -ij_php_blank_lines_around_class = 1 -ij_php_blank_lines_around_constants = 0 -ij_php_blank_lines_around_field = 0 -ij_php_blank_lines_around_method = 1 -ij_php_blank_lines_before_class_end = 0 -ij_php_blank_lines_before_imports = 1 -ij_php_blank_lines_before_method_body = 0 -ij_php_blank_lines_before_package = 1 -ij_php_blank_lines_before_return_statement = 1 -ij_php_block_brace_style = next_line -ij_php_call_parameters_new_line_after_left_paren = false -ij_php_call_parameters_right_paren_on_new_line = false -ij_php_call_parameters_wrap = normal -ij_php_catch_on_new_line = true -ij_php_category_weight = 28 -ij_php_class_brace_style = next_line -ij_php_comma_after_last_array_element = true -ij_php_concat_spaces = false -ij_php_copyright_weight = 28 -ij_php_deprecated_weight = 28 -ij_php_do_while_brace_force = always -ij_php_else_if_style = as_is -ij_php_else_on_new_line = true -ij_php_example_weight = 3 -ij_php_extends_keyword_wrap = off -ij_php_extends_list_wrap = off -ij_php_fields_default_visibility = private -ij_php_filesource_weight = 28 -ij_php_finally_on_new_line = true -ij_php_for_brace_force = always -ij_php_for_statement_new_line_after_left_paren = false -ij_php_for_statement_right_paren_on_new_line = false -ij_php_for_statement_wrap = off -ij_php_force_short_declaration_array_style = false -ij_php_global_weight = 28 -ij_php_group_use_wrap = on_every_item -ij_php_if_brace_force = always -ij_php_if_lparen_on_next_line = false -ij_php_if_rparen_on_next_line = false -ij_php_ignore_weight = 28 -ij_php_import_sorting = alphabetic -ij_php_indent_break_from_case = true -ij_php_indent_case_from_switch = true -ij_php_indent_code_in_php_tags = false -ij_php_internal_weight = 0 -ij_php_keep_blank_lines_after_lbrace = 2 -ij_php_keep_blank_lines_before_right_brace = 2 -ij_php_keep_blank_lines_in_code = 2 -ij_php_keep_blank_lines_in_declarations = 2 -ij_php_keep_control_statement_in_one_line = true -ij_php_keep_first_column_comment = true -ij_php_keep_indents_on_empty_lines = false -ij_php_keep_line_breaks = true -ij_php_keep_rparen_and_lbrace_on_one_line = true -ij_php_keep_simple_methods_in_one_line = false -ij_php_lambda_brace_style = end_of_line -ij_php_license_weight = 28 -ij_php_line_comment_add_space = false -ij_php_line_comment_at_first_column = true -ij_php_link_weight = 28 -ij_php_lower_case_boolean_const = true -ij_php_lower_case_null_const = true -ij_php_method_brace_style = next_line -ij_php_method_call_chain_wrap = off -ij_php_method_parameters_new_line_after_left_paren = true -ij_php_method_parameters_right_paren_on_new_line = true -ij_php_method_parameters_wrap = normal -ij_php_method_weight = 28 -ij_php_modifier_list_wrap = false -ij_php_multiline_chained_calls_semicolon_on_new_line = false -ij_php_namespace_brace_style = 1 -ij_php_null_type_position = in_the_end -ij_php_package_weight = 28 -ij_php_param_weight = 4 -ij_php_parentheses_expression_new_line_after_left_paren = false -ij_php_parentheses_expression_right_paren_on_new_line = false -ij_php_phpdoc_blank_line_before_tags = true -ij_php_phpdoc_blank_lines_around_parameters = true -ij_php_phpdoc_keep_blank_lines = true -ij_php_phpdoc_param_spaces_between_name_and_description = 1 -ij_php_phpdoc_param_spaces_between_tag_and_type = 1 -ij_php_phpdoc_param_spaces_between_type_and_name = 1 -ij_php_phpdoc_use_fqcn = true -ij_php_phpdoc_wrap_long_lines = true -ij_php_place_assignment_sign_on_next_line = false -ij_php_place_parens_for_constructor = 0 -ij_php_property_read_weight = 28 -ij_php_property_weight = 28 -ij_php_property_write_weight = 28 -ij_php_return_type_on_new_line = false -ij_php_return_weight = 5 -ij_php_see_weight = 2 -ij_php_since_weight = 28 -ij_php_sort_phpdoc_elements = true -ij_php_space_after_colon = true -ij_php_space_after_colon_in_return_type = true -ij_php_space_after_comma = true -ij_php_space_after_for_semicolon = true -ij_php_space_after_quest = true -ij_php_space_after_type_cast = false -ij_php_space_after_unary_not = false -ij_php_space_before_array_initializer_left_brace = false -ij_php_space_before_catch_keyword = true -ij_php_space_before_catch_left_brace = true -ij_php_space_before_catch_parentheses = true -ij_php_space_before_class_left_brace = true -ij_php_space_before_closure_left_parenthesis = true -ij_php_space_before_colon = true -ij_php_space_before_colon_in_return_type = false -ij_php_space_before_comma = false -ij_php_space_before_do_left_brace = true -ij_php_space_before_else_keyword = true -ij_php_space_before_else_left_brace = true -ij_php_space_before_finally_keyword = true -ij_php_space_before_finally_left_brace = true -ij_php_space_before_for_left_brace = true -ij_php_space_before_for_parentheses = true -ij_php_space_before_for_semicolon = false -ij_php_space_before_if_left_brace = true -ij_php_space_before_if_parentheses = true -ij_php_space_before_method_call_parentheses = false -ij_php_space_before_method_left_brace = true -ij_php_space_before_method_parentheses = false -ij_php_space_before_quest = true -ij_php_space_before_switch_left_brace = true -ij_php_space_before_switch_parentheses = true -ij_php_space_before_try_left_brace = true -ij_php_space_before_unary_not = false -ij_php_space_before_while_keyword = true -ij_php_space_before_while_left_brace = true -ij_php_space_before_while_parentheses = true -ij_php_space_between_ternary_quest_and_colon = false -ij_php_spaces_around_additive_operators = true -ij_php_spaces_around_arrow = false -ij_php_spaces_around_assignment_in_declare = false -ij_php_spaces_around_assignment_operators = true -ij_php_spaces_around_bitwise_operators = true -ij_php_spaces_around_equality_operators = true -ij_php_spaces_around_logical_operators = true -ij_php_spaces_around_multiplicative_operators = true -ij_php_spaces_around_null_coalesce_operator = true -ij_php_spaces_around_relational_operators = true -ij_php_spaces_around_shift_operators = true -ij_php_spaces_around_unary_operator = false -ij_php_spaces_around_var_within_brackets = false -ij_php_spaces_within_array_initializer_braces = false -ij_php_spaces_within_brackets = false -ij_php_spaces_within_catch_parentheses = false -ij_php_spaces_within_for_parentheses = false -ij_php_spaces_within_if_parentheses = false -ij_php_spaces_within_method_call_parentheses = false -ij_php_spaces_within_method_parentheses = false -ij_php_spaces_within_parentheses = false -ij_php_spaces_within_short_echo_tags = true -ij_php_spaces_within_switch_parentheses = false -ij_php_spaces_within_while_parentheses = false -ij_php_special_else_if_treatment = false -ij_php_subpackage_weight = 28 -ij_php_ternary_operation_signs_on_next_line = false -ij_php_ternary_operation_wrap = off -ij_php_throws_weight = 6 -ij_php_todo_weight = 28 -ij_php_unknown_tag_weight = 28 -ij_php_upper_case_boolean_const = false -ij_php_upper_case_null_const = false -ij_php_uses_weight = 28 -ij_php_var_weight = 28 -ij_php_variable_naming_style = mixed -ij_php_version_weight = 28 -ij_php_while_brace_force = always -ij_php_while_on_new_line = false - -[{*.sht,*.htm,*.html,*.shtm,*.shtml}] +[{*.sht,*.html,*.shtm,*.shtml,*.htm,*.ng}] indent_style = tab ij_smart_tabs = true ij_html_add_new_line_before_tags = body,div,p,form,h1,h2,h3 @@ -510,185 +467,20 @@ ij_html_space_around_equality_in_attribute = false ij_html_space_inside_empty_tag = false ij_html_text_wrap = normal -[{*.ts,*.ats}] -ij_continuation_indent_size = 4 -ij_typescript_align_imports = false -ij_typescript_align_multiline_array_initializer_expression = false -ij_typescript_align_multiline_binary_operation = false -ij_typescript_align_multiline_chained_methods = false -ij_typescript_align_multiline_extends_list = false -ij_typescript_align_multiline_for = true -ij_typescript_align_multiline_parameters = true -ij_typescript_align_multiline_parameters_in_calls = false -ij_typescript_align_multiline_ternary_operation = false -ij_typescript_align_object_properties = 0 -ij_typescript_align_union_types = false -ij_typescript_align_var_statements = 0 -ij_typescript_array_initializer_new_line_after_left_brace = false -ij_typescript_array_initializer_right_brace_on_new_line = false -ij_typescript_array_initializer_wrap = off -ij_typescript_assignment_wrap = off -ij_typescript_binary_operation_sign_on_next_line = false -ij_typescript_binary_operation_wrap = off -ij_typescript_blacklist_imports = rxjs/Rx,node_modules/**/* -ij_typescript_blank_lines_after_imports = 1 -ij_typescript_blank_lines_around_class = 1 -ij_typescript_blank_lines_around_field = 0 -ij_typescript_blank_lines_around_field_in_interface = 0 -ij_typescript_blank_lines_around_function = 1 -ij_typescript_blank_lines_around_method = 1 -ij_typescript_blank_lines_around_method_in_interface = 1 -ij_typescript_block_brace_style = end_of_line -ij_typescript_call_parameters_new_line_after_left_paren = false -ij_typescript_call_parameters_right_paren_on_new_line = false -ij_typescript_call_parameters_wrap = off -ij_typescript_catch_on_new_line = false -ij_typescript_chained_call_dot_on_new_line = true -ij_typescript_class_brace_style = end_of_line -ij_typescript_comma_on_new_line = false -ij_typescript_do_while_brace_force = never -ij_typescript_else_on_new_line = false -ij_typescript_enforce_trailing_comma = keep -ij_typescript_extends_keyword_wrap = off -ij_typescript_extends_list_wrap = off -ij_typescript_field_prefix = _ -ij_typescript_file_name_style = relaxed -ij_typescript_finally_on_new_line = false -ij_typescript_for_brace_force = never -ij_typescript_for_statement_new_line_after_left_paren = false -ij_typescript_for_statement_right_paren_on_new_line = false -ij_typescript_for_statement_wrap = off -ij_typescript_force_quote_style = false -ij_typescript_force_semicolon_style = false -ij_typescript_function_expression_brace_style = end_of_line -ij_typescript_if_brace_force = never -ij_typescript_import_merge_members = global -ij_typescript_import_prefer_absolute_path = global -ij_typescript_import_sort_members = true -ij_typescript_import_sort_module_name = false -ij_typescript_import_use_node_resolution = true -ij_typescript_imports_wrap = on_every_item -ij_typescript_indent_case_from_switch = true -ij_typescript_indent_chained_calls = true -ij_typescript_indent_package_children = 0 -ij_typescript_jsdoc_include_types = false -ij_typescript_jsx_attribute_value = braces -ij_typescript_keep_blank_lines_in_code = 2 -ij_typescript_keep_first_column_comment = true -ij_typescript_keep_indents_on_empty_lines = false -ij_typescript_keep_line_breaks = true -ij_typescript_keep_simple_blocks_in_one_line = false -ij_typescript_keep_simple_methods_in_one_line = false -ij_typescript_line_comment_add_space = true -ij_typescript_line_comment_at_first_column = false -ij_typescript_method_brace_style = end_of_line -ij_typescript_method_call_chain_wrap = off -ij_typescript_method_parameters_new_line_after_left_paren = false -ij_typescript_method_parameters_right_paren_on_new_line = false -ij_typescript_method_parameters_wrap = off -ij_typescript_object_literal_wrap = on_every_item -ij_typescript_parentheses_expression_new_line_after_left_paren = false -ij_typescript_parentheses_expression_right_paren_on_new_line = false -ij_typescript_place_assignment_sign_on_next_line = false -ij_typescript_prefer_as_type_cast = false -ij_typescript_prefer_parameters_wrap = false -ij_typescript_reformat_c_style_comments = false -ij_typescript_space_after_colon = true -ij_typescript_space_after_comma = true -ij_typescript_space_after_dots_in_rest_parameter = false -ij_typescript_space_after_generator_mult = true -ij_typescript_space_after_property_colon = true -ij_typescript_space_after_quest = true -ij_typescript_space_after_type_colon = true -ij_typescript_space_after_unary_not = false -ij_typescript_space_before_async_arrow_lparen = true -ij_typescript_space_before_catch_keyword = true -ij_typescript_space_before_catch_left_brace = true -ij_typescript_space_before_catch_parentheses = true -ij_typescript_space_before_class_lbrace = true -ij_typescript_space_before_class_left_brace = true -ij_typescript_space_before_colon = true -ij_typescript_space_before_comma = false -ij_typescript_space_before_do_left_brace = true -ij_typescript_space_before_else_keyword = true -ij_typescript_space_before_else_left_brace = true -ij_typescript_space_before_finally_keyword = true -ij_typescript_space_before_finally_left_brace = true -ij_typescript_space_before_for_left_brace = true -ij_typescript_space_before_for_parentheses = true -ij_typescript_space_before_for_semicolon = false -ij_typescript_space_before_function_left_parenth = true -ij_typescript_space_before_generator_mult = false -ij_typescript_space_before_if_left_brace = true -ij_typescript_space_before_if_parentheses = true -ij_typescript_space_before_method_call_parentheses = false -ij_typescript_space_before_method_left_brace = true -ij_typescript_space_before_method_parentheses = false -ij_typescript_space_before_property_colon = false -ij_typescript_space_before_quest = true -ij_typescript_space_before_switch_left_brace = true -ij_typescript_space_before_switch_parentheses = true -ij_typescript_space_before_try_left_brace = true -ij_typescript_space_before_type_colon = false -ij_typescript_space_before_unary_not = false -ij_typescript_space_before_while_keyword = true -ij_typescript_space_before_while_left_brace = true -ij_typescript_space_before_while_parentheses = true -ij_typescript_spaces_around_additive_operators = true -ij_typescript_spaces_around_arrow_function_operator = true -ij_typescript_spaces_around_assignment_operators = true -ij_typescript_spaces_around_bitwise_operators = true -ij_typescript_spaces_around_equality_operators = true -ij_typescript_spaces_around_logical_operators = true -ij_typescript_spaces_around_multiplicative_operators = true -ij_typescript_spaces_around_relational_operators = true -ij_typescript_spaces_around_shift_operators = true -ij_typescript_spaces_around_unary_operator = false -ij_typescript_spaces_within_array_initializer_brackets = false -ij_typescript_spaces_within_brackets = false -ij_typescript_spaces_within_catch_parentheses = false -ij_typescript_spaces_within_for_parentheses = false -ij_typescript_spaces_within_if_parentheses = false -ij_typescript_spaces_within_imports = false -ij_typescript_spaces_within_interpolation_expressions = false -ij_typescript_spaces_within_method_call_parentheses = false -ij_typescript_spaces_within_method_parentheses = false -ij_typescript_spaces_within_object_literal_braces = false -ij_typescript_spaces_within_object_type_braces = true -ij_typescript_spaces_within_parentheses = false -ij_typescript_spaces_within_switch_parentheses = false -ij_typescript_spaces_within_type_assertion = false -ij_typescript_spaces_within_union_types = true -ij_typescript_spaces_within_while_parentheses = false -ij_typescript_special_else_if_treatment = true -ij_typescript_ternary_operation_signs_on_next_line = false -ij_typescript_ternary_operation_wrap = off -ij_typescript_union_types_wrap = on_every_item -ij_typescript_use_chained_calls_group_indents = false -ij_typescript_use_double_quotes = true -ij_typescript_use_explicit_js_extension = global -ij_typescript_use_path_mapping = always -ij_typescript_use_public_modifier = false -ij_typescript_use_semicolon_after_statement = true -ij_typescript_var_declaration_wrap = normal -ij_typescript_while_brace_force = never -ij_typescript_while_on_new_line = false -ij_typescript_wrap_comments = false - [{*.yml,*.yaml}] indent_size = 2 ij_continuation_indent_size = 2 ij_yaml_keep_indents_on_empty_lines = false ij_yaml_keep_line_breaks = true -[{*.zsh,*.bash,*.sh}] +[{*.zsh,*.sh,*.bash}] ij_shell_binary_ops_start_line = false ij_shell_keep_column_alignment_padding = false ij_shell_minify_program = false ij_shell_redirect_followed_by_space = false ij_shell_switch_cases_indented = false -[{.stylelintrc,.eslintrc,.babelrc,jest.config,*.bowerrc,*.jsb3,*.jsb2,*.json}] +[{.babelrc,.stylelintrc,.eslintrc,jest.config,*.json,*.jsb3,*.jsb2,*.bowerrc}] indent_size = 2 ij_json_keep_blank_lines_in_code = 0 ij_json_keep_indents_on_empty_lines = false @@ -701,7 +493,7 @@ ij_json_spaces_within_braces = false ij_json_spaces_within_brackets = false ij_json_wrap_long_lines = false -[{phpunit.xml.dist,*.jhm,*.rng,*.wsdl,*.fxml,*.xslt,*.jrxml,*.ant,*.xul,*.xsl,*.xsd,*.tld,*.jnlp,*.xml}] +[{phpunit.xml.dist,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.jhm,*.tld,*.fxml,*.wsdl,*.jrxml,*.xml,*.jnlp}] indent_size = 2 indent_style = tab tab_width = 2 diff --git a/README.md b/README.md index cfb243b02..0d6078315 100644 --- a/README.md +++ b/README.md @@ -78,10 +78,10 @@ We would like to give a special thank you to the people from the community who c - Alves, David - Beck, Pedro - Bilger, Jean-François - - Bostoen, Jeffrey + - Bostoen, Jeffrey (a.k.a @jbostoen) - Cardoso, Anderson - Cassaro, Bruno - - Casteleyn, Thomas + - Casteleyn, Thomas (a.k.a @Hipska) - Castro, Randall Badilla - Colantoni, Maria Laura - Couronné, Guy @@ -97,6 +97,7 @@ We would like to give a special thank you to the people from the community who c - Lazcano, Federico - Lucas, Jonathan - Malik, Remie + - Mindêllo de Andrade, Lucas (a.k.a @rokam) - Rosenke, Stephan - Seki, Shoji - Shilov, Vladimir diff --git a/addons/userrights/userrightsprofile.class.inc.php b/addons/userrights/userrightsprofile.class.inc.php index e72445b8c..7a5b988f7 100644 --- a/addons/userrights/userrightsprofile.class.inc.php +++ b/addons/userrights/userrightsprofile.class.inc.php @@ -431,7 +431,7 @@ class UserRightsProfile extends UserRightsAddOnAPI // Support drastic data model changes: no organization class (or not writable)! if (MetaModel::IsValidClass('Organization') && !MetaModel::IsAbstract('Organization')) { - $oOrg = new Organization(); + $oOrg = MetaModel::NewObject('Organization'); $oOrg->Set('name', 'My Company/Department'); $oOrg->Set('code', 'SOMECODE'); $iOrgId = $oOrg->DBInsertNoReload(); @@ -439,17 +439,13 @@ class UserRightsProfile extends UserRightsAddOnAPI // Support drastic data model changes: no Person class (or not writable)! if (MetaModel::IsValidClass('Person') && !MetaModel::IsAbstract('Person')) { - $oContact = new Person(); + $oContact = MetaModel::NewObject('Person'); $oContact->Set('name', 'My last name'); $oContact->Set('first_name', 'My first name'); if (MetaModel::IsValidAttCode('Person', 'org_id')) { $oContact->Set('org_id', $iOrgId); } - if (MetaModel::IsValidAttCode('Person', 'phone')) - { - $oContact->Set('phone', '+00 000 000 000'); - } $oContact->Set('email', 'my.email@foo.org'); $iContactId = $oContact->DBInsertNoReload(); } @@ -558,7 +554,7 @@ class UserRightsProfile extends UserRightsAddOnAPI /** * @param $oUser User - * @return array + * @return bool */ public function IsAdministrator($oUser) { @@ -568,16 +564,22 @@ class UserRightsProfile extends UserRightsAddOnAPI /** * @param $oUser User - * @return array + * @return bool */ public function IsPortalUser($oUser) { // UserRights caches the list for us return UserRights::HasProfile(PORTAL_PROFILE_NAME, $oUser); } + /** * @param $oUser User - * @return bool + * + * @return array + * @throws \ArchivedObjectException + * @throws \CoreException + * @throws \CoreUnexpectedValue + * @throws \MySQLException */ public function ListProfiles($oUser) { diff --git a/addons/userrights/userrightsprofile.db.class.inc.php b/addons/userrights/userrightsprofile.db.class.inc.php index 97c839723..30652cd7d 100644 --- a/addons/userrights/userrightsprofile.db.class.inc.php +++ b/addons/userrights/userrightsprofile.db.class.inc.php @@ -529,7 +529,7 @@ class UserRightsProfile extends UserRightsAddOnAPI // Support drastic data model changes: no organization class (or not writable)! if (MetaModel::IsValidClass('Organization') && !MetaModel::IsAbstract('Organization')) { - $oOrg = new Organization(); + $oOrg = MetaModel::NewObject('Organization'); $oOrg->Set('name', 'My Company/Department'); $oOrg->Set('code', 'SOMECODE'); $oOrg::SetCurrentChange($oChange); @@ -538,17 +538,13 @@ class UserRightsProfile extends UserRightsAddOnAPI // Support drastic data model changes: no Person class (or not writable)! if (MetaModel::IsValidClass('Person') && !MetaModel::IsAbstract('Person')) { - $oContact = new Person(); + $oContact = MetaModel::NewObject('Person'); $oContact->Set('name', 'My last name'); $oContact->Set('first_name', 'My first name'); if (MetaModel::IsValidAttCode('Person', 'org_id')) { $oContact->Set('org_id', $iOrgId); } - if (MetaModel::IsValidAttCode('Person', 'phone')) - { - $oContact->Set('phone', '+00 000 000 000'); - } $oContact->Set('email', 'my.email@foo.org'); $oContact::SetCurrentChange($oChange); $iContactId = $oContact->DBInsertNoReload(); @@ -705,7 +701,7 @@ class UserRightsProfile extends UserRightsAddOnAPI public function LoadCache() { - if (!is_null($this->m_aProfiles)) return; + if (!is_null($this->m_aProfiles)) return false; // Could be loaded in a shared memory (?) $oKPI = new ExecutionKPI(); diff --git a/application/Html2Text.php b/application/Html2Text.php index 9cbe27ce1..51aa166bf 100644 --- a/application/Html2Text.php +++ b/application/Html2Text.php @@ -30,8 +30,11 @@ function mb_str_replace($search, $replace, $subject, &$count = 0) { $replacements = array_pad($replacements, count($searches), ''); foreach ($searches as $key => $search) { $parts = mb_split(preg_quote($search), $subject); - $count += count($parts) - 1; - $subject = implode($replacements[$key], $parts); + if (is_countable($parts)) + { + $count += count($parts) - 1; + $subject = implode($replacements[$key], $parts); + } } } else { // Call mb_str_replace for each subject in array, recursively diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index e5e652997..1877490b4 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -4203,6 +4203,16 @@ EOF $this->bAllowWrite = $bAllow; } + /** + * Whether to bypass the checks of user rights when writing this object, could be used in {@link \iApplicationObjectExtension::OnCheckToWrite()} + * + * @return bool + */ + public function GetAllowWrite() + { + return $this->bAllowWrite; + } + /** * Bypass the check of the user rights when deleting this object * diff --git a/application/dashboard.class.inc.php b/application/dashboard.class.inc.php index 4346623e6..1d277d472 100644 --- a/application/dashboard.class.inc.php +++ b/application/dashboard.class.inc.php @@ -491,7 +491,7 @@ abstract class Dashboard $("#attr_auto_reload_sec").prop('disabled', !$(this).is(':checked')); } ); - $('#select_layout').buttonset(); + $('#select_layout').controlgroup(); $('#select_dashlet').droppable({ accept: '.dashlet', drop: function(event, ui) { diff --git a/application/loginwebpage.class.inc.php b/application/loginwebpage.class.inc.php index ab594b21d..02caac304 100644 --- a/application/loginwebpage.class.inc.php +++ b/application/loginwebpage.class.inc.php @@ -107,7 +107,7 @@ class LoginWebPage extends NiceWebPage * @throws \CoreException * @throws \CoreUnexpectedValue */ - public static function SynchroniseProfiles(&$oUser, array $aProfiles, $sOrigin) + public static function SynchronizeProfiles(&$oUser, array $aProfiles, $sOrigin) { $oProfilesSet = $oUser->Get(‘profile_list’); //delete old profiles @@ -928,7 +928,7 @@ class LoginWebPage extends NiceWebPage { $sOrigin .= " ({$_SESSION['login_mode']})"; } - $aExistingProfiles = self::SynchroniseProfiles($oUser, $aProfiles, $sOrigin); + $aExistingProfiles = self::SynchronizeProfiles($oUser, $aProfiles, $sOrigin); if ($oUser->IsModified()) { $oUser->DBWrite(); diff --git a/application/nicewebpage.class.inc.php b/application/nicewebpage.class.inc.php index 01314f7e3..368110be6 100644 --- a/application/nicewebpage.class.inc.php +++ b/application/nicewebpage.class.inc.php @@ -39,7 +39,7 @@ class NiceWebPage extends WebPage { $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/jquery-migrate.prod.min.js'); } - $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/jquery-ui-1.11.4.custom.min.js'); + $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/jquery-ui.custom.min.js'); $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/utils.js'); $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/hovertip.js'); // table sorting diff --git a/application/themehandler.class.inc.php b/application/themehandler.class.inc.php index de2fb21ca..6c377fd31 100644 --- a/application/themehandler.class.inc.php +++ b/application/themehandler.class.inc.php @@ -25,6 +25,9 @@ */ class ThemeHandler { + const IMAGE_EXTENSIONS = ['png', 'gif', 'jpg', 'jpeg']; + + private static $oCompileCSSService; /** * Return default theme name and parameters * @@ -33,19 +36,19 @@ class ThemeHandler */ public static function GetDefaultThemeInformation() { - return array( + return [ 'name' => 'light-grey', - 'parameters' => array( - 'variables' => array(), - 'imports' => array( + 'parameters' => [ + 'variables' => [], + 'imports' => [ 'css-variables' => '../css/css-variables.scss', - ), - 'stylesheets' => array( + ], + 'stylesheets' => [ 'jqueryui' => '../css/ui-lightness/jqueryui.scss', 'main' => '../css/light-grey.scss', - ), - ), - ); + ], + ], + ]; } /** @@ -57,6 +60,10 @@ class ThemeHandler { try { + if (is_null(MetaModel::GetConfig())) + { + throw new CoreException('no config'); + } $sThemeId = MetaModel::GetConfig()->Get('backoffice_default_theme'); } catch(CoreException $oCompileException) @@ -108,37 +115,49 @@ class ThemeHandler SetupUtils::builddir($sDefaultThemeDirPath); } - static::CompileTheme($sThemeId, $aDefaultTheme['parameters']); + static::CompileTheme($sThemeId, false, "", $aDefaultTheme['parameters']); } // Return absolute url to theme compiled css - return utils::GetAbsoluteUrlModulesRoot().'/branding/themes/'.$sThemeId.'/main.css'; + return utils::GetAbsoluteUrlModulesRoot().'branding/themes/'.$sThemeId.'/main.css'; } /** - * Compile the $sThemeId theme + * Compile the $sThemeId theme, the actual compilation is skipped when either + * 1) The produced CSS file exists and is more recent than any of its components (imports, stylesheets) + * 2) The produced CSS file exists and its signature is equal to the expected signature (imports, stylesheets, variables) * * @param string $sThemeId + * @param boolean $bSetup + * @param string $sSetupCompilationTimestamp : setup compilation timestamp in micro secunds * @param array|null $aThemeParameters Parameters (variables, imports, stylesheets) for the theme, if not passed, will be retrieved from compiled DM * @param array|null $aImportsPaths Paths where imports can be found. Must end with '/' * @param string|null $sWorkingPath Path of the folder used during compilation. Must end with a '/' * * @throws \CoreException + * @return boolean: indicate whether theme compilation occured */ - public static function CompileTheme($sThemeId, $aThemeParameters = null, $aImportsPaths = null, $sWorkingPath = null) + public static function CompileTheme($sThemeId, $bSetup=false, $sSetupCompilationTimestamp="", $aThemeParameters = null, $aImportsPaths = null, $sWorkingPath = null) { + if ($sSetupCompilationTimestamp==="") + { + $sSetupCompilationTimestamp = microtime(true); + } + + $sSetupCompilationTimestampInSecunds = (strpos($sSetupCompilationTimestamp, '.') !==false) ? explode('.', $sSetupCompilationTimestamp)[0] : $sSetupCompilationTimestamp; + + $sEnv = APPROOT.'env-'.utils::GetCurrentEnvironment().'/'; + // Default working path if($sWorkingPath === null) { - $sWorkingPath = APPROOT.'env-'.utils::GetCurrentEnvironment().'/'; + $sWorkingPath = $sEnv; } // Default import paths (env-*) if($aImportsPaths === null) { - $aImportsPaths = array( - APPROOT.'env-'.utils::GetCurrentEnvironment().'/', - ); + $aImportsPaths = [ $sEnv]; } // Note: We do NOT check that the folder exists! @@ -148,6 +167,11 @@ class ThemeHandler // Save parameters if passed... (typically during DM compilation) if(is_array($aThemeParameters)) { + if (!is_dir($sThemeFolderPath)) + { + mkdir($sWorkingPath.'/branding/'); + mkdir($sWorkingPath.'/branding/themes/'); + } file_put_contents($sThemeFolderPath.'/theme-parameters.json', json_encode($aThemeParameters)); } // ... Otherwise, retrieve them from compiled DM (typically when switching current theme in the config. file) @@ -160,31 +184,589 @@ class ThemeHandler } } + $aThemeParametersWithVersion = self::CloneThemeParameterAndIncludeVersion($aThemeParameters, $sSetupCompilationTimestampInSecunds); + $sTmpThemeScssContent = ''; $iStyleLastModified = 0; clearstatcache(); // Loading files to import and stylesheet to compile, also getting most recent modification time on overall files + + $aStylesheetFiles = []; foreach ($aThemeParameters['imports'] as $sImport) { $sTmpThemeScssContent .= '@import "'.$sImport.'";'."\n"; - $iImportLastModified = @filemtime($sWorkingPath.$sImport); + $sFile = static::FindStylesheetFile($sImport, $aImportsPaths); + $iImportLastModified = @filemtime($sFile); + $aStylesheetFiles[] = $sFile; $iStyleLastModified = $iStyleLastModified < $iImportLastModified ? $iImportLastModified : $iStyleLastModified; } foreach ($aThemeParameters['stylesheets'] as $sStylesheet) { $sTmpThemeScssContent .= '@import "'.$sStylesheet.'";'."\n"; - $iStylesheetLastModified = @filemtime($sWorkingPath.$sStylesheet); + $sFile = static::FindStylesheetFile($sStylesheet, $aImportsPaths); + $iStylesheetLastModified = @filemtime($sFile); + $aStylesheetFiles[] = $sFile; $iStyleLastModified = $iStyleLastModified < $iStylesheetLastModified ? $iStylesheetLastModified : $iStyleLastModified; } - // Checking if our compiled css is outdated - if (!file_exists($sThemeCssPath) || (is_writable($sThemeFolderPath) && (@filemtime($sThemeCssPath) < $iStyleLastModified))) + $aIncludedImages=static::GetIncludedImages($aThemeParametersWithVersion, $aStylesheetFiles, $sThemeId); + foreach ($aIncludedImages as $sImage) { - $sTmpThemeCssContent = utils::CompileCSSFromSASS($sTmpThemeScssContent, $aImportsPaths, $aThemeParameters['variables']); - file_put_contents($sThemeCssPath, $sTmpThemeCssContent); + if (is_file($sImage)) + { + $iStylesheetLastModified = @filemtime($sImage); + $iStyleLastModified = $iStyleLastModified < $iStylesheetLastModified ? $iStylesheetLastModified : $iStyleLastModified; + } } + + // Checking if our compiled css is outdated + $iFilemetime = @filemtime($sThemeCssPath); + $bFileExists = file_exists($sThemeCssPath); + $bVarSignatureChanged=false; + if ($bFileExists && $bSetup) + { + $sPrecompiledSignature = static::GetSignature($sThemeCssPath); + //check variable signature has changed which is independant from any file modification + if (!empty($sPrecompiledSignature)){ + $sPreviousVariableSignature = static::GetVarSignature($sPrecompiledSignature); + $sCurrentVariableSignature = md5(json_encode($aThemeParameters['variables'])); + $bVarSignatureChanged= ($sPreviousVariableSignature!==$sCurrentVariableSignature); + } + } + + if (!$bFileExists || $bVarSignatureChanged || (is_writable($sThemeFolderPath) && ($iFilemetime < $iStyleLastModified))) + { + // Dates don't match. Second chance: check if the already compiled stylesheet exists and is consistent based on its signature + $sActualSignature = static::ComputeSignature($aThemeParameters, $aImportsPaths, $aIncludedImages); + + if ($bFileExists && !$bSetup) + { + $sPrecompiledSignature = static::GetSignature($sThemeCssPath); + } + + if (!empty($sPrecompiledSignature) && $sActualSignature == $sPrecompiledSignature) + { + touch($sThemeCssPath); // Stylesheet is up to date, mark it as more recent to speedup next time + } + else + { + // Alas, we really need to recompile + // Add the signature to the generated CSS file so that the file can be used as a precompiled stylesheet if needed + $sSignatureComment = + <<CompileCSSFromSASS($sTmpThemeScssContent, $aImportsPaths, + $aThemeParametersWithVersion); + file_put_contents($sThemeFolderPath.'/theme-parameters.json', json_encode($aThemeParameters)); + file_put_contents($sThemeCssPath, $sSignatureComment.$sTmpThemeCssContent); + SetupLog::Info("Theme $sThemeId file compiled."); + return true; + } + } + return false; + } + + /** + * Compute the signature of a theme defined by its theme parameters. The signature is a JSON structure of + * 1) one MD5 of all the variables/values (JSON encoded) + * 2) the MD5 of each stylesheet file + * 3) the MD5 of each import file + * 3) the MD5 of each images referenced in style sheets + * + * @param string[] $aThemeParameters + * @param string[] $aImportsPaths + * @param string[] $aIncludedImages + * + * @return string + * @throws \Exception + */ + public static function ComputeSignature($aThemeParameters, $aImportsPaths, $aIncludedImages) + { + $aSignature = [ + 'variables' => md5(json_encode($aThemeParameters['variables'])), + 'stylesheets' => [], + 'imports' => [], + 'images' => [] + ]; + + foreach ($aThemeParameters['imports'] as $key => $sImport) + { + $sFile = static::FindStylesheetFile($sImport, $aImportsPaths); + $aSignature['stylesheets'][$key] = md5_file($sFile); + } + foreach ($aThemeParameters['stylesheets'] as $key => $sStylesheet) + { + $sFile = static::FindStylesheetFile($sStylesheet, $aImportsPaths); + $aSignature['stylesheets'][$key] = md5_file($sFile); + } + foreach ($aIncludedImages as $sImage) + { + if (is_file($sImage)) + { + $sUri = str_replace(APPROOT, '', $sImage); + $aSignature['images'][$sUri] = md5_file($sImage); + } + } + + return json_encode($aSignature); + } + + /** + * Search for images referenced in stylesheet files + * + * @param array $aThemeParametersVariables + * @param array $aStylesheetFiles + * @param string $sThemeId: used only for logging purpose + * + * @return array + * @since 2.8.0 + */ + public static function GetIncludedImages($aThemeParametersVariables, $aStylesheetFiles, $sThemeId) + { + $sTargetThemeFolderPath = static::GetCompiledThemeFolderAbsolutePath($sThemeId); + + $aCompleteUrls = []; + $aToCompleteUrls = []; + $aMissingVariables = []; + $aFoundVariables = ['version'=>'']; + $aMap = [ + 'aCompleteUrls' => $aCompleteUrls, + 'aToCompleteUrls' => $aToCompleteUrls, + 'aMissingVariables' => $aMissingVariables, + 'aFoundVariables' => $aFoundVariables, + ]; + + foreach ($aStylesheetFiles as $sStylesheetFile) + { + $aRes = static::GetAllUrlFromScss($aThemeParametersVariables, $sStylesheetFile); + /** @var array $aVal */ + foreach($aMap as $key => $aVal) + { + if (array_key_exists($key, $aMap)) + { + $aMap[$key] = array_merge($aVal, $aRes[$key]); + } + } + } + + $aMap = static::ResolveUncompleteUrlsFromScss($aMap, $aThemeParametersVariables, $aStylesheetFiles); + $aImages = []; + + foreach ($aMap ['aCompleteUrls'] as $sUri => $sUrl) + { + $sImg = $sUrl; + if (preg_match("/(.*)\?/", $sUrl, $aMatches)) + { + $sImg=$aMatches[1]; + } + + if (static::HasImageExtension($sImg) + && ! array_key_exists($sImg, $aImages)) + { + $sFilePath = realpath($sImg); + if ($sFilePath!==false) + { + $aImages[$sImg]=$sFilePath; + continue; + } + + $sCanonicalPath = static::CanonicalizePath($sTargetThemeFolderPath.DIRECTORY_SEPARATOR.$sImg); + $sFilePath=realpath($sCanonicalPath); + if ($sFilePath!==false) + { + $aImages[$sImg]=$sFilePath; + continue; + } + + SetupLog::Warning("Cannot find $sCanonicalPath ($sImg) during SCSS $sThemeId precompilation"); + } + } + + return array_values($aImages); + } + + /** + * Reduce path without using realpath (works only when file exists) + * @param $path + * + * @return string + */ + public static function CanonicalizePath($path) + { + $path = explode('/', str_replace('//','/', $path)); + $stack = array(); + foreach ($path as $seg) { + if ($seg == '..') { + // Ignore this segment, remove last segment from stack + array_pop($stack); + continue; + } + + if ($seg == '.') { + // Ignore this segment + continue; + } + + $stack[] = $seg; + } + + return implode('/', $stack); + } + + /** + * Complete url using provided variables. Example with $var=1: XX + $var => XX1 + * @param $aMap + * @param $aThemeParametersVariables + * @param $aStylesheetFile + * + * @return mixed + */ + public static function ResolveUncompleteUrlsFromScss($aMap, $aThemeParametersVariables, $aStylesheetFile) + { + $sContent=""; + foreach ($aStylesheetFile as $sStylesheetFile) + { + if (is_file($sStylesheetFile)) + { + $sContent .= '\n' . file_get_contents($sStylesheetFile); + } + } + + $aMissingVariables=$aMap['aMissingVariables']; + $aFoundVariables=$aMap['aFoundVariables']; + $aToCompleteUrls=$aMap['aToCompleteUrls']; + $aCompleteUrls=$aMap['aCompleteUrls']; + list($aMissingVariables, $aFoundVariables) = static::FindMissingVariables($aThemeParametersVariables, $aMissingVariables, $aFoundVariables, $sContent, true); + list($aToCompleteUrls, $aCompleteUrls) = static::ResolveUrls($aFoundVariables, $aToCompleteUrls, $aCompleteUrls); + $aMap['aMissingVariables']=$aMissingVariables; + $aMap['aFoundVariables']=$aFoundVariables; + $aMap['aToCompleteUrls']=$aToCompleteUrls; + $aMap['aCompleteUrls']=$aCompleteUrls; + return $aMap; + } + + /** + * Find missing variable values from SCSS content based on their name. + * + * @param $aThemeParametersVariables + * @param $aMissingVariables + * @param $aFoundVariables + * @param $sContent : scss content + * @param bool $bForceEmptyValueWhenNotFound + * + * @return array + */ + public static function FindMissingVariables($aThemeParametersVariables, $aMissingVariables, $aFoundVariables, $sContent, $bForceEmptyValueWhenNotFound=false) + { + $aNewMissingVars = []; + if (!empty($aMissingVariables)) + { + foreach ($aMissingVariables as $var) + { + if (array_key_exists($var, $aThemeParametersVariables)) + { + $aFoundVariables[$var] = $aThemeParametersVariables[$var]; + } + else + { + if (preg_match_all("/\\\$$var\s*:\s*[\"']{0,1}(.*)[\"']{0,1};/", $sContent, $aValues)) + { + $sValue = $aValues[1][0]; + if (preg_match_all("/([^!]+)!/", $sValue, $aSubValues)) + { + $sValue = trim($aSubValues[1][0], ' "\''); + } + + if (strpos($sValue, '$') === false) + { + $aFoundVariables[$var] = $sValue; + } + else{ + $aNewMissingVars[] = $var; + } + } + else + { + if ($bForceEmptyValueWhenNotFound) + { + $aFoundVariables[$var] = ''; + } + else + { + $aNewMissingVars[] = $var; + } + } + } + } + } + + return [ $aNewMissingVars, $aFoundVariables ]; + } + + /** + * @param $aFoundVariables + * @param array $aToCompleteUrls + * @param array $aCompleteUrls + * + * @return array + */ + public static function ResolveUrls($aFoundVariables, array $aToCompleteUrls, array $aCompleteUrls) + { + if (!empty($aFoundVariables)) + { + $aFoundVariablesWithEmptyValue = []; + foreach ($aFoundVariables as $aFoundVariable => $sValue) + { + $aFoundVariablesWithEmptyValue[$aFoundVariable] = ''; + } + + foreach ($aToCompleteUrls as $sUrlTemplate) + { + unset($aToCompleteUrls[$sUrlTemplate]); + $sResolvedUrl = static::ResolveUrl($sUrlTemplate, $aFoundVariables); + if ($sResolvedUrl == false) + { + $aToCompleteUrls[$sUrlTemplate] = $sUrlTemplate; + } + else + { + $sUri = static::ResolveUrl($sUrlTemplate, $aFoundVariablesWithEmptyValue); + $aExplodedUri = explode('?', $sUri); + if (empty($aExplodedUri)) + { + $aCompleteUrls[$sUri] = $sResolvedUrl; + } + else + { + $aCompleteUrls[$aExplodedUri[0]] = $sResolvedUrl; + } + } + } + } + + return [ $aToCompleteUrls, $aCompleteUrls]; + } + + /** + * Find all referenced URLs from a SCSS file. + * @param $aThemeParametersVariables + * @param $sStylesheetFile + * + * @return array + */ + public static function GetAllUrlFromScss($aThemeParametersVariables, $sStylesheetFile) + { + $aCompleteUrls = []; + $aToCompleteUrls = []; + $aMissingVariables = []; + $aFoundVariables = []; + + if (is_file($sStylesheetFile)) + { + $sContent = file_get_contents($sStylesheetFile); + if (preg_match_all("/url\s*\((.*)\)/", $sContent, $aMatches)) + { + foreach ($aMatches[1] as $path) + { + if (!array_key_exists($path, $aCompleteUrls) + && !array_key_exists($path, $aToCompleteUrls)) + { + if (preg_match_all("/\\$([\w\-_]+)/", $path, $aCurrentVars)) + { + /** @var string $aCurrentVars */ + foreach ($aCurrentVars[1] as $var) + { + if (!array_key_exists($var, $aMissingVariables)) + { + $aMissingVariables[$var] = $var; + } + } + $aToCompleteUrls[$path] = $path; + } + else + { + $aCompleteUrls[$path] = trim($path, "\"'"); + } + } + } + } + if (!empty($aMissingVariables)) + { + list($aMissingVariables, $aFoundVariables) = static::FindMissingVariables($aThemeParametersVariables, $aMissingVariables, $aFoundVariables, $sContent); + list($aToCompleteUrls, $aCompleteUrls) = static::ResolveUrls($aFoundVariables, $aToCompleteUrls, $aCompleteUrls); + } + } + + return [ + 'aCompleteUrls' => $aCompleteUrls, + 'aToCompleteUrls' => $aToCompleteUrls, + 'aMissingVariables' => $aMissingVariables, + 'aFoundVariables' => $aFoundVariables + ]; + } + + /** + * Calculate url based on its template + variables. + * @param $sUrlTemplate + * @param $aFoundVariables + * + * @return bool|string + */ + public static function ResolveUrl($sUrlTemplate, $aFoundVariables) + { + $aPattern= []; + $aReplacement= []; + foreach ($aFoundVariables as $aFoundVariable => $aFoundVariableValue) + { + //XX + $key + YY + $aPattern[]="/['\"]\s*\+\s*\\\$" . $aFoundVariable . "[\s\+]+\s*['\"]/"; + $aReplacement[]=$aFoundVariableValue; + //$key + YY + $aPattern[]="/\\\$" . $aFoundVariable. "[\s\+]+\s*['\"]/"; + $aReplacement[]=$aFoundVariableValue; + //XX + $key + $aPattern[]="/['\"]\s*[\+\s]+\\\$" . $aFoundVariable . "$/"; + $aReplacement[]=$aFoundVariableValue; + } + $sResolvedUrl=preg_replace($aPattern, $aReplacement, $sUrlTemplate); + if (strpos($sResolvedUrl, "+")!==false) + { + return false; + } + return trim($sResolvedUrl, "\"'"); + } + + /** + * indicate whether a string ends with image suffix. + * @param $path + * + * @return bool + */ + private static function HasImageExtension($path) + { + foreach (static::IMAGE_EXTENSIONS as $sExt) + { + if (endsWith($path, $sExt)) + { + return true; + } + } + return false; + } + + + /** + * Extract the signature for a generated CSS file. The signature MUST be alone one line immediately + * followed (on the next line) by the === SIGNATURE END === pattern + * + * Note the signature can be place anywhere in the CSS file (obviously inside a CSS comment !) but the + * function will be faster if the signature is at the beginning of the file (since the file is scanned from the start) + * + * @param $sFilepath + * + * @return string + */ + public static function GetSignature($sFilepath) + { + $sPreviousLine = ''; + $hFile = @fopen($sFilepath, "r"); + if ($hFile !== false) + { + $sLine = ''; + do + { + $sPreviousLine = $sLine; + $sLine = rtrim(fgets($hFile)); // Remove the trailing \n + } + while (($sLine !== false) && ($sLine != '=== SIGNATURE END ===')); + fclose($hFile); + } + return $sPreviousLine; + } + + public static function GetVarSignature($JsonSignature) + { + $aJsonArray = json_decode($JsonSignature, true); + if (array_key_exists('variables', $aJsonArray)) + { + return $aJsonArray['variables']; + } + return false; + } + + /** + * Find the given file in the list of ImportsPaths directory + * @param string $sFile + * @param string[] $aImportsPaths + * @throws Exception + * @return string + */ + public static function FindStylesheetFile($sFile, $aImportsPaths) + { + foreach($aImportsPaths as $sPath) + { + $sImportedFile = realpath($sPath.'/'.$sFile); + if (file_exists($sImportedFile)) + { + return $sImportedFile; + } + } + return ''; // Not found, fail silently, maybe the SCSS compiler knowns better... + } + + public static function MockCompileCSSService($oCompileCSSServiceMock) + { + static::$oCompileCSSService = $oCompileCSSServiceMock; + } + + /** + * Clone variable array and include $version with bSetupCompilationTimestamp value + * @param $aThemeParameters + * @param $bSetupCompilationTimestamp + * + * @return array + */ + public static function CloneThemeParameterAndIncludeVersion($aThemeParameters, $bSetupCompilationTimestamp) + { + $aThemeParametersVariable = []; + if (array_key_exists('variables', $aThemeParameters)) + { + if (is_array($aThemeParameters['variables'])) + { + $aThemeParametersVariable = array_merge([], $aThemeParameters['variables']); + } + } + + $aThemeParametersVariable['$version'] = $bSetupCompilationTimestamp; + return $aThemeParametersVariable; } } +class CompileCSSService +{ + /** + * CompileCSSService constructor. + */ + public function __construct() + { + } + + public function CompileCSSFromSASS($sSassContent, $aImportPaths = [], $aVariables = []){ + return utils::CompileCSSFromSASS($sSassContent, $aImportPaths, $aVariables); + } + +} + diff --git a/composer.json b/composer.json index ad36fa393..ca47d5b1f 100644 --- a/composer.json +++ b/composer.json @@ -52,6 +52,7 @@ "application", "sources/application", "sources/Composer", + "sources/Controller", "sources/Form", "sources/Renderer" ], diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index 3b0678286..92b3d9c37 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -18,6 +18,7 @@ */ use Combodo\iTop\Form\Field\LabelField; +use Combodo\iTop\Form\Field\TextAreaField; use Combodo\iTop\Form\Validator\NotEmptyExtKeyValidator; use Combodo\iTop\Form\Validator\Validator; @@ -7462,6 +7463,12 @@ class AttributeExternalField extends AttributeDefinition } } parent::MakeFormField($oObject, $oFormField); + if ($oFormField instanceof TextAreaField) { + if (method_exists($oRemoteAttDef, 'GetFormat')) { + /** @var \Combodo\iTop\Form\Field\TextAreaField $oFormField */ + $oFormField->SetFormat($oRemoteAttDef->GetFormat()); + } + } // Manually setting for remote ExternalKey, otherwise, the id would be displayed. if ($oRemoteAttDef instanceof AttributeExternalKey) @@ -7479,6 +7486,16 @@ class AttributeExternalField extends AttributeDefinition { return false; } + + public function GetFormat() + { + $oRemoteAttDef = $this->GetExtAttDef(); + if (method_exists($oRemoteAttDef, 'GetFormat')) { + /** @var \Combodo\iTop\Form\Field\TextAreaField $oFormField */ + return $oRemoteAttDef->GetFormat(); + } + return 'text'; + } } diff --git a/core/backgroundtask.class.inc.php b/core/backgroundtask.class.inc.php index 8d10b3875..40e213dd6 100644 --- a/core/backgroundtask.class.inc.php +++ b/core/backgroundtask.class.inc.php @@ -26,6 +26,24 @@ */ class BackgroundTask extends DBObject { + protected $bDebug = false; + + /** + * @return bool + */ + public function IsDebug() + { + return $this->bDebug; + } + + /** + * @param bool $bDebug + */ + public function SetDebug($bDebug) + { + $this->bDebug = $bDebug; + } + public static function Init() { $aParams = array diff --git a/core/cmdbobject.class.inc.php b/core/cmdbobject.class.inc.php index 48919429e..dbe00d1f9 100644 --- a/core/cmdbobject.class.inc.php +++ b/core/cmdbobject.class.inc.php @@ -547,7 +547,13 @@ abstract class CMDBObject extends DBObject /** * Helper to ultimately check user rights before writing (Insert, Update or Delete) * The check should never fail, because the UI should prevent from such a usage - * Anyhow, if the user has found a workaround... the security gets enforced here + * Anyhow, if the user has found a workaround... the security gets enforced here + * + * @param $bSkipStrongSecurity + * @param $iActionCode + * + * @throws \SecurityException + * @deprecated in 2.8.0 will be removed in 2.9 */ protected function CheckUserRights($bSkipStrongSecurity, $iActionCode) { diff --git a/core/config.class.inc.php b/core/config.class.inc.php index 3fb93b929..051030373 100644 --- a/core/config.class.inc.php +++ b/core/config.class.inc.php @@ -232,6 +232,7 @@ class Config 'source_of_value' => '', 'show_in_conf_sample' => false, ), + // Deprecated in 2.8.0 to be removed in 2.9 'skip_strong_security' => array( 'type' => 'bool', 'description' => 'Disable strong security - TEMPORARY: this flag should be removed when we are more confident in the recent change in security', @@ -2401,4 +2402,4 @@ class ConfigPlaceholdersResolver IssueLog::Error($sErrorMessage, self::class, array($sSourceName, $sKey, $sDefault, $sWholeMask)); throw new ConfigException($sErrorMessage); } -} \ No newline at end of file +} diff --git a/core/dbobject.class.php b/core/dbobject.class.php index 6b1745a12..b42bd97c8 100644 --- a/core/dbobject.class.php +++ b/core/dbobject.class.php @@ -547,72 +547,64 @@ abstract class DBObject implements iDisplay */ public function Set($sAttCode, $value) { - if ($sAttCode == 'finalclass') - { + if ($sAttCode == 'finalclass') { // Ignore it - this attribute is set upon object creation and that's it return false; } $oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode); - if (!$oAttDef->IsWritable()) - { + if (!$oAttDef->IsWritable()) { $sClass = get_class($this); throw new Exception("Attempting to set the value on the read-only attribute $sClass::$sAttCode"); } - if ($this->m_bIsInDB && !$this->m_bFullyLoaded && !$this->m_bDirty) - { + if ($this->m_bIsInDB && !$this->m_bFullyLoaded && !$this->m_bDirty) { // First time Set is called... ensure that the object gets fully loaded // Otherwise we would lose the values on a further Reload // + consistency does not make sense ! $this->Reload(); } - if ($oAttDef->IsExternalKey() && is_object($value)) - { + if ($oAttDef->IsExternalKey() && is_object($value)) { // Setting an external key with a whole object (instead of just an ID) // let's initialize also the external fields that depend on it // (useful when building objects in memory and not from a query) /** @var \AttributeExternalKey $oAttDef */ - if ((get_class($value) != $oAttDef->GetTargetClass()) && (!is_subclass_of($value, $oAttDef->GetTargetClass()))) - { + if ((get_class($value) != $oAttDef->GetTargetClass()) && (!is_subclass_of($value, $oAttDef->GetTargetClass()))) { throw new CoreUnexpectedValue("Trying to set the value of '$sAttCode', to an object of class '".get_class($value)."', whereas it's an ExtKey to '".$oAttDef->GetTargetClass()."'. Ignored"); } - foreach (MetaModel::ListAttributeDefs(get_class($this)) as $sCode => $oDef) - { + foreach (MetaModel::GetDependentAttributes(get_class($this), $sAttCode) as $sCode) { + $oDef = MetaModel::GetAttributeDef(get_class($this), $sCode); /** @var \AttributeExternalField $oDef */ - if ($oDef->IsExternalField() && ($oDef->GetKeyAttCode() == $sAttCode)) - { + if ($oDef->IsExternalField() && ($oDef->GetKeyAttCode() == $sAttCode)) { /** @var \DBObject $value */ $this->m_aCurrValues[$sCode] = $value->Get($oDef->GetExtAttCode()); $this->m_aLoadedAtt[$sCode] = true; } - elseif (in_array($sAttCode, $oDef->GetPrerequisiteAttributes(get_class($this)))) - { + elseif ($oDef->IsBasedOnOQLExpression()) { $this->m_aCurrValues[$sCode] = $this->GetDefaultValue($sCode); unset($this->m_aLoadedAtt[$sCode]); } } - } - else if ($this->m_aCurrValues[$sAttCode] !== $value) - { - // Invalidate dependent fields so that they get reloaded in case they are needed (See Get()) - // - foreach (MetaModel::GetDependentAttributes(get_class($this), $sAttCode) as $sCode) - { - $this->m_aCurrValues[$sCode] = $this->GetDefaultValue($sCode); - unset($this->m_aLoadedAtt[$sCode]); + } else { + if ($this->m_aCurrValues[$sAttCode] !== $value) { + // Invalidate dependent fields so that they get reloaded in case they are needed (See Get()) + // + foreach (MetaModel::GetDependentAttributes(get_class($this), $sAttCode) as $sCode) { + $oDef = MetaModel::GetAttributeDef(get_class($this), $sCode); + if (($oDef->IsExternalField() && ($oDef->GetKeyAttCode() == $sAttCode)) || $oDef->IsBasedOnOQLExpression()) { + $this->m_aCurrValues[$sCode] = $this->GetDefaultValue($sCode); + unset($this->m_aLoadedAtt[$sCode]); + } + } } } - if ($oAttDef->IsLinkSet() && ($value != null)) - { + if ($oAttDef->IsLinkSet() && ($value != null)) { $realvalue = clone $this->m_aCurrValues[$sAttCode]; $realvalue->UpdateFromCompleteList($value); - } - else - { + } else { $realvalue = $oAttDef->MakeRealValue($value, $this); } $this->_Set($sAttCode, $realvalue); diff --git a/core/dbobjectsearch.class.php b/core/dbobjectsearch.class.php index ea527ca52..6da35c091 100644 --- a/core/dbobjectsearch.class.php +++ b/core/dbobjectsearch.class.php @@ -443,7 +443,6 @@ class DBObjectSearch extends DBSearch case '<|': case '=|': throw new CoreException('Deprecated operator, please consider using OQL (SQL) expressions like "(TO_DAYS(NOW()) - TO_DAYS(x)) AS AgeDays"', array('operator' => $sOpCode)); - break; case 'IN': if (!is_array($value)) $value = array($value); @@ -625,17 +624,32 @@ class DBObjectSearch extends DBSearch public function AddCondition_FullText($sNeedle) { // Transform the full text condition into additional condition expression - $aFullTextFields = array(); - foreach (MetaModel::ListAttributeDefs($this->GetClass()) as $sAttCode => $oAttDef) - { + $aAttCodes = []; + foreach (MetaModel::ListAttributeDefs($this->GetClass()) as $sAttCode => $oAttDef) { if (!$oAttDef->IsScalar()) continue; if ($oAttDef->IsExternalKey()) continue; if (!$oAttDef->IsSearchable()) continue; + $aAttCodes[] = $sAttCode; + } + $this->AddCondition_FullTextOnAttributes($aAttCodes, $sNeedle); + } + + /** + * @param array $aAttCodes array of attCodes to search into + * @param string $sNeedle one word to be searched + * + * @throws \CoreException + */ + public function AddCondition_FullTextOnAttributes(array $aAttCodes, $sNeedle) + { + $aFullTextFields = []; + foreach ($aAttCodes as $sAttCode) { $aFullTextFields[] = new FieldExpression($sAttCode, $this->GetClassAlias()); } + $oTextFields = new CharConcatWSExpression(' ', $aFullTextFields); - $sQueryParam = 'needle'; + $sQueryParam = str_replace('.', '', uniqid('needle_', true)); $oFlexNeedle = new CharConcatExpression(array(new ScalarExpression('%'), new VariableExpression($sQueryParam), new ScalarExpression('%'))); $oNewCond = new BinaryExpression($oTextFields, 'LIKE', $oFlexNeedle); diff --git a/core/dbsearch.class.php b/core/dbsearch.class.php index 1449122eb..e5ce11999 100644 --- a/core/dbsearch.class.php +++ b/core/dbsearch.class.php @@ -404,7 +404,9 @@ abstract class DBSearch */ abstract public function AddCondition_FullText($sFullText); - /** + abstract public function AddCondition_FullTextOnAttributes(array $aAttCodes, $sNeedle); + + /** * Perform a join, the remote class being matched by the mean of its primary key * * The join is performed diff --git a/core/dbunionsearch.class.php b/core/dbunionsearch.class.php index 28347a580..721191bd3 100644 --- a/core/dbunionsearch.class.php +++ b/core/dbunionsearch.class.php @@ -376,7 +376,15 @@ class DBUnionSearch extends DBSearch } } - /** + public function AddCondition_FullTextOnAttributes(array $aAttCodes, $sNeedle) + { + foreach ($this->aSearches as $oSearch) + { + $oSearch->AddCondition_FullTextOnAttributes($aAttCodes, $sNeedle); + } + } + + /** * @param DBObjectSearch $oFilter * @param $sExtKeyAttCode * @param int $iOperatorCode diff --git a/core/metamodel.class.php b/core/metamodel.class.php index b837e2819..2fba90935 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -4200,7 +4200,7 @@ abstract class MetaModel { $oSearch = DBObjectSearch::FromOQL("SELECT Contact WHERE id = :id"); $oSet = new DBObjectSet($oSearch, array(), array('id' => UserRights::GetContactId())); - $oSet->OptimizeColumnLoad($aCurrentContact); + $oSet->OptimizeColumnLoad(['Contact' => $aCurrentContact]); $oUser = $oSet->fetch(); foreach ($aCurrentContact as $sField) { @@ -6522,10 +6522,8 @@ abstract class MetaModel return md5(APPROOT).'-'.self::$m_sEnvironment; } - /** @var array */ - protected static $m_aExtensionClasses = array(); /** @var array */ - protected static $m_aExtensionClassNames = array(); + protected static $m_aExtensionClassNames = []; /** * @param string $sToInclude @@ -7320,7 +7318,7 @@ abstract class MetaModel */ public static function EnumPlugins($sInterface, $sFilterInstanceOf = null) { - $pluginManager = new PluginManager(self::$m_aExtensionClassNames, self::$m_aExtensionClasses); + $pluginManager = new PluginManager(self::$m_aExtensionClassNames); return $pluginManager->EnumPlugins($sInterface, $sFilterInstanceOf); } @@ -7333,7 +7331,7 @@ abstract class MetaModel */ public static function GetPlugins($sInterface, $sClassName) { - $pluginManager = new PluginManager(self::$m_aExtensionClassNames, self::$m_aExtensionClasses); + $pluginManager = new PluginManager(self::$m_aExtensionClassNames); return $pluginManager->GetPlugins($sInterface, $sClassName); } @@ -7485,119 +7483,6 @@ abstract class MetaModel } } -class PluginManager -{ - - private $m_aExtensionClassNames; - private $m_aExtensionClasses; - private $m_pluginInstantiationManager ; - - public function __construct($m_aExtensionClassNames, $m_aExtensionClasses, $m_pluginInstanciationManager=null) - { - $this->m_aExtensionClasses = $m_aExtensionClasses; - $this->m_aExtensionClassNames = $m_aExtensionClassNames; - - if ($m_pluginInstanciationManager==null) - { - $this->m_pluginInstantiationManager = new PluginInstanciationManager(); - } - else - { - $this->m_pluginInstantiationManager = $m_pluginInstanciationManager; - } - } - - /** - * @param string $sInterface - * @param bool $bCanInstantiatePlugins internal use, let this value to true - * @param string|null $sFilterInstanceOf [optional] if given, only instance of this string will be returned - * @return array classes=>instance implementing the given interface - */ - public function EnumPlugins($sInterface, $sFilterInstanceOf = null, $bCanInstantiatePlugins = true) - { - $aPlugins = array(); - if (array_key_exists($sInterface, $this->m_aExtensionClasses)) - { - $aAllPlugins = array_values($this->m_aExtensionClasses[$sInterface]); - - if (is_null($sFilterInstanceOf)) - { - return $aAllPlugins; - }; - - $aPlugins = array(); - foreach ($aAllPlugins as $instance) - { - if ($instance instanceof $sFilterInstanceOf) - { - $aPlugins[] = $instance; - } - } - } - else if ($bCanInstantiatePlugins && array_key_exists($sInterface, $this->m_aExtensionClassNames)) - { - $this->InstantiatePlugins($sInterface); - - return $this->EnumPlugins($sInterface, $sFilterInstanceOf, false); - } - return $aPlugins; - } - - public function InstantiatePlugins($sInterface) - { - $this->m_aExtensionClasses[$sInterface] = $this->m_pluginInstantiationManager->InstantiatePlugins($this->m_aExtensionClassNames, $sInterface); - } - - /** - * @param string $sInterface - * @param string $sClassName - * @param bool $bCanInstantiatePlugins internal use, let this value to true - * - * @return mixed the instance of the specified plug-ins for the given interface - */ - public function GetPlugins($sInterface, $sClassName, $bCanInstantiatePlugins = true) - { - $oInstance = null; - if (array_key_exists($sInterface, $this->m_aExtensionClasses)) - { - if (array_key_exists($sClassName, $this->m_aExtensionClasses[$sInterface])) - { - return $this->m_aExtensionClasses[$sInterface][$sClassName]; - } - } - else if ($bCanInstantiatePlugins && array_key_exists($sInterface, $this->m_aExtensionClassNames)) - { - $this->InstantiatePlugins($sInterface); - return $this->GetPlugins($sInterface, $sClassName, false); - } - - return $oInstance; - } -} //PluginManager class - -class PluginInstanciationManager -{ - public function InstantiatePlugins($m_aExtensionClassNames, $sInterface) - { - $newPerInstanceClasses = array(); - if (array_key_exists($sInterface, $m_aExtensionClassNames)) - { - foreach ($m_aExtensionClassNames[$sInterface] as $sClassName) - { - if (class_exists($sClassName)) - { - $class = new ReflectionClass($sClassName); - - if ($class->isInstantiable()) - { - $newPerInstanceClasses[$sClassName] = new $sClassName(); - } - } - } - } - return $newPerInstanceClasses; - } -} // Standard attribute lists MetaModel::RegisterZList("noneditable", array("description" => "non editable fields", "type" => "attributes")); diff --git a/core/plugininstanciationmanager.class.inc.php b/core/plugininstanciationmanager.class.inc.php new file mode 100644 index 000000000..668873572 --- /dev/null +++ b/core/plugininstanciationmanager.class.inc.php @@ -0,0 +1,30 @@ +isInstantiable()) + { + $newPerInstanceClasses[$sClassName] = new $sClassName(); + } + } + } + } + return $newPerInstanceClasses; + } +} diff --git a/core/pluginmanager.class.inc.php b/core/pluginmanager.class.inc.php new file mode 100644 index 000000000..696b6e9be --- /dev/null +++ b/core/pluginmanager.class.inc.php @@ -0,0 +1,105 @@ +m_aExtensionClassNames = $m_aExtensionClassNames; + + if ($m_pluginInstanciationManager == null) + { + $this->m_pluginInstantiationManager = new PluginInstanciationManager(); + } + else + { + $this->m_pluginInstantiationManager = $m_pluginInstanciationManager; + } + } + + /** + * @param string $sInterface + * @param bool $bCanInstantiatePlugins internal use, let this value to true + * @param string|null $sFilterInstanceOf [optional] if given, only instance of this string will be returned + * + * @return array classes=>instance implementing the given interface + */ + public function EnumPlugins($sInterface, $sFilterInstanceOf = null, $bCanInstantiatePlugins = true) + { + $aPlugins = array(); + if (array_key_exists($sInterface, self::$m_aExtensionClasses)) + { + $aAllPlugins = array_values(self::$m_aExtensionClasses[$sInterface]); + + if (is_null($sFilterInstanceOf)) + { + return $aAllPlugins; + }; + + $aPlugins = array(); + foreach ($aAllPlugins as $instance) + { + if ($instance instanceof $sFilterInstanceOf) + { + $aPlugins[] = $instance; + } + } + } + else + { + if ($bCanInstantiatePlugins && array_key_exists($sInterface, $this->m_aExtensionClassNames)) + { + $this->InstantiatePlugins($sInterface); + + return $this->EnumPlugins($sInterface, $sFilterInstanceOf, false); + } + } + return $aPlugins; + } + + public function InstantiatePlugins($sInterface) + { + self::$m_aExtensionClasses[$sInterface] = $this->m_pluginInstantiationManager->InstantiatePlugins($this->m_aExtensionClassNames, $sInterface); + } + + /** + * @param string $sInterface + * @param string $sClassName + * @param bool $bCanInstantiatePlugins internal use, let this value to true + * + * @return mixed the instance of the specified plug-ins for the given interface + */ + public function GetPlugins($sInterface, $sClassName, $bCanInstantiatePlugins = true) + { + $oInstance = null; + if (array_key_exists($sInterface, self::$m_aExtensionClasses)) + { + if (array_key_exists($sClassName, self::$m_aExtensionClasses[$sInterface])) + { + return self::$m_aExtensionClasses[$sInterface][$sClassName]; + } + } + else + { + if ($bCanInstantiatePlugins && array_key_exists($sInterface, $this->m_aExtensionClassNames)) + { + $this->InstantiatePlugins($sInterface); + return $this->GetPlugins($sInterface, $sClassName, false); + } + } + + return $oInstance; + } +} diff --git a/css/css-variables.scss b/css/css-variables.scss index 8a752928f..ed470a897 100644 --- a/css/css-variables.scss +++ b/css/css-variables.scss @@ -15,10 +15,7 @@ * * You should have received a copy of the GNU Affero General Public License */ - -// Beware the version number MUST be enclosed with quotes otherwise v2.3.0 becomes v2 0.3 .0 -$version: "v2.8.0"; -$approot-relative: "../../../../../" !default; // relative to env-***/branding/themes/***/main.css +$approot-relative: "../../../../" !default; // relative to env-***/branding/themes/***/main.css // Base colors $gray-base: #000 !default; @@ -127,3 +124,8 @@ $highlight-item-color: $white !default; $content-color: #eeeeee !default; $default-font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif !default; $icons-filter: hue-rotate(0deg) !default; + +%font-awesome-prerequisites{ + font-family: 'Font Awesome 5 Free'; + font-weight: 600; +} \ No newline at end of file diff --git a/css/light-grey.scss b/css/light-grey.scss index ee9f80f2a..a3803e52f 100644 --- a/css/light-grey.scss +++ b/css/light-grey.scss @@ -3157,15 +3157,34 @@ } .sort_none { - background: url($approot-relative + "images/bg.gif?v=" + $version) no-repeat center; + padding-right: 5px; + &::after { + @extend %font-awesome-prerequisites; + text-align: right; + content: '\f0dc'; + color: $complement-color; + float: right; + } } - .sort_asc { - background: url($approot-relative + "images/desc.gif?v=" + $version) no-repeat center; + padding-right: 5px; + &::after { + @extend %font-awesome-prerequisites; + text-align: right; + content: '\f0d8'; + color: $complement-color; + float: right; + } } - .sort_desc { - background: url($approot-relative + "images/asc.gif?v=" + $version) no-repeat center; + padding-right: 5px; + &::after { + @extend %font-awesome-prerequisites; + text-align: right; + content: '\f0d7'; + color: $complement-color; + float: right; + } } .sort_hidden { diff --git a/datamodels/2.x/authent-cas/dictionaries/pt_br.dict.authent-cas.php b/datamodels/2.x/authent-cas/dictionaries/pt_br.dict.authent-cas.php index 6fd1f54d9..3554aa6eb 100644 --- a/datamodels/2.x/authent-cas/dictionaries/pt_br.dict.authent-cas.php +++ b/datamodels/2.x/authent-cas/dictionaries/pt_br.dict.authent-cas.php @@ -6,7 +6,7 @@ * @license http://opensource.org/licenses/AGPL-3.0 */ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( - 'CAS:Error:UserNotAllowed' => 'User not allowed~~', - 'CAS:Login:SignIn' => 'Sign in with CAS~~', - 'CAS:Login:SignInTooltip' => 'Click here to authenticate yourself with the CAS server~~', + 'CAS:Error:UserNotAllowed' => 'Usuário não permitido', + 'CAS:Login:SignIn' => 'Autenticar com CAS', + 'CAS:Login:SignInTooltip' => 'Clique aqui para se autenticar no servidor CAS', )); diff --git a/datamodels/2.x/authent-cas/src/CASLoginExtension.php b/datamodels/2.x/authent-cas/src/CASLoginExtension.php index 8489d06d6..590b298b8 100644 --- a/datamodels/2.x/authent-cas/src/CASLoginExtension.php +++ b/datamodels/2.x/authent-cas/src/CASLoginExtension.php @@ -496,7 +496,7 @@ class CASUserProvisioning } // Now synchronize the profiles - LoginWebPage::SynchroniseProfiles($oUser, $aProfiles, 'CAS/LDAP Synchro'); + LoginWebPage::SynchronizeProfiles($oUser, $aProfiles, 'CAS/LDAP Synchro'); phpCAS::log("Info: the user '".$oUser->GetName()."' (id=".$oUser->GetKey().") now has the following profiles: '".implode("', '", $aProfiles)."'."); if ($oUser->IsModified()) diff --git a/datamodels/2.x/authent-local/dictionaries/pt_br.dict.authent-local.php b/datamodels/2.x/authent-local/dictionaries/pt_br.dict.authent-local.php index 40af3700a..c9a421e15 100644 --- a/datamodels/2.x/authent-local/dictionaries/pt_br.dict.authent-local.php +++ b/datamodels/2.x/authent-local/dictionaries/pt_br.dict.authent-local.php @@ -25,18 +25,18 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( 'Class:UserLocal/Attribute:password' => 'Senha', 'Class:UserLocal/Attribute:password+' => '', - 'Class:UserLocal/Attribute:expiration' => 'Password expiration~~', - 'Class:UserLocal/Attribute:expiration+' => 'Password expiration status (requires an extension to have an effect)~~', - 'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Can expire~~', - 'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '~~', - 'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Never expire~~', - 'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~', - 'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~', - 'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~', - 'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~', - 'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed~~', + 'Class:UserLocal/Attribute:expiration' => 'Expiração de senha', + 'Class:UserLocal/Attribute:expiration+' => 'Status de expiraçãoo de senha (requer uma extensão para fazer efeito)', + 'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Pode expirar', + 'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '', + 'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Nunca expira', + 'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '', + 'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expirada', + 'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '', + 'Class:UserLocal/Attribute:password_renewed_date' => 'Renovação de senha', + 'Class:UserLocal/Attribute:password_renewed_date+' => 'Quando a senha foi trocada antiormente', - 'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.~~', + 'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'A senha deve ter no mínimo 8 caracteres e incluir letras maiúsculas, minúsculas, números e símbolos.', - 'UserLocal:password:expiration' => 'The fields below require an extension~~' + 'UserLocal:password:expiration' => 'O campo abaixo requer uma extensão' )); diff --git a/datamodels/2.x/combodo-db-tools/dictionaries/pt_br.dict.combodo-db-tools.php b/datamodels/2.x/combodo-db-tools/dictionaries/pt_br.dict.combodo-db-tools.php index 34037ea72..1df28cc5d 100644 --- a/datamodels/2.x/combodo-db-tools/dictionaries/pt_br.dict.combodo-db-tools.php +++ b/datamodels/2.x/combodo-db-tools/dictionaries/pt_br.dict.combodo-db-tools.php @@ -23,67 +23,67 @@ // Database inconsistencies Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( // Dictionary entries go here - 'Menu:DBToolsMenu' => 'DB Tools~~', - 'DBTools:Class' => 'Class~~', - 'DBTools:Title' => 'Database Maintenance Tools~~', - 'DBTools:ErrorsFound' => 'Errors Found~~', - 'DBTools:Error' => 'Error~~', - 'DBTools:Count' => 'Count~~', - 'DBTools:SQLquery' => 'SQL query~~', - 'DBTools:FixitSQLquery' => 'SQL query To Fix it (indication)~~', - 'DBTools:SQLresult' => 'SQL result~~', - 'DBTools:NoError' => 'The database is OK~~', - 'DBTools:HideIds' => 'Error List~~', - 'DBTools:ShowIds' => 'Detailed view~~', - 'DBTools:ShowReport' => 'Report~~', - 'DBTools:IntegrityCheck' => 'Integrity check~~', - 'DBTools:FetchCheck' => 'Fetch Check (long)~~', + 'Menu:DBToolsMenu' => 'Ferramentas de Base de Dados', + 'DBTools:Class' => 'Classe', + 'DBTools:Title' => 'Manutenção da Base de Dados', + 'DBTools:ErrorsFound' => 'Erros Encontrados', + 'DBTools:Error' => 'Erros', + 'DBTools:Count' => 'Quantidade', + 'DBTools:SQLquery' => 'Query SQL', + 'DBTools:FixitSQLquery' => 'Query SQL para correção (sugestão)', + 'DBTools:SQLresult' => 'Resultado do SQL', + 'DBTools:NoError' => 'Sem problemas na base de dados', + 'DBTools:HideIds' => 'Lista de erros', + 'DBTools:ShowIds' => 'Visualização detalhada', + 'DBTools:ShowReport' => 'Relatório', + 'DBTools:IntegrityCheck' => 'Verificação de integridade', + 'DBTools:FetchCheck' => 'Verificação de Busca (longo)', - 'DBTools:Analyze' => 'Analyze~~', - 'DBTools:Details' => 'Show Details~~', - 'DBTools:ShowAll' => 'Show All Errors~~', + 'DBTools:Analyze' => 'Analisar', + 'DBTools:Details' => 'Mostrar detalhes', + 'DBTools:ShowAll' => 'Mostrar todos erros', - 'DBTools:Inconsistencies' => 'Database inconsistencies~~', + 'DBTools:Inconsistencies' => 'Inconsistências na base de dados', - 'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~', - 'DBAnalyzer-Integrity-InvalidExtKey' => 'Invalid external key %1$s (column: `%2$s.%3$s`)~~', - 'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~', - 'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~', - 'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~', - 'DBAnalyzer-Fetch-Count-Error' => 'Fetch count error in `%1$s`, %2$d entries fetched / %3$d counted~~', - 'DBAnalyzer-Integrity-FinalClass' => 'Field `%2$s`.`%1$s` must have the same value as `%3$s`.`%1$s`~~', - 'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~', + 'DBAnalyzer-Integrity-OrphanRecord' => 'Item orfão em `%1$s`, ele deveria ter seu registro irmão na tabela `%2$s`', + 'DBAnalyzer-Integrity-InvalidExtKey' => 'Chave externa inválida %1$s (coluna: `%2$s.%3$s`)', + 'DBAnalyzer-Integrity-MissingExtKey' => 'Chave externa ausente %1$s (coluna: `%2$s.%3$s`)', + 'DBAnalyzer-Integrity-InvalidValue' => 'Valor inválido par %1$s (coluna: `%2$s.%3$s`)', + 'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Algumas contas de usuário não possuem perfil', + 'DBAnalyzer-Fetch-Count-Error' => 'Erro na busca em `%1$s`, %2$d registros buscados / %3$d contados', + 'DBAnalyzer-Integrity-FinalClass' => 'Campo `%2$s`.`%1$s` precisa ter o mesmo valor que `%3$s`.`%1$s`', + 'DBAnalyzer-Integrity-RootFinalClass' => 'Campo `%2$s`.`%1$s` precisa conter uma classe válida', )); // Database Info Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( - 'DBTools:DatabaseInfo' => 'Database Information~~', - 'DBTools:Base' => 'Base~~', - 'DBTools:Size' => 'Size~~', + 'DBTools:DatabaseInfo' => 'Informação da base de dados', + 'DBTools:Base' => 'Base', + 'DBTools:Size' => 'Tamanho', )); // Lost attachments Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( - 'DBTools:LostAttachments' => 'Lost attachments~~', - 'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~', + 'DBTools:LostAttachments' => 'Anexos perdidos', + 'DBTools:LostAttachments:Disclaimer' => 'Aqui você procurará na sua base de dados por anexos perdidos. Isto NÃO é uma ferramenta de recuperação de dados, pois não busca dados apagados.', - 'DBTools:LostAttachments:Button:Analyze' => 'Analyze~~', - 'DBTools:LostAttachments:Button:Restore' => 'Restore~~', - 'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~', - 'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~', + 'DBTools:LostAttachments:Button:Analyze' => 'Analisar', + 'DBTools:LostAttachments:Button:Restore' => 'Recuperar', + 'DBTools:LostAttachments:Button:Restore:Confirm' => 'Esta ação não pode ser desfeita, você confirma que quer recuperar os arquivos selecionados?', + 'DBTools:LostAttachments:Button:Busy' => 'Aguarde...', - 'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~', + 'DBTools:LostAttachments:Step:Analyze' => 'Primeiro, procure anexos perdidos pela análise da base de dados.', - 'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~', - 'DBTools:LostAttachments:Step:AnalyzeResults:None' => 'Great! Every thing seems to be at the right place.~~', - 'DBTools:LostAttachments:Step:AnalyzeResults:Some' => 'Some attachments (%1$d) seem to be misplaced. Take a look at the following list and check the ones you would like to move.~~', - 'DBTools:LostAttachments:Step:AnalyzeResults:Item:Filename' => 'Filename~~', - 'DBTools:LostAttachments:Step:AnalyzeResults:Item:CurrentLocation' => 'Current location~~', - 'DBTools:LostAttachments:Step:AnalyzeResults:Item:TargetLocation' => 'Move to...~~', + 'DBTools:LostAttachments:Step:AnalyzeResults' => 'Resultados da análise:', + 'DBTools:LostAttachments:Step:AnalyzeResults:None' => 'Ótimo! Tudo parece estar nos seus devidos lugares.', + 'DBTools:LostAttachments:Step:AnalyzeResults:Some' => 'Alguns anexos (%1$d) parecem estar perdidos. Verifique a lista abaixo e escolha os que você deseja mover.', + 'DBTools:LostAttachments:Step:AnalyzeResults:Item:Filename' => 'Nome do arquivo', + 'DBTools:LostAttachments:Step:AnalyzeResults:Item:CurrentLocation' => 'Local atual', + 'DBTools:LostAttachments:Step:AnalyzeResults:Item:TargetLocation' => 'Mover para', - 'DBTools:LostAttachments:Step:RestoreResults' => 'Restore results:~~', - 'DBTools:LostAttachments:Step:RestoreResults:Results' => '%1$d/%2$d attachments were restored.~~', + 'DBTools:LostAttachments:Step:RestoreResults' => 'Resultados:', + 'DBTools:LostAttachments:Step:RestoreResults:Results' => '%1$d/%2$d de anexos recuperados.', - 'DBTools:LostAttachments:StoredAsInlineImage' => 'Stored as inline image~~', - 'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~' + 'DBTools:LostAttachments:StoredAsInlineImage' => 'Armazenar como imagem embedada.', + 'DBTools:LostAttachments:History' => 'Anexo "%1$s" recuperada com as Ferramentas de Base de Dados' )); diff --git a/datamodels/2.x/itop-attachments/dictionaries/pt_br.dict.itop-attachments.php b/datamodels/2.x/itop-attachments/dictionaries/pt_br.dict.itop-attachments.php index afeccab1c..ffed2847f 100644 --- a/datamodels/2.x/itop-attachments/dictionaries/pt_br.dict.itop-attachments.php +++ b/datamodels/2.x/itop-attachments/dictionaries/pt_br.dict.itop-attachments.php @@ -34,13 +34,13 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( 'Attachment:Max_Mo' => '(Tamanho máximo arquivo: %1$s Mb)', 'Attachment:Max_Ko' => '(Tamanho máximo arquivo: %1$s Kb)', 'Attachments:NoAttachment' => 'Nenhum anexo. ', - 'Attachments:PreviewNotAvailable' => 'Preview not available for this type of attachment.~~', - 'Attachments:Error:FileTooLarge' => 'File is too large to be uploaded. %1$s~~', - 'Attachments:Error:UploadedFileEmpty' => 'The received file is empty and cannot be attached. -Either you have pushed an empty file, -or ask your iTop administrator if the iTop server disk is full.~~', - 'Attachments:Render:Icons' => 'Display as icons~~', - 'Attachments:Render:Table' => 'Display as list~~', + 'Attachments:PreviewNotAvailable' => 'A pré-visualização não está disponível para este tipo de anexo.', + 'Attachments:Error:FileTooLarge' => 'Arquivo muito grande para ser anexado. %1$s', + 'Attachments:Error:UploadedFileEmpty' => 'O arquivo recebido está vazio e não pode ser anexado. +Ou você anexou um arquivo vazio, +ou entre em contato com o seu administrador do iTOP pois o servidor pode estar sem espaço de armazenamento.', + 'Attachments:Render:Icons' => 'Mostrar como ícones', + 'Attachments:Render:Table' => 'Mostrar como lista', )); // @@ -48,40 +48,40 @@ or ask your iTop administrator if the iTop server disk is full.~~', // Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( - 'Class:Attachment' => 'Attachment~~', - 'Class:Attachment+' => '~~', - 'Class:Attachment/Attribute:expire' => 'Expire~~', - 'Class:Attachment/Attribute:expire+' => '~~', - 'Class:Attachment/Attribute:temp_id' => 'Temporary id~~', - 'Class:Attachment/Attribute:temp_id+' => '~~', - 'Class:Attachment/Attribute:item_class' => 'Item class~~', - 'Class:Attachment/Attribute:item_class+' => '~~', - 'Class:Attachment/Attribute:item_id' => 'Item~~', - 'Class:Attachment/Attribute:item_id+' => '~~', - 'Class:Attachment/Attribute:item_org_id' => 'Item organization~~', - 'Class:Attachment/Attribute:item_org_id+' => '~~', - 'Class:Attachment/Attribute:contents' => 'Contents~~', - 'Class:Attachment/Attribute:contents+' => '~~', + 'Class:Attachment' => 'Anexo', + 'Class:Attachment+' => '', + 'Class:Attachment/Attribute:expire' => 'Expira', + 'Class:Attachment/Attribute:expire+' => '', + 'Class:Attachment/Attribute:temp_id' => 'Identificador temporário', + 'Class:Attachment/Attribute:temp_id+' => '', + 'Class:Attachment/Attribute:item_class' => 'Classe do item', + 'Class:Attachment/Attribute:item_class+' => '', + 'Class:Attachment/Attribute:item_id' => 'Item', + 'Class:Attachment/Attribute:item_id+' => '', + 'Class:Attachment/Attribute:item_org_id' => 'Organização do item', + 'Class:Attachment/Attribute:item_org_id+' => '', + 'Class:Attachment/Attribute:contents' => 'Conteúdo', + 'Class:Attachment/Attribute:contents+' => '', )); Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( - 'Attachments:File:Thumbnail' => 'Icon~~', - 'Attachments:File:Name' => 'File name~~', - 'Attachments:File:Date' => 'Upload date~~', - 'Attachments:File:Uploader' => 'Uploaded by~~', - 'Attachments:File:Size' => 'Size~~', - 'Attachments:File:MimeType' => 'Type~~', + 'Attachments:File:Thumbnail' => 'Ícone', + 'Attachments:File:Name' => 'Nome do arquivo', + 'Attachments:File:Date' => 'Data de envio', + 'Attachments:File:Uploader' => 'Enviado por', + 'Attachments:File:Size' => 'Tamanho', + 'Attachments:File:MimeType' => 'Tipo', )); // // Class: Attachment // Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( - 'Class:Attachment/Attribute:creation_date' => 'Creation date~~', - 'Class:Attachment/Attribute:creation_date+' => '~~', - 'Class:Attachment/Attribute:user_id' => 'User id~~', - 'Class:Attachment/Attribute:user_id+' => '~~', - 'Class:Attachment/Attribute:contact_id' => 'Contact id~~', - 'Class:Attachment/Attribute:contact_id+' => '~~', + 'Class:Attachment/Attribute:creation_date' => 'Data de criação', + 'Class:Attachment/Attribute:creation_date+' => '', + 'Class:Attachment/Attribute:user_id' => 'Identificador do usuário', + 'Class:Attachment/Attribute:user_id+' => '', + 'Class:Attachment/Attribute:contact_id' => 'Identificador do contato', + 'Class:Attachment/Attribute:contact_id+' => '', )); diff --git a/datamodels/2.x/itop-attachments/icons/movie.png b/datamodels/2.x/itop-attachments/icons/movie.png new file mode 100644 index 000000000..6a2bc81dc Binary files /dev/null and b/datamodels/2.x/itop-attachments/icons/movie.png differ diff --git a/datamodels/2.x/itop-attachments/main.itop-attachments.php b/datamodels/2.x/itop-attachments/main.itop-attachments.php index 21d680a30..4162f93dc 100644 --- a/datamodels/2.x/itop-attachments/main.itop-attachments.php +++ b/datamodels/2.x/itop-attachments/main.itop-attachments.php @@ -437,6 +437,13 @@ class AttachmentPlugIn implements iApplicationUIExtension, iApplicationObjectExt $sIcon = 'zip.png'; break; + case 'avi': + case 'mp4': + case 'mpeg': + case 'mpg': + $sIcon = 'movie.png'; + break; + default: $sIcon = 'document.png'; break; diff --git a/datamodels/2.x/itop-attachments/module.itop-attachments.php b/datamodels/2.x/itop-attachments/module.itop-attachments.php index 19593f0b7..e348615ac 100644 --- a/datamodels/2.x/itop-attachments/module.itop-attachments.php +++ b/datamodels/2.x/itop-attachments/module.itop-attachments.php @@ -97,14 +97,14 @@ if (!class_exists('AttachmentInstaller')) $iCount = CMDBSource::QueryToScalar($sCountQuery); if ($iCount > 0) { - SetupPage::log_info("Cleanup of orphan attachments that cannot be migrated to the new ObjKey model: $iCount record(s) must be deleted."); + SetupLog::Info("Cleanup of orphan attachments that cannot be migrated to the new ObjKey model: $iCount record(s) must be deleted."); $sRepairQuery = "DELETE FROM `$sTableName` WHERE (`item_id`='' OR `item_id` IS NULL)"; $iRet = CMDBSource::Query($sRepairQuery); // Throws an exception in case of error - SetupPage::log_info("Cleanup of orphan attachments successfully completed."); + SetupLog::Info("Cleanup of orphan attachments successfully completed."); } else { - SetupPage::log_info("No orphan attachment found."); + SetupLog::Info("No orphan attachment found."); } } } @@ -121,12 +121,12 @@ if (!class_exists('AttachmentInstaller')) // get the org_id from the container object // // Prerequisite: change null into 0 (workaround to the fact that we cannot use IS NULL in OQL) - SetupPage::log_info("Initializing attachment/item_org_id - null to zero"); + SetupLog::Info("Initializing attachment/item_org_id - null to zero"); $sTableName = MetaModel::DBGetTable('Attachment'); $sRepair = "UPDATE `$sTableName` SET `item_org_id` = 0 WHERE `item_org_id` IS NULL"; CMDBSource::Query($sRepair); - SetupPage::log_info("Initializing attachment/item_org_id - zero to the container"); + SetupLog::Info("Initializing attachment/item_org_id - zero to the container"); $oSearch = DBObjectSearch::FromOQL("SELECT Attachment WHERE item_org_id = 0"); $oSet = new DBObjectSet($oSearch); $iUpdated = 0; @@ -140,7 +140,7 @@ if (!class_exists('AttachmentInstaller')) } } - SetupPage::log_info("Initializing attachment/item_org_id - $iUpdated records have been adjusted"); + SetupLog::Info("Initializing attachment/item_org_id - $iUpdated records have been adjusted"); } } } diff --git a/datamodels/2.x/itop-change-mgmt/dictionaries/pt_br.dict.itop-change-mgmt.php b/datamodels/2.x/itop-change-mgmt/dictionaries/pt_br.dict.itop-change-mgmt.php index a0ed4f1f1..5127ddf49 100644 --- a/datamodels/2.x/itop-change-mgmt/dictionaries/pt_br.dict.itop-change-mgmt.php +++ b/datamodels/2.x/itop-change-mgmt/dictionaries/pt_br.dict.itop-change-mgmt.php @@ -43,8 +43,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( 'UI-ChangeManagementOverview-Last-7-days' => 'Número de mudanças nos últimos 7 dias', 'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Mudanças por domínio nos últimos 7 dias', 'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Mudanças por status nos últimos 7 dias', - 'Tickets:Related:OpenChanges' => 'Open changes~~', - 'Tickets:Related:RecentChanges' => 'Recent changes (72h)~~', + 'Tickets:Related:OpenChanges' => 'Mudanças abertas', + 'Tickets:Related:RecentChanges' => 'Mudanças recentes (72h)', )); // Dictionnay conventions @@ -132,9 +132,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( 'Class:Change/Stimulus:ev_finish' => 'Fechar', 'Class:Change/Stimulus:ev_finish+' => '', 'Class:Change/Attribute:outage' => 'Outage', - 'Class:Change/Attribute:outage+' => '~~', + 'Class:Change/Attribute:outage+' => '', 'Class:Change/Attribute:outage/Value:no' => 'Não', - 'Class:Change/Attribute:outage/Value:no+' => '~~', + 'Class:Change/Attribute:outage/Value:no+' => '', 'Class:Change/Attribute:outage/Value:yes' => 'Sim', - 'Class:Change/Attribute:outage/Value:yes+' => '~~', + 'Class:Change/Attribute:outage/Value:yes+' => '', )); diff --git a/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml b/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml index e729db81f..f9ed83ee6 100755 --- a/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml +++ b/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml @@ -8328,6 +8328,7 @@ ../css/ui-lightness/jqueryui.scss ../css/light-grey.scss + itop-config-mgmt/precompiled-themes/light-grey/main.css @@ -8343,6 +8344,7 @@ ../css/light-grey.scss ../css/backoffice-environment-banner.scss + itop-config-mgmt/precompiled-themes/test-red/main.css diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php index 8e08db5f6..203573167 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php @@ -709,10 +709,10 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( 'Class:ApplicationSolution/Attribute:status/Value:active+' => 'Ativo', 'Class:ApplicationSolution/Attribute:status/Value:inactive' => 'Inativo', 'Class:ApplicationSolution/Attribute:status/Value:inactive+' => 'Inativo', - 'Class:ApplicationSolution/Attribute:redundancy' => 'Impact analysis: configuration of the redundancy~~', - 'Class:ApplicationSolution/Attribute:redundancy/disabled' => 'The solution is up if all CIs are up~~', - 'Class:ApplicationSolution/Attribute:redundancy/count' => 'The solution is up if at least %1$s CI(s) is(are) up~~', - 'Class:ApplicationSolution/Attribute:redundancy/percent' => 'The solution is up if at least %1$s %% of the CIs are up~~', + 'Class:ApplicationSolution/Attribute:redundancy' => 'Análise de impacto: configuração da redundância', + 'Class:ApplicationSolution/Attribute:redundancy/disabled' => 'A solução está funcionando se todos os CIs estiverem funcionando', + 'Class:ApplicationSolution/Attribute:redundancy/count' => 'A solução está funcionando se no mínimo %1$s CI(s) estiver(em) funcionando', + 'Class:ApplicationSolution/Attribute:redundancy/percent' => 'A solução está funcionando se no mínimo %1$s %% dos CIs estiverem funcionando', )); // diff --git a/datamodels/2.x/itop-config-mgmt/precompiled-themes/light-grey/main.css b/datamodels/2.x/itop-config-mgmt/precompiled-themes/light-grey/main.css new file mode 100644 index 000000000..86df69afa --- /dev/null +++ b/datamodels/2.x/itop-config-mgmt/precompiled-themes/light-grey/main.css @@ -0,0 +1,5308 @@ +/* +=== SIGNATURE BEGIN === +{"variables":"d751713988987e9331980363e24189ce","stylesheets":{"css-variables":"1cb1d075d467f68729c83e6e2f8a4061","jqueryui":"ad705f77a5bce5a224b216a1cd701ae2","main":"dde196969fc762c3580742290bf9febf"},"imports":[],"images":{"css\/ui-lightness\/images\/ui-icons_222222_256x240.png":"3a3c5468f484f07ac4a320d9e22acb8c","css\/ui-lightness\/images\/ui-bg_diagonals-thick_20_666666_40x40.png":"4429d568c67d8dfeb9040273ea0fb8c4","css\/ui-lightness\/images\/ui-icons_E87C1E_256x240.png":"7003dd36cb2aa032c8ec871ce4d4e03d","css\/ui-lightness\/images\/ui-icons_1c94c4_256x240.png":"dbd693dc8e0ef04e90a2f7ac7b390086","css\/ui-lightness\/images\/ui-icons_F26522_256x240.png":"16278ec0c07270be571f4c2e97fcc10c","css\/ui-lightness\/images\/ui-bg_diagonals-thick_18_b81900_40x40.png":"e460a66d4b3e093fc651e62a236267cb","css\/ui-lightness\/images\/ui-icons_ffffff_256x240.png":"41612b0f4a034424f8321c9f824a94da","css\/ui-lightness\/images\/ui-icons_ffd27a_256x240.png":"dda1b6f694b0d196aefc66a1d6d758f6","images\/actions_right.png":"31c8906bd25d27b83a0a2466bf903462","images\/ac-background.gif":"76135f3697b41a15aed787cfd77776c7","images\/green-square.gif":"16ea9a497d72f5e66e4e8ea9ae08024e","images\/tv-item.gif":"719fe2d4566108e73162fb8868d3778c","images\/tv-collapsable.gif":"63a3351ea0d580797c9b8c386aa4f48b","images\/tv-expandable.gif":"a2d1af4128e4a798a7f3390b12a28574","images\/tv-item-last.gif":"2ae7e1d9972ce71e5caa65a086bc5b7e","images\/tv-collapsable-last.gif":"71acaa9d7c2616e9e8b7131a75ca65da","images\/tv-expandable-last.gif":"9d51036b3a8102742709da66789fd0f7","images\/red-header.gif":"c73b8765f0c8c3c183cb6a0c2bb0ec69","images\/green-header.gif":"0e22a09bb8051b2a274b3427ede62e82","images\/orange-header.gif":"ce1f93f0af64431771b4cbd6c99c567b","images\/calendar.png":"ab56e59af3c96ca661821257d376465e","images\/truncated.png":"c6f91108afe8159d417b4dc556cd3b2a","images\/plus.gif":"f00e1e6e1161f48608bb2bbc79b9948c","images\/minus.gif":"6d77c0c0c2f86b6995d1cdf78274eaab","images\/full-screen.png":"b541fadd3f1563856a4b44aeebd9d563","images\/indicator.gif":"03ce3dcc84af110e9da8699a841e5200","images\/delete.png":"93c047549c31a270a037840277cf59d3","images\/info-mini.png":"445c090ed777c5e6a08ac390fa896193","images\/ok.png":"f6973773335fd83d8d2875f9a3c925af","images\/error.png":"1af8a1041016f67669c5fd22dc88c82e","images\/eye-open-555.png":"9940f4e5b1248042c238e1924359fd5e","images\/eye-closed-555.png":"6ad3b0bae791bf61addc9d8ca80a642d","images\/eye-open-fff.png":"b7db2402d4d5c72314c25790a66150d4","images\/eye-closed-fff.png":"f9be7454dbb47b0e0bca3aa370ae7db5","images\/breadcrumb-separator.png":"1e7e50a8f573e230cf1e0f0399c516e8"}} +=== SIGNATURE END === +*/ +/*! + * Copyright (C) 2013-2020 Combodo SARL + * + * This file is part of iTop. + * + * iTop is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * iTop 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. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + */ +.sort_none::after, .sort_asc::after, .sort_desc::after { + font-family: 'Font Awesome 5 Free'; + font-weight: 600; +} +/*! jQuery UI - v1.12.1 - 2018-02-20 + * http://jqueryui.com + * Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css + * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=custom-theme&bgImgOpacityError=18&bgImgOpacityHighlight=75&bgImgOpacityActive=65&bgImgOpacityHover=100&bgImgOpacityDefault=100&bgImgOpacityContent=100&bgImgOpacityHeader=35&cornerRadiusShadow=5px&offsetLeftShadow=-5px&offsetTopShadow=-5px&thicknessShadow=5px&opacityShadow=20&bgImgOpacityShadow=10&bgTextureShadow=flat&bgColorShadow=%23000000&opacityOverlay=50&bgImgOpacityOverlay=20&bgTextureOverlay=diagonals_thick&bgColorOverlay=%23666666&iconColorError=%23ffd27a&fcError=%23ffffff&borderColorError=%23cd0a0a&bgTextureError=diagonals_thick&bgColorError=%23b81900&iconColorHighlight=%231c94c4&fcHighlight=%23363636&borderColorHighlight=%23fed22f&bgTextureHighlight=flat&bgColorHighlight=%23ffe45c&iconColorActive=%23E87C1E&fcActive=%23E87C1E&borderColorActive=%23E87C1E&bgTextureActive=flat&bgColorActive=%23ffffff&iconColorHover=%23E87C1E&fcHover=%23E87C1E&borderColorHover=%23E87C1E&bgTextureHover=flat&bgColorHover=%23fde17c&iconColorDefault=%23F26522&fcDefault=%23555555&borderColorDefault=%23cccccc&bgTextureDefault=flat&bgColorDefault=%23f1f1f1&iconColorContent=%23222222&fcContent=%23333333&borderColorContent=%23dddddd&bgTextureContent=flat&bgColorContent=%23eeeeee&iconColorHeader=%23ffffff&fcHeader=%23ffffff&borderColorHeader=%23F26522&bgTextureHeader=flat&bgColorHeader=%23E87C1E&cornerRadius=0&fwDefault=bold&fsDefault=1.1em&ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif + * Copyright jQuery Foundation and other contributors; Licensed MIT + * The original css file has been scssized (through www.css2scss.com) + */ +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; + clear: both; +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity=0); +} +.ui-front { + z-index: 100; +} +.ui-state-disabled { + cursor: default !important; + pointer-events: none; + opacity: 0.35; + filter: Alpha(Opacity=35); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter: Alpha(Opacity=35); +} +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -0.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + width: 16px; + height: 16px; + background-image: url("../../../../css/ui-lightness/images/ui-icons_222222_256x240.png?v=1599541970"); + filter: hue-rotate(0deg); +} +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #666666 url("../../../../css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png?v=1599541970") 50% 50% repeat; + opacity: 0.5; + filter: Alpha(Opacity=50); +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle { + display: none; +} +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: 0.5em 0.5em 0.5em 0.7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7?v=1599541970"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px 0.4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus { + margin: -1px; +} +.ui-menu .ui-state-active { + margin: -1px; +} +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: 0.2em; + margin: auto 0; +} +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} +.ui-button { + padding: 0.4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: 0.1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: visible; + text-decoration: none; + border: 1px solid #cccccc; + background: #f1f1f1; + font-weight: bold; + color: #555555; +} +.ui-button:link { + text-decoration: none; +} +.ui-button:visited { + text-decoration: none; +} +.ui-button:hover { + text-decoration: none; + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-button:hover .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=1599541970"); +} +.ui-button:active { + text-decoration: none; + border: 1px solid #EA7D1E; + background: #ffffff; + font-weight: bold; + color: #EA7D1E; +} +.ui-button:active .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=1599541970"); +} +.ui-button:focus { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-button:focus .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=1599541970"); +} +.ui-button .ui-state-highlight.ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_1c94c4_256x240.png?v=1599541970"); +} +.ui-button .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_F26522_256x240.png?v=1599541970"); +} +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} +input.ui-button.ui-button-icon-only { + text-indent: 0; +} +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; +} +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: 0.4em 1em; +} +input.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus { + z-index: 9999; +} +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup .ui-controlgroup-label { + padding: 0.4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} +.ui-controlgroup-vertical .ui-spinner-input { + width: calc(100% - 2.4em); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: 0.12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: 0.2em 0.2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: 0.2em 0; +} +.ui-datepicker .ui-datepicker-prev { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; + left: 2px; +} +.ui-datepicker .ui-datepicker-prev span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; + right: 2px; +} +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-prev-hover { + top: 1px; + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; + right: 1px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month { + width: 45%; +} +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: 0.9em; + border-collapse: collapse; + margin: 0 0 0.4em; +} +.ui-datepicker th { + padding: 0.7em 0.3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span { + display: block; + padding: 0.2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker td a { + display: block; + padding: 0.2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: 0.7em 0 0 0; + padding: 0 0.2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: 0.5em 0.2em 0.4em; + cursor: pointer; + padding: 0.2em 0.6em 0.3em 0.6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: 0.5em; + top: 0.3em; +} +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto 0.4em; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: 0.2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: 0.4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: 0.1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: 0.3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: 0.5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: 0.5em; + padding: 0.3em 1em 0.5em 0.4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: 0.5em 0.4em 0.5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se { + width: 7px; + height: 7px; + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + width: 7px; + height: 7px; + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + width: 7px; + height: 7px; + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: 0.7em; + display: block; + border: 0; + background-position: 0 0; +} +.ui-slider.ui-state-disabled .ui-slider-handle { + filter: inherit; +} +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} +.ui-slider-horizontal { + height: 0.8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -0.3em; + margin-left: -0.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} +.ui-slider-vertical { + width: 0.8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -0.3em; + margin-left: 0; + margin-bottom: -0.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0.222em 0; + margin: 0.2em 0; + vertical-align: middle; + margin-left: 0.4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: 0.5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative; + padding: 0.2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: 0.2em 0.2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px 0.2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: 0.5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: text; +} +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor { + cursor: text; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} +.ui-widget { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1em; +} +.ui-widget select { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1em; +} +.ui-widget textarea { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1em; +} +.ui-widget button { + font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #cccccc; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #eeeeee; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-content .ui-state-default { + border: 1px solid #cccccc; + background: #F1F1F1; + font-weight: bold; + color: #555555; +} +.ui-widget-content .ui-state-hover { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-content .ui-state-focus { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-content .ui-state-active { + border: 1px solid #EA7D1E; + background: #FFFFFF; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-content .ui-state-highlight { + border: 1px solid #fed22f; + background: #ffe45c; + color: #363636; +} +.ui-widget-content .ui-state-highlight a { + color: #363636; +} +.ui-widget-content .ui-state-error { + border: 1px solid #cd0a0a; + background: #b81900 url("../../../../css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png?v=1599541970") 50% 50% repeat; + color: #FFFFFF; +} +.ui-widget-content .ui-state-error a { + color: #FFFFFF; +} +.ui-widget-content .ui-state-error-text { + color: #FFFFFF; +} +.ui-widget-content .ui-priority-primary { + font-weight: bold; +} +.ui-widget-content .ui-priority-secondary { + opacity: 0.7; + filter: Alpha(Opacity=70); + font-weight: normal; +} +.ui-widget-content .ui-state-disabled { + opacity: 0.35; + filter: Alpha(Opacity=35); + background-image: none; +} +.ui-widget-content .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_222222_256x240.png?v=1599541970"); +} +.ui-widget-header { + border: 1px solid #d56e14; + background: #EA7D1E; + color: #FFFFFF; + font-weight: bold; +} +.ui-widget-header a { + color: #FFFFFF; +} +.ui-widget-header .ui-state-default { + border: 1px solid #cccccc; + background: #F1F1F1; + font-weight: bold; + color: #555555; +} +.ui-widget-header .ui-state-hover { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-header .ui-state-focus { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-header .ui-state-active { + border: 1px solid #EA7D1E; + background: #FFFFFF; + font-weight: bold; + color: #EA7D1E; +} +.ui-widget-header .ui-state-highlight { + border: 1px solid #fed22f; + background: #ffe45c; + color: #363636; +} +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #b81900 url("../../../../css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png?v=1599541970") 50% 50% repeat; + color: #FFFFFF; +} +.ui-widget-header .ui-state-error a { + color: #FFFFFF; +} +.ui-widget-header .ui-state-error-text { + color: #FFFFFF; +} +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-widget-header .ui-priority-secondary { + opacity: 0.7; + filter: Alpha(Opacity=70); + font-weight: normal; +} +.ui-widget-header .ui-state-disabled { + opacity: 0.35; + filter: Alpha(Opacity=35); + background-image: none; +} +.ui-widget-header .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_ffffff_256x240.png?v=1599541970"); +} +.ui-state-default { + border: 1px solid #cccccc; + background: #F1F1F1; + font-weight: bold; + color: #555555; +} +.ui-state-default a { + color: #555555; + text-decoration: none; +} +.ui-state-default a:link { + color: #555555; + text-decoration: none; +} +.ui-state-default a:visited { + color: #555555; + text-decoration: none; +} +.ui-state-default .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_F26522_256x240.png?v=1599541970"); +} +html .ui-button.ui-state-disabled:hover { + border: 1px solid #cccccc; + background: #f1f1f1; + font-weight: bold; + color: #555555; +} +html .ui-button.ui-state-disabled:active { + border: 1px solid #cccccc; + background: #f1f1f1; + font-weight: bold; + color: #555555; +} +a.ui-button { + color: #555555; + text-decoration: none; +} +a.ui-button:hover { + color: #EA7D1E; + text-decoration: none; +} +a.ui-button:focus { + color: #EA7D1E; + text-decoration: none; +} +a.ui-button:active { + border: 1px solid #EA7D1E; + background: #ffffff; + font-weight: bold; + color: #EA7D1E; +} +a:link.ui-button { + color: #555555; + text-decoration: none; +} +a:visited.ui-button { + color: #555555; + text-decoration: none; +} +.ui-state-hover { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-state-hover a { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-hover a:hover { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-hover a:link { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-hover a:visited { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-hover .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=1599541970"); +} +.ui-state-focus { + border: 1px solid #EA7D1E; + background: #fde17c; + font-weight: bold; + color: #EA7D1E; +} +.ui-state-focus a { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-focus a:hover { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-focus a:link { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-focus a:visited { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-focus .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=1599541970"); +} +.ui-visual-focus { + box-shadow: 0 0 3px 1px #5e9ed6; +} +.ui-state-active { + border: 1px solid #EA7D1E; + background: #FFFFFF; + font-weight: bold; + color: #EA7D1E; +} +.ui-state-active .ui-icon-background { + border: #EA7D1E; + background-color: #EA7D1E; +} +.ui-state-active a { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-active a:link { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-active a:visited { + color: #EA7D1E; + text-decoration: none; +} +.ui-state-active .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_E87C1E_256x240.png?v=1599541970"); +} +.ui-button.ui-state-active:hover { + border: 1px solid #EA7D1E; + background: #ffffff; + font-weight: bold; + color: #EA7D1E; +} +.ui-icon-background { + border: #EA7D1E; + background-color: #EA7D1E; +} +.ui-state-highlight { + border: 1px solid #fed22f; + background: #ffe45c; + color: #363636; +} +.ui-state-highlight a { + color: #363636; +} +.ui-state-highlight .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_1c94c4_256x240.png?v=1599541970"); +} +.ui-state-checked { + border: 1px solid #fed22f; + background: #ffe45c; +} +.ui-state-error { + border: 1px solid #cd0a0a; + background: #b81900 url("../../../../css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png?v=1599541970") 50% 50% repeat; + color: #FFFFFF; +} +.ui-state-error a { + color: #FFFFFF; +} +.ui-state-error .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_ffd27a_256x240.png?v=1599541970"); +} +.ui-state-error-text { + color: #FFFFFF; +} +.ui-state-error-text .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_ffd27a_256x240.png?v=1599541970"); +} +.ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary { + opacity: 0.7; + filter: Alpha(Opacity=70); + font-weight: normal; +} +.ui-icon-blank { + background-position: 16px 16px; +} +.ui-icon-caret-1-n { + background-position: 0 0; +} +.ui-icon-caret-1-ne { + background-position: -16px 0; +} +.ui-icon-caret-1-e { + background-position: -32px 0; +} +.ui-icon-caret-1-se { + background-position: -48px 0; +} +.ui-icon-caret-1-s { + background-position: -65px 0; +} +.ui-icon-caret-1-sw { + background-position: -80px 0; +} +.ui-icon-caret-1-w { + background-position: -96px 0; +} +.ui-icon-caret-1-nw { + background-position: -112px 0; +} +.ui-icon-caret-2-n-s { + background-position: -128px 0; +} +.ui-icon-caret-2-e-w { + background-position: -144px 0; +} +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} +.ui-icon-triangle-1-s { + background-position: -65px -16px; +} +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} +.ui-icon-arrow-1-s { + background-position: -65px -32px; +} +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} +.ui-icon-arrowthick-1-n { + background-position: 1px -48px; +} +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} +.ui-icon-arrow-4 { + background-position: 0 -80px; +} +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} +.ui-icon-extlink { + background-position: -32px -80px; +} +.ui-icon-newwin { + background-position: -48px -80px; +} +.ui-icon-refresh { + background-position: -64px -80px; +} +.ui-icon-shuffle { + background-position: -80px -80px; +} +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} +.ui-icon-folder-open { + background-position: -16px -96px; +} +.ui-icon-document { + background-position: -32px -96px; +} +.ui-icon-document-b { + background-position: -48px -96px; +} +.ui-icon-note { + background-position: -64px -96px; +} +.ui-icon-mail-closed { + background-position: -80px -96px; +} +.ui-icon-mail-open { + background-position: -96px -96px; +} +.ui-icon-suitcase { + background-position: -112px -96px; +} +.ui-icon-comment { + background-position: -128px -96px; +} +.ui-icon-person { + background-position: -144px -96px; +} +.ui-icon-print { + background-position: -160px -96px; +} +.ui-icon-trash { + background-position: -176px -96px; +} +.ui-icon-locked { + background-position: -192px -96px; +} +.ui-icon-unlocked { + background-position: -208px -96px; +} +.ui-icon-bookmark { + background-position: -224px -96px; +} +.ui-icon-tag { + background-position: -240px -96px; +} +.ui-icon-home { + background-position: 0 -112px; +} +.ui-icon-flag { + background-position: -16px -112px; +} +.ui-icon-calendar { + background-position: -32px -112px; +} +.ui-icon-cart { + background-position: -48px -112px; +} +.ui-icon-pencil { + background-position: -64px -112px; +} +.ui-icon-clock { + background-position: -80px -112px; +} +.ui-icon-disk { + background-position: -96px -112px; +} +.ui-icon-calculator { + background-position: -112px -112px; +} +.ui-icon-zoomin { + background-position: -128px -112px; +} +.ui-icon-zoomout { + background-position: -144px -112px; +} +.ui-icon-search { + background-position: -160px -112px; +} +.ui-icon-wrench { + background-position: -176px -112px; +} +.ui-icon-gear { + background-position: -192px -112px; +} +.ui-icon-heart { + background-position: -208px -112px; +} +.ui-icon-star { + background-position: -224px -112px; +} +.ui-icon-link { + background-position: -240px -112px; +} +.ui-icon-cancel { + background-position: 0 -128px; +} +.ui-icon-plus { + background-position: -16px -128px; +} +.ui-icon-plusthick { + background-position: -32px -128px; +} +.ui-icon-minus { + background-position: -48px -128px; +} +.ui-icon-minusthick { + background-position: -64px -128px; +} +.ui-icon-close { + background-position: -80px -128px; +} +.ui-icon-closethick { + background-position: -96px -128px; +} +.ui-icon-key { + background-position: -112px -128px; +} +.ui-icon-lightbulb { + background-position: -128px -128px; +} +.ui-icon-scissors { + background-position: -144px -128px; +} +.ui-icon-clipboard { + background-position: -160px -128px; +} +.ui-icon-copy { + background-position: -176px -128px; +} +.ui-icon-contact { + background-position: -192px -128px; +} +.ui-icon-image { + background-position: -208px -128px; +} +.ui-icon-video { + background-position: -224px -128px; +} +.ui-icon-script { + background-position: -240px -128px; +} +.ui-icon-alert { + background-position: 0 -144px; +} +.ui-icon-info { + background-position: -16px -144px; +} +.ui-icon-notice { + background-position: -32px -144px; +} +.ui-icon-help { + background-position: -48px -144px; +} +.ui-icon-check { + background-position: -64px -144px; +} +.ui-icon-bullet { + background-position: -80px -144px; +} +.ui-icon-radio-on { + background-position: -96px -144px; +} +.ui-icon-radio-off { + background-position: -112px -144px; +} +.ui-icon-pin-w { + background-position: -128px -144px; +} +.ui-icon-pin-s { + background-position: -144px -144px; +} +.ui-icon-play { + background-position: 0 -160px; +} +.ui-icon-pause { + background-position: -16px -160px; +} +.ui-icon-seek-next { + background-position: -32px -160px; +} +.ui-icon-seek-prev { + background-position: -48px -160px; +} +.ui-icon-seek-end { + background-position: -64px -160px; +} +.ui-icon-seek-start { + background-position: -80px -160px; +} +.ui-icon-seek-first { + background-position: -80px -160px; +} +.ui-icon-stop { + background-position: -96px -160px; +} +.ui-icon-eject { + background-position: -112px -160px; +} +.ui-icon-volume-off { + background-position: -128px -160px; +} +.ui-icon-volume-on { + background-position: -144px -160px; +} +.ui-icon-power { + background-position: 0 -176px; +} +.ui-icon-signal-diag { + background-position: -16px -176px; +} +.ui-icon-signal { + background-position: -32px -176px; +} +.ui-icon-battery-0 { + background-position: -48px -176px; +} +.ui-icon-battery-1 { + background-position: -64px -176px; +} +.ui-icon-battery-2 { + background-position: -80px -176px; +} +.ui-icon-battery-3 { + background-position: -96px -176px; +} +.ui-icon-circle-plus { + background-position: 0 -192px; +} +.ui-icon-circle-minus { + background-position: -16px -192px; +} +.ui-icon-circle-close { + background-position: -32px -192px; +} +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} +.ui-icon-circle-check { + background-position: -208px -192px; +} +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} +.ui-corner-all { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.ui-corner-top { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.ui-corner-left { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.ui-corner-tl { + border-top-left-radius: 0; +} +.ui-corner-right { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.ui-corner-tr { + border-top-right-radius: 0; +} +.ui-corner-bottom { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.ui-corner-bl { + border-bottom-left-radius: 0; +} +.ui-corner-br { + border-bottom-right-radius: 0; +} +.ui-widget-shadow { + -webkit-box-shadow: -5px -5px 5px #000000; + box-shadow: -5px -5px 5px #000000; +} +/*! + * Copyright (C) 2013-2020 Combodo SARL + * + * This file is part of iTop. + * + * iTop is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * iTop 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. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + */ +/* CSS Document */ +body { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 10pt; + background-color: #FFFFFF; + color: #000; + margin: 0; + /* Remove body margin/padding */ + padding: 0; + overflow: hidden; + /* Remove scroll bars on browser window */ +} +body.printable-version { + margin: 1.5em; + overflow: auto; +} +/* to prevent flicker, hide the pane's content until it's ready */ +.ui-layout-center, .ui-layout-north, .ui-layout-south { + display: none; +} +.ui-layout-content { + padding-left: 10px; +} +.ui-layout-content .ui-tabs-nav li { + /* Overriding jQuery UI theme to see active tab better */ + margin-bottom: 2px; +} +.ui-layout-content .ui-tabs-nav li.ui-tabs-active { + padding-bottom: 3px; +} +.raw_output { + font-family: Courier-New, Courier, Arial, Helvetica; + font-size: 8pt; + background-color: #eeeeee; + color: #000; + border: 1px dashed #000; + padding: 0.25em; + margin-top: 1em; +} +h1 { + font-family: Tahoma, Verdana, Arial, Helvetica; + color: #000; + font-weight: bold; + font-size: 12pt; +} +h2 { + font-family: Tahoma, Verdana, Arial, Helvetica; + color: #000; + font-weight: normal; + font-size: 12pt; +} +h3 { + font-family: Tahoma, Verdana, Arial, Helvetica; + color: #000; + font-weight: normal; + font-size: 10pt; +} +label { + cursor: pointer; +} +.hilite, .hilite a, .hilite a:visited { + color: #EA7D1E; + text-decoration: none; +} +table.datatable { + width: 100%; + border: 0; + padding: 0; +} +td.menucontainer { + text-align: right; +} +table.listResults { + padding: 0px; + border-top: 3px solid #F1F1F1; + border-left: 3px solid #F1F1F1; + border-bottom: 3px solid #e6e6e1; + border-right: 3px solid #e6e6e1; + width: 100%; + background-color: #FFFFFF; +} +table.listResults td { + padding: 2px; +} +table.listResults td .view-image { + width: inherit !important; + height: inherit !important; +} +table.listResults td .view-image img { + max-width: 48px !important; + max-height: 48px !important; + display: block; + margin-left: auto; + margin-right: auto; +} +table.listResults > tbody > tr > * { + transition: background-color 400ms linear; +} +table.listResults > tbody > tr:hover > * { + cursor: pointer; +} +table.listResults > tbody > tr.selected:hover > * { + /* hover on lines is currently done toggling td.hover, and having a rule for links */ + background-color: #f1a564; + color: #000; +} +table.listResults > tbody > tr:hover > * { + /* hover on lines is currently done toggling td.hover, and having a rule for links */ + background-color: #fdf5d0; + color: #000; +} +.edit-image .view-image { + display: inline-block; +} +.edit-image .view-image img[src=""], .edit-image .view-image img[src="null"] { + visibility: hidden; +} +.edit-image .view-image.dirty.compat { + background-image: url("../../../../css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png?v=1599541970"); +} +.edit-image .view-image.dirty.compat img { + opacity: 0.3; +} +.edit-image .edit-buttons { + display: inline-block; + vertical-align: top; + margin-top: 4px; + margin-left: 3px; +} +.edit-image .edit-buttons .button { + cursor: pointer; + margin-bottom: 3px; + padding: 2px; + background-color: #EA7D1E; +} +.edit-image .edit-buttons .button.disabled { + cursor: default; + background-color: #555555; + opacity: 0.3; +} +.edit-image .edit-buttons .button .ui-icon { + background-image: url("../../../../css/ui-lightness/images/ui-icons_ffffff_256x240.png?v=1599541970"); +} +.edit-image .file-input { + display: block; +} +/* Center the image both horizontally and vertically, withing a box which size is fixed (depends on the attribute definition) */ +.details .view-image { + text-align: center; + padding: 2px; + border: 2px solid #ddd; + border-radius: 6px; +} +.details .view-image img { + display: inline-block; + vertical-align: middle; + max-width: 90% !important; + max-height: 90% !important; + cursor: zoom-in; +} +.details .view-image .helper-middle { + display: inline-block; + height: 100%; + vertical-align: middle; +} +table.listContainer { + border: 0; + padding: 0; + margin: 0; + width: 100%; + clear: both; +} +tr.containerHeader, tr.containerHeader td { + background: transparent; +} +tr.even td, .wizContainer tr.even td { + background-color: #F1F1F1; +} +tr.red_even td, .wizContainer tr.red_even td { + background-color: #f97e75; + color: #FFFFFF; +} +tr.red td, .wizContainer tr.red td { + background-color: #f9a397; + color: #FFFFFF; +} +tr.orange_even td, .wizContainer tr.orange_even td { + background-color: #f4d07a; +} +tr.orange td, .wizContainer tr.orange td { + background-color: #f4e96c; +} +tr.green_even td, .wizContainer tr.green_even td { + background-color: #bee5a3; +} +tr.green td, .wizContainer tr.green td { + background-color: #b3e5b4; +} +tr td.hover, tr.even td.hover, .hover a, .hover a:visited, .hover a:hover, .wizContainer tr.even td.hover, .wizContainer tr td.hover { + color: #000; +} +th { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 8pt; + color: #1c94c4; + height: 20px; + background: #F1F1F1 bottom repeat-x; +} +th.header { + cursor: pointer; + background-repeat: no-repeat; + background-position: center right; + background-repeat: no-repeat; + padding-right: 16px; +} +th.headerSortUp { + text-decoration: underline; + cursor: pointer; + padding-right: 5px; +} +th.headerSortUp::after { + font-family: "Font Awesome 5 Free"; + text-align: right; + content: '\f0d7'; + color: #1c94c4; + float: right; +} +th.headerSortDown { + text-decoration: underline; + cursor: pointer; + padding-right: 5px; +} +th.headerSortDown::after { + font-family: "Font Awesome 5 Free"; + text-align: right; + content: '\f0d8'; + color: #1c94c4; + float: right; +} +td { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 12px; + color: #696969; + nobackground-color: #ffffff; + padding: 0px; +} +tr.clicked td { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: smaller; + background-color: #ffcfe8; +} +td.label { + vertical-align: top; +} +td.label span { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 12px; + color: #000; + padding: 5px; + padding-right: 10px; + font-weight: bold; + vertical-align: top; + text-align: right; + display: block; +} +fieldset td.label span { + padding: 3px; + padding-right: 10px; +} +fieldset { + margin-top: 3px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + border-radius: 6px; + border-style: solid; + border-color: #ddd; +} +legend { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 12px; + padding: 8px; + color: #fff; + background-color: #1c94c4; + font-weight: bold; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + border-radius: 6px; +} +legend.transparent { + background: transparent; + color: #333333; + font-size: 1em; + font-weight: normal; + padding: 0; +} +.ui-widget-content td legend a, .ui-widget-content td legend a:hover, .ui-widget-content td legend a:visited { + color: #fff; +} +.ui-widget-content td a, p a, p a:visited, td a, td a:visited { + text-decoration: none; + color: #1c94c4; +} +.ui-widget-content td a.cke_button, .ui-widget-content td a.cke_toolbox_collapser, .ui-widget-content td a.cke_combo_button, cke_dialog a { + padding-left: 0; + background-image: none; +} +.ui-widget-content td a:hover, p a:hover, td a:hover { + text-decoration: underline; + color: #EA7D1E; +} +.cke_reset_all *:hover { + text-decoration: none; + color: #000; +} +table.cke_dialog_contents a.cke_dialog_ui_button_ok { + color: #000; + border-color: #EA7D1E; + background: #EA7D1E; +} +.cke_notifications_area { + display: none; +} +.hljs { + padding: 0.9em !important; + box-shadow: 0 0px 3px 2px inset rgba(0, 0, 0, 0.4); + border-radius: 3px; +} +td a.no-arrow, td a.no-arrow:visited, .SearchDrawer a.no-arrow, .SearchDrawer a.no-arrow:visited { + text-decoration: none; + color: #000; + padding-left: 0px; + background: inherit; +} +td a.no-arrow:hover { + text-decoration: underline; + color: #d81515; + padding-left: 0px; + background: inherit; +} +td a:hover .text_decoration, td a:visited:hover .text_decoration { + color: #d56e14; +} +td a .text_decoration, td a:visited .text_decoration { + vertical-align: baseline; + text-decoration: none; + color: #EA7D1E; + margin-right: 8px; + transition: color 0.2s ease-in-out; +} +a.small_action { + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 8pt; + color: #000; + text-decoration: none; +} +.display_block { + padding: 0.25em; +} +.actions_details { + float: right; + margin-top: 10px; + margin-right: 10px; + padding-left: 5px; + padding-top: 2px; + padding-bottom: 2px; + background: #EA7D1E; +} +.actions_details span { + background: url("../../../../images/actions_right.png?v=1599541970") no-repeat right; + color: #fff; + font-weight: bold; + padding-top: 2px; + padding-bottom: 2px; + padding-right: 12px; +} +.actions_details a { + text-decoration: none; +} +.loading { + noborder: 1px dashed #CCC; + background: #b9c1c8; + padding: 0.25em; +} +input.textSearch { + border: 1px solid #000; + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + color: #000; +} +.ac_input { + border: 1px solid #7f9db9; + background: #fff url("../../../../images/ac-background.gif?v=1599541970") no-repeat right; +} +/* By Rom */ +.csvimport_createobj { + color: #AA0000; + background-color: #EEEEEE; +} +.csvimport_error { + font-weight: bold; + color: #FF0000; + background-color: #EEEEEE; +} +.csvimport_warning { + color: #CC8888; + background-color: #EEEEEE; +} +.csvimport_ok { + color: #000; + background-color: #BBFFBB; +} +.csvimport_reconkey { + font-style: italic; + color: #888888; + background-color: #FFFFFF; +} +.csvimport_extreconkey { + color: #888888; + background-color: #FFFFFF; +} +#accordion { + display: none; +} +#accordion h3 { + padding: 10px; +} +.ui-accordion-content ul { + list-style: none; + list-style-image: none; + padding-left: 16px; + margin-top: 8px; +} +.ui-accordion-content li.submenu { + margin-top: 8px; +} +.ui-accordion-content ul ul { + padding: 8px 0px 8px 8px; + margin: 0; + list-style: none; + list-style-image: none; + border: 0; +} +.nothing { + noborder-top: 1px solid #8b8b8b; + padding: 4px 0px 0px 16px; + font-size: 8pt; + background: url("../../../../images/green-square.gif?v=1599541970") no-repeat bottom left; + color: #83b217; + font-weight: bold; + text-decoration: none; +} +div.ui-accordion-content { + padding-top: 10px; + padding-left: 10px; +} +.ui-accordion-content a, ui-accordion-content a:visited { + color: #1c94c4; + text-decoration: none; +} +.ui-accordion-content a:hover { + color: #EA7D1E; + text-decoration: none; +} +.ui-accordion-content ul { + padding-left: 0; + margin-top: 0; +} +.ui-accordion-content li { + color: #555555; + text-decoration: none; + margin: 0; + padding: 0px 0pt 0px 6px; + font-size: 9pt; + font-weight: normal; + border: 0; +} +.ui-accordion-content li::before { + font-family: "Font Awesome 5 Free"; + content: "\f0da"; + color: #EA7D1E; + font-weight: 900; + margin-right: 6px; + font-size: 10px; +} +td a.CollapsibleLabel, a.CollapsibleLabel { + margin: 0; + padding: 0; + font-size: 8pt; + text-decoration: none; + color: #555555; +} +td a.CollapsibleLabel::before, a.CollapsibleLabel::before { + font-family: "Font Awesome 5 Free"; + color: #EA7D1E; + content: "\f0da"; + font-weight: 900; + margin: 0 5px; + font-size: 10px; +} +/* Beware: IE6 does not support multiple selector with multiple classes, only the last class is used */ +td a.CollapsibleLabel.open, a.CollapsibleLabel.open { + margin: 0; + padding: 0px 0pt 0px 16px; + font-size: 8pt; + text-decoration: none; + color: #EA7D1E; +} +td a.CollapsibleLabel.open::before, a.CollapsibleLabel.open::before { + font-family: "Font Awesome 5 Free"; + color: #EA7D1E; + content: '\f0d7'; + margin-right: 6px; + font-size: 10px; +} +.page_header { + background-color: #F1F1F1; + padding: 5px; +} +/* move up a header immediately following a display block (i.e. "actions" menu) */ +.display_block + .page_header { + margin-top: -8px; +} +.notreeview li { + background: url("../../../../images/tv-item.gif?v=1599541970") 0 0 no-repeat; +} +.notreeview .collapsable { + background-image: url("../../../../images/tv-collapsable.gif?v=1599541970"); +} +.notreeview .expandable { + background-image: url("../../../../images/tv-expandable.gif?v=1599541970"); +} +.notreeview .last { + background-image: url("../../../../images/tv-item-last.gif?v=1599541970"); +} +.notreeview .lastCollapsable { + background-image: url("../../../../images/tv-collapsable-last.gif?v=1599541970"); +} +.notreeview .lastExpandable { + background-image: url("../../../../images/tv-expandable-last.gif?v=1599541970"); +} +#OrganizationSelection { + padding: 5px 0px 16px 20px; +} +/* popup menus */ +div.itop_popup { + margin: 0; + padding: 0; + float: right; +} +div.itop_popup > ul > li { + list-style: none; + cursor: pointer; + position: relative; +} +div.actions_menu > ul { + height: 19px; + line-height: 17px; + vertical-align: middle; + display: block; + nowidth: 70px; + padding-left: 5px; + /* Nasty work-around for IE... en attendant mieux */ + background: #EA7D1E; + cursor: pointer; + margin: 0; +} +div.actions_menu > ul > li { + float: left; + list-style: none; + font-size: 11px; + font-family: Tahoma, sans-serif; + height: 17px; + padding-right: 10px; + padding-left: 4px; + font-weight: bold; + color: #fff; + vertical-align: middle; + margin: 0; +} +div.actions_menu > ul > li > i { + margin-left: 5px; +} +#logOffBtn > ul > li { + list-style: none; + vertical-align: middle; + margin: 0; + padding-left: 10px; + padding-right: 10px; + cursor: pointer; +} +#logOffBtn > ul { + list-style: none; + vertical-align: middle; + margin: 0; + padding: 0; + height: 25px; +} +.itop_popup > ul > li > ul, #logOffBtn > ul > li > ul { + box-shadow: 3px 3px 5px 0px rgba(0, 0, 0, 0.5); +} +.itop_popup li a, #logOffBtn li a { + display: block; + padding: 5px 12px; + text-decoration: none; + nowidth: 70px; + color: #000; + font-weight: bold; + white-space: nowrap; + background: #fff; +} +#logOffBtn li span { + display: block; + padding: 5px 12px; + text-decoration: none; + nowidth: 70px; + color: #000; + white-space: nowrap; + background: #fff; +} +.itop_popup ul { + padding-left: 0; +} +.menucontainer div.toolkit_menu { + background: #EA7D1E; + margin-left: 10px; +} +.menucontainer div.toolkit_menu > ul > li { + float: left; + list-style: none; + font-size: 11px; + font-family: Tahoma, sans-serif; + height: 19px; + padding-right: 4px; + padding-left: 6px; + font-weight: bold; + color: #fff; + vertical-align: middle; + line-height: 17px; + margin: 0; +} +.menucontainer div.toolkit_menu > ul > li > i:nth-child(1) { + font-size: 13px; + padding-top: 3px; +} +.menucontainer div.toolkit_menu > ul > li > i:nth-child(2) { + margin-left: 5px; +} +.itop_popup li a:hover, #logOffBtn li a:hover { + background: #1A4473; +} +.itop_popup ul > li > ul, #logOffBtn ul > li > ul { + border: 1px solid black; + background: #fff; +} +.itop_popup li > ul, #logOffBtn li > ul { + margin: 0; + padding: 0; + position: absolute; + display: none; + border-top: 1px solid white; + z-index: 1500; +} +.itop_popup li ul li, #logOffBtn li ul li { + float: none; + display: inline; +} +.itop_popup li ul li a, #logOffBtn li ul li a { + width: auto; + text-align: left; +} +.itop_popup li ul li a:hover, #logOffBtn li ul li a:hover { + background: #EA7D1E; + color: #fff; + font-weight: bold; +} +.itop_popup > ul { + margin: 0; +} +hr.menu-separator { + border: none 0; + border-top: 1px solid #ccc; + color: #ccc; + background-color: transparent; + height: 1px; + margin: 3px; + cursor: default; +} +/************************************/ +.wizHeader { + background: #1c94c4; + padding: 15px; +} +.wizContainer { + border: 5px solid #1c94c4; + background: #d6e8ef; + padding: 5px; +} +.wizContainer table tr td { + background: transparent; +} +.alignRight { + text-align: right; + padding: 3px; +} +.alignLeft { + text-align: left; + padding: 3px; +} +.red { + background-color: #ff6000; + color: #000; +} +th.red { + background: url("../../../../images/red-header.gif?v=1599541970") bottom left repeat-x; + color: #000; +} +.green { + background-color: #00cc00; + color: #000; +} +th.green { + background: url("../../../../images/green-header.gif?v=1599541970") bottom left repeat-x; + color: #000; +} +.orange { + background-color: #ffde00; + color: #000; +} +th.orange { + background: url("../../../../images/orange-header.gif?v=1599541970") bottom left repeat-x; + color: #000; +} +/* For Date Picker: Creates a little calendar icon + * instead of a text link for "Choose date" + */ +td a.dp-choose-date, a.dp-choose-date, td a.dp-choose-date:hover, a.dp-choose-date:hover, td a.dp-choose-date:visited, a.dp-choose-date:visited { + float: left; + width: 16px; + height: 16px; + padding: 0; + margin: 5px 3px 0; + display: block; + text-indent: -2000px; + overflow: hidden; + background: url("../../../../images/calendar.png?v=1599541970") no-repeat; +} +td a.dp-choose-date.dp-disabled, a.dp-choose-date.dp-disabled { + background-position: 0 -20px; + cursor: default; +} +/* For Date Picker: makes the input field shorter once the date picker code + * has run (to allow space for the calendar icon) + */ +input.dp-applied { + width: 140px; + float: left; +} +/* For search forms */ +.mini_tabs a { + text-decoration: none; + font-weight: bold; + color: #ccc; + background-color: #333; + padding-left: 1em; + padding-right: 1em; + padding-bottom: 0.25em; +} +.mini_tabs a.selected { + color: #fff; + background-color: #1c94c4; + padding-top: 0.25em; +} +.mini_tabs ul { + margin: -10px; +} +.mini_tabs ul li { + float: right; + list-style: none; + nopadding-left: 1em; + nopadding-right: 1em; + margin-top: 0; +} +/* Search forms v2 */ +.search_box { + box-sizing: border-box; + position: relative; + z-index: 1100; + /* To be over the table block/unblock UI. Not very sure about this. */ + text-align: center; + /* Used when form is closed */ + /* Sizing reset */ +} +.search_box * { + box-sizing: border-box; +} +.search_form_handler { + position: relative; + z-index: 10; + width: 100%; + margin-left: auto; + margin-right: auto; + font-size: 12px; + text-align: left; + /* To compensate .search_box:text-align */ + border: 1px solid #1c94c4; + /* Sizing reset */ +} +.search_form_handler * { + box-sizing: border-box; + /* Hyperlink reset */ +} +.search_form_handler a { + color: inherit; + text-decoration: none; + /* Input reset */ +} +.search_form_handler input[type="text"], .search_form_handler select { + padding: 1px 2px; +} +.search_form_handler:not(.closed) .sf_title .sft_short { + display: none; +} +.search_form_handler:not(.closed) .sf_title .sft_hint, .search_form_handler:not(.closed) .sf_title .sfobs_hint, .search_form_handler:not(.closed) .sf_title .sft_toggler { + margin-top: 4px; +} +.search_form_handler:not(.closed) .sf_title .sft_toggler { + transform: rotateX(180deg); + transition: transform 0.5s linear; +} +.search_form_handler.closed { + margin-bottom: 0.5em; + width: 150px; + overflow: hidden; + border-radius: 4px; + background-color: #1c94c4; +} +.search_form_handler.closed .sf_criterion_area { + height: 0; + opacity: 0; + padding: 0; +} +.search_form_handler.closed .sf_title { + padding: 6px 8px; + text-align: center; + font-size: 12px; +} +.search_form_handler.closed .sf_title .sft_long { + display: none; +} +.search_form_handler.closed .sf_title .sft_hint, .search_form_handler.closed .sf_title .sfobs_hint { + display: none; +} +.search_form_handler:not(.no_auto_submit) .sft_hint { + display: none; +} +.search_form_handler:not(.no_auto_submit) .sfc_fg_apply { + display: none; +} +.search_form_handler.no_auto_submit .sfc_fg_search { + display: none; +} +.search_form_handler.no_auto_submit .sft_hint { + display: inline-block; +} +.search_form_handler:not(.hide_obsolete_data) .sfobs_hint { + display: none; +} +.search_form_handler.hide_obsolete_data .sfobs_hint { + display: inline-block; +} +.search_form_handler.hide_obsolete_data.no_auto_submit .sfobs_hint { + margin-left: 30px; +} +.search_form_handler .sf_title { + transition: opacity 0.3s, background-color 0.3s, color 0.3s linear; + padding: 8px 10px; + margin: 0; + color: #FFFFFF; + background-color: #1c94c4; + cursor: pointer; +} +.search_form_handler .sf_title .sft_hint, .search_form_handler .sf_title .sfobs_hint { + font-size: 8pt; + font-style: italic; +} +.search_form_handler .sf_title .sft_toggler { + margin-left: 0.7em; + transition: color 0.2s ease-in-out, transform 0.4s ease-in-out; +} +.search_form_handler .sf_title .sft_toggler:hover { + color: #F1F1F1; +} +.search_form_handler .sf_message { + display: none; + margin: 8px 8px 0px 8px; + border-radius: 0px; +} +.search_form_handler .sf_criterion_area { + /*display: none;*/ + padding: 8px 8px 3px 8px; + /* padding-bottom must equals to padding-top - .search_form_criteria:margin-bottom */ + background-color: #FFFFFF; +} +.search_form_handler .sf_criterion_area .sf_criterion_row { + position: relative; +} +.search_form_handler .sf_criterion_area .sf_criterion_row:not(:first-child) { + margin-top: 20px; +} +.search_form_handler .sf_criterion_area .sf_criterion_row:not(:first-child)::before { + content: ""; + position: absolute; + top: -12px; + left: 0px; + width: 100%; + border-top: 1px solid #CCCCCC; +} +.search_form_handler .sf_criterion_area .sf_criterion_row:not(:first-child)::after { + content: "or"; + /* TODO: Make this into a dict entry */ + position: absolute; + top: -20px; + left: 8px; + padding-left: 5px; + padding-right: 5px; + color: #808080; + background-color: #FFFFFF; + /* Must match .sf_criterion_area:background-color */ +} +.search_form_handler .sf_criterion_area .sf_criterion_row .sf_criterion_group { + display: inline; + /* Common style between criterion and more criterion */ +} +.search_form_handler .sf_criterion_area .search_form_criteria, .search_form_handler .sf_criterion_area .sf_more_criterion, .search_form_handler .sf_criterion_area .sf_button { + position: relative; + display: inline-block; + margin-right: 10px; + margin-bottom: 5px; + vertical-align: top; +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened, .search_form_handler .sf_criterion_area .sf_more_criterion.opened, .search_form_handler .sf_criterion_area .sf_button.opened { + margin-bottom: 0px; + /* To compensate the .sfc/.sfm_header:padding-bottom: 13px */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened .sfc_header, .search_form_handler .sf_criterion_area .sf_more_criterion.opened .sfc_header, .search_form_handler .sf_criterion_area .sf_button.opened .sfc_header, .search_form_handler .sf_criterion_area .search_form_criteria.opened .sfm_header, .search_form_handler .sf_criterion_area .sf_more_criterion.opened .sfm_header, .search_form_handler .sf_criterion_area .sf_button.opened .sfm_header { + border-bottom: none !important; + box-shadow: none !important; + padding-bottom: 13px; + /* Must be equal to .search_form_criteria:margin-bottom + this:padding-bottom */ +} +.search_form_handler .sf_criterion_area .search_form_criteria > *, .search_form_handler .sf_criterion_area .sf_more_criterion > *, .search_form_handler .sf_criterion_area .sf_button > * { + padding: 7px 8px; + vertical-align: top; + border: 1px solid #CCCCCC; + border-radius: 1px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); +} +.search_form_handler .sf_criterion_area .search_form_criteria .sfc_form_group, .search_form_handler .sf_criterion_area .sf_more_criterion .sfc_form_group, .search_form_handler .sf_criterion_area .sf_button .sfc_form_group, .search_form_handler .sf_criterion_area .search_form_criteria .sfm_content, .search_form_handler .sf_criterion_area .sf_more_criterion .sfm_content, .search_form_handler .sf_criterion_area .sf_button .sfm_content { + position: absolute; + z-index: -1; + min-width: 100%; + left: 0px; + margin-top: -1px; +} +.search_form_handler .sf_criterion_area .search_form_criteria .sfc_form_group .sfc_fg_buttons, .search_form_handler .sf_criterion_area .sf_more_criterion .sfc_form_group .sfc_fg_buttons, .search_form_handler .sf_criterion_area .sf_button .sfc_form_group .sfc_fg_buttons, .search_form_handler .sf_criterion_area .search_form_criteria .sfm_content .sfc_fg_buttons, .search_form_handler .sf_criterion_area .sf_more_criterion .sfm_content .sfc_fg_buttons, .search_form_handler .sf_criterion_area .sf_button .sfm_content .sfc_fg_buttons { + white-space: nowrap; + /* Criteria tags */ +} +.search_form_handler .sf_criterion_area .search_form_criteria { + /* Non editable criteria */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.locked { + background-color: #F1F1F1; +} +.search_form_handler .sf_criterion_area .search_form_criteria.locked .sfc_title { + user-select: none; + cursor: initial; + /* Draft criteria (modifications not applied) */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.draft .sfc_header, .search_form_handler .sf_criterion_area .search_form_criteria.draft .sfc_form_group { + border-style: dashed; +} +.search_form_handler .sf_criterion_area .search_form_criteria.draft .sfc_title { + font-style: italic; + /* Opened criteria (form group displayed) */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened { + z-index: 1; + /* To be over other criterion */ +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened .sfc_toggle { + transform: rotateX(-180deg); +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened .sfc_form_group { + display: block; +} +.search_form_handler .sf_criterion_area .search_form_criteria.opened_left .sfc_form_group { + left: auto; + right: 0px; + /* Add "and" on criterion but the one and submit button */ +} +.search_form_handler .sf_criterion_area .search_form_criteria:not(:last-of-type) { + margin-right: 30px; +} +.search_form_handler .sf_criterion_area .search_form_criteria:not(:last-of-type)::after { + /* TODO: Find an elegant way to do this, without hardcoding the content (could be a ").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+h>r&&l>s+h,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&l>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],l=[],h=this._connectWith();if(h&&e)for(s=h.length-1;s>=0;s--)for(o=t(h[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&l.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(l.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=l.length-1;s>=0;s--)l[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,l,h,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,h=r.length;h>s;s++)l=t(r[s]),l.data(this.widgetName+"-item",a),c.push({item:l,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t(" ",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,l,h,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(l=this.items[s].item.offset()[a],h=!1,e[u]-l>this.items[s][r]/2&&(h=!0),n>Math.abs(e[u]-l)&&(n=Math.abs(e[u]-l),o=this.items[s],this.direction=h?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,l=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.leftthis.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():l?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():l?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons")) +},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],l=r&&n.collapsible,h=l?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:l?t():a,newPanel:h};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=l?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!e.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,l=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=l.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=l.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("