/** * Dark Slim theme for elFinder 2.1.54 or newer. * Not supported MS IE! * * @author John Fort * @date 01.01.2021 * @link https://github.com/johnfort/elFinder.themes **/ /*************************************/ /* MAIN */ /*************************************/ /* Hard reset main rules */ div.elfinder{ font-size: 19px; } .elfinder-mobile{ font-size: 18px; } div.elfinder, .elfinder *{ font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Verdana', 'Helvetica', 'sans-serif'; outline: 0 !important; border: 0 !important; -webkit-border-radius: 0.001px !important; -moz-border-radius: 0 !important; border-radius: 0.001px !important; /* Fix (must be > 0) for 'select' elem in 'Opera' browser */ } .elfinder *{ -webkit-box-shadow: none !important; -moz-box-shadow: none !important; box-shadow: none !important; } .elfinder .elfinder-button-menu, .elfinder .elfinder-button-search-menu, .elfinder .elfinder-contextmenu, .elfinder .elfinder-contextmenu-sub, .elfinder-dialog, .elfinder .elfinder-quicklook{ -webkit-box-shadow: 0 5px 20px 2px rgba(0, 0, 0, .14), 0 6px 26px 5px rgba(0, 0, 0, .12), 0 8px 10px -5px rgba(0, 0, 0, .4) !important; -moz-box-shadow: 0 5px 20px 2px rgba(0, 0, 0, .14), 0 6px 26px 5px rgba(0, 0, 0, .12), 0 8px 10px -5px rgba(0, 0, 0, .4) !important; box-shadow: 0 5px 20px 2px rgba(0, 0, 0, .14), 0 6px 26px 5px rgba(0, 0, 0, .12), 0 8px 10px -5px rgba(0, 0, 0, .4) !important; } .elfinder .ui-icon, .elfinder .elfinder-toolbar *, .elfinder .elfinder-navbar *, .elfinder .elfinder-contextmenu *, .elfinder .elfinder-table-header-sticky *, .elfinder .elfinder-dialog-resize .elfinder-resize-handle *{ background-image: none !important; } .elfinder .ui-icon-gripsmall-diagonal-se{ font-size: initial; opacity: .6; } .elfinder a, .elfinder a:link, .elfinder a:visited{ color: #999; text-decoration: underline; } .elfinder a:hover, .elfinder a:focus, .elfinder a:active{ color: #ccc; text-decoration: underline; } /* Reset jquery-ui rules in elfinder container */ div.elfinder, .elfinder .ui-widget, .elfinder .ui-widget-header, .elfinder .ui-widget-content, .elfinder .ui-state-default{ color: #999; } div.elfinder, .elfinder .ui-widget, .elfinder .ui-widget-header{ background: #1d1d1d; } .elfinder .ui-widget-header{ padding: .4em .2em .4em .7em; font-weight: normal; } .elfinder-rtl .ui-widget-header{ padding: .4em .7em .4em .2em; } .elfinder .ui-widget-content{ background: #292929; } .elfinder .ui-state-default{ background: none; } .elfinder .ui-state-hover, .elfinder .ui-state-hover:hover, .elfinder .ui-state-hover:focus, .elfinder .ui-state-focus, .elfinder .ui-state-focus:hover, .elfinder .ui-state-focus:focus, .elfinder .ui-state-active, .elfinder .ui-state-active:hover, .elfinder .ui-state-active:focus{ color: #ccc; background: #4e4e4e; } .ui-selectable-helper{ border: 1px dashed #666; background: rgba(255, 255, 255, .05); } .elfinder .ui-tabs-nav{ padding: 0; } .elfinder-rtl .ui-tabs-nav li{ float: right; } .elfinder .ui-tabs-nav li.ui-state-default{ margin: 0; padding: 0; font-weight: normal; background: #222; } .elfinder .ui-tabs-nav li.ui-state-default a{ padding: 6px 10px !important; color: #666; text-decoration: underline; } .elfinder .ui-tabs-nav li.ui-state-hover a{ color: #999; } .elfinder .ui-tabs-nav li.ui-state-active{ background: #292929; } .elfinder .ui-tabs-nav li.ui-state-active a{ color: #999; text-decoration: none; cursor: default !important; } .elfinder .ui-tabs .ui-tabs-panel{ padding: 10px; } .elfinder .ui-checkboxradio-label{ background: #444 !important; } .elfinder-rtl .ui-checkboxradio-label .ui-widget{ float: right; } .elfinder .ui-checkboxradio-label.ui-state-active, .elfinder .ui-checkboxradio-label.ui-controlgroup-item:hover, .elfinder .ui-checkboxradio-label.ui-checkboxradio-radio-label:hover{ background: #333 !important; } .elfinder .ui-slider-horizontal.ui-widget.ui-widget-content{ margin: 0 8px; padding: 0; background: #3e3e3e; } .elfinder .ui-slider-horizontal .ui-slider-handle{ top: -.22em; background: #4e4e4e; } /* Reset form elements with jquery-ui */ .elfinder legend, .elfinder label{ font-weight: normal; } .elfinder label.ui-state-hover, .elfinder label.ui-state-hover:hover{ background: none; } .elfinder fieldset{ margin: 0 !important; padding: 2px 10px 10px !important; border: 1px solid #444 !important; border-radius: 8px !important; background: transparent !important; } .elfinder legend{ margin: 0 auto !important; padding: 2px 4px 2px !important; } .elfinder input, .elfinder button, .elfinder select, .elfinder textarea, .elfinder .elfinder-dialog-upload .ui-button, .elfinder .elfinder-resize-preset-container .ui-button{ -moz-appearance: none !important; -webkit-appearance: none !important; appearance: none !important; display: inline-block; margin: 0 !important; padding: 2px 3px !important; /* input, select, textarea */ vertical-align: middle; font-size: 13px !important; font-weight: normal !important; color: #999 !important; /* input, select, textarea */ background: #3e3e3e !important; /* input, select, textarea */ box-sizing: border-box !important; } .elfinder input, .elfinder .elfinder-dialog-upload .ui-button, .elfinder .elfinder-resize-preset-container .ui-button{ height: 28px !important; } .elfinder button, .elfinder input[type="button"], .elfinder input[type="reset"], .elfinder input[type="submit"], .elfinder .elfinder-dialog-upload .ui-button, .elfinder .elfinder-resize-preset-container .ui-button{ padding: 4px 12px !important; height: 28px !important; color: #999 !important; background: #444 !important; text-align: center !important; -webkit-user-select: none !important; -moz-user-select: none !important; user-select: none !important; } .elfinder select{ -moz-appearance: menulist !important; -webkit-appearance: menulist !important; appearance: menulist !important; height: 28px !important; } .elfinder textarea{ overflow: auto; } .elfinder input[type="radio"], .elfinder input[type="checkbox"]{ margin: 2px !important; width: 16px !important; height: 16px !important; vertical-align: middle !important; cursor: pointer !important; } .elfinder input[type="checkbox"]{ position: relative; } input[type="radio"]{ border-radius: 50% !important; } .elfinder input[disabled], .elfinder button[disabled], .elfinder select[disabled], .elfinder textarea[disabled], .elfinder input[readonly], .elfinder textarea[readonly]{ pointer-events: none; cursor: not-allowed !important; color: #888; -webkit-box-shadow: inset 1px 2px 3px rgba(0, 0, 0, .1); -moz-box-shadow: inset 1px 2px 3px rgba(0, 0, 0, .1); box-shadow: inset 1px 2px 3px rgba(0, 0, 0, .1); opacity: .4; } .elfinder button:hover, .elfinder input[type="button"]:hover, .elfinder input[type="reset"]:hover, .elfinder input[type="submit"]:hover, .elfinder .elfinder-dialog-upload .ui-button:hover, .elfinder .elfinder-resize-preset-container .ui-button:hover, .elfinder button:focus, .elfinder input[type="button"]:focus, .elfinder input[type="reset"]:focus, .elfinder input[type="submit"]:focus, .elfinder .elfinder-dialog-upload .ui-button:focus, .elfinder .elfinder-resize-preset-container .ui-button:focus{ background: #333 !important; } .elfinder button[disabled]:hover, .elfinder input[disabled][type="button"]:hover, .elfinder input[disabled][type="reset"]:hover, .elfinder input[disabled][type="submit"]:hover{ background: #444 !important; } .elfinder input:focus, .elfinder select:focus, .elfinder textarea:focus{ background: #4e4e4e !important; } .elfinder button:active, .elfinder input[type="button"]:active, .elfinder input[type="reset"]:active, .elfinder input[type="submit"]:active, .elfinder input[type="checkbox"]:active, .elfinder input[type="radio"]:active, .elfinder .elfinder-dialog-upload .ui-button:active, .elfinder .elfinder-resize-preset-container .ui-button:active{ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, .2) !important; -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, .2) !important; box-shadow: inset 0 2px 4px rgba(0, 0, 0, .2) !important; } .elfinder input[type="radio"]:checked{ border: 4px solid #3e3e3e !important; background: #888 !important; } .elfinder input[type="checkbox"]:checked:before{ content: ''; position: absolute; top: -5px; left: 7px; display: table; width: 5px; height: 14px; border: 2px solid #999; border-top: 0; border-left: 0; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); transform: rotate(45deg); } .elfinder button::-moz-focus-inner, .elfinder input::-moz-focus-inner{ padding: 0; } .elfinder input:-moz-placeholder, .elfinder textarea:-moz-placeholder, .elfinder input::-webkit-input-placeholder, .elfinder textarea::-webkit-input-placeholder{ color: #333 !important; } /* Effects */ @-moz-keyframes blink{ 0%{opacity: 1;} 50%{opacity: .2;} 100%{opacity: .8;} } @-webkit-keyframes blink{ 0%{opacity: 1;} 50%{opacity: .2;} 100%{opacity: .8;} } @keyframes blink{ 0%{opacity: 1;} 50%{opacity: .2;} 100%{opacity: .8;} } @-moz-keyframes spin{ 0%{-moz-transform: rotate(0deg);} 100%{-moz-transform: rotate(359deg);} } @-webkit-keyframes spin{ 0%{-webkit-transform: rotate(0deg);} 100%{-webkit-transform: rotate(359deg);} } @keyframes spin{ 0%{transform: rotate(0deg);} 100%{transform: rotate(359deg);} } /*************************************/ /* TOOLBAR */ /*************************************/ .elfinder .elfinder-toolbar{ padding: 4px 0; } .elfinder .elfinder-toolbar .elfinder-buttonset{ margin: 1px 5px; background: transparent; } .elfinder .elfinder-toolbar .elfinder-buttonset .elfinder-button.ui-state-hover{ background: none; } .elfinder .elfinder-toolbar .elfinder-button{ cursor: pointer; } .elfinder .elfinder-toolbar .elfinder-button-text{ margin: 0 0 0 4px; } .elfinder-rtl.elfinder-touch .elfinder-toolbar .elfinder-button-text{ margin: 0 4px 0 0; } .elfinder .elfinder-toolbar .elfinder-button-menu.elfinder-button-search-menu{ background: #292929; } .elfinder .elfinder-toolbar .elfinder-button-search{ margin: 1px 5px; min-height: 24px; background: transparent; } .elfinder .elfinder-toolbar .elfinder-button-search input{ height: 24px !important; padding: 0 22px !important; color: #999 !important; background: #292929 !important; font-size: 14px !important; -webkit-border-radius: 2px !important; -moz-border-radius: 2px !important; border-radius: 2px !important; box-shadow: inset 0px 0px 8px rgba(0, 0, 0, .2) !important; } .elfinder-touch .elfinder-toolbar .elfinder-button-search input{ padding: 0 24px !important; height: 28px !important; } .elfinder-toolbar-swipe-handle{ height: 40px; background: linear-gradient(to top, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, 0) 100%); } /*************************************/ /* STATUSBAR */ /*************************************/ .elfinder .elfinder-statusbar{ padding: 3px; padding-right: 18px; background: #292929; color: #666; } /*************************************/ /* WORKZONE */ /*************************************/ .elfinder .elfinder-workzone{ background: #333; } .elfinder .elfinder-workzone *{ font-family: 'Verdana', 'Tahoma', 'Arial'; } .elfinder .elfinder-workzone .elfinder-cwd-wrapper-trash .elfinder-cwd-message-board{ /* Trash */ background-image: linear-gradient(45deg, #00000008 25%, transparent 25%, transparent 75%, #00000008 75%, #00000008), linear-gradient(45deg, #00000008 25%, transparent 25%, transparent 75%, #00000008 75%, #00000008); background-size: 20px 20px; background-position: 0 0, 10px 10px; } .elfinder-cwd-wrapper{ color: #bbb; } .elfinder .elfinder-cwd-file.ui-state-hover, .elfinder .elfinder-cwd-file.ui-state-hover .ui-state-hover, .elfinder .elfinder-cwd-file.ui-state-hover .ui-state-active, .elfinder .elfinder-cwd-file.ui-selected, .elfinder .elfinder-cwd-file.ui-selected .ui-state-hover, .elfinder .elfinder-cwd-file.elfinder-droppable-active{ color: #f3f3f3; } .elfinder .elfinder-cwd-file.ui-state-hover, .elfinder .elfinder-cwd-file .ui-state-hover, .elfinder .elfinder-cwd-file.elfinder-droppable-active{ background: #444; } .elfinder .elfinder-cwd-file .elfinder-cwd-icon{ float: none; } .elfinder .elfinder-ui-progressbar{ background: #00821a; filter: none; } /* path in workzone (case of swipe to navbar close) */ .elfinder .elfinder-workzone-path{ padding: 3px; background: #252525; color: #666; } .elfinder .elfinder-workzone-path .elfinder-path-roots, .elfinder .elfinder-workzone-path .elfinder-path{ display: inline-block; position: relative; margin: 0; } /* view "icons" */ .elfinder .elfinder-cwd-view-icons .elfinder-cwd-file{ margin: 2px; } .elfinder .elfinder-cwd-view-icons .elfinder-cwd-file.ui-state-hover{ background: transparent; } .elfinder .elfinder-cwd-view-icons .elfinder-cwd-file.ui-state-hover .elfinder-cwd-file-wrapper, .elfinder .elfinder-cwd-view-icons .elfinder-cwd-file.ui-state-hover .elfinder-cwd-filename, .elfinder .elfinder-cwd-view-icons .elfinder-cwd-file.ui-selected .elfinder-cwd-file-wrapper, .elfinder .elfinder-cwd-view-icons .elfinder-cwd-file.ui-selected .elfinder-cwd-filename, .elfinder .elfinder-cwd-view-icons .elfinder-cwd-file.elfinder-droppable-active{ -webkit-border-radius: 3px !important; -moz-border-radius: 3px !important; border-radius: 3px !important; background: #444; } /* list view */ .elfinder .elfinder-cwd-wrapper-list{ padding-bottom: 1px; } .elfinder .elfinder-cwd table{ margin: 0; padding: 0; color: #bbb; } /* list view: header */ .elfinder .elfinder-cwd table thead tr{ background: #292929; vertical-align: top; } .elfinder .elfinder-cwd table thead td .ui-resizable-e, .elfinder .elfinder-cwd table thead td .ui-resizable-w{ top: 10%; margin: 0; width: 3px; height: 80%; } .elfinder .elfinder-cwd table thead td .ui-resizable-e{ right: 0; border-right: 1px dashed #444 !important; } .elfinder .elfinder-cwd table thead td .ui-resizable-w{ left: 0; border-left: 1px dashed #444 !important; } .elfinder-touch .elfinder-cwd table thead td .ui-resizable-e, .elfinder-touch .elfinder-cwd table thead td .ui-resizable-w{ border-width: 2px !important; } .elfinder .elfinder-cwd table thead td{ color: #666; } .elfinder .elfinder-cwd table thead td.ui-state-active{ color: #bbb; background: #333; } .elfinder .elfinder-cwd table thead td.ui-state-hover{ background: #2f2f2f; } .elfinder .elfinder-droppable-active .elfinder-table-header-sticky table{ border: 1px solid transparent !important; border-bottom: 0 !important; } /* list view: markers files */ .elfinder .elfinder-cwd-view-list .elfinder-perms, .elfinder .elfinder-cwd-view-list .elfinder-lock, .elfinder .elfinder-cwd-view-list .elfinder-symlink{ opacity: .9; transform: scale(0.6); } .elfinder-cwd-view-list .elfinder-perms, .elfinder-cwd-view-list .elfinder-symlink{ bottom: 0; } .elfinder-cwd-view-list .elfinder-lock{ top: 4px; } .elfinder-rtl .elfinder-cwd-view-list .elfinder-perms{ right: 8px; } .elfinder-rtl .elfinder-cwd-view-list .elfinder-lock{ right: -10px; } .elfinder-rtl .elfinder-cwd-view-list .elfinder-symlink{ right: -7px; } /* droppable */ .elfinder .elfinder-cwd-wrapper.elfinder-droppable-active{ outline: 1px dashed #666 !important; outline-offset: -1px; } /* in lazy execution status */ .elfinder.elfinder-processing.elfinder-touch .elfinder-workzone:after{ background: #666; -moz-animation: blink 1s infinite linear; -webkit-animation: blink 1s infinite linear; animation: blink 1s infinite linear; } /*************************************/ /* NAVIGATION PANEL */ /*************************************/ .elfinder .elfinder-navbar{ padding: 5px 3px; background: #252525; } .elfinder-ltr .elfinder-navbar{ padding-right: 10px; } .elfinder-rtl .elfinder-navbar{ padding-left: 10px; } .elfinder .elfinder-navbar .ui-resizable-handle{ width: 10px; background: none; } .elfinder .elfinder-navbar .ui-resizable-handle:before{ content: ''; position: absolute; top: 50%; right: 1px; width: 2px; height: 20px; margin-top: -10px; border: 1px solid #444; border-top: 0; border-bottom: 0; } .elfinder .elfinder-navbar .elfinder-tree{ margin: 0; } .elfinder-navbar-dir{ padding: 4px 12px; } .elfinder .elfinder-navbar .ui-state-hover, .elfinder .elfinder-navbar .ui-state-active{ background: #1f1f1f; } .elfinder .elfinder-navbar .elfinder-perms, .elfinder .elfinder-navbar .elfinder-lock, .elfinder .elfinder-navbar .elfinder-symlink{ opacity: 1; transform: scale(0.5); } .elfinder-touch .elfinder-navbar .elfinder-perms{ bottom: 6px; } .elfinder-ltr .elfinder-navbar-swipe-handle{ background: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, 0) 100%); } .elfinder-rtl .elfinder-navbar-swipe-handle{ background: linear-gradient(to left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, 0) 100%); } /*************************************/ /* NAVIGATION DOCK */ /*************************************/ .elfinder .elfinder-navdock .ui-resizable-n{ top: -7px; height: 14px; } .elfinder .elfinder-navdock .elfinder-quicklook{ padding-top: 32px; background: #272727; } .elfinder .elfinder-navdock .elfinder-quicklook-titlebar{ position: absolute; background: #1d1d1d; z-index: 1; } .elfinder-ltr .elfinder-navdock .elfinder-quicklook-title{ text-align: left; } .elfinder-rtl .elfinder-navdock .elfinder-quicklook-title{ text-align: right; } .elfinder .elfinder-navdock .elfinder-quicklook-preview{ height: 100%; background: #272727; } /*************************************/ /* CONTEXTMENU */ /*************************************/ .elfinder .elfinder-contextmenu-header{ font-size: 0.8em; } .elfinder .elfinder-contextmenu-header span{ font-weight: normal; font-size: inherit; } .elfinder .elfinder-contextmenu, .elfinder .elfinder-contextmenu-sub{ color: #999; background: #3e3e3e; } .elfinder .elfinder-contextmenu-item{ padding: 5px 30px; } .elfinder-touch .elfinder-contextmenu-item{ padding: 8px 30px; } .elfinder .elfinder-contextmenu-separator{ height: 0; border-top: 1px solid rgba(153, 153, 153, .1) !important; } .elfinder .elfinder-contextmenu-extra-icon a, .elfinder .elfinder-contextmenu-extra-icon span{ position: absolute; z-index: 1; } /*************************************/ /* BUTTON MENU */ /*************************************/ .elfinder .elfinder-button-menu{ background: #3e3e3e; } .elfinder .elfinder-button-menu-item-separated{ border-top: 1px solid rgba(153, 153, 153, .1) !important; } /*************************************/ /* DIALOGS */ /*************************************/ .dialogelfinder .dialogelfinder-drag{ font-size: 15px; font-weight: bold; } .dialogelfinder .dialogelfinder-drag-close{ position: relative; top: 6px; right: 6px; float: right; margin: 0; font-size: 16px; } .elfinder .elfinder-dialog{ background: #333; } .elfinder .elfinder-dialog .elfinder-dialog-title{ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .elfinder-touch .elfinder-dialog .ui-dialog-titlebar span.elfinder-dialog-title{ padding: 0; } .elfinder .elfinder-dialog .ui-resizable-se{ opacity: 0; } /* title buttons */ .elfinder .elfinder-dialog .ui-dialog-titlebar .elfinder-titlebar-button, .elfinder .elfinder-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right{ float: right; left: auto; right: 6px; top: 6px; height: auto; width: auto; margin: 0; padding: 0; padding-left: 5px; } .elfinder-rtl .elfinder-dialog .ui-dialog-titlebar .elfinder-titlebar-button, .elfinder-rtl .elfinder-dialog .ui-dialog-titlebar .elfinder-titlebar-button.elfinder-titlebar-button-right{ float: left; right: auto; left: 5px; padding: 0; padding-right: 5px; } .elfinder .elfinder-dialog .elfinder-titlebar-button .ui-icon{ height: 16px; width: 16px; opacity: 1; } .elfinder .elfinder-dialog .elfinder-titlebar-button:hover{ color: #ccc; } .dialogelfinder .dialogelfinder-drag-close:hover, .elfinder .elfinder-dialog .ui-dialog-titlebar-close:hover{ color: #c32020; } /* contents */ .elfinder .elfinder-dialog .ui-widget-content{ padding: 10px; } .elfinder .elfinder-dialog.elfinder-dialog-help > .ui-widget-content, .elfinder .elfinder-dialog.elfinder-dialog-help > .ui-widget-content > .ui-widget-content, .elfinder .elfinder-dialog.elfinder-dialog-preference > .ui-widget-content, .elfinder .elfinder-dialog.elfinder-dialog-preference > .ui-widget-content > .ui-widget-content{ padding: 0; } /* bottom buttons */ .elfinder .elfinder-dialog .ui-dialog-buttonpane{ padding: .5em; border-top: 1px solid #3e3e3e !important; } .elfinder .elfinder-dialog .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button{ margin: 0 0 0 .4em !important; } .elfinder-rtl .elfinder-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{ float: left; } .elfinder-rtl .elfinder-dialog .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button{ margin: 0 .4em 0 0 !important; } .elfinder .elfinder-dialog .ui-dialog-buttonpane button span{ padding: 0; } .elfinder .elfinder-dialog .ui-dialog-buttonpane button span.ui-icon{ padding: 0; } /* dialog: help/preference */ .elfinder .elfinder-dialog .elfinder-help{ margin: 0; } .elfinder .elfinder-dialog .elfinder-help .elfinder-help-logo{ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABgCAMAAADcrSdwAAACNFBMVEVHcEwjHhspIh4mIyMnIR4nIh4dGhgqJyEiGxYnJyclIh8oIh0hHRsnIiEkIB8iHx4eGBogICEhICALAAAjHhwjIB4jIB8lHx4iICEfHyEiIB4kHx0iHx4jHx4jICAhHh4mISAfFxIgGRQeFRElIR4jIB8gICH///8pIh7u7u3n5+bq6unl5eW60+vt7ezs7Ovv7+/o6Ojw8PAgICIXFxceHiDz8/IrJCAZGRoUFBXx8vEfFxIiIyUbGhwXFRUSERO2zeGoxd/L2uQODA20zeHI2eWQt9wdHB2qxuAaGBf39/fE1uMkHBdbV1UhGRX19fVBSFCTud4eHR50c3InJyn+/v67urrO3umryOOxyuDA2vLW1tWWu94mHxoJCAg1ODteXFsdFA+fnp2mxOD6+vrb29q50eScvt9VUlGtyeBqaGjFxcWiwt/BwMDMzMs9RExNV2ErLC7h4eFCPz0vMDPQ0M/JyMeesMCKiIeWveOamJepqKcvKSWysrFIRkU1LyudweNwbm04NDLE2OiTkpJIUFeEg4I+ODWko6JLTE5/fXw2PUMnIR1gdIaixOSPjo2+0uJ6eHhPSkd3g4+cu9fe3t2Upreov9PA1ea3t7awzOZkYmFofpOMobW60uevrq1VZna9z9yCn7qGpsV6mLWls719j6COsNKJmKSnuci+vb1NWmdXYGe+1++0ydlwi6ZsdoCzwsx+ipRha3JzfYdASlSVrMKWoqxteodlcn7J0NUhHh67pT+nAAAAJnRSTlMAuPMaZncKEPMTVXHSO6abBfjeAciASykw8SOSwehBsF/p3fiJazBiy+cAABBySURBVGjezZoHVxrbFsc1xhK7xhJji5oMIgQcZigDjuTaCIoQEUskCHIlEogaBY3dYOya2GKLGpOb3ttNW+/LvXNmQGcQk2feu2u9HVcWjMvzY//3Ofvssw9BQUe24PSTQf+0hWQeC/nHIWekx0JOR0ZGpsT/g5Ds/GMnjkvnTfmn/jfjnYhNOfDsdBoFGRyURnqfhKWc+C8Yp5Ow6HD/h+cwCtKzOhrlfZJsyj2b+ruMrEREhSX7PTyZQUM6eK5070fJqfaM5mWnhP1WgNPEYrM+zU/51ASEgvTK7dn0k1hpR2XPgksbHXVkzMlkTK//9NGsCmZPolDMC6l0RFPLJSZvVifXVfJ3l01H1SwsDiMN3xoaXsiQM6xfJPkgrZO58JPHZ0zZdHK5XNLqiT6iJyHBGG5+2lBSUvIGT9xbemGnY6ISEPE8DRnIywKjnlEMVMohZHUq7miMU9FY8aWPkFHysUtM/XF4Vmh2YhqCIUjREA1xSvNyg5NzlwvkImC6elPkkRgpmUjxm0cUo6ThE56QFZYSl4hgAABMVm2PgBCdvHdgyT7aMlgJGaLKvogjJZtzCWLZhyqaUVJSNSFLjEZoADSldYuGiHSVOoFxk3ZELqjO8KbNE3FRv0TEp2Mq5FPJnjU8LRLvIxCxYdXihcCxJTqKIZIYR5N9UmtMv6KcyMZkXd+8bjQ0gBcNfxfvMxB8q656H7JnOquCzkBncsZ2a7VRv8okcFqVl5eUA8i3lZcN5SWPOsl9iHKXEwgiGTflgsCHpSvsPa08z08pWYlY8cxHyKgCg3+WKbsAsOGbWOxj6N0FASEiebtdGxcTrFni60QS9GeUM2nUtCovryopb/g4QQB1ZqoA8fOeYISHQ8vVUSkXFTJMpEMXpHlDVrkcvJGjnvmok4dlEjitSsqrqsqrGp6acThq8QoQ7KPZJxixSUHOSQeN3VydTs7AyHWb9nodTdYZRxPDDskkYsOncgpRUv7CIKP1KXpaUgWzC2XkmJCChEpNQ1PVs8M2iY7hj4TnhYoKaw9ZmvHZGP65oQpaedXfpB5MV5yEgi0C7hucdmSJ44Xkz5s0Cu2Yp17IwPhe6Qa0yYclrESx4WY5RflAgFCTBssMCQUrryp/2aWnIK/2IJSZFBr7MFdSyDZdvTT4sALgZFaCrPMdpHw0gCH1Xb2cygUcCgYon6ArpEvOhgDTaLd6JFymSYyu3J+kmGSs+DNU6yUGHFECaThctx7BJx5VVT2aUINHfZwDkPx8xWi9nMEQ8bciYn6WUoIR8gVwZXECp/XnCACEFuxmkRghrYOzA5X+kPzScR0DIp9tCf35gs9UuV/eXrx9s0gP5HLW6fqgSnrD09tVtz8UI5hYqezg+EE0pgVeIRNSPxTrWyOBIxOJQXEWb8N8RRZVj9DrQz3xaKPq3RwJV7zQD6Kd2pSI2DEZ1x6nJlJKelJgn9Kx4r9vL248ugRCIJb51mDxCnDvmx5OuXYaotWa5gFivsVi1HEFLCvkWXJSY0KDc7RjU5kBS7KwDDG25hVs36Bgixswu5CuV3a44j2eEZPCpDX1oXKBv0mcQxEK6fLsrm3YdPwQwci59Q1aMEaGn3i0uLEOswtJSo+Fg9yl47fXTlVvygsFB03eV23tQCUSecFyUnzgdQ+S5OLi4jso2L5Rgr2gvJs/lnoOQArlom6BRBDIuKhQJ4cigqUfaDZnwV1Q9mxjcWOtSMwS7ObtjZdmFfUmM/Nf490SkaDQLxpyn3Rc7y9ExrFANUw2hKgMNwHlO0sw9cTNz10ARuI4TooRmXnSKPFntDv9AySfDVBfgCqUCsGld4tX33XKmBQxgpME0TVi2aoeMRAEqXQP8ERshnSol02RC/s07O0rPiQ1Nd1bMxT/eHB1Yw1jCobolV1L9XwdSCy61WFHEUESWzbGmKLVEY22GmV4JxLVV5uSmEE5dTY6DcPEXtOrXmxc2PjAFIxEJlc5+2b04KRyxsigeBQgj03vTYVCSY8nP5NZhYfEJSAkri/aM7H55VWWYITLyWFaXd1uF0nM2ERC7+IY0MIcM9Ltg6wujOalh7ALCBkysbJ2k2HrFy482BeMmOmGQ1f2TE8u9Q0a6+CbnjEZscUTCKGBgJiolDwop94XGl152axjR2SaWD2xVvbgKtMuAHvgEwwf4YNRW3dnZM3QEEs7RQG+DFCDckFA6FRmEQroB65g9tpI0yN/X35woeyAXfAKpjf0gDFRh7LU/eb7yocbhmZ8EswAzrCMdBsLoSMLLXS+nJd2iChXuI7oePa2iz17UBbQrq4ZoGDKcTAif6bZsLL+tqmp6fz6D3GpA84zD6GchK4IqrW+LWxAQus3nneasevGYuSnQxhAwRsgu5BmAYejszTP3Wx6ex7a26YdQ+ksCIyxiByzAX3kkwpf6ndwaciwhnF0jknA35SVXYZWdvUyy66tv7hRBJY35Yi11P2y6bzPmnbEOIhLnYMgYKgLO4bmvbWFq5sKSmGvJjc4PTQy5jQ8QMeKu14CRtnlsrK1zxOXmNbZhSuVZlCoGMFub1Y+22cAyo9SSyuHs0kQtSIeTyi0aPaCwuUBE6zWbi1PDZkUEYmhQSFp+A/agbIVsbKUbYTBPm0cw0eA/Julc2UMxvm36wY9YHd34TMFQh5P3ufTS1MPoeBHIOTbOuqnJ4cyglIQ/dp9yLi/o5IZJofrmdbb3cox6gkHUGu2+TvTEUC50TwNFs4I7rYJAGTaBwErhWJA9wRckc42GhwUqzevX7527drlstfFBvaips0JJhAQ31L6gg1p+t5MPScMPQAi2vVNrxarnMcwgRFAEsnOiwBx7fL6nHIrAINTTygXwDq0E2t+kE/NteDXDqKoFwRBNKzxQQZEByCZFOTatcb1OcJeFwDSTsCarq5aueMHWWmeBb/eIoo6BCxIAE8yVHPrEHLt/pticlx+ENJBEvAT1zav+MXkc/MA8HAG7zJCyOCeXNNMiEAEY3IOKfp6n4LsYCTuctQybWlhk8/vwu1grk43T7AZl81EL4fDc+Mj3XB2jbf4ZtewVy5w/oLza3AoOOhUQvHK/YvQ7j8zFPvP4VLC7XCTBpCBuw0kKyhNz5RwZjtxwiGAn9jh9WQ+3ymgGN3WhSVqpUjjguKTVHPXGylK49cfr2+w7FKXGsfBih+k5nDn5beMZeIuBTOYM6lUDohQVGibMnlX/JRNiAITdGjycqKD48CaD4NdMnybduVi4/1Gll38496zCVAGyaBeBebS12U+X5rWO0urgSPoGAlmMIoWDuytxWqUByGFm5rjJ/bycHi02LBz/4+LgeyPxvvfYflFDIMP3WsovfT1fFMTyMMPdsylLrgZLyiBWmBIoWUv7n0iyEBFA3mp7JrR/LXxj4DWuENVX6QLhcvS3Cy+8Wzt69rKF7x5xgZ3LQOJtHPBkNwlX9xNr7gURODJZbUW4zC1eScw5XonVUeKCUcl3FGWipqbCZmyudm9IALvhTMy5RJ0BBX2jtIx0Sx3Uwxe9wh7ZwwLxkjD9r3Gxj/9rfGOr15RLkEKxzbgmBmZ8QzCzZgjsBAyFx1mlGul9WoZL6TeC3uGckJZp+zwbEyvntv+eu860wBjZ7+2Jzw8enG26lrpFzY7QXa10+KAj14LQ28aM9JQtOBVtSY6ktkxiD+bgKnwornO/a3k9b0//7zHLLoJ12YrIxFIpt04aRguRH2Q1WUtDLsPinL50y5FMKvezspOwBC9SkXSJit+1nh9Xyy6usOrdwvo7Na6ah0hSMJcvzckiLRzyKRxGXn7T7g2/9Ir6NS5uNjYDN955OGf1+/usA5CiJrECbdldtw6vmQ3KGUy2VaPAGUY16pQDHKZT3jcDsf8wRNdSBr9oedAeO6xTyiqG3NqUg/2Y6WSkIlx0r6L8lC2jQ/4P5H35QVo6cfBiltc9Nfd63fZYqkvtd179kWFILAhgukdm3wu6m8Cgd8Dns0VHKBbdAqeHdR37rbd/Yt9aoTc6xMkIhsZS4g8K3WCdS0QCngFaCADtStNndYGbOTEYoj6y0GxiiF3Ww2aqQJLRNgZqVMutFkdfUZBQQATWCedq+AToPzq3IAdqRhMb3gMBryDs2ZWJ+A+BsWRcphD9bvGrbUurbZlaliAHmDwesZapCO1gz28V/mBu0Ugx2wfEAsGqa0NFpNKK32OB30omEc08318nh8DRT15Z0IzcrSjFnvE6UCM45j6RltbGyWWTKnUM8R6D1sHpNnJ6kjMK8BE9hNrUHOWbkhER8QGbKCnqdzPb7XdgjNLZp8ed5NesdrantNHXxIDbXRmb0U7Nczyhdc7luTNv/GpgRoSYUmI6j1gQLHIGZBoX+lpscCzh96JAC8EWF0ik2mQx9831NNy/KddItBZeQjEuvLF19zSwSZE8R3AeIL4Dl35/pCWASG/YO8f6pxK/FnbHrY8nrddaXsMT3Gglw0yLTieqDsr2toqvB1oUinLPxbOgMy3jE0XFDA84QuGD+8Owm6XGHty6wqA0Nthn7HXLgNigWe36OUvJkbGncsR+xCTYmgWBJ7P8ITPFy5ozx56+wP2rjuAAexhMaQQRaQMLv9bV9r+gl1JRI8MgOqv2guZ1yg0rskOsOT8rIDv0EYe2oFE9Nv9FKTiIUlFHDa4OiuuXKmBHUhErIf1BA3RKjSjy0u7NiYC5BHvC+NIZuphdzOYWH8HjFhTc6V/u0jlXYZP+mv6t6mZRU0FjgDIFSWdnd7s6ObxmMEQdtR2CL0vXw0lhR16yyRWP6yAlJr+J25qYPWd/porj92QqB8DG3Cd1ZwP+11OkZ9MKDo41TLyiqIUoH35sfGH35eBbtDzforyGBYq6s7n4OVrikfV3btKkoK0+0WC11Nrig7NHLICyQrQSW1s2M9u/sC4j2nK89fqYgMU672KWiLKaXhMwZFAkALrWF76iaDUJM3SKq9gUhP70+vA0ARM7X7SXwGspuL9nSdXKmqez6l89zMcuYvcg3Tz93/QpRbqPjI8TmHv7dPG/uLKMTINFGHvKUpFf38N+M+XT0AChqc3tifeyKP1895cci5iND/2l9eaMYmYCtmuqfBazRPfxRl1PnWKiXkvBGyAvNUePuUJ3+bK9v19dOx/cHV6OgPTkw8rfJgv6rSMBHjJqDfA8tdpGaIhqx2b1qXl0Ve0SwWOHF/pG/YffeUgHG7Br59TFLBEsKigU6EZCbCIhNVdnT0CQrgD8yZFTlLEFp/yhWdVZB3tWjb+LJi8Xx4DSs3jLjG9rEA+QIiFuj1IYV9eVExIULKGzvOocyj5qDflx8Ekm/sLhP+1OiHGe4zBQH702Ki0AiCC2hwIP5G7bKOCwrcnHfmbJiDHkF3v+9+TWLovoLDuIwwOq4uKCc9C97POaMeBKzx++3Lg/fxXN9kqw/acKtG3g55MScNgslfSs6t7mT5/xCeN9XBtgxZpRPZvfB8D5Bg9qccYd/4x0Ri9M0KIzde7ztJ4Flya3LO/9w0TmGOwbKbQJ0ITMQyTHgsDCbJjyFdJx85rk47//rdKQrE0v20hPCU5Njsq6Jy0fnfvJvH02az/6ss4Zw65wj0nHR3Nj/mnv0+UmZmZER70f2X/Bu5wnCihP08lAAAAAElFTkSuQmCC') center center no-repeat; } .elfinder .elfinder-dialog .elfinder-help .elfinder-help-team{ border-bottom: .5px solid #404040 !important; } .elfinder .elfinder-dialog .elfinder-help .elfinder-help-shortcuts{ background: none; color: #999; } .elfinder .elfinder-dialog .elfinder-preference dl{ margin: 0; } .elfinder .elfinder-preference dd label{ margin: 3px; } /* dialog: notify/error/confirm */ .elfinder .elfinder-dialog-notify .ui-dialog-titlebar{ padding: 0; height: 20px; } .elfinder.elfinder-touch > .elfinder-dialog-notify .ui-dialog-titlebar{ height: 30px; } .elfinder > .elfinder-dialog-notify .ui-dialog-titlebar .elfinder-titlebar-button{ top: auto; } .elfinder.elfinder-touch > .elfinder-dialog-notify .ui-dialog-titlebar .elfinder-titlebar-button{ top: auto; bottom: -.8em; } .elfinder .elfinder-dialog-notify .elfinder-notify{ padding: .5em 32px; border-bottom: .5px solid #3e3e3e !important; } .elfinder .elfinder-dialog-notify .elfinder-notify:last-child{ border: 0 !important; } .elfinder .elfinder-dialog-notify .elfinder-notify .elfinder-notify-progressbar{ background: #3e3e3e; } .elfinder .elfinder-dialog-notify .elfinder-notify .elfinder-notify-progressbar .elfinder-notify-progress{ background: #00821a; } .elfinder .elfinder-dialog-notify .elfinder-notify-cancel{ position: absolute; top: 50%; right: 0; margin-top: -8px; } .elfinder-rtl .elfinder-dialog-notify .elfinder-notify-cancel{ left: 0; right: auto; } .elfinder .elfinder-dialog-notify .elfinder-notify-cancel:hover{ color: #c32020; } .elfinder .elfinder-dialog-confirm .ui-dialog-content, .elfinder .elfinder-dialog-error .ui-dialog-content{ min-height: 52px; } .elfinder-ltr .elfinder-dialog-confirm .ui-dialog-content, .elfinder-ltr .elfinder-dialog-error .ui-dialog-content{ padding-right: 46px; } .elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content, .elfinder-rtl .elfinder-dialog-error .ui-dialog-content{ padding-left: 46px; } .elfinder .elfinder-dialog-confirm .elfinder-dialog-icon, .elfinder .elfinder-dialog-error .elfinder-dialog-icon{ top: 26px; left: auto; right: 10px; } .elfinder-rtl .elfinder-dialog-confirm .elfinder-dialog-icon, .elfinder-rtl .elfinder-dialog-error .elfinder-dialog-icon{ left: 10px; right: auto; } .elfinder .elfinder-dialog-confirm .elfinder-dialog-confirm-encoding{ padding: 0 0 .5em 0; } /* dialog: info/delete */ .elfinder .elfinder-dialog .elfinder-info-title .elfinder-cwd-icon, .elfinder .elfinder-dialog .elfinder-rm-title .elfinder-cwd-icon{ position: relative; } .elfinder .elfinder-dialog .elfinder-info-tb{ margin: 0; } .elfinder .elfinder-dialog .elfinder-info-tb span{ /* md5/sha256: Calculate */ float: none; } /* upload */ .elfinder .elfinder-dialog-upload .elfinder-upload-dropbox{ border: 2px dashed #555 !important; } /* file-edit */ .elfinder .elfinder-dialog-edit .elfinder-edit-editor{ padding: 0 .5em; background: #333; } .elfinder .elfinder-dialog-edit .elfinder-edit-editor .elfinder-file-edit{ height: 100%; color: #999 !important; background: #444 !important; } .elfinder .elfinder-dialog-edit .elfinder-edit-extras{ margin: 0; } .elfinder-rtl .elfinder-dialog-edit .ui-dialog-buttonpane .elfinder-edit-extras{ float: right; } /* batch rename */ .elfinder .elfinder-rename-batch-preview{ min-height: unset; } /* chmod */ .elfinder .elfinder-dialog-chmod table{ margin-bottom: 10px; } /* quicklook */ .elfinder .elfinder-quicklook{ padding: 0; background: #1d1d1d; } .elfinder .elfinder-quicklook-titlebar{ position: relative; padding: .4em .4em .4em .7em; height: auto; font-size: .82em; background: none; box-sizing: border-box; } .elfinder .elfinder-quicklook-titlebar-icon{ top: 0; left: auto; right: 0; bottom: 0; height: auto; margin: 0; } .elfinder-rtl .elfinder-quicklook-titlebar-icon{ left: 0; right: auto; } .elfinder .elfinder-quicklook .elfinder-quicklook-titlebar-icon .ui-icon{ float: right; margin: 0; padding: 0 .4em 0 0; height: 100%; opacity: 1; } .elfinder-rtl .elfinder-quicklook .elfinder-quicklook-titlebar-icon .ui-icon{ float: left; padding: 0 0 0 .4em; } .elfinder .elfinder-quicklook-titlebar-icon .ui-icon:hover{ color: #ccc; } .elfinder .elfinder-quicklook-titlebar-icon .elfinder-icon-close:hover{ color: #c32020; } .elfinder .elfinder-quicklook-title{ display: inherit; font-size: inherit; line-height: 1.3; text-overflow: ellipsis; } .elfinder-touch .elfinder-quicklook-title{ padding: 4px 0; } .elfinder .elfinder-quicklook-preview{ height: calc(100% - 72px); background: #333; } .elfinder-touch .elfinder-quicklook-preview{ height: calc(100% - 80px); } .elfinder .elfinder-quicklook-preview .elfinder-quicklook-preview-text-wrapper, .elfinder .elfinder-quicklook-preview .elfinder-quicklook-preview-text-wrapper pre.elfinder-quicklook-preview-text, .elfinder .elfinder-quicklook-preview .elfinder-quicklook-preview-text-wrapper pre.elfinder-quicklook-preview-text.prettyprint, .elfinder .elfinder-quicklook-preview .elfinder-quicklook-preview-archive-wrapper, .elfinder .elfinder-quicklook-preview .elfinder-quicklook-preview-html, .elfinder .elfinder-quicklook-preview .elfinder-quicklook-preview-pdf, .elfinder .elfinder-quicklook-preview .elfinder-quicklook-preview-iframe{ background: none; color: inherit; font-size: inherit; } .elfinder .elfinder-quicklook-navbar{ width: auto; font-size: 140%; } .elfinder .elfinder-quicklook .ui-resizable-se{ right: 1px; bottom: 1px; width: 16px; height: 16px; } .elfinder .elfinder-quicklook-fullscreen{ z-index: 1002; } .elfinder .elfinder-quicklook-fullscreen .elfinder-quicklook-preview{ height: 100%; } .elfinder .elfinder-quicklook-fullscreen .elfinder-quicklook-navbar{ bottom: 0; } /* resize */ .elfinder .elfinder-resize-container{ margin: 0; } .elfinder .elfinder-resize-container fieldset .ui-button{ width: 49%; } .elfinder .elfinder-resize-container .elfinder-resize-rotate-slider{ width: 204px; } .elfinder .elfinder-resize-preview{ padding: 5px; background: linear-gradient(#ffffff1a 1px, transparent 1px), linear-gradient(90deg, #ffffff1a 1px, transparent 1px); background-size: 16px 16px; background-position: center; } .elfinder .elfinder-resize-loading{ background: transparent; -moz-animation: blink 1s infinite linear; -webkit-animation: blink 1s infinite linear; animation: blink 1s infinite linear; } .elfinder .elfinder-resize-preview img{ padding: 1px; background-color: rgba(255, 255, 255, .05); } .elfinder .elfinder-resize-preview .elfinder-resize-handle.ui-draggable{ box-sizing: border-box; border: 1px dashed #000 !important; } .elfinder .elfinder-resize-handle-point{ background: rgba(255, 255, 255, .7); border: 1px solid #111 !important; } .elfinder .elfinder-dialog-resize .ui-draggable-handle{ background: none !important; } /*************************************/ /* OVERLAYS */ /*************************************/ .elfinder-overlay{ background: #000; opacity: .5; } /*************************************/ /* TOAST */ /*************************************/ .elfinder .elfinder-toast{ top: 66px; } .elfinder-rtl .elfinder-toast{ right: auto; left: 12px; } .elfinder .elfinder-toast > div{ padding: 10px 10px 10px 44px; float: right; clear: both; -moz-border-radius: 2px !important; -webkit-border-radius: 2px !important; border-radius: 2px !important; } .elfinder-rtl .elfinder-toast > div{ padding: 10px 44px 10px 10px; float: left; } .elfinder .elfinder-toast > div > div{ display: none; } .elfinder .elfinder-toast > div > div.elfinder-toast-msg{ display: block; } .elfinder .elfinder-toast > .toast-info{ color: #ddf6ff; background: #1384a5 !important; } .elfinder .elfinder-toast > .toast-warning{ color: #fff1dd; background: #d07a00 !important; } .elfinder .elfinder-toast > .toast-success{ color: #ddffdd; background: #278827 !important; } .elfinder .elfinder-toast > .toast-error{ color: #ffdfdd; background: #a91811 !important; } /*************************************/ /* ICONS */ /*************************************/ @font-face{ font-family: 'elfinder'; font-style: normal; font-weight: normal; src: url('../img/elfinder.woff2') format('woff2'), url('../img/elfinder.woff') format('woff'), url('../img/elfinder.svg') format('svg'), url('../img/elfinder.ttf') format('truetype'), url('../img/elfinder.eot') format('embedded-opentype'); } .elfinder .ui-icon, .elfinder .elfinder-button-icon, .elfinder .elfinder-navbar-icon, .elfinder .elfinder-navbar-arrow, .elfinder .elfinder-spinner, .elfinder .elfinder-dialog-icon, .elfinder .elfinder-notify-cancel button, .elfinder .elfinder-symlink, .elfinder .elfinder-perms, .elfinder .elfinder-lock, .elfinder .elfinder-drag-helper-icon-status, .elfinder .elfinder-contextmenu .elfinder-contextmenu-item .ui-icon, .elfinder .elfinder-contextmenu .elfinder-contextmenu-item .elfinder-button-icon, .elfinder .elfinder-contextmenu .elfinder-contextmenu-item .elfinder-contextmenu-arrow, .elfinder .elfinder-cwd-icon, .elfinder-quicklook-navbar-icon{ display: flex; justify-content: center; align-items: center; min-width: 16px; background: none; text-indent: 0; } .elfinder .elfinder-toolbar .elfinder-buttonset .elfinder-button-icon{ float: left; } .elfinder-rtl .elfinder-toolbar .elfinder-buttonset .elfinder-button-icon{ float: right; } .elfinder .elfinder-toolbar .elfinder-button-search .ui-icon{ margin: -9px 4px 0 4px; color: #999; opacity: 1; } .elfinder .elfinder-toolbar .elfinder-button-search .ui-icon:hover{ color: #ccc; } .elfinder-ltr.elfinder-touch .elfinder-toolbar .elfinder-button-search .ui-icon, .elfinder-touch .elfinder-toolbar .elfinder-button-search .ui-icon-close{ transform: scale(1.25); } .elfinder-rtl.elfinder-touch .elfinder-toolbar .elfinder-button-search .ui-icon-search{ transform: scale(-1.25, 1.25); } .elfinder-rtl .elfinder-button-menu-item .ui-icon{ left: auto; right: 2px; } .elfinder-button-menu-item .ui-icon, .elfinder .ui-checkboxradio-icon, .elfinder .elfinder-quicklook-navbar .elfinder-quicklook-navbar-icon-close, .elfinder .ui-resizable-disabled .ui-resizable-handle, .elfinder .ui-resizable-autohide .ui-resizable-handle{ display: none; } .elfinder-button-menu-item-selected .ui-icon, .elfinder .elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close{ display: flex; } .elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-n, .elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-s{ display: none; } .elfinder-touch .elfinder-button-icon.elfinder-contextmenu-extra-icon{ transform: scale(1.25); } .elfinder .elfinder-navbar .elfinder-tree .elfinder-spinner{ margin: -10px 0 0; } .elfinder-ltr .elfinder-navbar-icon{ left: 15px; } .elfinder-rtl .elfinder-navbar-icon{ right: 15px; } .elfinder .elfinder-spinner{ display: inline-block; float: none; vertical-align: text-top; } .elfinder .elfinder-dialog-icon{ /* error, confirm */ font-size: 30px; } .elfinder .elfinder-dialog-notify .elfinder-dialog-icon{ left: 0; font-size: 18px; -moz-animation: blink 2s infinite linear; -webkit-animation: blink 2s infinite linear; animation: blink 2s infinite linear; } .elfinder-rtl .elfinder-dialog-notify .elfinder-dialog-icon{ left: auto; right: 0; } .elfinder .elfinder-perms{ font-size: 20px; border-radius: 50% !important; background: #fff; } .elfinder .elfinder-cwd-view-list .elfinder-cwd-icon{ background: none !important; } .elfinder .elfinder-quicklook-navbar-icon:hover{ color: #ccc; } /* Add elements of icons (before/after) */ .ui-icon:before, /* jquery-ui, use anywhere */ .elfinder-button-icon:before, /* use in toolbar, contextmenu */ .elfinder-navbar-icon:before, /* use in navbar */ .elfinder-navbar-arrow:before, /* use in navbar */ .elfinder-spinner:before, /* use in navbar, dialogs (info, confirm, upload, edit, quicklook) and may be other places */ .elfinder-symlink:before, /* use in workzone */ .elfinder-lock:before, /* use in workzone */ .elfinder-perms:before, /* use in navbar, workzone */ .elfinder-drag-helper-icon-status:before, /* use when drag files */ .elfinder-contextmenu-arrow:before, /* use in contextmenu */ .elfinder-cwd-icon:after, /* use in workzone */ .elfinder-dialog-icon:before, /* use in dialogs: confirm, error, notify */ .elfinder-notify-cancel button:before, /* use in dialogs: notify */ .elfinder-quicklook-navbar-icon:before, /* use in dialogs: quicklook */ .elfinder .elfinder-toast > div:before /* use in toasts */ { /* content: '\e000'; */ /* for debug */ display: inline-block; background: none; font-family: 'elfinder'; font-style: normal; font-weight: normal; line-height: 16px; text-align: center; text-decoration: none; /* For safety - reset parent styles, that can break glyph codes */ font-variant: normal; text-transform: none; /* Font smoothing. That was taken from TWBS */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Superstructure elements */ .elfinder-button-icon-spinner:before, .elfinder-spinner:before{ -moz-animation: spin 1.5s infinite linear; -webkit-animation: spin 1.5s infinite linear; animation: spin 1.5s infinite linear; } .elfinder .elfinder-cwd-icon:before{/* type lable cwd-icon */ top: 2px; left: -4px; padding: 2px 4px; font-family: 'Trebuchet MS'; font-weight: bold; color: #999; background-color: #202020; box-shadow: 1px 1px 1px rgba(255, 255, 255, .5); z-index: 1; } .elfinder .elfinder-info-title .elfinder-cwd-icon:before, .elfinder .elfinder-rm-title .elfinder-cwd-icon:before, .elfinder .elfinder-quicklook .elfinder-cwd-icon:before{/* cwd-icon lable type */ left: -4px; right: auto; } .elfinder .elfinder-toast > div:before{ position: absolute; left: 10px; top: 11px; font-size: 160%; } .elfinder-rtl .elfinder-toast > div:before{ left: auto; right: 10px; } /* Contents of news elements */ /* jquery-ui icons */ .elfinder .ui-icon-close:before{ content: '\e84c'; } .elfinder .ui-icon-closethick:before, .elfinder .elfinder-notify-cancel .elfinder-notify-button:before{ content: '\e81b'; } .elfinder .ui-icon-check:before{ content: '\e80f'; font-size: 110%; } .elfinder .ui-icon-caret-1-n:before{ content: '\e837'; } .elfinder .ui-icon-caret-1-s:before{ content: '\e836'; } .elfinder .ui-icon-search:before{ content: '\e81a'; } .elfinder .ui-icon-triangle-1-n:before, .elfinder .ui-icon-arrowthick-1-n:before{ content: '\f176'; } .elfinder .ui-icon-triangle-1-s:before, .elfinder .ui-icon-arrowthick-1-s:before{ content: '\f175'; } .elfinder .ui-icon-gripsmall-diagonal-se:before{ content: '\e803'; } .elfinder .ui-icon-plusthick:before{ content: '\e802'; } .elfinder .ui-icon-arrowreturnthick-1-s:before{ content: '\e806'; } .elfinder .ui-icon-minusthick:before{ content: '\e81e'; } .elfinder .ui-icon-pin-s:before{ content: '\e811'; } .elfinder .ui-icon-arrowrefresh-1-n:before{ content: '\e81f'; } .elfinder .ui-icon-unlocked:before{ content: '\e854'; } .elfinder .ui-icon-locked:before{ content: '\f13e'; } /* main icons */ .elfinder-button-icon-accept:before{ content: '\e810'; } .elfinder-button-icon-archive:before{ content: '\e827'; font-size: 110%; margin-left: -2px; } .elfinder-button-icon-back:before{ content: '\f007'; } .elfinder-button-icon-chmod:before{ content: '\e846'; } .elfinder-button-icon-copy:before{ content: '\e807'; } .elfinder-button-icon-colwidth:before{ content: '\f0db'; } .elfinder-button-icon-cut:before{ content: '\e801'; } .elfinder-button-icon-dir:before{ content: '\f114'; } .elfinder-button-icon-download:before{ content: '\e809'; } .elfinder-button-icon-duplicate:before{ content: '\e822'; } .elfinder-button-icon-edit:before{ content: '\e81c'; } .elfinder-button-icon-empty:before{ content: '\e829'; } .elfinder-button-icon-extract:before{ content: '\e825'; font-size: 110%; margin-left: -2px; } .elfinder-button-icon-forward:before{ content: '\f006'; } .elfinder-button-icon-fullscreen:before{ content: '\e802'; } .elfinder-button-icon-getfile:before{ content: '\f245'; } .elfinder-button-icon-help:before{ content: '\e80b'; } .elfinder-button-icon-home:before{ content: '\e800'; } .elfinder-button-icon-hide:before{ content: '\e80c'; } .elfinder-button-icon-info:before{ content: '\f086'; } .elfinder-button-icon-link:before{ content: '\f08e'; } .elfinder-button-icon-mkdir:before{ content: '\f114'; } .elfinder-button-icon-mkdirin:before{ content: '\e828'; } .elfinder-button-icon-mkfile:before{ content: '\f0f6'; font-size: 85%; } .elfinder-button-icon-menu:before{ content: '\e819'; } .elfinder-button-icon-netmount:before{ content: '\f0a0'; font-size: 110%; } .elfinder-button-icon-netunmount:before{ content: '\e818'; font-size: 85%; } .elfinder-button-icon-open:before{ content: '\f115'; } .elfinder-button-icon-opendir:before{ content: '\f115'; } .elfinder-button-icon-opennew:before{ content: '\e824'; } .elfinder-button-icon-paste:before{ content: '\f0ea'; } .elfinder-button-icon-places:before{ content: '\e81d'; } .elfinder-button-icon-preference:before{ content: '\f1de'; } .elfinder-button-icon-quicklook:before{ content: '\e812'; } .elfinder-button-icon-redo:before{ content: '\e814'; } .elfinder-button-icon-reload:before{ content: '\e805'; } .elfinder-button-icon-rename:before{ content: '\f246'; font-size: 85%; } .elfinder-button-icon-restore:before{ content: '\e81f'; } .elfinder-button-icon-resize:before{ content: '\e82d'; } .elfinder-button-icon-rotate-r:before{ content: '\e857'; } .elfinder-button-icon-rotate-l:before{ content: '\e856'; } .elfinder-button-icon-rm:before{ content: '\f12d'; } .elfinder-button-icon-search:before{ content: '\e81a'; } .elfinder-button-icon-selectall:before{ content: '\f247'; font-size: 90%; } .elfinder-button-icon-selectnone:before{ content: '\e823'; font-size: 90%; } .elfinder-button-icon-selectinvert:before{ content: '\f248'; font-size: 85%; margin-left: -1px; } .elfinder-button-icon-sort:before{ content: '\f15d'; font-size: 90%; } .elfinder-button-icon-text:before{ content: '\e804'; } .elfinder-button-icon-trash:before{ content: '\e80a'; font-size: 110%; } .elfinder-button-icon-undo:before{ content: '\e813'; } .elfinder-button-icon-unfullscreen:before{ content: '\e806'; } .elfinder-button-icon-up:before{ content: '\f005'; } .elfinder-button-icon-upload:before{ content: '\e808'; } .elfinder-button-icon-view:before{ content: '\e815'; font-size: 110%; } .elfinder-button-icon-view-list:before{ content: '\e816'; font-size: 110%; } .elfinder-button-icon-spinner:before, .elfinder-spinner:before{ content: '\e831'; } .elfinder-path-roots .elfinder-button-icon-menu:before{ content: '\e836'; } /* permissions, dragable icons (workzone/toolbar/on the screen) */ .elfinder-symlink:before{ content: '\e835'; } .elfinder-lock:before{ content: '\e82b'; font-size: 85%; } .elfinder-group .elfinder-perms:before{ content: '\e800'; } .elfinder-ro .elfinder-perms:before{ content: '\e80e'; color: #f3b80b; } .elfinder-wo .elfinder-perms:before{ content: '\e80d'; color: #0272bf; } .elfinder-na .elfinder-perms:before, .elfinder-drag-helper-icon-status:before{ content: '\e817'; color: #d00000; } .elfinder-drag-helper-move .elfinder-drag-helper-icon-status:before{ content: '\e843'; color: #0272bf; } .elfinder-drag-helper-plus .elfinder-drag-helper-icon-status:before{ content: '\e844'; color: #00ab07; } /* arrows icons (navbar/contextmenu) */ .elfinder-navbar-arrow:before{ content: none; } .elfinder-navbar-icon:before{ content: '\e820'; } .ui-state-hover .elfinder-navbar-icon:before, .ui-state-active .elfinder-navbar-icon:before, .elfinder-droppable-active .elfinder-navbar-icon:before{ content: '\e82e'; } .elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow:before, .elfinder .elfinder-contextmenu-ltr .elfinder-contextmenu-arrow:before{ content: '\e839'; } .elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow:before, .elfinder .elfinder-contextmenu-rtl .elfinder-contextmenu-arrow:before{ content: '\e838'; } .elfinder .elfinder-navbar-collapsed.elfinder-navbar-expanded .elfinder-navbar-arrow:before{ content: '\e836'; } /* cmd icons (dialogs) */ .elfinder-dialog-icon:before{ content: '\e83a'; } /* default icon (info icon) */ .elfinder-dialog-icon-confirm:before{ content: '\e83b'; color: #f3b80b; } .elfinder-rtl .elfinder-dialog-icon-confirm:before{ content: '\e851'; color: #f3b80b; } .elfinder-dialog-icon-error:before{ content: '\e83c'; color: #c32020; } .elfinder-dialog-icon-open:before, .elfinder-dialog-icon-readdir:before, .elfinder-dialog-icon-file:before{ content: '\e82e'; } .elfinder-dialog-icon-reload:before{ content: '\e841'; } .elfinder-dialog-icon-mkdir:before{ content: '\e820'; } .elfinder-dialog-icon-mkfile:before{ content: '\f15c'; } .elfinder-dialog-icon-copy:before{ content: '\e844'; } .elfinder-dialog-icon-prepare:before{ content: '\e831'; } .elfinder-dialog-icon-move:before{ content: '\e843'; } .elfinder-dialog-icon-save:before, .elfinder-dialog-icon-upload:before, .elfinder-dialog-icon-chunkmerge:before{ content: '\e83d'; } .elfinder-dialog-icon-rm:before{ content: '\f1f8'; } .elfinder-dialog-icon-download:before{ content: '\e83e'; } .elfinder-dialog-icon-rename:before, .elfinder-dialog-icon-chkcontent:before{ content: '\e83f'; } .elfinder-dialog-icon-zipdl:before, .elfinder-dialog-icon-archive:before, .elfinder-dialog-icon-extract:before{ content: '\e840'; } .elfinder-dialog-icon-search:before{ content: '\f1e5'; } .elfinder-dialog-icon-chmod:before{ content: '\e845'; } /* toasts */ .elfinder .elfinder-toast > .toast-info:before{ content: '\e83a'; } .elfinder .elfinder-toast > .toast-warning:before{ content: '\e83c'; } .elfinder .elfinder-toast > .toast-success:before{ content: '\e810'; } .elfinder .elfinder-toast > .toast-error:before{ content: '\e817'; } /* icons files (workzone/dialogs) */ .elfinder .elfinder-cwd-icon:after{ content: '\e84d'; font-size: 50px; color: #999; } .elfinder .elfinder-cwd-view-list table .elfinder-cwd-icon:after{ font-size: 16px; top: auto; right: auto; left: auto; width: auto; height: auto; opacity: 1; -webkit-transform: none; -moz-transform: none; transform: none; } .elfinder .elfinder-cwd-bgurl{ -moz-background-size: cover; background-size: cover; } .elfinder .elfinder-cwd-view-icons .elfinder-cwd-bgurl:after, .elfinder .elfinder-quicklook-info-wrapper .elfinder-cwd-bgurl:after{ display: none; } /* icons roots (navbar/workzone/dialogs/contextmenu) */ .elfinder [class^='elfinder-navbar-root-'] .elfinder-cwd-icon:after, .elfinder [class*=' elfinder-navbar-root-'] .elfinder-cwd-icon:after{ font-size: 53px; } .elfinder .elfinder-navbar-root-sql .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-dropbox .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-network .elfinder-cwd-icon:after{ font-size: 46px; } /* roots icons: navbar - .elfinder-navbar-root-[..] .elfinder-navbar-icon, workzone - .elfinder-navbar-root-[..] .elfinder-cwd-icon, contextmenu - .elfinder-navbar-root-[..].elfinder-contextmenu-icon */ .elfinder-places .elfinder-navbar-root .elfinder-navbar-icon:before{ content: '\e821'; } .elfinder .elfinder-navbar-root-local .elfinder-navbar-icon:before, .elfinder .elfinder-navbar-root-local .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-local.elfinder-contextmenu-icon:before{ content: '\e82f'; color: #999; } .elfinder .elfinder-navbar-root-trash .elfinder-navbar-icon:before, .elfinder .elfinder-navbar-root-trash .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-trash.elfinder-contextmenu-icon:before{ content: '\f1f8'; color: #999; } .elfinder .elfinder-navbar-root-ftp .elfinder-navbar-icon:before, .elfinder .elfinder-navbar-root-ftp .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-ftp.elfinder-contextmenu-icon:before{ content: '\f0a0'; color: #999; } .elfinder .elfinder-navbar-root-sql .elfinder-navbar-icon:before, .elfinder .elfinder-navbar-root-sql .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-sql.elfinder-contextmenu-icon:before{ content: '\f1c0'; color: #999; } .elfinder .elfinder-navbar-root-dropbox .elfinder-navbar-icon:before, .elfinder .elfinder-navbar-root-dropbox .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-dropbox.elfinder-contextmenu-icon:before{ content: '\e832'; color: #999; } .elfinder .elfinder-navbar-root-googledrive .elfinder-navbar-icon:before, .elfinder .elfinder-navbar-root-googledrive .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-googledrive.elfinder-contextmenu-icon:before{ content: '\e826'; color: #999; } .elfinder .elfinder-navbar-root-onedrive .elfinder-navbar-icon:before, .elfinder .elfinder-navbar-root-onedrive .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-onedrive.elfinder-contextmenu-icon:before{ content: '\e833'; color: #999; } .elfinder .elfinder-navbar-root-box .elfinder-navbar-icon:before, .elfinder .elfinder-navbar-root-box .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-box.elfinder-contextmenu-icon:before{ content: '\e834'; color: #999; } .elfinder .elfinder-navbar-root-network .elfinder-navbar-icon:before, .elfinder .elfinder-navbar-root-network .elfinder-cwd-icon:after, .elfinder .elfinder-navbar-root-network.elfinder-contextmenu-icon:before{ content: '\e830'; color: #999; } /* icons files (workzone/dialogs) */ .elfinder .elfinder-cwd-icon-directory:after{ content: '\e820'; color: #c3a530; } .elfinder .elfinder-cwd-icon-zip:after, .elfinder .elfinder-cwd-icon-x-zip:after, .elfinder .elfinder-cwd-icon-x-xz:after, .elfinder .elfinder-cwd-icon-x-7z-compressed:after, .elfinder .elfinder-cwd-icon-x-gzip:after, .elfinder .elfinder-cwd-icon-x-tar:after, .elfinder .elfinder-cwd-icon-x-bzip:after, .elfinder .elfinder-cwd-icon-x-bzip2:after, .elfinder .elfinder-cwd-icon-x-rar:after, .elfinder .elfinder-cwd-icon-x-rar-compressed:after{ content: '\e840'; color: #b3791e; } .elfinder .elfinder-cwd-icon-text:after, .elfinder .elfinder-cwd-icon-plain:after, .elfinder .elfinder-cwd-icon-x-empty:after{ content: '\e849'; color: #ddd; } .elfinder .elfinder-cwd-icon-image:after{ content: '\e84a'; color: #9e2974; } .elfinder .elfinder-cwd-icon-audio:after{ content: '\e84f'; color: #278a00; } .elfinder .elfinder-cwd-icon-video:after{ content: '\e84e'; color: #29629e; } .elfinder .elfinder-cwd-icon-html:after{ content: '\e82a'; color: #bd4c4c; } .elfinder .elfinder-cwd-icon-postscript:after, .elfinder .elfinder-cwd-icon-css:after, .elfinder .elfinder-cwd-icon-javascript:after, .elfinder .elfinder-cwd-icon-x-javascript:after, .elfinder .elfinder-cwd-icon-x-perl:after, .elfinder .elfinder-cwd-icon-x-python:after, .elfinder .elfinder-cwd-icon-x-ruby:after, .elfinder .elfinder-cwd-icon-x-sh:after, .elfinder .elfinder-cwd-icon-x-shellscript:after, .elfinder .elfinder-cwd-icon-x-c:after, .elfinder .elfinder-cwd-icon-x-csrc:after, .elfinder .elfinder-cwd-icon-x-chdr:after, .elfinder .elfinder-cwd-icon-x-c--:after, .elfinder .elfinder-cwd-icon-x-c--src:after, .elfinder .elfinder-cwd-icon-x-c--hdr:after, .elfinder .elfinder-cwd-icon-x-java:after, .elfinder .elfinder-cwd-icon-x-java-source:after, .elfinder .elfinder-cwd-icon-x-php:after, .elfinder .elfinder-cwd-icon-xml:after{ content: '\e84b'; color: #6e73b1; } .elfinder .elfinder-cwd-icon-group:after{ content: '\e842'; } /* workzone: parent rewrited */ .elfinder .elfinder-cwd-parent .elfinder-lock, .elfinder .elfinder-cwd-parent .elfinder-perms{ display: none; } .elfinder .elfinder-cwd-wrapper .elfinder-cwd-parent .elfinder-cwd-icon:after{ content: '\e847'; color: #999; } /* quicklook */ .elfinder-quicklook-navbar-icon-prev:before{ content: '\e850'; } .elfinder-quicklook-navbar-icon-next:before{ content: '\e82c'; } .elfinder-quicklook-navbar-icon-fullscreen:before{ content: '\e802'; } .elfinder-quicklook-navbar-icon-fullscreen-off:before{ content: '\e806'; } .elfinder-quicklook-navbar-icon-close:before{ content: '\e81b'; font-size: 85%; }(function(editors, elFinder) { if (typeof define === 'function' && define.amd) { define(['elfinder'], editors); } else if (elFinder) { var optEditors = elFinder.prototype._options.commandsOptions.edit.editors; elFinder.prototype._options.commandsOptions.edit.editors = optEditors.concat(editors(elFinder)); } }(function(elFinder) { "use strict"; var apps = {}, // get query of getfile getfile = window.location.search.match(/getfile=([a-z]+)/), useRequire = elFinder.prototype.hasRequire, ext2mime = { bmp: 'image/x-ms-bmp', dng: 'image/x-adobe-dng', gif: 'image/gif', jpeg: 'image/jpeg', jpg: 'image/jpeg', pdf: 'application/pdf', png: 'image/png', ppm: 'image/x-portable-pixmap', psd: 'image/vnd.adobe.photoshop', pxd: 'image/x-pixlr-data', svg: 'image/svg+xml', tiff: 'image/tiff', webp: 'image/webp', xcf: 'image/x-xcf', sketch: 'application/x-sketch', ico: 'image/x-icon', dds: 'image/vnd-ms.dds', emf: 'application/x-msmetafile' }, mime2ext, getExtention = function(mime, fm, jpeg) { if (!mime2ext) { mime2ext = fm.arrayFlip(ext2mime); } var ext = mime2ext[mime] || fm.mimeTypes[mime]; if (!jpeg) { if (ext === 'jpeg') { ext = 'jpg'; } } else { if (ext === 'jpg') { ext = 'jpeg'; } } return ext; }, changeImageType = function(src, toMime) { var dfd = $.Deferred(); try { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), img = new Image(), conv = function() { var url = canvas.toDataURL(toMime), mime, m; if (m = url.match(/^data:([a-z0-9]+\/[a-z0-9.+-]+)/i)) { mime = m[1]; } else { mime = ''; } if (mime.toLowerCase() === toMime.toLowerCase()) { dfd.resolve(canvas.toDataURL(toMime), canvas); } else { dfd.reject(); } }; img.src = src; $(img).on('load', function() { try { canvas.width = img.width; canvas.height = img.height; ctx.drawImage(img, 0, 0); conv(); } catch(e) { dfd.reject(); } }).on('error', function () { dfd.reject(); }); return dfd; } catch(e) { return dfd.reject(); } }, initImgTag = function(id, file, content, fm) { var node = $(this).children('img:first').data('ext', getExtention(file.mime, fm)), spnr = $('
') .html('' + fm.i18n('ntfloadimg') + '') .hide() .appendTo(this), setup = function() { node.attr('id', id+'-img') .attr('src', url || content) .css({'height':'', 'max-width':'100%', 'max-height':'100%', 'cursor':'pointer'}) .data('loading', function(done) { var btns = node.closest('.elfinder-dialog').find('button,.elfinder-titlebar-button'); btns.prop('disabled', !done)[done? 'removeClass' : 'addClass']('ui-state-disabled'); node.css('opacity', done? '' : '0.3'); spnr[done? 'hide' : 'show'](); return node; }); }, url; if (!content.match(/^data:/)) { fm.openUrl(file.hash, false, function(v) { url = v; node.attr('_src', content); setup(); }); } else { setup(); } }, imgBase64 = function(node, mime) { var style = node.attr('style'), img, canvas, ctx, data; try { // reset css for getting image size node.attr('style', ''); // img node img = node.get(0); // New Canvas canvas = document.createElement('canvas'); canvas.width = img.width; canvas.height = img.height; // restore css node.attr('style', style); // Draw Image canvas.getContext('2d').drawImage(img, 0, 0); // To Base64 data = canvas.toDataURL(mime); } catch(e) { data = node.attr('src'); } return data; }, iframeClose = function(ifm) { var $ifm = $(ifm), dfd = $.Deferred().always(function() { $ifm.off('load', load); }), ab = 'about:blank', chk = function() { tm = setTimeout(function() { var src; try { src = base.contentWindow.location.href; } catch(e) { src = null; } if (src === ab) { dfd.resolve(); } else if (--cnt > 0){ chk(); } else { dfd.reject(); } }, 500); }, load = function() { tm && clearTimeout(tm); dfd.resolve(); }, cnt = 20, // 500ms * 20 = 10sec wait tm; $ifm.one('load', load); ifm.src = ab; chk(); return dfd; }; // check getfile callback function if (getfile) { getfile = getfile[1]; if (getfile === 'ckeditor') { elFinder.prototype._options.getFileCallback = function(file, fm) { window.opener.CKEDITOR.tools.callFunction((function() { var reParam = new RegExp('(?:[?&]|&)CKEditorFuncNum=([^&]+)', 'i'), match = window.location.search.match(reParam); return (match && match.length > 1) ? match[1] : ''; })(), fm.convAbsUrl(file.url)); fm.destroy(); window.close(); }; } } // return editors Array return [ { // tui.image-editor - https://github.com/nhnent/tui.image-editor info : { id: 'tuiimgedit', name: 'TUI Image Editor', iconImg: 'img/editor-icons.png 0 -48', dataScheme: true, schemeContent: true, openMaximized: true, canMakeEmpty: false, integrate: { title: 'TOAST UI Image Editor', link: 'http://ui.toast.com/tui-image-editor/' } }, // MIME types to accept mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'], // HTML of this editor html : '
', // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE8 || fm.UA.Mobile) { this.disabled = true; } else { this.opts = Object.assign({ version: 'v3.15.3' }, opts.extraOptions.tuiImgEditOpts || {}, { iconsPath : fm.baseUrl + 'img/tui-', theme : {} }); if (!fm.isSameOrigin(this.opts.iconsPath)) { this.disabled = true; fm.debug('warning', 'Setting `commandOptions.edit.extraOptions.tuiImgEditOpts.iconsPath` MUST follow the same origin policy.'); } } }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, content, fm) { this.data('url', content); }, load : function(base) { var self = this, fm = this.fm, dfrd = $.Deferred(), cdns = fm.options.cdns, ver = self.confObj.opts.version, init = function(editor) { var $base = $(base), bParent = $base.parent(), opts = self.confObj.opts, iconsPath = opts.iconsPath, tmpContainer = $('
').appendTo(bParent), tmpDiv = [ $('
').appendTo(tmpContainer), $('
').appendTo(tmpContainer) ], iEditor = new editor(base, { includeUI: { loadImage: { path: $base.data('url'), name: self.file.name }, theme: opts.theme, initMenu: 'filter', menuBarPosition: 'bottom' }, cssMaxWidth: Math.max(300, bParent.width()), cssMaxHeight: Math.max(200, bParent.height() - (tmpDiv[0].height() + tmpDiv[1].height() + 3 /*margin*/)), usageStatistics: false }), canvas = $base.find('canvas:first').get(0), zoom = function(v) { if (typeof v !== 'undefined') { var c = $(canvas), w = parseInt(c.attr('width')), h = parseInt(c.attr('height')), a = w / h, z, mw, mh; if (v === 0) { mw = w; mh = h; } else { mw = parseInt(c.css('max-width')) + Number(v); mh = mw / a; if (mw > w && mh > h) { mw = w; mh = h; } } z = Math.round(mw / w * 100); // Control zoom button of TUI Image Editor if (z < 100) { iEditor.resetZoom(); iEditor.stopDrawingMode(); tuiZoomCtrls.hide(); } else { tuiZoomCtrls.show(); } per.text(z + '%'); iEditor.resizeCanvasDimension({width: mw, height: mh}); // continually change more if (zoomMore) { setTimeout(function() { zoomMore && zoom(v); }, 50); } } }, zup = $('').data('val', 10), zdown = $('').data('val', -10), per = $('').css('width', '4em').text('%').attr('title', '100%').data('val', 0), tuiZoomCtrls, quty, qutyTm, zoomTm, zoomMore; tmpContainer.remove(); $base.removeData('url').data('mime', self.file.mime); // jpeg quality controls if (self.file.mime === 'image/jpeg') { $base.data('quality', fm.storage('jpgQuality') || fm.option('jpgQuality')); quty = $('') .attr('min', '1') .attr('max', '100') .attr('title', '1 - 100') .on('change', function() { var q = quty.val(); $base.data('quality', q); qutyTm && cancelAnimationFrame(qutyTm); qutyTm = requestAnimationFrame(function() { canvas.toBlob(function(blob) { blob && quty.next('span').text(' (' + fm.formatSize(blob.size) + ')'); }, 'image/jpeg', Math.max(Math.min(q, 100), 1) / 100); }); }) .val($base.data('quality')); $('
') .append( $('').html(fm.i18n('quality') + ' : '), quty, $('') ) .prependTo($base.parent().next()); } else if (self.file.mime === 'image/svg+xml') { $base.closest('.ui-dialog').trigger('changeType', { extention: 'png', mime : 'image/png', keepEditor: true }); } // zoom scale controls $('
') .append( zdown, per, zup ) .attr('title', fm.i18n('scale')) .on('click', 'span,button', function() { zoom($(this).data('val')); }) .on('mousedown mouseup mouseleave', 'span', function(e) { zoomMore = false; zoomTm && clearTimeout(zoomTm); if (e.type === 'mousedown') { zoomTm = setTimeout(function() { zoomMore = true; zoom($(e.target).data('val')); }, 500); } }) .prependTo($base.parent().next()); // wait canvas ready setTimeout(function() { dfrd.resolve(iEditor); if (quty) { quty.trigger('change'); iEditor.on('redoStackChanged undoStackChanged', function() { quty.trigger('change'); }); } // ZOOM controls of TUI Image Editor tuiZoomCtrls = $base.find('.tie-btn-zoomIn,.tie-btn-zoomOut,.tie-btn-hand'); // show initial scale zoom(null); }, 100); // show color slider (maybe TUI-Image-Editor's bug) // see https://github.com/nhn/tui.image-editor/issues/153 $base.find('.tui-colorpicker-palette-container').on('click', '.tui-colorpicker-palette-preview', function() { $(this).closest('.color-picker-control').height('auto').find('.tui-colorpicker-slider-container').toggle(); }); $base.on('click', function() { $base.find('.tui-colorpicker-slider-container').hide(); }); }, loader; if (!self.confObj.editor) { loader = $.Deferred(); fm.loadCss([ cdns.tui + '/tui-color-picker/latest/tui-color-picker.css', cdns.tui + '/tui-image-editor/'+ver+'/tui-image-editor.css' ]); if (fm.hasRequire) { require.config({ paths : { 'fabric/dist/fabric.require' : cdns.fabric + '/fabric.require.min', // for fabric < 2.0.1 'fabric' : cdns.fabric + '/fabric.min', // for fabric >= 2.0.1 'tui-code-snippet' : cdns.tui + '/tui.code-snippet/latest/tui-code-snippet.min', 'tui-color-picker' : cdns.tui + '/tui-color-picker/latest/tui-color-picker.min', 'tui-image-editor' : cdns.tui + '/tui-image-editor/'+ver+'/tui-image-editor.min' } }); require(['tui-image-editor'], function(ImageEditor) { loader.resolve(ImageEditor); }); } else { fm.loadScript([ cdns.fabric + '/fabric.min.js', cdns.tui + '/tui.code-snippet/latest/tui-code-snippet.min.js' ], function() { fm.loadScript([ cdns.tui + '/tui-color-picker/latest/tui-color-picker.min.js' ], function() { fm.loadScript([ cdns.tui + '/tui-image-editor/'+ver+'/tui-image-editor.min.js' ], function() { loader.resolve(window.tui.ImageEditor); }, { loadType: 'tag' }); }, { loadType: 'tag' }); }, { loadType: 'tag' }); } loader.done(function(editor) { self.confObj.editor = editor; init(editor); }); } else { init(self.confObj.editor); } return dfrd; }, getContent : function(base) { var editor = this.editor, fm = editor.fm, $base = $(base), quality = $base.data('quality'); if (editor.instance) { if ($base.data('mime') === 'image/jpeg') { quality = quality || fm.storage('jpgQuality') || fm.option('jpgQuality'); quality = Math.max(0.1, Math.min(1, quality / 100)); } return editor.instance.toDataURL({ format: getExtention($base.data('mime'), fm, true), quality: quality }); } }, save : function(base) { var $base = $(base), quality = $base.data('quality'), hash = $base.data('hash'), file; this.instance.deactivateAll(); if (typeof quality !== 'undefined') { this.fm.storage('jpgQuality', quality); } if (hash) { file = this.fm.file(hash); $base.data('mime', file.mime); } } }, { // Photopea advanced image editor info : { id : 'photopea', name : 'Photopea', iconImg : 'img/editor-icons.png 0 -160', single: true, noContent: true, arrayBufferContent: true, openMaximized: true, // Disable file types that cannot be saved on Photopea. canMakeEmpty: ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp', 'image/tiff', /*'image/x-adobe-dng',*/ 'image/webp', /*'image/x-xcf',*/ 'image/vnd.adobe.photoshop', 'application/pdf', 'image/x-portable-pixmap', 'image/x-sketch', 'image/x-icon', 'image/vnd-ms.dds', /*'application/x-msmetafile'*/], integrate: { title: 'Photopea', link: 'https://www.photopea.com/learn/' } }, mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp', 'image/tiff', 'image/x-adobe-dng', 'image/webp', 'image/x-xcf', 'image/vnd.adobe.photoshop', 'application/pdf', 'image/x-portable-pixmap', 'image/x-sketch', 'image/x-icon', 'image/vnd-ms.dds', 'application/x-msmetafile'], html : '', // setup on elFinder bootup setup : function(opts, fm) { if (fm.UA.IE || fm.UA.Mobile) { this.disabled = true; } }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, dum, fm) { var orig = 'https://www.photopea.com', ifm = $(this).hide() //.css('box-sizing', 'border-box') .on('load', function() { //spnr.remove(); ifm.show(); }) .on('error', function() { spnr.remove(); ifm.show(); }), editor = this.editor, confObj = editor.confObj, spnr = $('
') .html('' + fm.i18n('nowLoading') + '') .appendTo(ifm.parent()), saveMimes = fm.arrayFlip(confObj.info.canMakeEmpty), getType = function(mime) { var ext = getExtention(mime, fm), extmime = ext2mime[ext]; if (!confObj.mimesFlip[extmime]) { ext = ''; } else if (ext === 'jpeg') { ext = 'jpg'; } if (!ext || !saveMimes[extmime]) { ext = 'psd'; extmime = ext2mime[ext]; ifm.closest('.ui-dialog').trigger('changeType', { extention: ext, mime : extmime, keepEditor: true }); } return ext; }, mime = file.mime, liveMsg, type, quty; if (!confObj.mimesFlip) { confObj.mimesFlip = fm.arrayFlip(confObj.mimes, true); } if (!confObj.liveMsg) { confObj.liveMsg = function(ifm, spnr, file) { var wnd = ifm.get(0).contentWindow, phase = 0, data = null, dfdIni = $.Deferred().done(function() { spnr.remove(); phase = 1; wnd.postMessage(data, orig); }), dfdGet; this.load = function() { return fm.getContents(file.hash, 'arraybuffer').done(function(d) { data = d; }); }; this.receive = function(e) { var ev = e.originalEvent, state; if (ev.origin === orig && ev.source === wnd) { if (ev.data === 'done') { if (phase === 0) { dfdIni.resolve(); } else if (phase === 1) { phase = 2; ifm.trigger('contentsloaded'); } else { if (dfdGet && dfdGet.state() === 'pending') { dfdGet.reject('errDataEmpty'); } } } else if (ev.data === 'Save') { editor.doSave(); } else { if (dfdGet && dfdGet.state() === 'pending') { if (typeof ev.data === 'object') { dfdGet.resolve('data:' + mime + ';base64,' + fm.arrayBufferToBase64(ev.data)); } else { dfdGet.reject('errDataEmpty'); } } } } }; this.getContent = function() { var type, q; if (phase > 1) { dfdGet && dfdGet.state() === 'pending' && dfdGet.reject(); dfdGet = null; dfdGet = $.Deferred(); if (phase === 2) { phase = 3; dfdGet.resolve('data:' + mime + ';base64,' + fm.arrayBufferToBase64(data)); data = null; return dfdGet; } if (ifm.data('mime')) { mime = ifm.data('mime'); type = getType(mime); } if (q = ifm.data('quality')) { type += ':' + (q / 100); } wnd.postMessage('app.activeDocument.saveToOE("' + type + '")', orig); return dfdGet; } }; }; } ifm.parent().css('padding', 0); type = getType(file.mime); liveMsg = editor.liveMsg = new confObj.liveMsg(ifm, spnr, file); $(window).on('message.' + fm.namespace, liveMsg.receive); liveMsg.load().done(function() { var d = JSON.stringify({ files : [], environment : { lang: fm.lang.replace(/_/g, '-'), customIO: {"save": "app.echoToOE(\"Save\");"} } }); ifm.attr('src', orig + '/#' + encodeURI(d)); }).fail(function(err) { err && fm.error(err); editor.initFail = true; }); // jpeg quality controls if (file.mime === 'image/jpeg' || file.mime === 'image/webp') { ifm.data('quality', fm.storage('jpgQuality') || fm.option('jpgQuality')); quty = $('') .attr('min', '1') .attr('max', '100') .attr('title', '1 - 100') .on('change', function() { var q = quty.val(); ifm.data('quality', q); }) .val(ifm.data('quality')); $('
') .append( $('').html(fm.i18n('quality') + ' : '), quty, $('') ) .prependTo(ifm.parent().next()); } }, load : function(base) { var dfd = $.Deferred(), self = this, fm = this.fm, $base = $(base); if (self.initFail) { dfd.reject(); } else { $base.on('contentsloaded', function() { dfd.resolve(self.liveMsg); }); } return dfd; }, getContent : function() { return this.editor.liveMsg? this.editor.liveMsg.getContent() : void(0); }, save : function(base, liveMsg) { var $base = $(base), quality = $base.data('quality'), hash = $base.data('hash'), file; if (typeof quality !== 'undefined') { this.fm.storage('jpgQuality', quality); } if (hash) { file = this.fm.file(hash); $base.data('mime', file.mime); } else { $base.removeData('mime'); } }, // On dialog closed close : function(base, liveMsg) { $(base).attr('src', ''); liveMsg && $(window).off('message.' + this.fm.namespace, liveMsg.receive); } }, { // Pixo is cross-platform image editor info : { id : 'pixo', name : 'Pixo Editor', iconImg : 'img/editor-icons.png 0 -208', dataScheme: true, schemeContent: true, single: true, canMakeEmpty: false, integrate: { title: 'Pixo Editor', link: 'https://pixoeditor.com/privacy-policy/' } }, // MIME types to accept mimes : ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'], // HTML of this editor html : '
', // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE8 || !opts.extraOptions || !opts.extraOptions.pixo || !opts.extraOptions.pixo.apikey) { this.disabled = true; } else { this.editorOpts = opts.extraOptions.pixo; } }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, content, fm) { initImgTag.call(this, id, file, content, fm); }, // Get data uri scheme (this: this editors HTML node) getContent : function() { return $(this).children('img:first').attr('src'); }, // Launch Pixo editor when dialog open load : function(base) { var self = this, fm = this.fm, $base = $(base), node = $base.children('img:first'), dialog = $base.closest('.ui-dialog'), elfNode = fm.getUI(), dfrd = $.Deferred(), container = $('#elfinder-pixo-container'), init = function(onload) { var opts; if (!container.length) { container = $('
').css({ position: 'fixed', top: 0, right: 0, width: '100%', height: $(window).height(), overflow: 'hidden' }).hide().appendTo(elfNode.hasClass('elfinder-fullscreen')? elfNode : 'body'); // bind switch fullscreen event elfNode.on('resize.'+fm.namespace, function(e, data) { e.preventDefault(); e.stopPropagation(); data && data.fullscreen && container.appendTo(data.fullscreen === 'on'? elfNode : 'body'); }); fm.bind('destroy', function() { editor && editor.cancelEditing(); container.remove(); }); } else { // always moves to last container.appendTo(container.parent()); } node.on('click', launch); // Constructor options opts = Object.assign({ type: 'child', parent: container.get(0), output: {format: 'png'}, onSave: function(arg) { // Check current file.hash, all callbacks are called on multiple instances var mime = arg.toBlob().type, ext = getExtention(mime, fm), draw = function(url) { node.one('load error', function() { node.data('loading') && node.data('loading')(true); }) .attr('crossorigin', 'anonymous') .attr('src', url); }, url = arg.toDataURL(); node.data('loading')(); delete base._canvas; if (node.data('ext') !== ext) { changeImageType(url, self.file.mime).done(function(res, cv) { if (cv) { base._canvas = canvas = cv; quty.trigger('change'); qBase && qBase.show(); } draw(res); }).fail(function() { dialog.trigger('changeType', { extention: ext, mime : mime }); draw(url); }); } else { draw(url); } }, onClose: function() { dialog.removeClass(fm.res('class', 'preventback')); fm.toggleMaximize(container, false); container.hide(); fm.toFront(dialog); } }, self.confObj.editorOpts); // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: base, editorObj: Pixo, instance: void(0), opts: opts }); // make editor instance editor = new Pixo.Bridge(opts); dfrd.resolve(editor); $base.on('saveAsFail', launch); if (onload) { onload(); } }, launch = function() { dialog.addClass(fm.res('class', 'preventback')); fm.toggleMaximize(container, true); fm.toFront(container); container.show().data('curhash', self.file.hash); editor.edit(node.get(0)); node.data('loading')(true); }, qBase, quty, qutyTm, canvas, editor; node.data('loading')(); // jpeg quality controls if (self.file.mime === 'image/jpeg') { quty = $('') .attr('min', '1') .attr('max', '100') .attr('title', '1 - 100') .on('change', function() { var q = quty.val(); qutyTm && cancelAnimationFrame(qutyTm); qutyTm = requestAnimationFrame(function() { if (canvas) { canvas.toBlob(function(blob) { blob && quty.next('span').text(' (' + fm.formatSize(blob.size) + ')'); }, 'image/jpeg', Math.max(Math.min(q, 100), 1) / 100); } }); }) .val(fm.storage('jpgQuality') || fm.option('jpgQuality')); qBase = $('
') .hide() .append( $('').html(fm.i18n('quality') + ' : '), quty, $('') ) .prependTo($base.parent().next()); $base.data('quty', quty); } // load script then init if (typeof Pixo === 'undefined') { fm.loadScript(['https://pixoeditor.com:8443/editor/scripts/bridge.m.js'], function() { init(launch); }, {loadType: 'tag'}); } else { init(); launch(); } return dfrd; }, // Convert content url to data uri scheme to save content save : function(base) { var self = this, $base = $(base), node = $base.children('img:first'), q; if (base._canvas) { if ($base.data('quty')) { q = $base.data('quty').val(); q && this.fm.storage('jpgQuality', q); } node.attr('src', base._canvas.toDataURL(self.file.mime, q? Math.max(Math.min(q, 100), 1) / 100 : void(0))); } else if (node.attr('src').substr(0, 5) !== 'data:') { node.attr('src', imgBase64(node, this.file.mime)); } }, close : function(base, editor) { editor && editor.destroy(); } }, { // ACE Editor // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE8 || !fm.options.cdns.ace) { this.disabled = true; } }, // `mimes` is not set for support everything kind of text file info : { id : 'aceeditor', name : 'ACE Editor', iconImg : 'img/editor-icons.png 0 -96' }, load : function(textarea) { var self = this, fm = this.fm, dfrd = $.Deferred(), cdn = fm.options.cdns.ace, start = function() { var editor, editorBase, mode, ta = $(textarea), taBase = ta.parent(), dialog = taBase.parent(), id = textarea.id + '_ace', ext = self.file.name.replace(/^.+\.([^.]+)|(.+)$/, '$1$2').toLowerCase(), // MIME/mode map mimeMode = { 'text/x-php' : 'php', 'application/x-php' : 'php', 'text/html' : 'html', 'application/xhtml+xml' : 'html', 'text/javascript' : 'javascript', 'application/javascript' : 'javascript', 'text/css' : 'css', 'text/x-c' : 'c_cpp', 'text/x-csrc' : 'c_cpp', 'text/x-chdr' : 'c_cpp', 'text/x-c++' : 'c_cpp', 'text/x-c++src' : 'c_cpp', 'text/x-c++hdr' : 'c_cpp', 'text/x-shellscript' : 'sh', 'application/x-csh' : 'sh', 'text/x-python' : 'python', 'text/x-java' : 'java', 'text/x-java-source' : 'java', 'text/x-ruby' : 'ruby', 'text/x-perl' : 'perl', 'application/x-perl' : 'perl', 'text/x-sql' : 'sql', 'text/xml' : 'xml', 'application/docbook+xml' : 'xml', 'application/xml' : 'xml' }; // set base height taBase.height(taBase.height()); // set basePath of ace ace.config.set('basePath', cdn); // Base node of Ace editor editorBase = $('
').text(ta.val()).insertBefore(ta.hide()); // Editor flag ta.data('ace', true); // Aceeditor instance editor = ace.edit(id); // Ace editor configure editor.$blockScrolling = Infinity; editor.setOptions({ theme: 'ace/theme/monokai', fontSize: '14px', wrap: true, }); ace.config.loadModule('ace/ext/modelist', function() { // detect mode mode = ace.require('ace/ext/modelist').getModeForPath('/' + self.file.name).name; if (mode === 'text') { if (mimeMode[self.file.mime]) { mode = mimeMode[self.file.mime]; } } // show MIME:mode in title bar taBase.prev().children('.elfinder-dialog-title').append(' (' + self.file.mime + ' : ' + mode.split(/[\/\\]/).pop() + ')'); editor.setOptions({ mode: 'ace/mode/' + mode }); if (dfrd.state() === 'resolved') { dialog.trigger('resize'); } }); ace.config.loadModule('ace/ext/language_tools', function() { ace.require('ace/ext/language_tools'); editor.setOptions({ enableBasicAutocompletion: true, enableSnippets: true, enableLiveAutocompletion: false }); }); ace.config.loadModule('ace/ext/settings_menu', function() { ace.require('ace/ext/settings_menu').init(editor); }); // Short cuts editor.commands.addCommand({ name : "saveFile", bindKey: { win : 'Ctrl-s', mac : 'Command-s' }, exec: function(editor) { self.doSave(); } }); editor.commands.addCommand({ name : "closeEditor", bindKey: { win : 'Ctrl-w|Ctrl-q', mac : 'Command-w|Command-q' }, exec: function(editor) { self.doCancel(); } }); editor.resize(); // TextArea button and Setting button $('
').css('float', 'left') .append( $('').html(self.fm.i18n('TextArea')) .button() .on('click', function(){ if (ta.data('ace')) { ta.removeData('ace'); editorBase.hide(); ta.val(editor.session.getValue()).show().trigger('focus'); $(this).text('AceEditor'); } else { ta.data('ace', true); editorBase.show(); editor.setValue(ta.hide().val(), -1); editor.focus(); $(this).html(self.fm.i18n('TextArea')); } }) ) .append( $('') .button({ icons: { primary: 'ui-icon-gear', secondary: 'ui-icon-triangle-1-e' }, text: false }) .on('click', function(){ editor.showSettingsMenu(); $('#ace_settingsmenu') .css('font-size', '80%') .find('div[contains="setOptions"]').hide().end() .parent().appendTo($('#elfinder')); }) ) .prependTo(taBase.next()); // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: ace, instance: editor, opts: {} }); //dialog.trigger('resize'); dfrd.resolve(editor); }; // check ace & start if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); self.fm.loadScript([ cdn+'/ace.js' ], function() { self.confObj.loader.resolve(); }, void 0, {obj: window, name: 'ace'}); } self.confObj.loader.done(start); return dfrd; }, close : function(textarea, instance) { instance && instance.destroy(); }, save : function(textarea, instance) { instance && $(textarea).data('ace') && (textarea.value = instance.session.getValue()); }, focus : function(textarea, instance) { instance && $(textarea).data('ace') && instance.focus(); }, resize : function(textarea, instance, e, data) { instance && instance.resize(); } }, { // CodeMirror // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE10 || !fm.options.cdns.codemirror) { this.disabled = true; } }, // `mimes` is not set for support everything kind of text file info : { id : 'codemirror', name : 'CodeMirror', iconImg : 'img/editor-icons.png 0 -176' }, load : function(textarea) { var fm = this.fm, cmUrl = fm.convAbsUrl(fm.options.cdns.codemirror), dfrd = $.Deferred(), self = this, start = function(CodeMirror) { var ta = $(textarea), base = ta.parent(), editor, editorBase, opts; // set base height base.height(base.height()); // CodeMirror configure options opts = { lineNumbers: true, lineWrapping: true, extraKeys : { 'Ctrl-S': function() { self.doSave(); }, 'Ctrl-Q': function() { self.doCancel(); }, 'Ctrl-W': function() { self.doCancel(); } } }; // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: CodeMirror, instance: void(0), opts: opts }); // CodeMirror configure editor = CodeMirror.fromTextArea(textarea, opts); // return editor instance dfrd.resolve(editor); // Auto mode set var info, m, mode, spec; if (! info) { info = CodeMirror.findModeByMIME(self.file.mime); } if (! info && (m = self.file.name.match(/.+\.([^.]+)$/))) { info = CodeMirror.findModeByExtension(m[1]); } if (info) { CodeMirror.modeURL = useRequire? 'codemirror/mode/%N/%N.min' : cmUrl + '/mode/%N/%N.min.js'; mode = info.mode; spec = info.mime; editor.setOption('mode', spec); CodeMirror.autoLoadMode(editor, mode); // show MIME:mode in title bar base.prev().children('.elfinder-dialog-title').append(' (' + spec + (mode != 'null'? ' : ' + mode : '') + ')'); } // editor base node editorBase = $(editor.getWrapperElement()).css({ // fix CSS conflict to SimpleMDE padding: 0, border: 'none' }); ta.data('cm', true); // fit height to base editorBase.height('100%'); // TextArea button and Setting button $('
').css('float', 'left') .append( $('').html(self.fm.i18n('TextArea')) .button() .on('click', function(){ if (ta.data('cm')) { ta.removeData('cm'); editorBase.hide(); ta.val(editor.getValue()).show().trigger('focus'); $(this).text('CodeMirror'); } else { ta.data('cm', true); editorBase.show(); editor.setValue(ta.hide().val()); editor.refresh(); editor.focus(); $(this).html(self.fm.i18n('TextArea')); } }) ) .prependTo(base.next()); }; // load script then start if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); if (useRequire) { require.config({ packages: [{ name: 'codemirror', location: cmUrl, main: 'codemirror.min' }], map: { 'codemirror': { 'codemirror/lib/codemirror': 'codemirror' } } }); require([ 'codemirror', 'codemirror/addon/mode/loadmode.min', 'codemirror/mode/meta.min' ], function(CodeMirror) { self.confObj.loader.resolve(CodeMirror); }); } else { self.fm.loadScript([ cmUrl + '/codemirror.min.js' ], function() { self.fm.loadScript([ cmUrl + '/addon/mode/loadmode.min.js', cmUrl + '/mode/meta.min.js' ], function() { self.confObj.loader.resolve(CodeMirror); }); }, {loadType: 'tag'}); } self.fm.loadCss(cmUrl + '/codemirror.css'); } self.confObj.loader.done(start); return dfrd; }, close : function(textarea, instance) { instance && instance.toTextArea(); }, save : function(textarea, instance) { instance && $(textarea).data('cm') && (textarea.value = instance.getValue()); }, focus : function(textarea, instance) { instance && $(textarea).data('cm') && instance.focus(); }, resize : function(textarea, instance, e, data) { instance && instance.refresh(); } }, { // SimpleMDE // called on initialization of elFinder cmd edit (this: this editor's config object) setup : function(opts, fm) { if (fm.UA.ltIE10 || !fm.options.cdns.simplemde) { this.disabled = true; } }, info : { id : 'simplemde', name : 'SimpleMDE', iconImg : 'img/editor-icons.png 0 -80' }, exts : ['md'], load : function(textarea) { var self = this, fm = this.fm, base = $(textarea).parent(), dfrd = $.Deferred(), cdn = fm.options.cdns.simplemde, start = function(SimpleMDE) { var h = base.height(), delta = base.outerHeight(true) - h + 14, editor, editorBase, opts; // fit height function textarea._setHeight = function(height) { var h = height || base.height(), ctrH = 0, areaH; base.children('.editor-toolbar,.editor-statusbar').each(function() { ctrH += $(this).outerHeight(true); }); areaH = h - ctrH - delta; editorBase.height(areaH); editor.codemirror.refresh(); return areaH; }; // set base height base.height(h); opts = { element: textarea, autofocus: true }; // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: SimpleMDE, instance: void(0), opts: opts }); // make editor editor = new SimpleMDE(opts); dfrd.resolve(editor); // editor base node editorBase = $(editor.codemirror.getWrapperElement()); // fit height to base editorBase.css('min-height', '50px') .children('.CodeMirror-scroll').css('min-height', '50px'); textarea._setHeight(h); }; // check SimpleMDE & start if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); self.fm.loadCss(cdn+'/simplemde.min.css'); if (useRequire) { require([ cdn+'/simplemde.min.js' ], function(SimpleMDE) { self.confObj.loader.resolve(SimpleMDE); }); } else { self.fm.loadScript([cdn+'/simplemde.min.js'], function() { self.confObj.loader.resolve(SimpleMDE); }, {loadType: 'tag'}); } } self.confObj.loader.done(start); return dfrd; }, close : function(textarea, instance) { instance && instance.toTextArea(); instance = null; }, save : function(textarea, instance) { instance && (textarea.value = instance.value()); }, focus : function(textarea, instance) { instance && instance.codemirror.focus(); }, resize : function(textarea, instance, e, data) { instance && textarea._setHeight(); } }, { // CKEditor for html file info : { id : 'ckeditor', name : 'CKEditor', iconImg : 'img/editor-icons.png 0 0' }, exts : ['htm', 'html', 'xhtml'], setup : function(opts, fm) { var confObj = this; if (!fm.options.cdns.ckeditor) { confObj.disabled = true; } else { confObj.ckeOpts = {}; if (opts.extraOptions) { confObj.ckeOpts = Object.assign({}, opts.extraOptions.ckeditor || {}); if (opts.extraOptions.managerUrl) { confObj.managerUrl = opts.extraOptions.managerUrl; } } } }, load : function(textarea) { var self = this, fm = this.fm, dfrd = $.Deferred(), init = function() { var base = $(textarea).parent(), dlg = base.closest('.elfinder-dialog'), h = base.height(), reg = /([&?]getfile=)[^&]+/, loc = self.confObj.managerUrl || window.location.href.replace(/#.*$/, ''), name = 'ckeditor', opts; // make manager location if (reg.test(loc)) { loc = loc.replace(reg, '$1' + name); } else { loc += '?getfile=' + name; } // set base height base.height(h); // CKEditor configure options opts = { startupFocus : true, fullPage: true, allowedContent: true, filebrowserBrowseUrl : loc, toolbarCanCollapse: true, toolbarStartupExpanded: !fm.UA.Mobile, removePlugins: 'resize', extraPlugins: 'colorbutton,justify,docprops', on: { 'instanceReady' : function(e) { var editor = e.editor; editor.resize('100%', h); // re-build on dom move dlg.one('beforedommove.'+fm.namespace, function() { editor.destroy(); }).one('dommove.'+fm.namespace, function() { self.load(textarea).done(function(editor) { self.instance = editor; }); }); // return editor instance dfrd.resolve(e.editor); } } }; // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: CKEDITOR, instance: void(0), opts: opts }); // CKEditor configure CKEDITOR.replace(textarea.id, Object.assign(opts, self.confObj.ckeOpts)); CKEDITOR.on('dialogDefinition', function(e) { var dlg = e.data.definition.dialog; dlg.on('show', function(e) { fm.getUI().append($('.cke_dialog_background_cover')).append(this.getElement().$); }); dlg.on('hide', function(e) { $('body:first').append($('.cke_dialog_background_cover')).append(this.getElement().$); }); }); }; if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); window.CKEDITOR_BASEPATH = fm.options.cdns.ckeditor + '/'; $.getScript(fm.options.cdns.ckeditor + '/ckeditor.js', function() { self.confObj.loader.resolve(); }); } self.confObj.loader.done(init); return dfrd; }, close : function(textarea, instance) { instance && instance.destroy(); }, save : function(textarea, instance) { instance && (textarea.value = instance.getData()); }, focus : function(textarea, instance) { instance && instance.focus(); }, resize : function(textarea, instance, e, data) { var self; if (instance) { if (instance.status === 'ready') { instance.resize('100%', $(textarea).parent().height()); } } } }, { // CKEditor5 balloon mode for html file info : { id : 'ckeditor5', name : 'CKEditor5', iconImg : 'img/editor-icons.png 0 -16' }, exts : ['htm', 'html', 'xhtml'], html : '
', setup : function(opts, fm) { var confObj = this; // check cdn and ES6 support if (!fm.options.cdns.ckeditor5 || typeof window.Symbol !== 'function' || typeof Symbol() !== 'symbol') { confObj.disabled = true; } else { confObj.ckeOpts = {}; if (opts.extraOptions) { // @deprecated option extraOptions.ckeditor5Mode if (opts.extraOptions.ckeditor5Mode) { confObj.ckeditor5Mode = opts.extraOptions.ckeditor5Mode; } confObj.ckeOpts = Object.assign({}, opts.extraOptions.ckeditor5 || {}); if (confObj.ckeOpts.mode) { confObj.ckeditor5Mode = confObj.ckeOpts.mode; delete confObj.ckeOpts.mode; } if (opts.extraOptions.managerUrl) { confObj.managerUrl = opts.extraOptions.managerUrl; } } } fm.bind('destroy', function() { confObj.editor = null; }); }, // Prepare on before show dialog prepare : function(base, dialogOpts, file) { $(base).height(base.editor.fm.getUI().height() - 100); }, init : function(id, file, data, fm) { var m = data.match(/^([\s\S]*]*>)([\s\S]+)(<\/body>[\s\S]*)$/i), header = '', body = '', footer =''; this.css({ width: '100%', height: '100%', 'box-sizing': 'border-box' }); if (m) { header = m[1]; body = m[2]; footer = m[3]; } else { body = data; } this.data('data', { header: header, body: body, footer: footer }); this._setupSelEncoding(data); }, load : function(editnode) { var self = this, fm = this.fm, dfrd = $.Deferred(), mode = self.confObj.ckeditor5Mode || 'decoupled-document', lang = (function() { var l = fm.lang.toLowerCase().replace('_', '-'); if (l.substr(0, 2) === 'zh' && l !== 'zh-cn') { l = 'zh'; } return l; })(), init = function(cEditor) { var base = $(editnode).parent(), opts; // set base height base.height(fm.getUI().height() - 100); // CKEditor5 configure options opts = Object.assign({ toolbar: ["heading", "|", "fontSize", "fontFamily", "|", "bold", "italic", "underline", "strikethrough", "highlight", "|", "alignment", "|", "numberedList", "bulletedList", "blockQuote", "indent", "outdent", "|", "ckfinder", "link", "imageUpload", "insertTable", "mediaEmbed", "|", "undo", "redo"], language: lang }, self.confObj.ckeOpts); // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: editnode, editorObj: cEditor, instance: void(0), opts: opts }); cEditor .create(editnode, opts) .then(function(editor) { var ckf = editor.commands.get('ckfinder'), fileRepo = editor.plugins.get('FileRepository'), prevVars = {}, isImage, insertImages; if (editor.ui.view.toolbar && (mode === 'classic' || mode === 'decoupled-document')) { $(editnode).closest('.elfinder-dialog').children('.ui-widget-header').append($(editor.ui.view.toolbar.element).css({marginRight:'-1em',marginLeft:'-1em'})); } if (mode === 'classic') { $(editnode).closest('.elfinder-edit-editor').css('overflow', 'auto'); } // Set up this elFinder instead of CKFinder if (ckf) { isImage = function(f) { return f && f.mime.match(/^image\//i); }; insertImages = function(urls) { var imgCmd = editor.commands.get('imageUpload'); if (!imgCmd.isEnabled) { var ntf = editor.plugins.get('Notification'), i18 = editor.locale.t; ntf.showWarning(i18('Could not insert image at the current position.'), { title: i18('Inserting image failed'), namespace: 'ckfinder' }); return; } editor.execute('imageInsert', { source: urls }); }; // Take over ckfinder execute() ckf.execute = function() { var dlg = base.closest('.elfinder-dialog'), gf = fm.getCommand('getfile'), rever = function() { if (prevVars.hasVar) { dlg.off('resize close', rever); gf.callback = prevVars.callback; gf.options.folders = prevVars.folders; gf.options.multiple = prevVars.multi; fm.commandMap.open = prevVars.open; prevVars.hasVar = false; } }; dlg.trigger('togleminimize').one('resize close', rever); prevVars.callback = gf.callback; prevVars.folders = gf.options.folders; prevVars.multi = gf.options.multiple; prevVars.open = fm.commandMap.open; prevVars.hasVar = true; gf.callback = function(files) { var imgs = []; if (files.length === 1 && files[0].mime === 'directory') { fm.one('open', function() { fm.commandMap.open = 'getfile'; }).getCommand('open').exec(files[0].hash); return; } fm.getUI('cwd').trigger('unselectall'); $.each(files, function(i, f) { if (isImage(f)) { imgs.push(fm.convAbsUrl(f.url)); } else { editor.execute('link', fm.convAbsUrl(f.url)); } }); if (imgs.length) { insertImages(imgs); } dlg.trigger('togleminimize'); }; gf.options.folders = true; gf.options.multiple = true; fm.commandMap.open = 'getfile'; fm.toast({ mode: 'info', msg: fm.i18n('dblclickToSelect') }); }; } // Set up image uploader fileRepo.createUploadAdapter = function(loader) { return new uploder(loader); }; editor.setData($(editnode).data('data').body); // move .ck-body to elFinder node for fullscreen mode fm.getUI().append($('body > div.ck-body')); $('div.ck-balloon-panel').css({ 'z-index': fm.getMaximizeCss().zIndex + 1 }); dfrd.resolve(editor); /*fm.log({ defaultConfig: cEditor.defaultConfig, plugins: cEditor.builtinPlugins.map(function(p) { return p.pluginName; }), toolbars: Array.from(editor.ui.componentFactory.names()) });*/ }) ['catch'](function(error) { // ['cache'] instead .cache for fix error on ie8 fm.error(error); }); }, uploder = function(loader) { var upload = function(file, resolve, reject) { fm.exec('upload', {files: [file]}, void(0), fm.cwd().hash) .done(function(data){ if (data.added && data.added.length) { fm.url(data.added[0].hash, { async: true }).done(function(url) { resolve({ 'default': fm.convAbsUrl(url) }); }).fail(function() { reject('errFileNotFound'); }); } else { reject(fm.i18n(data.error? data.error : 'errUpload')); } }) .fail(function(err) { var error = fm.parseError(err); reject(fm.i18n(error? (error === 'userabort'? 'errAbort' : error) : 'errUploadNoFiles')); }) .progress(function(data) { loader.uploadTotal = data.total; loader.uploaded = data.progress; }); }; this.upload = function() { return new Promise(function(resolve, reject) { if (loader.file instanceof Promise || (loader.file && typeof loader.file.then === 'function')) { loader.file.then(function(file) { upload(file, resolve, reject); }); } else { upload(loader.file, resolve, reject); } }); }; this.abort = function() { fm.getUI().trigger('uploadabort'); }; }, loader; if (!self.confObj.editor) { loader = $.Deferred(); self.fm.loadScript([ fm.options.cdns.ckeditor5 + '/' + mode + '/ckeditor.js' ], function(editor) { if (!editor) { editor = window.BalloonEditor || window.InlineEditor || window.ClassicEditor || window.DecoupledEditor; } if (fm.lang !== 'en') { self.fm.loadScript([ fm.options.cdns.ckeditor5 + '/' + mode + '/translations/' + lang + '.js' ], function(obj) { loader.resolve(editor); }, { tryRequire: true, loadType: 'tag', error: function(obj) { lang = 'en'; loader.resolve(editor); } }); } else { loader.resolve(editor); } }, { tryRequire: true, loadType: 'tag' }); loader.done(function(editor) { self.confObj.editor = editor; init(editor); }); } else { init(self.confObj.editor); } return dfrd; }, getContent : function() { var data = $(this).data('data'); return data.header + data.body + data.footer; }, close : function(editnode, instance) { instance && instance.destroy(); }, save : function(editnode, instance) { var elm = $(editnode), data = elm.data('data'); if (instance) { data.body = instance.getData(); elm.data('data', data); } }, focus : function(editnode, instance) { $(editnode).trigger('focus'); } }, { // TinyMCE for html file info : { id : 'tinymce', name : 'TinyMCE', iconImg : 'img/editor-icons.png 0 -64' }, exts : ['htm', 'html', 'xhtml'], setup : function(opts, fm) { var confObj = this; if (!fm.options.cdns.tinymce) { confObj.disabled = true; } else { confObj.mceOpts = {}; if (opts.extraOptions) { confObj.uploadOpts = Object.assign({}, opts.extraOptions.uploadOpts || {}); confObj.mceOpts = Object.assign({}, opts.extraOptions.tinymce || {}); } else { confObj.uploadOpts = {}; } } }, load : function(textarea) { var self = this, fm = this.fm, dfrd = $.Deferred(), init = function() { var base = $(textarea).show().parent(), dlg = base.closest('.elfinder-dialog'), h = base.height(), delta = base.outerHeight(true) - h, // hide MCE dialog and modal block hideMceDlg = function() { var mceW; if (tinymce.activeEditor.windowManager.windows) { mceW = tinymce.activeEditor.windowManager.windows[0]; mceDlg = $(mceW? mceW.getEl() : void(0)).hide(); mceCv = $('#mce-modal-block').hide(); } else { mceDlg = $('.tox-dialog-wrap').hide(); } }, // Show MCE dialog and modal block showMceDlg = function() { mceCv && mceCv.show(); mceDlg && mceDlg.show(); }, tVer = tinymce.majorVersion, opts, mceDlg, mceCv; // set base height base.height(h); // fit height function textarea._setHeight = function(height) { if (tVer < 5) { var base = $(this).parent(), h = height || base.innerHeight(), ctrH = 0, areaH; base.find('.mce-container-body:first').children('.mce-top-part,.mce-statusbar').each(function() { ctrH += $(this).outerHeight(true); }); areaH = h - ctrH - delta; base.find('.mce-edit-area iframe:first').height(areaH); } }; // TinyMCE configure options opts = { selector: '#' + textarea.id, resize: false, plugins: 'preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help', toolbar: 'formatselect | bold italic strikethrough forecolor backcolor | link image media | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat', image_advtab: true, init_instance_callback : function(editor) { // fit height on init textarea._setHeight(h); // re-build on dom move dlg.one('beforedommove.'+fm.namespace, function() { tinymce.execCommand('mceRemoveEditor', false, textarea.id); }).one('dommove.'+fm.namespace, function() { self.load(textarea).done(function(editor) { self.instance = editor; }); }); // return editor instance dfrd.resolve(editor); }, file_picker_callback : function (callback, value, meta) { var gf = fm.getCommand('getfile'), revar = function() { if (prevVars.hasVar) { gf.callback = prevVars.callback; gf.options.folders = prevVars.folders; gf.options.multiple = prevVars.multi; fm.commandMap.open = prevVars.open; prevVars.hasVar = false; } dlg.off('resize close', revar); showMceDlg(); }, prevVars = {}; prevVars.callback = gf.callback; prevVars.folders = gf.options.folders; prevVars.multi = gf.options.multiple; prevVars.open = fm.commandMap.open; prevVars.hasVar = true; gf.callback = function(file) { var url, info; if (file.mime === 'directory') { fm.one('open', function() { fm.commandMap.open = 'getfile'; }).getCommand('open').exec(file.hash); return; } // URL normalization url = fm.convAbsUrl(file.url); // Make file info info = file.name + ' (' + fm.formatSize(file.size) + ')'; // Provide file and text for the link dialog if (meta.filetype == 'file') { callback(url, {text: info, title: info}); } // Provide image and alt text for the image dialog if (meta.filetype == 'image') { callback(url, {alt: info}); } // Provide alternative source and posted for the media dialog if (meta.filetype == 'media') { callback(url); } dlg.trigger('togleminimize'); }; gf.options.folders = true; gf.options.multiple = false; fm.commandMap.open = 'getfile'; hideMceDlg(); dlg.trigger('togleminimize').one('resize close', revar); fm.toast({ mode: 'info', msg: fm.i18n('dblclickToSelect') }); return false; }, images_upload_handler : function (blobInfo, success, failure) { var file = blobInfo.blob(), err = function(e) { var dlg = e.data.dialog || {}; if (dlg.hasClass('elfinder-dialog-error') || dlg.hasClass('elfinder-confirm-upload')) { hideMceDlg(); dlg.trigger('togleminimize').one('resize close', revert); fm.unbind('dialogopened', err); } }, revert = function() { dlg.off('resize close', revert); showMceDlg(); }, clipdata = true; // check file object if (file.name) { // file blob of client side file object clipdata = void(0); } fm.bind('dialogopened', err).exec('upload', Object.assign({ files: [file], clipdata: clipdata // to get unique name on connector }, self.confObj.uploadOpts), void(0), fm.cwd().hash).done(function(data) { if (data.added && data.added.length) { fm.url(data.added[0].hash, { async: true }).done(function(url) { showMceDlg(); success(fm.convAbsUrl(url)); }).fail(function() { failure(fm.i18n('errFileNotFound')); }); } else { failure(fm.i18n(data.error? data.error : 'errUpload')); } }).fail(function(err) { var error = fm.parseError(err); if (error) { if (error === 'errUnknownCmd') { error = 'errPerm'; } else if (error === 'userabort') { error = 'errAbort'; } } failure(fm.i18n(error? error : 'errUploadNoFiles')); }); } }; // TinyMCE 5 supports "height: 100%" if (tVer >= 5) { opts.height = '100%'; } // trigger event 'editEditorPrepare' self.trigger('Prepare', { node: textarea, editorObj: tinymce, instance: void(0), opts: opts }); // TinyMCE configure tinymce.init(Object.assign(opts, self.confObj.mceOpts)); }; if (!self.confObj.loader) { self.confObj.loader = $.Deferred(); self.fm.loadScript([fm.options.cdns.tinymce + (fm.options.cdns.tinymce.match(/\.js/)? '' : '/tinymce.min.js')], function() { self.confObj.loader.resolve(); }, { loadType: 'tag' }); } self.confObj.loader.done(init); return dfrd; }, close : function(textarea, instance) { instance && tinymce.execCommand('mceRemoveEditor', false, textarea.id); }, save : function(textarea, instance) { instance && instance.save(); }, focus : function(textarea, instance) { instance && instance.focus(); }, resize : function(textarea, instance, e, data) { // fit height to base node on dialog resize instance && textarea._setHeight(); } }, { info : { id : 'zohoeditor', name : 'Zoho Editor', iconImg : 'img/editor-icons.png 0 -32', cmdCheck : 'ZohoOffice', preventGet: true, hideButtons: true, syncInterval : 15000, canMakeEmpty: true, integrate: { title: 'Zoho Office API', link: 'https://www.zoho.com/officeapi/' } }, mimes : [ 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', //'application/pdf', 'application/vnd.oasis.opendocument.text', 'application/rtf', 'text/html', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.sun.xml.calc', 'text/csv', 'text/tab-separated-values', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'application/vnd.oasis.opendocument.presentation', 'application/vnd.sun.xml.impress' ], html : '', // setup on elFinder bootup setup : function(opts, fm) { if (fm.UA.Mobile || fm.UA.ltIE8) { this.disabled = true; } }, // Prepare on before show dialog prepare : function(base, dialogOpts, file) { var elfNode = base.editor.fm.getUI(); $(base).height(elfNode.height()); dialogOpts.width = Math.max(dialogOpts.width || 0, elfNode.width() * 0.8); }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, dum, fm) { var ta = this, ifm = $(this).hide(), uiToast = fm.getUI('toast'), spnr = $('
') .html('' + fm.i18n('nowLoading') + '') .appendTo(ifm.parent()), cdata = function() { var data = ''; $.each(fm.customData, function(key, val) { data += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(val); }); return data; }; $(ta).data('xhr', fm.request({ data: { cmd: 'editor', name: ta.editor.confObj.info.cmdCheck, method: 'init', 'args[target]': file.hash, 'args[lang]' : fm.lang, 'args[cdata]' : cdata() }, preventDefault : true }).done(function(data) { var opts; if (data.zohourl) { opts = { css: { height: '100%' } }; // trigger event 'editEditorPrepare' ta.editor.trigger('Prepare', { node: ta, editorObj: void(0), instance: ifm, opts: opts }); ifm.attr('src', data.zohourl).show().css(opts.css); if (data.warning) { uiToast.appendTo(ta.closest('.ui-dialog')); fm.toast({ msg: fm.i18n(data.warning), mode: 'warning', timeOut: 0, onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); }, button: { text: 'btnYes' } }); } } else { data.error && fm.error(data.error); ta.elfinderdialog('destroy'); } }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }).always(function() { spnr.remove(); })); }, load : function() {}, getContent : function() {}, save : function() {}, // Before dialog close beforeclose : iframeClose, // On dialog closed close : function(ta) { var fm = this.fm, xhr = $(ta).data('xhr'); if (xhr.state() === 'pending') { xhr.reject(); } } }, { // Zip Archive with FlySystem info : { id : 'ziparchive', name : 'btnMount', iconImg : 'img/toolbar.png 0 -416', cmdCheck : 'ZipArchive', edit : function(file, editor) { var fm = this, dfrd = $.Deferred(); fm.request({ data:{ cmd: 'netmount', protocol: 'ziparchive', host: file.hash, path: file.phash }, preventFail: true, notify : {type : 'netmount', cnt : 1, hideCnt : true} }).done(function(data) { var pdir; if (data.added && data.added.length) { if (data.added[0].phash) { if (pdir = fm.file(data.added[0].phash)) { if (! pdir.dirs) { pdir.dirs = 1; fm.change({ changed: [ pdir ] }); } } } fm.one('netmountdone', function() { fm.exec('open', data.added[0].hash); fm.one('opendone', function() { data.toast && fm.toast(data.toast); }); }); } dfrd.resolve(); }) .fail(function(error) { dfrd.reject(error); }); return dfrd; } }, mimes : ['application/zip'], load : function() {}, save : function(){} }, { // Simple Text (basic textarea editor) info : { id : 'textarea', name : 'TextArea', useTextAreaEvent : true }, load : function(textarea) { // trigger event 'editEditorPrepare' this.trigger('Prepare', { node: textarea, editorObj: void(0), instance: void(0), opts: {} }); textarea.setSelectionRange && textarea.setSelectionRange(0, 0); $(textarea).trigger('focus').show(); }, save : function(){} }, { // File converter with online-convert.com info : { id : 'onlineconvert', name : 'Online Convert', iconImg : 'img/editor-icons.png 0 -144', cmdCheck : 'OnlineConvert', preventGet: true, hideButtons: true, single: true, converter: true, canMakeEmpty: false, integrate: { title: 'ONLINE-CONVERT.COM', link: 'https://online-convert.com' } }, mimes : ['*'], html : '
', // setup on elFinder bootup setup : function(opts, fm) { var mOpts = opts.extraOptions.onlineConvert || {maxSize:100,showLink:true}; if (mOpts.maxSize) { this.info.maxSize = mOpts.maxSize * 1048576; } this.set = Object.assign({ url : 'https://%s.online-convert.com%s?external_url=', conv : { Archive: {'7Z':{}, 'BZ2':{ext:'bz'}, 'GZ':{}, 'ZIP':{}}, Audio: {'MP3':{}, 'OGG':{ext:'oga'}, 'WAV':{}, 'WMA':{}, 'AAC':{}, 'AIFF':{ext:'aif'}, 'FLAC':{}, 'M4A':{}, 'MMF':{}, 'OPUS':{ext:'oga'}}, Document: {'DOC':{}, 'DOCX':{}, 'HTML':{}, 'ODT':{}, 'PDF':{}, 'PPT':{}, 'PPTX':{}, 'RTF':{}, 'SWF':{}, 'TXT':{}}, eBook: {'AZW3':{ext:'azw'}, 'ePub':{}, 'FB2':{ext:'xml'}, 'LIT':{}, 'LRF':{}, 'MOBI':{}, 'PDB':{}, 'PDF':{},'PDF-eBook':{ext:'pdf'}, 'TCR':{}}, Hash: {'Adler32':{}, 'Apache-htpasswd':{}, 'Blowfish':{}, 'CRC32':{}, 'CRC32B':{}, 'Gost':{}, 'Haval128':{},'MD4':{}, 'MD5':{}, 'RIPEMD128':{}, 'RIPEMD160':{}, 'SHA1':{}, 'SHA256':{}, 'SHA384':{}, 'SHA512':{}, 'Snefru':{}, 'Std-DES':{}, 'Tiger128':{}, 'Tiger128-calculator':{}, 'Tiger128-converter':{}, 'Tiger160':{}, 'Tiger192':{}, 'Whirlpool':{}}, Image: {'BMP':{}, 'EPS':{ext:'ai'}, 'GIF':{}, 'EXR':{}, 'ICO':{}, 'JPG':{}, 'PNG':{}, 'SVG':{}, 'TGA':{}, 'TIFF':{ext:'tif'}, 'WBMP':{}, 'WebP':{}}, Video: {'3G2':{}, '3GP':{}, 'AVI':{}, 'FLV':{}, 'HLS':{ext:'m3u8'}, 'MKV':{}, 'MOV':{}, 'MP4':{}, 'MPEG-1':{ext:'mpeg'}, 'MPEG-2':{ext:'mpeg'}, 'OGG':{ext:'ogv'}, 'OGV':{}, 'WebM':{}, 'WMV':{}, 'Android':{link:'/convert-video-for-%s',ext:'mp4'}, 'Blackberry':{link:'/convert-video-for-%s',ext:'mp4'}, 'DPG':{link:'/convert-video-for-%s',ext:'avi'}, 'iPad':{link:'/convert-video-for-%s',ext:'mp4'}, 'iPhone':{link:'/convert-video-for-%s',ext:'mp4'}, 'iPod':{link:'/convert-video-for-%s',ext:'mp4'}, 'Nintendo-3DS':{link:'/convert-video-for-%s',ext:'avi'}, 'Nintendo-DS':{link:'/convert-video-for-%s',ext:'avi'}, 'PS3':{link:'/convert-video-for-%s',ext:'mp4'}, 'Wii':{link:'/convert-video-for-%s',ext:'avi'}, 'Xbox':{link:'/convert-video-for-%s',ext:'wmv'}} }, catExts : { Hash: 'txt' }, link : '', useTabs : ($.fn.tabs && !fm.UA.iOS)? true : false // Can't work on iOS, I don't know why. }, mOpts); }, // Prepare on before show dialog prepare : function(base, dialogOpts, file) { var elfNode = base.editor.fm.getUI(); $(base).height(elfNode.height()); dialogOpts.width = Math.max(dialogOpts.width || 0, elfNode.width() * 0.8); }, // Initialization of editing node (this: this editors HTML node) init : function(id, file, dum, fm) { var ta = this, confObj = ta.editor.confObj, set = confObj.set, uiToast = fm.getUI('toast'), idxs = {}, allowZip = fm.uploadMimeCheck('application/zip', file.phash), selfUrl = $('base').length? document.location.href.replace(/#.*$/, '') : '', getExt = function(cat, con) { var c; if (set.catExts[cat]) { return set.catExts[cat]; } if (set.conv[cat] && (c = set.conv[cat][con])) { return (c.ext || con).toLowerCase(); } return con.toLowerCase(); }, setOptions = function(cat, done) { var type, dfdInit, dfd; if (typeof confObj.api === 'undefined') { dfdInit = fm.request({ data: { cmd: 'editor', name: 'OnlineConvert', method: 'init' }, preventDefault : true }); } else { dfdInit = $.Deferred().resolve({api: confObj.api}); } cat = cat.toLowerCase(); dfdInit.done(function(data) { confObj.api = data.api; if (confObj.api) { if (cat) { type = '?category=' + cat; } else { type = ''; cat = 'all'; } if (!confObj.conversions) { confObj.conversions = {}; } if (!confObj.conversions[cat]) { dfd = $.getJSON('https://api2.online-convert.com/conversions' + type); } else { dfd = $.Deferred().resolve(confObj.conversions[cat]); } dfd.done(function(d) { confObj.conversions[cat] = d; $.each(d, function(i, o) { btns[set.useTabs? 'children' : 'find']('.onlineconvert-category-' + o.category).children('.onlineconvert-' + o.target).trigger('makeoption', o); }); done && done(); }); } }); }, btns = (function() { var btns = $('
').on('click', 'button', function() { var b = $(this), opts = b.data('opts') || null, cat = b.closest('.onlineconvert-category').data('cname'), con = b.data('conv'); if (confObj.api === true) { api({ category: cat, convert: con, options: opts }); } }).on('change', function(e) { var t = $(e.target), p = t.parent(), b = t.closest('.elfinder-edit-onlineconvert-button').children('button:first'), o = b.data('opts') || {}, v = p.data('type') === 'boolean'? t.is(':checked') : t.val(); e.stopPropagation(); if (v) { if (p.data('type') === 'integer') { v = parseInt(v); } if (p.data('pattern')) { var reg = new RegExp(p.data('pattern')); if (!reg.test(v)) { requestAnimationFrame(function() { fm.error('"' + fm.escape(v) + '" is not match to "/' + fm.escape(p.data('pattern')) + '/"'); }); v = null; } } } if (v) { o[t.parent().data('optkey')] = v; } else { delete o[p.data('optkey')]; } b.data('opts', o); }), ul = $('
    '), oform = function(n, o) { var f = $('

    ').data('optkey', n).data('type', o.type), checked = '', disabled = '', nozip = false, opts, btn, elm; if (o.description) { f.attr('title', fm.i18n(o.description)); } if (o.pattern) { f.data('pattern', o.pattern); } f.append($('').text(fm.i18n(n) + ' : ')); if (o.type === 'boolean') { if (o['default'] || (nozip = (n === 'allow_multiple_outputs' && !allowZip))) { checked = ' checked'; if (nozip) { disabled = ' disabled'; } btn = this.children('button:first'); opts = btn.data('opts') || {}; opts[n] = true; btn.data('opts', opts); } f.append($('')); } else if (o['enum']){ elm = $('').append($('').text('Select...')); $.each(o['enum'], function(i, v) { elm.append($('').text(v)); }); f.append(elm); } else { f.append($('')); } return f; }, makeOption = function(o) { var elm = this, b = $('').on('click', function() { f.toggle(); }), f = $('
    ').hide(); if (o.options) { $.each(o.options, function(k, v) { k !== 'download_password' && f.append(oform.call(elm, k, v)); }); } elm.append(b, f); }, ts = (+new Date()), i = 0; if (!confObj.ext2mime) { confObj.ext2mime = Object.assign(fm.arrayFlip(fm.mimeTypes), ext2mime); } $.each(set.conv, function(t, c) { var cname = t.toLowerCase(), id = 'elfinder-edit-onlineconvert-' + cname + ts, type = $('
    ').data('cname', t), cext; $.each(c, function(n, o) { var nl = n.toLowerCase(), ext = getExt(t, n); if (!confObj.ext2mime[ext]) { if (cname === 'audio' || cname === 'image' || cname === 'video') { confObj.ext2mime[ext] = cname + '/x-' + nl; } else { confObj.ext2mime[ext] = 'application/octet-stream'; } } if (fm.uploadMimeCheck(confObj.ext2mime[ext], file.phash)) { type.append($('
    ').on('makeoption', function(e, data) { var elm = $(this); if (!elm.children('.elfinder-button-icon-preference').length) { makeOption.call(elm, data); } }).append($('').text(n).data('conv', n))); } }); if (type.children().length) { ul.append($('
  • ').append($('').attr('href', selfUrl + '#' + id).text(t))); btns.append(type); idxs[cname] = i++; } }); if (set.useTabs) { btns.prepend(ul).tabs({ beforeActivate: function(e, ui) { setOptions(ui.newPanel.data('cname')); } }); } else { $.each(set.conv, function(t) { var tl = t.toLowerCase(); btns.append($('
    ').append($('').text(t)).append(btns.children('.onlineconvert-category-' + tl))); }); } return btns; })(), select = $(this) .append( btns, (set.showLink? $(set.link) : null) ), spnr = $('
    ') .hide() .html('' + fm.i18n('nowLoading') + '') .appendTo(select.parent()), prog = $('
    ').appendTo(spnr), _url = null, url = function() { var onetime; if (_url) { return $.Deferred().resolve(_url); } else { spnr.show(); return fm.forExternalUrl(file.hash, { progressBar: prog }).done(function(url) { _url = url; }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }).always(function() { spnr.hide(); }); } }, api = function(opts) { $(ta).data('dfrd', url().done(function(url) { select.fadeOut(); setStatus({info: 'Start conversion request.'}); fm.request({ data: { cmd: 'editor', name: 'OnlineConvert', method: 'api', 'args[category]' : opts.category.toLowerCase(), 'args[convert]' : opts.convert.toLowerCase(), 'args[options]' : JSON.stringify(opts.options), 'args[source]' : fm.convAbsUrl(url), 'args[filename]' : fm.splitFileExtention(file.name)[0] + '.' + getExt(opts.category, opts.convert), 'args[mime]' : file.mime }, preventDefault : true }).done(function(data) { checkRes(data.apires, opts.category, opts.convert); }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }); })); }, checkRes = function(res, cat, con) { var status, err = []; if (res && res.id) { status = res.status; if (status.code === 'failed') { spnr.hide(); if (res.errors && res.errors.length) { $.each(res.errors, function(i, o) { o.message && err.push(o.message); }); } fm.error(err.length? err : status.info); select.fadeIn(); } else if (status.code === 'completed') { upload(res); } else { setStatus(status); setTimeout(function() { polling(res.id); }, 1000); } } else { uiToast.appendTo(ta.closest('.ui-dialog')); if (res.message) { fm.toast({ msg: fm.i18n(res.message), mode: 'error', timeOut: 5000, onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); } }); } fm.toast({ msg: fm.i18n('editorConvNoApi'), mode: 'error', timeOut: 3000, onHidden: function() { uiToast.children().length === 1 && uiToast.appendTo(fm.getUI()); } }); spnr.hide(); select.show(); } }, setStatus = function(status) { spnr.show().children('.elfinder-spinner-text').text(status.info); }, polling = function(jobid) { fm.request({ data: { cmd: 'editor', name: 'OnlineConvert', method: 'api', 'args[jobid]': jobid }, preventDefault : true }).done(function(data) { checkRes(data.apires); }).fail(function(error) { error && fm.error(error); ta.elfinderdialog('destroy'); }); }, upload = function(res) { var output = res.output, id = res.id, url = ''; spnr.hide(); if (output && output.length) { ta.elfinderdialog('destroy'); $.each(output, function(i, o) { if (o.uri) { url += o.uri + '\n'; } }); fm.upload({ target: file.phash, files: [url], type: 'text', extraData: { contentSaveId: 'OnlineConvert-' + res.id } }); } }, mode = 'document', cl, m; select.parent().css({overflow: 'auto'}).addClass('overflow-scrolling-touch'); if (m = file.mime.match(/^(audio|image|video)/)) { mode = m[1]; } if (set.useTabs) { if (idxs[mode]) { btns.tabs('option', 'active', idxs[mode]); } } else { cl = Object.keys(set.conv).length; $.each(set.conv, function(t) { if (t.toLowerCase() === mode) { setOptions(t, function() { $.each(set.conv, function(t0) { t0.toLowerCase() !== mode && setOptions(t0); }); }); return false; } cl--; }); if (!cl) { $.each(set.conv, function(t) { setOptions(t); }); } select.parent().scrollTop(btns.children('.onlineconvert-fieldset-' + mode).offset().top); } }, load : function() {}, getContent : function() {}, save : function() {}, // On dialog closed close : function(ta) { var fm = this.fm, dfrd = $(ta).data('dfrd'); if (dfrd && dfrd.state() === 'pending') { dfrd.reject(); } } } ]; }, window.elFinder)); /** * German Translation / Deutsche Übersetzung * @author JPG & Mace * @author tora60 from pragmaMx.org * @author Timo-Linde * @author OSWorX * @author Maximilian Schwarz * @author SF Webdesign * @version 2019-12-13 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.de = { translator : 'JPG & Mace <dev@flying-datacenter.de>, tora60 from pragmaMx.org, Timo-Linde <info@timo-linde.de>, OSWorX <info@osworx.net>, Maximilian Schwarz <info@deefuse.de>, SF Webdesign <webdesign@stephan-frank.de>', language : 'Deutsch', direction : 'ltr', dateFormat : 'j. F Y H:i', // 3. März 2020 14:58 fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM nonameDateFormat : 'ymd-His', // to apply if upload file is noname: 120513172700 messages : { /********************************** errors **********************************/ 'error' : 'Fehler', 'errUnknown' : 'Unbekannter Fehler.', 'errUnknownCmd' : 'Unbekannter Befehl.', 'errJqui' : 'Ungültige jQuery UI-Konfiguration. Die Komponenten Selectable, Draggable und Droppable müssen inkludiert sein.', 'errNode' : 'Für elFinder muss das DOM-Element erstellt werden.', 'errURL' : 'Ungültige elFinder-Konfiguration! Die URL-Option ist nicht gesetzt.', 'errAccess' : 'Zugriff verweigert.', 'errConnect' : 'Verbindung zum Backend fehlgeschlagen.', 'errAbort' : 'Verbindung abgebrochen.', 'errTimeout' : 'Zeitüberschreitung der Verbindung.', 'errNotFound' : 'Backend nicht gefunden.', 'errResponse' : 'Ungültige Backend-Antwort.', 'errConf' : 'Ungültige Backend-Konfiguration.', 'errJSON' : 'PHP JSON-Modul nicht vorhanden.', 'errNoVolumes' : 'Keine lesbaren Laufwerke vorhanden.', 'errCmdParams' : 'Ungültige Parameter für Befehl: "$1".', 'errDataNotJSON' : 'Daten nicht im JSON-Format.', 'errDataEmpty' : 'Daten sind leer.', 'errCmdReq' : 'Backend-Anfrage benötigt Befehl.', 'errOpen' : 'Kann "$1" nicht öffnen.', 'errNotFolder' : 'Objekt ist kein Ordner.', 'errNotFile' : 'Objekt ist keine Datei.', 'errRead' : 'Kann "$1" nicht öffnen.', 'errWrite' : 'Kann nicht in "$1" schreiben.', 'errPerm' : 'Zugriff verweigert.', 'errLocked' : '"$1" ist gesperrt und kann nicht umbenannt, verschoben oder gelöscht werden.', 'errExists' : 'Die Datei "$1" existiert bereits.', 'errInvName' : 'Ungültiger Dateiname.', 'errInvDirname' : 'Ungültiger Ordnername.', // from v2.1.24 added 12.4.2017 'errFolderNotFound' : 'Ordner nicht gefunden.', 'errFileNotFound' : 'Datei nicht gefunden.', 'errTrgFolderNotFound' : 'Zielordner "$1" nicht gefunden.', 'errPopup' : 'Der Browser hat das Pop-Up-Fenster unterbunden. Um die Datei zu öffnen, Pop-Ups in den Browsereinstellungen aktivieren.', 'errMkdir' : 'Kann Ordner "$1" nicht erstellen.', 'errMkfile' : 'Kann Datei "$1" nicht erstellen.', 'errRename' : 'Kann "$1" nicht umbenennen.', 'errCopyFrom' : 'Kopieren von Dateien von "$1" nicht erlaubt.', 'errCopyTo' : 'Kopieren von Dateien nach "$1" nicht erlaubt.', 'errMkOutLink' : 'Der Link kann nicht außerhalb der Partition führen.', // from v2.1 added 03.10.2015 'errUpload' : 'Upload-Fehler.', // old name - errUploadCommon 'errUploadFile' : 'Kann "$1" nicht hochladen.', // old name - errUpload 'errUploadNoFiles' : 'Keine Dateien zum Hochladen gefunden.', 'errUploadTotalSize' : 'Gesamtgröße überschreitet die Maximalgröße.', // old name - errMaxSize 'errUploadFileSize' : 'Die Datei überschreitet die Maximalgröße.', // old name - errFileMaxSize 'errUploadMime' : 'Dateiart (mime) nicht zulässig.', 'errUploadTransfer' : '"$1" Übertragungsfehler.', 'errUploadTemp' : 'Kann temporäre Datei nicht erstellen.', // from v2.1 added 26.09.2015 'errNotReplace' : 'Das Objekt "$1" existiert bereits an dieser Stelle und kann nicht durch ein Objekt eines anderen Typs ersetzt werden.', // new 'errReplace' : 'Kann "$1" nicht ersetzen.', 'errSave' : 'Kann "$1" nicht speichern.', 'errCopy' : 'Kann "$1" nicht kopieren.', 'errMove' : 'Kann "$1" nicht verschieben.', 'errCopyInItself' : '"$1" kann sich nicht in sich selbst kopieren.', 'errRm' : 'Kann "$1" nicht entfernen.', 'errTrash' : 'Kann Objekt nicht in Mülleimer legen.', // from v2.1.24 added 30.4.2017 'errRmSrc' : 'Kann Quelldatei(en) nicht entfernen.', 'errExtract' : 'Kann "$1" nicht entpacken.', 'errArchive' : 'Archiv konnte nicht erstellt werden.', 'errArcType' : 'Archivtyp nicht untersützt.', 'errNoArchive' : 'Bei der Datei handelt es sich nicht um ein Archiv, oder die Archivart wird nicht unterstützt.', 'errCmdNoSupport' : 'Das Backend unterstützt diesen Befehl nicht.', 'errReplByChild' : 'Der Ordner "$1" kann nicht durch etwas ersetzt werden, das ihn selbst enthält.', 'errArcSymlinks' : 'Aus Sicherheitsgründen ist es verboten, ein Archiv mit symbolischen Links zu extrahieren.', // edited 24.06.2012 'errArcMaxSize' : 'Die Archivdateien übersteigen die maximal erlaubte Größe.', 'errResize' : 'Größe von "$1" kann nicht geändert werden.', 'errResizeDegree' : 'Ungültiger Rotationswert.', // added 7.3.2013 'errResizeRotate' : 'Bild konnte nicht gedreht werden.', // added 7.3.2013 'errResizeSize' : 'Ungültige Bildgröße.', // added 7.3.2013 'errResizeNoChange' : 'Bildmaße nicht geändert.', // added 7.3.2013 'errUsupportType' : 'Nicht unterstützte Dateiart.', 'errNotUTF8Content' : 'Die Datei "$1" ist nicht im UTF-8-Format und kann nicht bearbeitet werden.', // added 9.11.2011 'errNetMount' : 'Verbindung mit "$1" nicht möglich.', // added 17.04.2012 'errNetMountNoDriver' : 'Nicht unterstütztes Protokoll.', // added 17.04.2012 'errNetMountFailed' : 'Verbindung fehlgeschlagen.', // added 17.04.2012 'errNetMountHostReq' : 'Host benötigt.', // added 18.04.2012 'errSessionExpires' : 'Diese Sitzung ist aufgrund von Inaktivität abgelaufen.', 'errCreatingTempDir' : 'Erstellung des temporären Ordners nicht möglich: "$1"', 'errFtpDownloadFile' : 'Download der Datei über FTP nicht möglich: "$1"', 'errFtpUploadFile' : 'Upload der Datei zu FTP nicht möglich: "$1"', 'errFtpMkdir' : 'Erstellung des Remote-Ordners mit FTP nicht möglich: "$1"', 'errArchiveExec' : 'Fehler beim Archivieren der Dateien: "$1"', 'errExtractExec' : 'Fehler beim Extrahieren der Dateien: "$1"', 'errNetUnMount' : 'Kann nicht ausgehängt werden.', // from v2.1 added 30.04.2012 'errConvUTF8' : 'Kann nicht zu UTF-8 konvertiert werden.', // from v2.1 added 08.04.2014 'errFolderUpload' : 'Ordner kann nich hochladen werden, eventuell mit Google Chrome versuchen.', // from v2.1 added 26.6.2015 'errSearchTimeout' : 'Zeitüberschreitung während der Suche nach "$1". Suchergebnis ist unvollständig.', // from v2.1 added 12.1.2016 'errReauthRequire' : 'Erneutes Anmelden ist erforderlich.', // from v2.1.10 added 24.3.2016 'errMaxTargets' : 'Die maximale Anzahl auswählbarer Elemente ist $1', // from v2.1.17 added 17.10.2016 'errRestore' : 'Datei konnte nicht aus Mülleimer wieder hergestellt werden bzw. Ziel für Wiederherstellung nicht gefunden.', // from v2.1.24 added 3.5.2017 'errEditorNotFound' : 'Kein Editor für diesen Dateityp gefunden.', // from v2.1.25 added 23.5.2017 'errServerError' : 'Ein serverseitiger Fehler trat auf.', // from v2.1.25 added 16.6.2017 'errEmpty' : 'Konnte Ordner "$1" nicht Leeren.', // from v2.1.25 added 22.6.2017 'moreErrors' : 'Es sind noch $1 weitere Fehler.', // from v2.1.44 added 13.12.2019 /******************************* commands names ********************************/ 'cmdarchive' : 'Archiv erstellen', 'cmdback' : 'Zurück', 'cmdcopy' : 'Kopieren', 'cmdcut' : 'Ausschneiden', 'cmddownload' : 'Herunterladen', 'cmdduplicate' : 'Duplizieren', 'cmdedit' : 'Datei bearbeiten', 'cmdextract' : 'Archiv entpacken', 'cmdforward' : 'Vorwärts', 'cmdgetfile' : 'Datei auswählen', 'cmdhelp' : 'Über diese Software', 'cmdhome' : 'Startordner', 'cmdinfo' : 'Informationen', 'cmdmkdir' : 'Neuer Ordner', 'cmdmkdirin' : 'In neuen Ordner', // from v2.1.7 added 19.2.2016 'cmdmkfile' : 'Neuer Datei', 'cmdopen' : 'Öffnen', 'cmdpaste' : 'Einfügen', 'cmdquicklook' : 'Vorschau', 'cmdreload' : 'Aktualisieren', 'cmdrename' : 'Umbenennen', 'cmdrm' : 'Löschen', 'cmdtrash' : 'In den Mülleimer legen', //from v2.1.24 added 29.4.2017 'cmdrestore' : 'Wiederherstellen', //from v2.1.24 added 3.5.2017 'cmdsearch' : 'Suchen', 'cmdup' : 'In übergeordneten Ordner wechseln', 'cmdupload' : 'Datei hochladen', 'cmdview' : 'Ansehen', 'cmdresize' : 'Größe ändern & drehen', 'cmdsort' : 'Sortieren', 'cmdnetmount' : 'Verbinde mit Netzwerkspeicher', // added 18.04.2012 'cmdnetunmount': 'Abhängen', // from v2.1 added 30.04.2012 'cmdplaces' : 'Favoriten', // added 28.12.2014 'cmdchmod' : 'Berechtigung ändern', // from v2.1 added 20.6.2015 'cmdopendir' : 'Einen Ordner öffnen', // from v2.1 added 13.1.2016 'cmdcolwidth' : 'Spaltenbreite zurücksetzen', // from v2.1.13 added 12.06.2016 'cmdfullscreen': 'Vollbild', // from v2.1.15 added 03.08.2016 'cmdmove' : 'Verschieben', // from v2.1.15 added 21.08.2016 'cmdempty' : 'Ordner Leeren', // from v2.1.25 added 22.06.2017 'cmdundo' : 'Rückgängig', // from v2.1.27 added 31.07.2017 'cmdredo' : 'Wiederholen', // from v2.1.27 added 31.07.2017 'cmdpreference': 'Einstellungen', // from v2.1.27 added 03.08.2017 'cmdselectall' : 'Alle auswählen', // from v2.1.28 added 15.08.2017 'cmdselectnone': 'Keine auswählen', // from v2.1.28 added 15.08.2017 'cmdselectinvert': 'Auswahl rückgängig machen', // from v2.1.28 added 15.08.2017 'cmdopennew' : 'In neuem Fenster öffnen', // from v2.1.38 added 3.4.2018 'cmdhide' : 'Verstecken', // from v2.1.41 added 13.12.2019 /*********************************** buttons ***********************************/ 'btnClose' : 'Schließen', 'btnSave' : 'Speichern', 'btnRm' : 'Entfernen', 'btnApply' : 'Anwenden', 'btnCancel' : 'Abbrechen', 'btnNo' : 'Nein', 'btnYes' : 'Ja', 'btnDiscard': 'Änderungen verwerfen', 'btnMount' : 'Verbinden', // added 18.04.2012 'btnApprove': 'Gehe zu $1 und genehmige', // from v2.1 added 26.04.2012 'btnUnmount': 'Auswerfen', // from v2.1 added 30.04.2012 'btnConv' : 'Konvertieren', // from v2.1 added 08.04.2014 'btnCwd' : 'Arbeitspfad', // from v2.1 added 22.5.2015 'btnVolume' : 'Partition', // from v2.1 added 22.5.2015 'btnAll' : 'Alle', // from v2.1 added 22.5.2015 'btnMime' : 'MIME-Typ', // from v2.1 added 22.5.2015 'btnFileName':'Dateiname', // from v2.1 added 22.5.2015 'btnSaveClose': 'Speichern & Schließen', // from v2.1 added 12.6.2015 'btnBackup' : 'Sicherung', // fromv2.1 added 28.11.2015 'btnRename' : 'Umbenennen', // from v2.1.24 added 6.4.2017 'btnRenameAll' : 'Alle Umbenennen', // from v2.1.24 added 6.4.2017 'btnPrevious' : 'Zurück ($1/$2)', // from v2.1.24 added 11.5.2017 'btnNext' : 'Weiter ($1/$2)', // from v2.1.24 added 11.5.2017 'btnSaveAs' : 'Speichern als', // from v2.1.25 added 24.5.2017 /******************************** notifications ********************************/ 'ntfopen' : 'Öffne Ordner', 'ntffile' : 'Öffne Datei', 'ntfreload' : 'Ordnerinhalt neu', 'ntfmkdir' : 'Erstelle Ordner', 'ntfmkfile' : 'Erstelle Dateien', 'ntfrm' : 'Lösche Dateien', 'ntfcopy' : 'Kopiere Dateien', 'ntfmove' : 'Verschiebe Dateien', 'ntfprepare' : 'Kopiervorgang initialisieren', 'ntfrename' : 'Benenne Dateien um', 'ntfupload' : 'Dateien hochladen', 'ntfdownload' : 'Dateien herunterladen', 'ntfsave' : 'Speichere Datei', 'ntfarchive' : 'Erstelle Archiv', 'ntfextract' : 'Entpacke Dateien', 'ntfsearch' : 'Suche', 'ntfresize' : 'Bildgrößen ändern', 'ntfsmth' : 'Bin beschäftigt ..', 'ntfloadimg' : 'Lade Bild ..', 'ntfnetmount' : 'Mit Netzwerkspeicher verbinden', // added 18.04.2012 'ntfnetunmount': 'Netzwerkspeicher auswerfen', // from v2.1 added 30.04.2012 'ntfdim' : 'Bildgröße erfassen', // added 20.05.2013 'ntfreaddir' : 'Lese Ordnerinformationen', // from v2.1 added 01.07.2013 'ntfurl' : 'Hole URL von Link', // from v2.1 added 11.03.2014 'ntfchmod' : 'Ändere Dateiberechtigungen', // from v2.1 added 20.6.2015 'ntfpreupload': 'Upload-Dateinamen überprüfen', // from v2.1 added 31.11.2015 'ntfzipdl' : 'Erstelle Datei zum Download', // from v2.1.7 added 23.1.2016 'ntfparents' : 'Beziehe Pfad Informationen', // from v2.1.17 added 2.11.2016 'ntfchunkmerge': 'Upload läuft', // from v2.1.17 added 2.11.2016 'ntftrash' : 'Bewege in den Mülleimer', // from v2.1.24 added 2.5.2017 'ntfrestore' : 'Wiederherstellung aus Mülleimer', // from v2.1.24 added 3.5.2017 'ntfchkdir' : 'Prüfe Zielordner', // from v2.1.24 added 3.5.2017 'ntfundo' : 'Vorherige Operation rückgängig machen', // from v2.1.27 added 31.07.2017 'ntfredo' : 'Wiederherstellen', // from v2.1.27 added 31.07.2017 'ntfchkcontent' : 'Überprüfe Inhalte', // from v2.1.41 added 13.12.2019 /*********************************** volumes *********************************/ 'volume_Trash' : 'Mülleimer', //from v2.1.24 added 29.4.2017 /************************************ dates **********************************/ 'dateUnknown' : 'unbekannt', 'Today' : 'Heute', 'Yesterday' : 'Gestern', 'msJan' : 'Jan', 'msFeb' : 'Feb', 'msMar' : 'Mär', 'msApr' : 'Apr', 'msMay' : 'Mai', 'msJun' : 'Jun', 'msJul' : 'Jul', 'msAug' : 'Aug', 'msSep' : 'Sep', 'msOct' : 'Okt', 'msNov' : 'Nov', 'msDec' : 'Dez', 'January' : 'Januar', 'February' : 'Februar', 'March' : 'März', 'April' : 'April', 'May' : 'Mai', 'June' : 'Juni', 'July' : 'Juli', 'August' : 'August', 'September' : 'September', 'October' : 'Oktober', 'November' : 'November', 'December' : 'Dezember', 'Sunday' : 'Sonntag', 'Monday' : 'Montag', 'Tuesday' : 'Dienstag', 'Wednesday' : 'Mittwoch', 'Thursday' : 'Donnerstag', 'Friday' : 'Freitag', 'Saturday' : 'Samstag', 'Sun' : 'So', 'Mon' : 'Mo', 'Tue' : 'Di', 'Wed' : 'Mi', 'Thu' : 'Do', 'Fri' : 'Fr', 'Sat' : 'Sa', /******************************** sort variants ********************************/ 'sortname' : 'nach Name', 'sortkind' : 'nach Art', 'sortsize' : 'nach Größe', 'sortdate' : 'nach Datum', 'sortFoldersFirst' : 'Ordner zuerst', 'sortperm' : 'nach Berechtigung', // from v2.1.13 added 13.06.2016 'sortmode' : 'nach Modus', // from v2.1.13 added 13.06.2016 'sortowner' : 'nach Besitzer', // from v2.1.13 added 13.06.2016 'sortgroup' : 'nach Gruppe', // from v2.1.13 added 13.06.2016 'sortAlsoTreeview' : 'auch Baumansicht', // from v2.1.15 added 01.08.2016 /********************************** new items **********************************/ 'untitled file.txt' : 'Neues Textdokument (.txt)', // added 10.11.2015 'untitled folder' : 'Neuer Ordner', // added 10.11.2015 'Archive' : 'Neues Archiv', // from v2.1 added 10.11.2015 'untitled file' : 'Neue Datei $1', // from v2.1.41 added 13.12.2019 'extentionfile' : '$1: Datei', // from v2.1.41 added 13.12.2019 'extentiontype' : '$1: $2', // from v2.1.43 added 13.12.2018 /********************************** messages **********************************/ 'confirmReq' : 'Bestätigung benötigt', 'confirmRm' : 'Sollen die Dateien gelöscht werden?
    Vorgang ist endgültig!', 'confirmRepl' : 'Datei ersetzen?', 'confirmRest' : 'Vorhandenes Element durch das Element aus Mülleimer ersetzen?', // fromv2.1.24 added 5.5.2017 'confirmConvUTF8' : 'Nicht UTF-8 kodiert
    Zu UTF-8 konvertieren?
    Inhalte werden zu UTF-8 konvertiert bei Speicherung.', // from v2.1 added 08.04.2014 'confirmNonUTF8' : 'Die Zeichencodierung dieser Datei konnte nicht erkannt werden. Es muss vorübergehend in UTF-8 zur Bearbeitung konvertiert werden.
    Bitte eine Zeichenkodierung dieser Datei auswählen.', // from v2.1.19 added 28.11.2016 'confirmNotSave' : 'Die Datei wurde geändert.
    Änderungen gehen verloren, wenn nicht gespeichert wird.', // from v2.1 added 15.7.2015 'confirmTrash' : 'Sicher diese Elemente in den Mülleimer verschieben?', // from v2.1.24 added 29.4.2017 'confirmMove' : 'Sicher alle Elemente nach "$1" verschieben?', // from v2.1.50 added 13.12.2019 'apllyAll' : 'Alles bestätigen', 'name' : 'Name', 'size' : 'Größe', 'perms' : 'Berechtigungen', 'modify' : 'Geändert', 'kind' : 'Typ', 'read' : 'Lesen', 'write' : 'Schreiben', 'noaccess' : 'Kein Zugriff', 'and' : 'und', 'unknown' : 'unbekannt', 'selectall' : 'Alle Dateien auswählen', 'selectfiles' : 'Dateien auswählen', 'selectffile' : 'Erste Datei auswählen', 'selectlfile' : 'Letzte Datei auswählen', 'viewlist' : 'Spaltenansicht', 'viewicons' : 'Symbolansicht', 'viewSmall' : 'Kleine Icons', // from v2.1.39 added 13.12.2019 'viewMedium' : 'Medium Icons', // from v2.1.39 added 13.12.2019 'viewLarge' : 'Große Icons', // from v2.1.39 added 13.12.2019 'viewExtraLarge' : 'Extragroße Icons', // from v2.1.39 added 13.12.2019 'places' : 'Favoriten', 'calc' : 'Berechne', 'path' : 'Pfad', 'aliasfor' : 'Verknüpfung zu', 'locked' : 'Gesperrt', 'dim' : 'Bildgröße', 'files' : 'Dateien', 'folders' : 'Ordner', 'items' : 'Objekte', 'yes' : 'ja', 'no' : 'nein', 'link' : 'Link', 'searcresult' : 'Suchergebnisse', 'selected' : 'Objekte ausgewählt', 'about' : 'Über', 'shortcuts' : 'Tastenkombinationen', 'help' : 'Hilfe', 'webfm' : 'Web-Dateiverwaltung', 'ver' : 'Version', 'protocolver' : 'Protokoll-Version', 'homepage' : 'Projekt-Webseite', 'docs' : 'Dokumentation', 'github' : 'Forke uns auf Github', 'twitter' : 'Folge uns auf twitter', 'facebook' : 'Begleite uns auf facebook', 'team' : 'Team', 'chiefdev' : 'Chefentwickler', 'developer' : 'Entwickler', 'contributor' : 'Unterstützer', 'maintainer' : 'Maintainer', 'translator' : 'Übersetzer', 'icons' : 'Icons', 'dontforget' : 'und vergiss nicht .. morgen ist auch noch ein Tag ..', 'shortcutsof' : 'Tastenkombinationen deaktiviert', 'dropFiles' : 'Dateien hier ablegen', 'or' : 'oder', 'selectForUpload' : 'Dateien zum Upload auswählen', 'moveFiles' : 'Dateien verschieben', 'copyFiles' : 'Dateien kopieren', 'restoreFiles' : 'Elemente wiederherstellen', // from v2.1.24 added 5.5.2017 'rmFromPlaces' : 'Lösche von Favoriten', 'aspectRatio' : 'Seitenverhältnis', 'scale' : 'Maßstab', 'width' : 'Breite', 'height' : 'Höhe', 'resize' : 'Größe ändern', 'crop' : 'Zuschneiden', 'rotate' : 'Drehen', 'rotate-cw' : 'Drehe 90° im Uhrzeigersinn', 'rotate-ccw' : 'Drehe 90° gegen Uhrzeigersinn', 'degree' : '°', 'netMountDialogTitle' : 'verbinde Netzwerkspeicher', // added 18.04.2012 'protocol' : 'Protokoll', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Benutzer', // added 18.04.2012 'pass' : 'Passwort', // added 18.04.2012 'confirmUnmount' : 'Soll "$1" ausgehängt werden', // from v2.1 added 30.04.2012 'dropFilesBrowser': 'Dateien in den Browser ziehen', // from v2.1 added 30.05.2012 'dropPasteFiles' : 'Dateien hier loslassen', // from v2.1 added 07.04.2014 'encoding' : 'Kodierung', // from v2.1 added 19.12.2014 'locale' : 'Lokal', // from v2.1 added 19.12.2014 'searchTarget' : 'Ziel: $1', // from v2.1 added 22.5.2015 'searchMime' : 'Suche nach MIME-Typ', // from v2.1 added 22.5.2015 'owner' : 'Besitzer', // from v2.1 added 20.6.2015 'group' : 'Gruppe', // from v2.1 added 20.6.2015 'other' : 'Andere', // from v2.1 added 20.6.2015 'execute' : 'Ausführen', // from v2.1 added 20.6.2015 'perm' : 'Berechtigung', // from v2.1 added 20.6.2015 'mode' : 'Modus', // from v2.1 added 20.6.2015 'emptyFolder' : 'Der Ordner ist leer', // from v2.1.6 added 30.12.2015 'emptyFolderDrop' : 'Der Ordner ist leer\\A Elemente durch Ziehen hinzufügen', // from v2.1.6 added 30.12.2015 'emptyFolderLTap' : 'Der Ordner ist leer\\A Elemente durch langes Tippen hinzufügen', // from v2.1.6 added 30.12.2015 'quality' : 'Qualität', // from v2.1.6 added 5.1.2016 'autoSync' : 'Automatische Synchronisation', // from v2.1.6 added 10.1.2016 'moveUp' : 'Nach oben bewegen', // from v2.1.6 added 18.1.2016 'getLink' : 'URL-Link holen', // from v2.1.7 added 9.2.2016 'selectedItems' : 'Ausgewählte Objekte ($1)', // from v2.1.7 added 2.19.2016 'folderId' : 'Ordner-ID', // from v2.1.10 added 3.25.2016 'offlineAccess' : 'Offline-Zugriff erlauben', // from v2.1.10 added 3.25.2016 'reAuth' : 'Erneut anmelden', // from v2.1.10 added 3.25.2016 'nowLoading' : 'Wird geladen...', // from v2.1.12 added 4.26.2016 'openMulti' : 'mehrere Dateien öffnen', // from v2.1.12 added 5.14.2016 'openMultiConfirm': 'Es wird versucht die $1 Dateien zu öffnen .. sicher im Browser öffnen?', // from v2.1.12 added 5.14.2016 'emptySearch' : 'Kein Suchergebnis', // from v2.1.12 added 5.16.2016 'editingFile' : 'Datei wird bearbeitet.', // from v2.1.13 added 6.3.2016 'hasSelected' : '$1 Objekt(e) ausgewählt.', // from v2.1.13 added 6.3.2016 'hasClipboard' : '$1 Objekte im Clipboard.', // from v2.1.13 added 6.3.2016 'incSearchOnly' : 'Inkrementelle Suche bezieht sich nur auf die aktuelle Ansicht.', // from v2.1.13 added 6.30.2016 'reinstate' : 'Wiederherstellen', // from v2.1.15 added 3.8.2016 'complete' : '$1 abgeschlossen', // from v2.1.15 added 21.8.2016 'contextmenu' : 'Kontextmenü', // from v2.1.15 added 9.9.2016 'pageTurning' : 'Seite umblättern', // from v2.1.15 added 10.9.2016 'volumeRoots' : 'Volume-Rootverzeichnisse', // from v2.1.16 added 16.9.2016 'reset' : 'Neustart', // from v2.1.16 added 1.10.2016 'bgcolor' : 'Hintergrund Farbe', // from v2.1.16 added 1.10.2016 'colorPicker' : 'Farbauswahl', // from v2.1.16 added 1.10.2016 '8pxgrid' : '8px Raster', // from v2.1.16 added 4.10.2016 'enabled' : 'Ein', // from v2.1.16 added 4.10.2016 'disabled' : 'Aus', // from v2.1.16 added 4.10.2016 'emptyIncSearch' : 'Keine Ergebnisse in der aktuellen Anzeige', // from v2.1.16 added 5.10.2016 'emptyLetSearch' : 'Die Ergebnisse der ersten Buchstabensuche sind in der aktuellen Ansicht leer.', // from v2.1.23 added 24.3.2017 'textLabel' : 'Text Bezeichnung', // from v2.1.17 added 13.10.2016 'minsLeft' : '$1 Minuten übrig', // from v2.1.17 added 13.11.2016 'openAsEncoding' : 'Wiedereröffnen mit ausgewählter Codierung', // from v2.1.19 added 2.12.2016 'saveAsEncoding' : 'Speichern mit der gewählten Kodierung', // from v2.1.19 added 2.12.2016 'selectFolder' : 'Verzeichnis auswählen', // from v2.1.20 added 13.12.2016 'firstLetterSearch': 'Erster Buchstabe suche', // from v2.1.23 added 24.3.2017 'presets' : 'Voreinstellungen', // from v2.1.25 added 26.5.2017 'tooManyToTrash' : 'Zu viele Elemente auf einmal für den Mülleimer.', // from v2.1.25 added 9.6.2017 'TextArea' : 'Textbereich', // from v2.1.25 added 14.6.2017 'folderToEmpty' : 'Leere Ordner "$1".', // from v2.1.25 added 22.6.2017 'filderIsEmpty' : 'Es befinden sich keine Elemente im Ordner "$1".', // from v2.1.25 added 22.6.2017 'preference' : 'Einstellungen', // from v2.1.26 added 28.6.2017 'language' : 'Spracheinstellungen', // from v2.1.26 added 28.6.2017 'clearBrowserData': 'Initialisiere die Einstellungen, welche in diesem Browser gespeichert sind', // from v2.1.26 added 28.6.2017 'toolbarPref' : 'Toolbareinstellung', // from v2.1.27 added 2.8.2017 'charsLeft' : '... $1 Zeichen übrig', // from v2.1.29 added 30.8.2017 'sum' : 'Summe', // from v2.1.29 added 28.9.2017 'roughFileSize' : 'Ungefähre Dateigröße', // from v2.1.30 added 2.11.2017 'autoFocusDialog' : 'Fokussierung auf das Element Dialog mit Mouseover', // from v2.1.30 added 2.11.2017 'select' : 'Auswählen', // from v2.1.30 added 23.11.2017 'selectAction' : 'Aktion bei der Auswahl der Datei', // from v2.1.30 added 23.11.2017 'useStoredEditor' : 'Öffnen mit dem zuletzt verwendeten Editor', // from v2.1.30 added 23.11.2017 'selectinvert' : 'Auswahl umkehren', // from v2.1.30 added 25.11.2017 'renameMultiple' : 'Sicher $1 ausgewählte Elemente in $2 umbenennen?
    Rückgängig nicht möglich!', // from v2.1.31 added 4.12.2017 'batchRename' : 'Stapelumbenennung', // from v2.1.31 added 8.12.2017 'plusNumber' : '+ Nummer', // from v2.1.31 added 8.12.2017 'asPrefix' : 'Vorzeichen hinzufügen', // from v2.1.31 added 8.12.2017 'asSuffix' : 'Nachzeichen hinzufügen', // from v2.1.31 added 8.12.2017 'changeExtention' : 'Erweiterung ändern', // from v2.1.31 added 8.12.2017 'columnPref' : 'Spalteneinstellungen (Listenansicht)', // from v2.1.32 added 6.2.2018 'reflectOnImmediate' : 'Alle Änderungen werden sofort im Archiv angewendet.', // from v2.1.33 added 2.3.2018 'reflectOnUnmount' : 'Alle Änderungen werden nicht angewendet bis dieses Volume entfernt wird.', // from v2.1.33 added 2.3.2018 'unmountChildren' : 'Die folgenden Datenträger, die auf diesem Datenträger eingehängt sind, werden ebenfalls ausgehängt. Sicher dass alle aushängt werden sollen?', // from v2.1.33 added 5.3.2018 'selectionInfo' : 'Auswahl Info', // from v2.1.33 added 7.3.2018 'hashChecker' : 'Datei-Hash-Algorithmen', // from v2.1.33 added 10.3.2018 'infoItems' : 'Info-Elemente (Auswahl-Info-Panel)', // from v2.1.38 added 28.3.2018 'pressAgainToExit': 'Drücken Sie erneut, um zu beenden.', // from v2.1.38 added 1.4.2018 'toolbar' : 'Symbolleiste', // from v2.1.38 added 4.4.2018 'workspace' : 'Arbeitsplatz', // from v2.1.38 added 4.4.2018 'dialog' : 'Dialog', // from v2.1.38 added 4.4.2018 'all' : 'Alle', // from v2.1.38 added 4.4.2018 'iconSize' : 'Icongröße (Symbolansicht)', // form v2.1.39 added 7.5.2018 'editorMaximized' : 'Öffne Editorfenster in voller Größe', // from v2.1.40 added 30.6.2018 'editorConvNoApi' : 'Aktuell keine API zur Bearbeitung verfügbar, bitte auf Webseite bearbeiten', //from v2.1.40 added 13.12.2019 'editorConvNeedUpload' : 'Um zu speichern nach der Bearbeitung Element entweder mit URL hochladen oder mit herunter geladener Datei', // from v2.1.40 added 13.12.2019 'convertOn' : 'Bearbeiten auf Seite $1', // from v2.1.40 added 13.12.2019 'integrations' : 'Integrationen', // from v2.1.40 added 13.12.2019 'integrationWith' : 'Diese Software hat folgende externe Dienste integriert. Vor Anwendung bitte die jeweiligen Nutzungsbedingungen usw. beachten', // from v2.1.40 added 13.12.2019 'showHidden' : 'Zeige versteckte Elemente', // from v2.1.41 added 13.12.2019 'hideHidden' : 'Verberge versteckte Elemente', // from v2.1.41 added 13.12.2019 'toggleHidden' : 'Zeige/Verberge versteckte Elemente', // from v2.1.41 added 13.12.2019 'makefileTypes' : 'Dateiarten bei "Neue Datei" aktivieren', // from v2.1.41 added 13.12.2019 'typeOfTextfile' : 'Art der Textdatei', // from v2.1.41 added 13.12.2019 'add' : 'Neu', // from v2.1.41 added 13.12.2019 'theme' : 'Thema', // from v2.1.43 added 13.12.2019 'default' : 'Standard', // from v2.1.43 added 13.12.2019 'description' : 'Beschreibung', // from v2.1.43 added 13.12.2019 'website' : 'Webseite', // from v2.1.43 added 13.12.2019 'author' : 'Autor', // from v2.1.43 added 13.12.2019 'email' : 'Email', // from v2.1.43 added 13.12.2019 'license' : 'Lizenz', // from v2.1.43 added 13.12.2019 'exportToSave' : 'Dieses Element kann nicht gespeichert werden. Um Änderungen nicht zu verlieren, muss es auf den lokalen PC exportiert werden', // from v2.1.44 added 13.12.2019 'dblclickToSelect': 'Doppelt auf Datei klicken um auszuwählen', // from v2.1.47 added 13.12.2019 'useFullscreen' : 'Gesamter Bildschirm', // from v2.1.47 added 13.12.2019 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Unbekannt', 'kindRoot' : 'Stammverzeichnis', // from v2.1.16 added 16.10.2016 'kindFolder' : 'Ordner', 'kindSelects' : 'Auswahlkriterien', // from v2.1.29 added 29.8.2017 'kindAlias' : 'Verknüpfung', 'kindAliasBroken' : 'Defekte Verknüpfung', // applications 'kindApp' : 'Programm', 'kindPostscript' : 'Postscript-Dokument', 'kindMsOffice' : 'MS Office-Dokument', 'kindMsWord' : 'MS Word-Dokument', 'kindMsExcel' : 'MS Excel-Dokument', 'kindMsPP' : 'MS Powerpoint-Präsentation', 'kindOO' : 'Open Office-Dokument', 'kindAppFlash' : 'Flash', 'kindPDF' : 'Portables Dokumentenformat (PDF)', 'kindTorrent' : 'Bittorrent-Datei', 'kind7z' : '7z-Archiv', 'kindTAR' : 'TAR-Archiv', 'kindGZIP' : 'GZIP-Archiv', 'kindBZIP' : 'BZIP-Archiv', 'kindXZ' : 'XZ-Archiv', 'kindZIP' : 'ZIP-Archiv', 'kindRAR' : 'RAR-Archiv', 'kindJAR' : 'Java JAR-Datei', 'kindTTF' : 'True Type-Schrift', 'kindOTF' : 'Open Type-Schrift', 'kindRPM' : 'RPM-Paket', // fonts 'kindFont' : 'Schriftart', 'kindSFNT' : 'SFNT-Schrift', 'kindEOT' : 'Embedded-Open-Type-Schrift', 'kindWOFF' : 'Web-Open-Font-Format-Schrift', 'kindWOFF2' : 'Web-Open-Font-Format-2-Schrift', // texts 'kindText' : 'Text-Dokument', 'kindTextPlain' : 'Text-Dokument', 'kindPHP' : 'PHP-Quelltext', 'kindCSS' : 'CSS Stilvorlage', 'kindHTML' : 'HTML-Dokument', 'kindJS' : 'Javascript-Quelltext', 'kindRTF' : 'Formatierte Textdatei', 'kindC' : 'C-Quelltext', 'kindCHeader' : 'C Header-Quelltext', 'kindCPP' : 'C++ Quelltext', 'kindCPPHeader' : 'C++ Header-Quelltext', 'kindShell' : 'Unix-Shell-Skript', 'kindPython' : 'Python-Quelltext', 'kindJava' : 'Java-Quelltext', 'kindRuby' : 'Ruby-Quelltext', 'kindPerl' : 'Perl Script', 'kindSQL' : 'SQL-Quelltext', 'kindXML' : 'XML-Dokument', 'kindAWK' : 'AWK-Quelltext', 'kindCSV' : 'Kommagetrennte Daten', 'kindDOCBOOK' : 'Docbook XML-Dokument', 'kindMarkdown' : 'Markdown-Text', // added 20.7.2015 // images 'kindImage' : 'Bild', 'kindBMP' : 'Bitmap-Bild', 'kindJPEG' : 'JPEG-Bild', 'kindGIF' : 'GIF-Bild', 'kindPNG' : 'PNG-Bild', 'kindTIFF' : 'TIFF-Bild', 'kindTGA' : 'TGA-Bild', 'kindPSD' : 'Adobe Photoshop-Dokument', 'kindXBITMAP' : 'X Bitmap-Bild', 'kindPXM' : 'Pixelmator-Bild', // media 'kindAudio' : 'Audiodatei', 'kindAudioMPEG' : 'MPEG Audio', 'kindAudioMPEG4' : 'MPEG-4 Audio', 'kindAudioMIDI' : 'MIDI Audio', 'kindAudioOGG' : 'Ogg Vorbis Audio', 'kindAudioWAV' : 'WAV Audio', 'AudioPlaylist' : 'MP3-Playlist', 'kindVideo' : 'Videodatei', 'kindVideoDV' : 'DV Film', 'kindVideoMPEG' : 'MPEG Film', 'kindVideoMPEG4' : 'MPEG4 Film', 'kindVideoAVI' : 'AVI Film', 'kindVideoMOV' : 'QuickTime Film', 'kindVideoWM' : 'Windows Media Film', 'kindVideoFlash' : 'Flash Film', 'kindVideoMKV' : 'Matroska Film', 'kindVideoOGG' : 'Ogg Film' } }; })); /** * Greek translation * @author yawd , Romanos * @version 2014-12-19 */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['elfinder'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('elfinder')); } else { factory(root.elFinder); } }(this, function(elFinder) { elFinder.prototype.i18.el = { translator : 'yawd <ingo@yawd.eu>', language : 'Ελληνικά', direction : 'ltr', dateFormat : 'd.m.Y H:i', fancyDateFormat : '$1 H:i', messages : { /********************************** errors **********************************/ 'error' : 'Πρόβλημα', 'errUnknown' : 'Άγνωστο πρόβλημα.', 'errUnknownCmd' : 'Άγνωστη εντολή.', 'errJqui' : 'Μη έγκυρη ρύθμιση του jQuery UI. Τα components "selectable", "draggable" και "droppable" πρέπει να περιληφούν.', 'errNode' : 'το elFinder χρειάζεται να έχει δημιουργηθεί το DOM Element.', 'errURL' : 'Μη έγκυρες ρυθμίσεις για το elFinder! η επιλογή URL δεν έχει οριστεί.', 'errAccess' : 'Απαγορεύεται η πρόσβαση.', 'errConnect' : 'Δεν ήταν δυνατή η σύνδεση με το backend.', 'errAbort' : 'Η σύνδεση εγκαταλείφθηκε.', 'errTimeout' : 'Η σύνδεση έληξε.', 'errNotFound' : 'Δε βρέθηκε το backend.', 'errResponse' : 'Μή έγκυρη απάντηση από το backend.', 'errConf' : 'Μη έγκυρες ρυθμίσεις για το backend.', 'errJSON' : 'Το PHP JSON module δεν είναι εγκατεστημένο.', 'errNoVolumes' : 'Δεν βρέθηκαν αναγνώσιμα volumes.', 'errCmdParams' : 'Μη έγκυρες παράμετροι για την εντολή "$1".', 'errDataNotJSON' : 'Τα δεδομένα δεν είναι JSON.', 'errDataEmpty' : 'Τα δεδομένα είναι άδεια.', 'errCmdReq' : 'Το Backend request χρειάζεται όνομα εντολής.', 'errOpen' : 'Δεν ήταν δυνατό να ανοίξει το "$1".', 'errNotFolder' : 'Το αντικείμενο δεν είναι φάκελος.', 'errNotFile' : 'Το αντικείμενο δεν είναι αρχείο.', 'errRead' : 'Δεν ήταν δυνατόν να διαβαστεί το "$1".', 'errWrite' : 'Δεν ήταν δυνατή η εγγραφή στο "$1".', 'errPerm' : 'Απαγορεύεται η πρόσβαση.', 'errLocked' : '"$1" είναι κλειδωμένο και δεν μπορεί να μετονομαστεί, μετακινηθεί ή διαγραφεί.', 'errExists' : 'Το αρχείο με όνομα "$1" υπάρχει ήδη.', 'errInvName' : 'Μη έγκυρο όνομα αρχείου.', 'errFolderNotFound' : 'Ο φάκελος δε βρέθηκε.', 'errFileNotFound' : 'Το αρχείο δε βρέθηκε.', 'errTrgFolderNotFound' : 'Ο φάκελος "$1" δε βρέθηκε.', 'errPopup' : 'Το πρόγραμμα πλήγησης εμπόδισε το άνοιγμα αναδυόμενου παραθύρου. Για ανοίξετε το αρχείο ενεργοποιήστε το στις επιλογές του περιηγητή.', 'errMkdir' : 'Η δυμιουργία του φακέλου "$1" δεν ήταν δυνατή.', 'errMkfile' : 'Η δημιουργία του αρχείου "$1" δεν ήταν δυνατή.', 'errRename' : 'Η μετονομασία του αρχείου "$1" δεν ήταν δυνατή.', 'errCopyFrom' : 'Δεν επιτρέπεται η αντιγραφή αρχείων από το volume "$1".', 'errCopyTo' : 'Δεν επιτρέπεται η αντιγραφή αρχείων στο volume "$1".', 'errUpload' : 'Πρόβλημα κατά το upload.', 'errUploadFile' : 'Το αρχείο "$1" δεν μπόρεσε να γίνει upload.', 'errUploadNoFiles' : 'Δεν βρέθηκαν αρχεία για upload.', 'errUploadTotalSize' : 'Τα δεδομένα υπερβαίνουν το επιτρεπόμενο μέγιστο μέγεθος δεδομένων.', 'errUploadFileSize' : 'Το αρχείο υπερβαίνει το επιτρεπόμενο μέγιστο μέγεθος.', 'errUploadMime' : 'Ο τύπος αρχείου δεν επιτρέπεται.', 'errUploadTransfer' : 'Πρόβλημα μεταφοράς για το "$1".', 'errNotReplace' : 'Object "$1" already exists at this location and can not be replaced by object with another type.', 'errReplace' : 'Unable to replace "$1".', 'errSave' : 'Το "$1" δεν ήταν δυνατόν να αποθηκευτεί.', 'errCopy' : 'Δεν ήταν δυνατή η αντιγραφή του "$1".', 'errMove' : 'Δεν ήταν δυνατή η μετακίνηση του "$1".', 'errCopyInItself' : 'Δεν είναι δυνατή η αντιγραφή του "$1" στον εαυτό του.', 'errRm' : 'Δεν ήταν δυνατή η αφαίρεση του "$1".', 'errRmSrc' : 'Unable remove source file(s).', 'errExtract' : 'Δεν ήταν δυνατή η ανάγνωση των αρχείων από "$1".', 'errArchive' : 'Δεν ήταν δυνατή η δημιουργία του αρχείου.', 'errArcType' : 'Ο τύπος αρχείου δεν υποστηρίζεται.', 'errNoArchive' : 'Το αρχείο δεν είναι έγκυρο ή δεν υποστηρίζεται ο τύπος του.', 'errCmdNoSupport' : 'Το backend δεν υποστηρίζει αυτή την εντολή.', 'errReplByChild' : 'Ο φάκελος “$1” δεν μπορεί να αντικατασταθεί από οποιοδήποτε αρχείο περιέχεται σε αυτόν.', 'errArcSymlinks' : 'Για λόγους ασφαλείας δεν είναι δυνατόν να διαβαστούν αρχεία που περιέχουν symlinks orη αρχεία με μη επιτρεπτά ονόματα.', // edited 24.06.2012 'errArcMaxSize' : 'Το μέγεθος του αρχείου υπερβαίνει το μέγιστο επιτρεπτό όριο.', 'errResize' : 'Δεν ήταν δυνατή η αλλαγή μεγέθους του "$1".', 'errResizeDegree' : 'Invalid rotate degree.', 'errResizeRotate' : 'Unable to rotate image.', 'errResizeSize' : 'Invalid image size.', 'errResizeNoChange' : 'Image size not changed.', 'errUsupportType' : 'Ο τύπος αρχείου δεν υποστηρίζεται.', 'errNotUTF8Content' : 'Το αρχείο "$1" δεν είναι UTF-8 και δεν μπορεί να επεξεργασθεί.', // added 9.11.2011 'errNetMount' : 'Δεν ήταν δυνατή η φόρτωση του "$1".', // added 17.04.2012 'errNetMountNoDriver' : 'Μη υποστηριζόμενο πρωτόκολο.', // added 17.04.2012 'errNetMountFailed' : 'Η φόρτωση απέτυχε.', // added 17.04.2012 'errNetMountHostReq' : 'Απαιτείται host εξυπηρετητής.', // added 18.04.2012 'errSessionExpires' : 'Your session has expired due to inactivity.', 'errCreatingTempDir' : 'Unable to create temporary directory: "$1"', 'errFtpDownloadFile' : 'Unable to download file from FTP: "$1"', 'errFtpUploadFile' : 'Unable to upload file to FTP: "$1"', 'errFtpMkdir' : 'Unable to create remote directory on FTP: "$1"', 'errArchiveExec' : 'Error while archiving files: "$1"', 'errExtractExec' : 'Error while extracting files: "$1"', /******************************* commands names ********************************/ 'cmdarchive' : 'Δημιουργία archive αρχείου', 'cmdback' : 'Πίσω', 'cmdcopy' : 'Αντιγραφή', 'cmdcut' : 'Αφαίρεση', 'cmddownload' : 'Μεταφόρτωση', 'cmdduplicate' : 'Αντίγραφο', 'cmdedit' : 'Επεξεργασία αρχείου', 'cmdextract' : 'Εξαγωγή αρχείων από archive', 'cmdforward' : 'Προώθηση', 'cmdgetfile' : 'Επιλέξτε αρχεία', 'cmdhelp' : 'Σχετικά με αυτό το λογισμικό', 'cmdhome' : 'Home', 'cmdinfo' : 'Πληροφορίες', 'cmdmkdir' : 'Νέος φάκελος', 'cmdmkfile' : 'Νέος αρχείο', 'cmdopen' : 'Άνοιγμα', 'cmdpaste' : 'Επικόλληση', 'cmdquicklook' : 'Προεπισκόπηση', 'cmdreload' : 'Ανανέωση', 'cmdrename' : 'Μετονομασία', 'cmdrm' : 'Διαγραφή', 'cmdsearch' : 'Έυρεση αρχείων', 'cmdup' : 'Μετάβαση στο γονικό φάκελο', 'cmdupload' : 'Ανέβασμα αρχείων', 'cmdview' : 'Προβολή', 'cmdresize' : 'Αλλαγή μεγέθους εικόνας', 'cmdsort' : 'Ταξινόμηση', 'cmdnetmount' : 'Mount network volume', /*********************************** buttons ***********************************/ 'btnClose' : 'Κλείσιμο', 'btnSave' : 'Αποθήκευση', 'btnRm' : 'Αφαίρεση', 'btnApply' : 'Εφαρμογή', 'btnCancel' : 'Ακύρωση', 'btnNo' : 'Όχι', 'btnYes' : 'Ναι', 'btnDiscard': 'Discard changes', 'btnMount' : 'Mount', /******************************** notifications ********************************/ 'ntfopen' : 'Άνοιγμα φακέλου', 'ntffile' : 'Άνοιγμα αρχείου', 'ntfreload' : 'Ανανέωση περιεχομένων φακέλου', 'ntfmkdir' : 'Δημιουργία φακέλου', 'ntfmkfile' : 'Δημιουργία αρχείων', 'ntfrm' : 'Διαγραφή αρχείων', 'ntfcopy' : 'Αντιγραφή αρχείων', 'ntfmove' : 'Μετακίνηση αρχείων', 'ntfprepare' : 'Προετοιμασία αντιγραφής αρχείων', 'ntfrename' : 'Μετονομασία αρχείων', 'ntfupload' : 'Ανέβασμα αρχείων', 'ntfdownload' : 'Μεταφόρτωση αρχείων', 'ntfsave' : 'Αποθήκευση αρχείων', 'ntfarchive' : 'Δημιουργία αρχείου', 'ntfextract' : 'Εξαγωγή αρχείων από το archive', 'ntfsearch' : 'Αναζήτηση αρχείων', 'ntfresize' : 'Resizing images', 'ntfsmth' : 'Σύστημα απασχολημένο>_<', 'ntfloadimg' : 'Φόρτωση εικόνας', 'ntfnetmount' : 'Φόρτωση δικτυακού δίσκου', // added 18.04.2012 'ntfdim' : 'Acquiring image dimension', /************************************ dates **********************************/ 'dateUnknown' : 'άγνωστο', 'Today' : 'Σήμερα', 'Yesterday' : 'Χθές', 'msJan' : 'Ιαν', 'msFeb' : 'Φεβ', 'msMar' : 'Μαρ', 'msApr' : 'Απρ', 'msMay' : 'Μαϊ', 'msJun' : 'Ιουν', 'msJul' : 'Ιουλ', 'msAug' : 'Αυγ', 'msSep' : 'Σεπ', 'msOct' : 'Οκτ', 'msNov' : 'Νοεμ', 'msDec' : 'Δεκ', 'January' : 'Ιανουάριος', 'February' : 'Φεβρουάριος', 'March' : 'Μάρτιος', 'April' : 'Απρίλιος', 'May' : 'Μάϊος', 'June' : 'Ιούνιος', 'July' : 'Ιούλιος', 'August' : 'Αύγουστος', 'September' : 'Σεπτέμβριος', 'October' : 'Οκτώβριος', 'November' : 'Νοέμβριος', 'December' : 'Δεκέμβριος', 'Sunday' : 'Κυριακή', 'Monday' : 'Δευτέρα', 'Tuesday' : 'Τρίτη', 'Wednesday' : 'Τετάρτη', 'Thursday' : 'Πέμπτη', 'Friday' : 'Παρασκευή', 'Saturday' : 'Σάββατο', 'Sun' : 'Κυρ', 'Mon' : 'Δευ', 'Tue' : 'Τρ', 'Wed' : 'Τετ', 'Thu' : 'Πεμ', 'Fri' : 'Παρ', 'Sat' : 'Σαβ', /******************************** sort variants ********************************/ 'sortname' : 'κατά όνομα', 'sortkind' : 'κατά είδος', 'sortsize' : 'κατά μέγεθος', 'sortdate' : 'κατά ημερομηνία', 'sortFoldersFirst' : 'Πρώτα οι φάκελοι', // added 22.06.2012 /********************************** messages **********************************/ 'confirmReq' : 'Απαιτείται επιβεβαίωση', 'confirmRm' : 'Είστε σίγουροι πως θέλετε να διαγράψετε τα αρχεία?
    Οι αλλαγές θα είναι μόνιμες!', 'confirmRepl' : 'Αντικατάσταση του παλιού αρχείου με το νέο?', 'apllyAll' : 'Εφαρμογή σε όλα', 'name' : 'Όνομα', 'size' : 'Μέγεθος', 'perms' : 'Δικαιώματα', 'modify' : 'Τροποποιήθηκε', 'kind' : 'Είδος', 'read' : 'ανάγνωση', 'write' : 'εγγραφή', 'noaccess' : 'δεν υπάρχει πρόσβαση', 'and' : 'και', 'unknown' : 'άγνωστο', 'selectall' : 'Επιλογή όλων', 'selectfiles' : 'Επιλογή αρχείων', 'selectffile' : 'Επιλογή πρώτου αρχείου', 'selectlfile' : 'Επιλογή τελευταίου αρχείου', 'viewlist' : 'Προβολή λίστας', 'viewicons' : 'Προβολή εικονιδίων', 'places' : 'Τοποθεσίες', 'calc' : 'Υπολογισμός', 'path' : 'Διαδρομή', 'aliasfor' : 'Ψευδώνυμο για', 'locked' : 'Κλειδωμένο', 'dim' : 'Διαστάσεις', 'files' : 'Αρχεία', 'folders' : 'Φάκελοι', 'items' : 'Αντικείμενα', 'yes' : 'ναι', 'no' : 'όχι', 'link' : 'Σύνδεσμος', 'searcresult' : 'Αποτελέσματα αναζήτησης', 'selected' : 'επιλεγμένα αντικείμενα', 'about' : 'Σχετικά', 'shortcuts' : 'Συντομεύσεις', 'help' : 'Βοήθεια', 'webfm' : 'εργαλείο διαχείρισης αρχείων από το web', 'ver' : 'Έκδοση', 'protocolver' : 'έκδοση πρωτοκόλλου', 'homepage' : 'Σελίδα του project', 'docs' : 'Τεκμηρίωση (documentation)', 'github' : 'Κάντε μας fork στο Github', 'twitter' : 'Ακολουθήστε μας στο twitter', 'facebook' : 'Βρείτε μας στο facebook', 'team' : 'Ομάδα', 'chiefdev' : 'κύριος προγραμματιστής', 'developer' : 'προγραμματιστής', 'contributor' : 'συνεισφορά', 'maintainer' : 'συντηρητής', 'translator' : 'μεταφραστής', 'icons' : 'Εικονίδια', 'dontforget' : 'και μην ξεχάσεις την πετσέτα σου!', 'shortcutsof' : 'Οι συντομεύσεις είναι απενεργοποιημένες', 'dropFiles' : 'Κάντε drop τα αρχεία εδώ', 'or' : 'ή', 'selectForUpload' : 'Επιλογή αρχείων για ανέβασμα', 'moveFiles' : 'Μετακίνηση αρχείων', 'copyFiles' : 'Αντιγραφή αρχείων', 'rmFromPlaces' : 'Αντιγραφή από τοποθεσίες', 'aspectRatio' : 'Αναλογία διαστάσεων', 'scale' : 'Κλίμακα', 'width' : 'Πλάτος', 'height' : 'Ύψος', 'resize' : 'Αλλαγή μεγέθους', 'crop' : 'Crop', 'rotate' : 'Περιστροφή', 'rotate-cw' : 'Περιστροφή κατά 90 βαθμούς CW', 'rotate-ccw' : 'Περιστροφή κατά 90 βαθμούς CCW', 'degree' : 'Βαθμός', 'netMountDialogTitle' : 'Φορτώστε δικτυακό δίσκο', // added 18.04.2012 'protocol' : 'Πρωτόκολλο', // added 18.04.2012 'host' : 'Host', // added 18.04.2012 'port' : 'Port', // added 18.04.2012 'user' : 'Χρήστης', // added 18.04.2012 'pass' : 'Κωδικός', // added 18.04.2012 /********************************** mimetypes **********************************/ 'kindUnknown' : 'Άγνωστο', 'kindFolder' : 'Φάκελος', 'kindAlias' : 'Ψευδώνυμο (alias)', 'kindAliasBroken' : 'Μη έγκυρο ψευδώνυμο', // applications 'kindApp' : 'Εφαρμογή', 'kindPostscript' : 'Έγγραφο Postscript', 'kindMsOffice' : 'Έγγραφο Microsoft Office', 'kindMsWord' : 'Έγγραφο Microsoft Word', 'kindMsExcel' : 'Έγγραφο Microsoft Excel', 'kindMsPP' : 'Παρουσίαση Microsoft Powerpoint', 'kindOO' : 'Έγγραφο Open Office', 'kindAppFlash' : 'Εφαρμογή Flash', 'kindPDF' : 'Portable Document Format (PDF)', 'kindTorrent' : 'Αρχείο Bittorrent', 'kind7z' : 'Αρχείο 7z', 'kindTAR' : 'Αρχείο TAR', 'kindGZIP' : 'Αρχείο GZIP', 'kindBZIP' : 'Αρχείο BZIP', 'kindXZ' : 'Αρχείο XZ', 'kindZIP' : 'Αρχείο ZIP', 'kindRAR' : 'Αρχείο RAR', 'kindJAR' : 'Αρχείο Java JAR', 'kindTTF' : 'Γραμματοσειρά True Type', 'kindOTF' : 'Γραμματοσειρά Open Type', 'kindRPM' : 'Πακέτο RPM', // fonts 'kindFont' : 'Γραμματοσειρά', 'kindSFNT' : 'Γραμματοσειρά SFNT', 'kindEOT' : 'Γραμματοσειρά Embedded Open Type', 'kindWOFF' : 'Γραμματοσειρά Web Open Font Format', 'kindWOFF2' : 'Γραμματοσειρά Web Open Font Format 2', // texts 'kindText' : 'Έγγραφο κειμένου', 'kindTextPlain' : 'Απλό κείμενο', 'kindPHP' : 'Κώδικας PHP', 'kindCSS' : 'Cascading style sheet', 'kindHTML' : 'Έγγραφο HTML', 'kindJS' : 'Κώδικας Javascript', 'kindRTF' : 'Rich Text Format', 'kindC' : 'Κώδικας C', 'kindCHeader' : 'Κώδικας κεφαλίδας C', 'kindCPP' : 'Κώδικας C++', 'kindCPPHeader' : 'Κώδικας κεφαλίδας C++', 'kindShell' : 'Unix shell script', 'kindPython' : 'Κώδικας Python', 'kindJava' : 'Κώδικας Java', 'kindRuby' : 'Κώδικας Ruby', 'kindPerl' : 'Perl script', 'kindSQL' : 'Κώδικας SQL', 'kindXML' : 'Έγγραφο XML', 'kindAWK' : 'Κώδικας AWK', 'kindCSV' : 'Τιμές χωρισμένες με κόμμα', 'kindDOCBOOK' : 'Έγγραφο Docbook XML', // images 'kindImage' : 'Εικόνα', 'kindBMP' : 'Εικόνα BMP', 'kindJPEG' : 'Εικόνα JPEG', 'kindGIF' : 'Εικόνα GIF', 'kindPNG' : 'Εικόνα PNG', 'kindTIFF' : 'Εικόνα TIFF', 'kindTGA' : 'Εικόνα TGA', 'kindPSD' : 'Εικόνα Adobe Photoshop', 'kindXBITMAP' : 'Εικόνα X bitmap', 'kindPXM' : 'Εικόνα Pixelmator', // media 'kindAudio' : 'Αρχεία ήχου', 'kindAudioMPEG' : 'Ήχος MPEG', 'kindAudioMPEG4' : 'Εικόνα MPEG-4', 'kindAudioMIDI' : 'Εικόνα MIDI', 'kindAudioOGG' : 'Εικόνα Ogg Vorbis', 'kindAudioWAV' : 'Εικόνα WAV', 'AudioPlaylist' : 'MP3 playlist', 'kindVideo' : 'Αρχεία media', 'kindVideoDV' : 'Ταινία DV', 'kindVideoMPEG' : 'Ταινία MPEG', 'kindVideoMPEG4' : 'Ταινία MPEG-4', 'kindVideoAVI' : 'Ταινία AVI', 'kindVideoMOV' : 'Ταινία Quick Time', 'kindVideoWM' : 'Ταινία Windows Media', 'kindVideoFlash' : 'Ταινία flash', 'kindVideoMKV' : 'Ταινία matroska', 'kindVideoOGG' : 'Ταινία ogg' } }; })); Tierphysio Deutschland http://tierphysio-deutschland.de Eine andere WordPress-Site. Mon, 02 Nov 2026 17:31:11 +0000 de hourly 1 https://wordpress.org/?v=7.1.4 Hoe je profiteert van de welkomstbonus bij Kitsune Casino Nederland http://tierphysio-deutschland.de/public/hoe-je-profiteert-van-de-welkomstbonus-bij-kitsune-casino-nederland/ Mon, 02 Nov 2026 17:31:10 +0000 http://tierphysio-deutschland.de/?p=1361

    Online casino’s zijn populairder dan ooit, met duizenden spelers die op zoek zijn naar avontuur en kans om te winnen. Een van de meest aantrekkelijke aspecten van online gokken zijn de welkomstbonussen die nieuwe spelers kunnen ontvangen. Dit artikel bespreekt hoe je optimaal kunt profiteren van deze bonussen en de voordelen die ze met zich meebrengen. Met een groeiend aantal beschikbare spellen, waaronder duizenden slots en live casinospellen, zijn er tal van opties zoals https://kitsune.co.nl/ waar je terecht kunt. Laten we eens kijken naar de verschillende manieren om het meeste uit je welkomstbonus te halen.

    Hoe account aanmaken, betalingen en spelen samenkomen

    De eerste stap om te profiteren van een welkomstbonus is het aanmaken van een account bij een online casino. Dit proces omvat het invullen van persoonlijke gegevens, het selecteren van een betalingsmethode en het verifiëren van je identiteit. Zodra je account is goedgekeurd, kun je beginnen met het maken van een storting. Het is essentieel om te begrijpen hoe deze stappen samenkomen om ervoor te zorgen dat je een soepele en plezierige ervaring hebt. De welkomstbonus kan vervolgens worden geactiveerd bij je eerste storting, wat resulteert in extra speelgeld of gratis spins.

    Daarnaast hebben veel online casino’s een gevarieerd aanbod aan spellen, van slots tot live casinospellen. Dit biedt spelers de mogelijkheid om hun favoriete spellen te kiezen en optimaal gebruik te maken van de bonus. Door een weloverwogen keuze te maken bij het selecteren van je spellen, kun je je kansen op winnen vergroten.

    Hoe te beginnen met de welkomstbonus

    Om te profiteren van de welkomstbonus, moet je een paar eenvoudige stappen volgen. Hier zijn de basisstappen om aan de slag te gaan:

    1. Account Aanmaken: Ga naar de website van het casino en registreer je voor een nieuw account door het invullen van de benodigde gegevens.
    2. Identiteit Verifiëren: Volg de stappen om je identiteit te verifiëren, wat essentieel is voor een veilige speelomgeving.
    3. Storting Maken: Kies een betalingsmethode en maak je eerste storting om je welkomstbonus te activeren.
    4. Spellen Kiezen: Blader door het spelaanbod en kies de spellen waar je het meest in geïnteresseerd bent.
    5. Profiteren van de Bonus: Gebruik je welkomstbonus door deel te nemen aan de geselecteerde spellen en verhoog je speelgeld.
    • Directe toegang tot extra speelgeld
    • Meer kansen om te winnen met gratis spins
    • Een breed scala aan spellen om uit te kiezen

    Praktische details voor een optimaal spelervaring

    Wanneer je een casino kiest, is het belangrijk om rekening te houden met de aangeboden spellen en de voorwaarden van de welkomstbonus. Zoals eerder vermeld, bieden veel online casino’s duizenden slots en live casinospellen. Met meer dan 2000 slotmachines en 190 live tafels is er een schat aan opties om uit te kiezen.

    Het is ook van cruciaal belang om de vereisten voor het vrijspelen van de bonus te begrijpen. Veel casino’s hebben specifieke voorwaarden waaraan je moet voldoen voordat je je bonus of winsten kunt opnemen. Dit kan inhouden dat je een bepaald aantal keren moet inzetten voordat je je geld kunt opnemen. Zorg ervoor dat je deze informatie leest voordat je begint met spelen, zodat je niet voor verrassingen komt te staan.

    • Duidelijke informatie over stortings- en opnameprocessen
    • Veelzijdige spelkeuzes voor elke type speler
    • Transparante welkomstbonusvoorwaarden

    Door goed geïnformeerd te zijn over deze details, kun je een beter inzicht krijgen in wat je kunt verwachten en hoe je het meeste uit je ervaring kunt halen bij een online casino.

    Belangrijkste voordelen van online casino’s

    Online casino’s bieden veel voordelen die het spelen aantrekkelijk maken. Naast de welkomstbonussen zijn er verschillende extra functies die spelers helpen om hun ervaring te verbeteren. Hier zijn enkele van de belangrijkste voordelen:

    • Gemak van online spelen vanuit huis of onderweg
    • Uitgebreid aanbod van spellen en variaties
    • Actieve promoties en VIP-programma’s voor trouwe spelers
    • Toegang tot live dealers voor een authentieke casinobeleving

    Door te profiteren van deze voordelen, kunnen spelers hun spelervaring optimaliseren en genieten van alles wat online gokken te bieden heeft. De mogelijkheid om verschillende spellen uit te proberen en gebruik te maken van bonussen maakt het spelen spannend en potentieel winstgevend.

    Vertrouwen en beveiliging in online gokken

    Een van de grootste zorgen bij online gokken is de beveiliging en betrouwbaarheid van het casino. Het is essentieel om te spelen bij een casino dat een licentie heeft en voldoet aan strikte reguleringen. Gerenommeerde online casino’s maken gebruik van geavanceerde technologieën om persoonlijke gegevens en financiële transacties te beschermen. Het is ook belangrijk om de voorwaarden van het casino te controleren, zodat je zeker weet dat je in een veilige omgeving speelt.

    Spelers moeten ook kijken naar klantbeoordelingen en feedback om een goed beeld te krijgen van de betrouwbaarheid van het casino. Het kiezen van een goed beoordeeld casino kan de kans op een positieve spelervaring aanzienlijk vergroten.

    • Gebruikt geavanceerde beveiligingstechnologieën
    • Licentie en regelgeving bieden extra bescherming
    • Positieve spelersbeoordelingen als indicatie van betrouwbaarheid

    Waarom kiezen voor online casino’s?

    De keuze voor een online casino biedt spelers een scala aan mogelijkheden om te genieten van hun favoriete spellen en tegelijkertijd te profiteren van aantrekkelijke bonussen. Met een groeiend aanbod van spellen, van meer dan 2000 slots tot 190 live casinospellen, is er altijd iets nieuws te ontdekken.

    Door gebruik te maken van de welkomstbonus en het VIP-programma, kunnen spelers hun speelervaring verder verbeteren en meer kansen creëren om te winnen. Met de juiste kennis en strategie kan online gokken niet alleen leuk zijn, maar ook een kans om extra inkomsten te genereren.

    ]]>
    Sportovní sázení na JumboSpin Casino: Jak na to a co očekávat http://tierphysio-deutschland.de/public/sportovni-sazeni-na-jumbospin-casino-jak-na-to-a-co-ocekavat/ Mon, 02 Nov 2026 14:23:39 +0000 http://tierphysio-deutschland.de/?p=1359

    Sportovní sázení se stává stále populárnějším způsobem, jak si užít adrenalín a zároveň mít možnost vyhrát. JumboSpin Casino se vyznačuje širokým výběrem her a atraktivními bonusy pro české hráče, a pokud se chcete dozvědět více, můžete navštívit jumbokasino.com pro užitečné tipy a rady. Pokud máte zájem o online sázení, v tomto článku se podíváme na to, jak začít s sportovním sázením na této platformě a co všechno můžete očekávat.

    Praktický vstup do světa sázení

    JumboSpin Casino je moderní online kasino, které nabízí více než 8 000 her, včetně vzrušujícího sportovního sázení. Pro české hráče je zde připraven bohatý uvítací balíček, který zahrnuje až 62 500 Kč a 150 volných spinů. Ať už jste zkušený sázející nebo nováček, JumboSpin Casino vám poskytne skvělou platformu pro zábavu a soutěžení.

    Hraní na JumboSpin Casino je snadné a intuitivní. Můžete se těšit na rychlé a bezpečné transakce, což zahrnuje různé platební metody. Díky podpoře v reálném čase a možnostem mobilního hraní je uživatelský zážitek na vysoké úrovni.

    Jak začít se sportovním sázením

    Pokud chcete vyzkoušet sportovní sázení na JumboSpin Casino, zde je jednoduchý návod, jak se do toho pustit:

    1. Vytvořte účet: Navštivte stránku JumboSpin a zaregistrujte si svůj účet vyplněním jednoduchého formuláře.
    2. Ověřte své údaje: Po registraci budete muset ověřit svou identitu, aby se zajistila bezpečnost a důvěryhodnost.
    3. Vložte peníze: Učiňte minimální vklad, který začíná na 250 Kč, abyste si mohli užít své sázky.
    4. Vyberte sport: Prozkoumejte širokou nabídku sportů, na které můžete sázet, od fotbalu po tenis a mnoho dalšího.
    5. Sázejte: Vložte své sázky a užívejte si napětí sledování svých oblíbených sportovních událostí.
    • Dostupnost více než 8 000 her pro nekonečnou zábavu.
    • Rychlé a bezpečné transakce s různými platebními možnostmi.
    • Podpora v reálném čase, která je k dispozici 24/7.

    Praktické detaily pro JumboSpin Casino

    Kromě sportovního sázení nabízí JumboSpin Casino také různé další možnosti, které zajišťují komplexní herní zážitek. S více než 1 000 živými stoly si hráči mohou užít atmosféru skutečného kasina přímo z pohodlí domova. Dále, kasino má propracovaný věrnostní program, který nabízí až 50 úrovní pro ty, kteří pravidelně hrají. Tento program odměňuje hráče za jejich věrnost a aktivitu, což může zahrnovat exkluzivní bonusy a nabídky.

    • Dostupnost živých dealerů pro skutečný zážitek z hraní.
    • Věrnostní program s exkluzivními výhodami.
    • Variabilní platební možnosti pro maximální pohodlí.

    JumboSpin Casino se také může pochlubit atraktivními bonusy pro sportovní sázení, včetně bonusu 100 % až do výše 2 500 Kč na první vklad. To znamená, že když vložíte peníze na svůj účet, kasino je zdvojnásobí, což vám poskytne více prostředků k sázení.

    Klíčové výhody JumboSpin Casino

    JumboSpin Casino nabízí řadu výhod, které jej činí atraktivním pro české hráče. Tento prostor je navržen tak, aby vyhovoval širokému spektru preferencí a potřeb hráčů, a to jak nováčků, tak zkušených sázkařů.

    • Více než 8 000 her a sportovních sázek, což nabízí široký výběr pro všechny.
    • Privilegium uvítacího balíčku umožňujícího maximální využití prvního vkladu.
    • 24/7 zákaznická podpora, která je vždy připravena pomoci.
    • Rychlé a bezpečné výběry, které zajistí rychlý přístup k vašim výhrám.

    Důvěra a bezpečnost

    Bezpečnost hráčů je pro JumboSpin Casino prioritou. Kasino používá moderní šifrovací technologie, které chrání osobní a finanční údaje hráčů. Díky tomu se hráči mohou soustředit na zábavu a vzrušení ze sázení, aniž by se obávali o svou bezpečnost.

    Kromě toho má kasino transparentní podmínky a pravidla, která jsou snadno dostupná a pochopitelná. To zajišťuje, že hráči mají jasný přehled o všech aspektech svých sázek a her v kasinu.

    Proč si vybrat JumboSpin Casino

    Pokud hledáte kvalitní online kasino se širokým výběrem her a sportovního sázení, JumboSpin Casino je skvělou volbou. Díky atraktivním bonusům, pestré nabídce her a spolehlivému zákaznickému servisu si každý hráč najde to své. Nyní je ideální čas začít s sportovním sázením na této platformě a vychutnat si všechny výhody, které nabízí.

    Nezáleží na tom, zda jste začátečník nebo zkušený uživatel, JumboSpin Casino nabízí příležitost pro každého. Přihlaste se ještě dnes a začněte využívat všechny výhody, které tento skvělý online prostor nabízí!

    ]]>
    Scopri le slot con jackpot progressivi su Jumbospin Casino e vinci alla grande http://tierphysio-deutschland.de/public/scopri-le-slot-con-jackpot-progressivi-su-jumbospin-casino-e-vinci-alla-grande/ Mon, 02 Nov 2026 13:55:54 +0000 http://tierphysio-deutschland.de/?p=1355

    Il mondo dei casinò online è in continua espansione, e le slot con jackpot progressivi stanno prendendo piede tra gli appassionati di giochi d’azzardo. Su piattaforme come Jumbospin Casino, i giocatori possono trovare un’ampia selezione di giochi emozionanti, con la possibilità di vincite straordinarie, mentre le recensioni casino online offrono informazioni utili per scegliere le migliori opzioni disponibili. Scopriamo insieme come funzionano questi giochi e quali vantaggi offre Jumbospin.

    A clear starting point for casino

    I casinò online sono diventati una delle forme di intrattenimento più popolari del nostro tempo, grazie alla loro accessibilità e alla varietà di opzioni disponibili. Le slot con jackpot progressivi, in particolare, attirano l’attenzione per le loro potenzialità di vincita elevata. Questi giochi offrono un jackpot che cresce ogni volta che un giocatore scommette, fino a quando non viene vinto. Jumbospin Casino è un’ottima scelta per chi cerca una piattaforma sicura e diversificata per giocare a queste slot. Con un’interfaccia intuitiva e un’ampia gamma di giochi, il casinò rende facile per i nuovi arrivati e i veterani trovare il titolo che fa per loro.

    Le slot progressivi rappresentano un’ottima opportunità non solo per divertirsi, ma anche per realizzare sogni di vincite enormi. Jumbospin offre schemi di bonus allettanti e supporto clienti dedicato, rendendo ogni sessione di gioco non solo emozionante, ma anche sicura.

    Come iniziare a giocare alle slot

    Se sei nuovo nel mondo dei casinò online, ecco alcuni semplici passaggi per iniziare a giocare alle slot con jackpot progressivi su Jumbospin Casino:

    1. Crea un account: Visita il sito di Jumbospin e registrati fornendo i tuoi dati di contatto.
    2. Verifica le tue informazioni: Procedi con la verifica per garantire la sicurezza del tuo account.
    3. Effettua un deposito: Scegli tra vari metodi di pagamento accettati, inclusi carte di credito e criptovalute.
    4. Scegli il tuo gioco: Esplora la vasta selezione di slot e trova quella che più ti attira.
    5. Inizia a giocare: Inizia a scommettere e prova a vincere il jackpot!
    • Registrazione semplice e veloce
    • Varietà di metodi di deposito
    • Tempi di pagamento rapidi e affidabili

    Dettagli pratici per il gioco su Jumbospin

    Giocare su Jumbospin Casino è un’esperienza fluida grazie a una piattaforma user-friendly con un’ampia gamma di giochi. Le slot con jackpot progressivi sono facilmente accessibili e presentano diversi temi e meccaniche. I giocatori possono scegliere tra slot classiche, moderne e video slot, ognuna con la propria particolare attrattiva e potenziale di vincita. Inoltre, il casinò offre un accattivante bonus di benvenuto del 200% fino a 2.000€ e 250 spin gratuiti, permettendo ai nuovi giocatori di esplorare senza rischi eccessivi.

    • Selezione di giochi in continua espansione
    • Accesso a offerte promozionali vantaggiose
    • Supporto clienti disponibile 24/7 via chat dal vivo

    Queste caratteristiche non solo aumentano l’emozione del gioco, ma garantiscono anche che ogni sessione sia piacevole e sotto controllo. Le slot progressivi non sono solo una questione di fortuna; comprendere i meccanismi di gioco può rivelarsi fondamentale per aumentare le probabilità di successo.

    Vantaggi chiave delle slot progressivi

    Le slot con jackpot progressivi su Jumbospin Casino offrono diversi vantaggi che le rendono particolarmente attraenti per i giocatori. Uno dei principali benefici è la possibilità di vincere jackpot straordinari. Questi jackpot possono raggiungere cifre impressionanti, specialmente se paragonati alle slot tradizionali. Inoltre, la varietà di giochi disponibili consente a ciascun giocatore di trovare un’opzione che si adatta perfettamente ai propri gusti. Gli utenti possono anche approfittare di promozioni regolari e bonus, che possono aumentare ulteriormente le loro probabilità di vincita.

    • Jackpot enormi che crescono nel tempo
    • Varietà di temi e stili di gioco
    • Bonus e promozioni frequenti che aumentano le vincite

    Queste caratteristiche rendono Jumbospin una destinazione ideale per chiunque desideri tentare la fortuna con delle slot uniche e ricche di opportunità.

    Fiducia e sicurezza nel gioco

    La sicurezza è un aspetto cruciale nel gioco online, e Jumbospin Casino prende molto sul serio la protezione dei dati dei giocatori. La piattaforma utilizza tecnologie di crittografia avanzate per garantire che tutte le informazioni personali e finanziarie siano al sicuro. Inoltre, il casinò fornisce metodi di pagamento diversificati e sicuri, tra cui carte di credito, e-wallet e criptovalute, permettendo ai giocatori di scegliere l’opzione che preferiscono.

    Il supporto clienti è disponibile 24 ore su 24, 7 giorni su 7, tramite chat dal vivo ed email, offrendo assistenza immediata a qualsiasi domanda o problema. Grazie a queste misure, i giocatori possono divertirsi senza preoccupazioni.

    Perché scegliere Jumbospin Casino

    Scegliere Jumbospin Casino significa entrare in un mondo dove il divertimento e la sicurezza vanno di pari passo. La varietà di giochi disponibili, in particolare le slot con jackpot progressivi, offre infinite possibilità di vincite. Inoltre, i bonus generosi e il supporto clienti sempre disponibile fanno di questo casinò una delle migliori scelte nel panorama dei casinò online. Approfitta delle promozioni attuali e prova le slot per scoprire che cosa rende Jumbospin un’esperienza di gioco unica.

    Inizia la tua avventura di gioco oggi stesso e scopri la gioia di vincere grandi premi su Jumbospin Casino!

    ]]>
    Test post title http://tierphysio-deutschland.de/uncategorized/test-post-title/ Mon, 02 Nov 2026 13:49:05 +0000 http://tierphysio-deutschland.de/?p=1353 Test post content

    ]]>
    Cupidono Casino Italia: tutte le promo attive e come sfruttarle al meglio http://tierphysio-deutschland.de/public/cupidono-casino-italia-tutte-le-promo-attive-e-come-sfruttarle-al-meglio/ Mon, 02 Nov 2026 12:59:38 +0000 http://tierphysio-deutschland.de/?p=1349

    Cupidono Casino è una delle nuove piattaforme di gioco online, lanciata nel 2025, che offre un’esperienza di gioco emozionante con una vasta gamma di opzioni. Con un benvenuto eccezionale, promozioni in corso e un’affascinante selezione di giochi, ci sono molte opportunità per i giocatori di massimizzare il proprio divertimento e potenzialmente guadagnare. In questo articolo, esploreremo le promozioni attive, come sfruttarle al meglio, e i vantaggi che Cupidono Casino ha da offrire per un’esperienza di gioco unica.

    Come le caratteristiche principali supportano il gioco quotidiano

    Cupidono Casino si distingue per una serie di funzionalità progettate per rendere l’esperienza di gioco fluida e gratificante. La piattaforma offre oltre 6.500 slot e giochi da casinò dal vivo, garantendo un’ampia scelta per tutti i gusti. Inoltre, i giocatori possono beneficiare di un rapido prelievo in criptovalute, rendendo il processo di pagamento semplice ed efficiente. La presenza di un programma VIP ben strutturato, con cinque livelli, consente ai giocatori più fedeli di ricevere premi e vantaggi esclusivi, migliorando ulteriormente l’esperienza complessiva.

    Inoltre, Cupidono Casino offre un generoso bonus di benvenuto del 200% fino a €2.000 e 250 giri gratuiti, rendendo l’inizio dell’avventura di gioco ancora più allettante. Con un’attenzione speciale ai dettagli e all’aspettativa dei giocatori, il casinò si impegna a fornire un ambiente di gioco sicuro e coinvolgente.

    Come iniziare a giocare su Cupidono Casino

    Iniziare a giocare su Cupidono Casino è un processo semplice e diretto. Segui i passaggi seguenti per assicurarti di sfruttare al meglio la tua esperienza di gioco:

    1. Creare un account: Visita il sito di Cupidono Casino e compila il modulo di registrazione con i tuoi dati personali.
    2. Verificare i tuoi dati: Segui le istruzioni per confermare il tuo indirizzo email e le tue informazioni personali.
    3. Effettuare un deposito: Scegli il metodo di pagamento preferito e depositare un minimo per iniziare a giocare.
    4. Selezionare il tuo gioco: Naviga attraverso le varie categorie di giochi per trovare ciò che più ti piace.
    5. Iniziare a giocare: Clicca su „Gioca“ per entrare nel tuo gioco scelto e divertiti!
    • Registrazione rapida e semplice.
    • Depositi veloci con una varietà di metodi di pagamento.
    • Accesso immediato a promozioni esclusive.

    Dettagli pratici per Cupidono Casino

    Quando si gioca a Cupidono Casino, è importante conoscere alcuni dettagli pratici che possono migliorare la tua esperienza. Il casinò offre una gamma di metodi di pagamento, inclusi EUR, USD e criptovalute come BTC e ETH, per garantire che tutti possano trovare un’opzione conveniente. Inoltre, i limiti di prelievo sono fissati a 1.000 € al giorno e 10.000 € al mese, assicurando che i giocatori possano gestire i loro fondi in modo efficace.

    • Massimo bonus di benvenuto del 200% fino a €2.000.
    • Fino a 250 giri gratuiti per nuovi iscritti.
    • Programma VIP con incentivi per giocatori frequenti.

    Questi dettagli non solo rendono il gioco più sicuro, ma migliorano anche le possibilità di vincere, grazie alle promozioni e ai bonus disponibili.

    Vantaggi chiave di Cupidono Casino

    Cupidono Casino offre diversi vantaggi che lo rendono una scelta ideale per i giocatori online. La combinazione di un’ampia selezione di giochi, bonus generosi e un ambiente di gioco sicuro contribuisce a creare un’esperienza soddisfacente. La piattaforma è ottimizzata per i dispositivi mobili, consentendo di giocare ovunque e in qualsiasi momento, rendendo il divertimento accessibile e comodo.

    • Gioco mobile-friendly per un accesso facile.
    • Vasta selezione di slot e giochi da casinò dal vivo.
    • Promozioni regolari e cashback per massimizzare le vincite.
    • Supporto clienti disponibile 24/7 per assistenza immediata.

    Fiducia e sicurezza in Cupidono Casino

    La sicurezza è una priorità assoluta per Cupidono Casino. La piattaforma utilizza tecnologie avanzate di crittografia per garantire che tutte le transazioni e i dati personali siano protetti. Inoltre, il casinò segue pratiche responsabili di gioco, offrendo strumenti per aiutare i giocatori a gestire il proprio budget e il tempo di gioco. La reputazione positiva e le recensioni dei giocatori evidenziano l’affidabilità e l’integrità del casinò.

    La presenza di un programma VIP dimostra anche l’impegno verso i giocatori più fedeli, fornendo ulteriori assicurazioni sui valori di fiducia e rispetto all’interno della comunità.

    Perché scegliere Cupidono Casino

    Scegliere Cupidono Casino significa optare per un’esperienza di gioco completa e coinvolgente. Con un’accoglienza calda per i nuovi giocatori, un programma VIP interessante e una vasta gamma di giochi, ogni visitatore troverà qualcosa di adatto ai propri interessi. La piattaforma si distingue per la qualità del servizio e l’attenzione ai dettagli, rendendo ogni visita un’avventura unica.

    Concludendo, Cupidono Casino rappresenta una scelta eccellente per chi cerca un casinò online affidabile e in continua evoluzione. Approfitta delle promozioni attive, esplora i giochi entusiasmanti e immergiti in un mondo di intrattenimento e opportunità!

    ]]>
    Mgbet Brasil em 2026: descubra os melhores jogos de roleta e poker http://tierphysio-deutschland.de/public/mgbet-brasil-em-2026-descubra-os-melhores-jogos-de-roleta-e-poker/ Mon, 02 Nov 2026 11:13:07 +0000 http://tierphysio-deutschland.de/?p=1347

    Em 2026, o cenário dos cassinos online no Brasil está mais vibrante do que nunca, com plataformas que oferecem uma experiência completa para os jogadores. Com diversas opções de jogos, incluindo roleta e poker, os brasileiros podem desfrutar de uma experiência de cassino emocionante no conforto de suas casas. Mgbet se destaca por sua variedade de jogos e serviços, adaptados especialmente para o público brasileiro, oferecendo uma plataforma fácil de usar e com suporte em português, como é o caso de https://www.zamphost.com/ que também tem crescido bastante.

    O que torna a Mgbet Brasil uma plataforma atraente

    A Mgbet Brasil é um destino ideal para os amantes de jogos de cassino e apostas esportivas. A plataforma é projetada especificamente para jogadores brasileiros, oferecendo uma interface acessível e significativa variedade de jogos, incluindo a famosa roleta e os desafiadores jogos de poker. Além disso, o site apresenta transações em reais, facilitando o acesso dos jogadores a uma ampla gama de opções de entretenimento. Com suporte técnico disponível via Telegram, os usuários podem facilmente resolver qualquer dúvida ou problema, tornando a experiência ainda mais fluida.

    Outro grande atrativo é o bônus de boas-vindas de até R$8888, que permite novos jogadores iniciarem sua jornada no cassino de forma empolgante. Esta generosidade em bônus é acompanhada por uma seleção diversificada de jogos que atende a todos os gostos e preferências.

    Como começar a jogar na Mgbet

    Iniciar sua experiência de jogo na Mgbet é simples e rápido. Siga estas etapas para criar sua conta e mergulhar nos jogos emocionantes que a plataforma oferece:

    1. Criar uma Conta: Acesse o site da Mgbet e clique no botão de registro. Complete o formulário com suas informações pessoais.
    2. Verificar Seus Dados: Após o registro, você precisará verificar sua identidade. Isso garante a segurança e a legitimidade da sua conta.
    3. Fazer um Depósito: Escolha um método de pagamento conveniente e faça um depósito utilizando reais para começar a jogar.
    4. Selecionar Seu Jogo: Navegue pela vasta seleção de jogos, incluindo roleta e poker, e escolha o que mais lhe agrada.
    5. Começar a Jogar: Agora que sua conta está configurada e você fez o depósito, é hora de desfrutar dos jogos!
    • Registro simples e rápido.
    • Variedade de métodos de pagamento disponíveis.
    • Seleção diversificada de jogos para todos os gostos.

    Detalhes práticos sobre os jogos disponíveis

    A Mgbet oferece uma variedade impressionante de jogos de cassino que atraem tanto iniciantes quanto jogadores experientes. Entre os jogos mais populares estão a roleta e o poker. A roleta, com suas diversas variantes, permite que os jogadores experimentem diferentes estilos de jogo, desde as mesas clássicas até as versões ao vivo, que oferecem uma experiência interativa. No poker, os usuários podem participar de torneios emocionantes ou jogar em mesas com diferentes limites, desafiando suas habilidades contra outros jogadores.

    Além disso, a plataforma conta com caça-níqueis de diversos temas, o que significa que sempre há algo novo para explorar. Os jogos são otimizados para dispositivos móveis, permitindo que você jogue a qualquer hora e em qualquer lugar, seja pelo app disponível para Android e iOS ou através do navegador. Isso proporciona uma flexibilidade que muitos jogadores apreciam.

    • Roleta com várias variantes, incluindo roleta americana e europeia.
    • Poker com torneios e mesas de diferentes limites.
    • Cassinos ao vivo com dealers reais para uma experiência imersiva.

    Esses recursos tornam a Mgbet uma escolha ideal para qualquer amante de jogos de cassino, garantindo que todos encontrem o que procuram.

    Principais benefícios da Mgbet

    Optar pela Mgbet traz uma série de benefícios que melhoram a experiência de jogo e oferecem mais valor. Uma plataforma projetada para o público brasileiro, com suporte em português, contribui para uma navegação mais intuitiva e uma comunicação clara. Além disso, o bônus de boas-vindas é uma das ofertas mais competitivas do mercado, permitindo que novos jogadores tenham um excelente início. O foco em jogos populares como roleta e poker garante que os usuários tenham acesso a entretenimento de qualidade e a uma variedade de opções.

    • Suporte técnico eficiente via Telegram.
    • Grande variedade de jogos de cassino disponíveis.
    • Interface amigável projetada para brasileiros.
    • Promoções regulares e bônus atrativos.

    Segurança e confiança na Mgbet

    A segurança dos jogadores é uma prioridade na Mgbet. A plataforma utiliza tecnologia de criptografia avançada para proteger os dados pessoais e financeiros dos usuários. Além disso, a Mgbet opera sob regulamentos que garantem um ambiente de jogo seguro e confiável. Isso significa que os jogadores podem se concentrar em se divertir, sabendo que suas informações estão seguras.

    Fazendo uso de métodos de pagamento respeitáveis, a Mgbet assegura que todas as transações sejam feitas de forma segura e eficaz, promovendo uma experiência tranquila para todos os usuários.

    Por que escolher a Mgbet

    A Mgbet se destaca no competitivo mercado de cassinos online, especialmente para jogadores brasileiros. Com uma interface fácil de usar, uma ampla gama de jogos, e suporte especializado, a plataforma oferece uma experiência completa e gratificante. Os bônus de boas-vindas e as promoções regulares garantem que você tenha sempre uma boa razão para voltar e jogar.

    Se você está à procura de uma plataforma de cassino online que valoriza seus jogadores e oferece um ambiente seguro, a Mgbet é a escolha certa. Não perca tempo, crie sua conta hoje e comece a explorar tudo o que essa incrível plataforma tem a oferecer!

    ]]>
    Charmius Casino Canada payments made easy: Fast methods for secure transactions http://tierphysio-deutschland.de/public/charmius-casino-canada-payments-made-easy-fast-methods-for-secure-transactions-2/ Mon, 02 Nov 2026 11:04:19 +0000 http://tierphysio-deutschland.de/?p=1345

    As the online gaming industry continues to thrive, players are increasingly looking for the best platforms that offer not just a wide array of games but also secure and efficient payment methods. Charmius Casino in Canada has emerged as a premier destination for players seeking exciting gaming experiences and hassle-free transactions, which is why many enthusiasts turn to charmiuscasino-ca.com for their gaming needs. With a robust selection of over 5,000 games, including slots and live dealer options, the casino ensures that every player can find their favorite type of entertainment while enjoying swift and secure payment options.

    How online casino registration works for new players

    Registering at an online casino can be a straightforward process, and Charmius Casino simplifies this for new players. The registration journey begins by creating an account, which is essential for playing games and making transactions. Players are required to provide some personal information, including their name, email, and preferred currency. The process is designed to be user-friendly, so players can enjoy seamless access to a wide range of games as soon as they complete their registration.

    After registration, players can take advantage of enticing welcome bonuses, which often include match bonuses and free spins to get them started with more resources. This added incentive makes the registration process even more appealing for new players eager to dive into the vast gaming experience that Charmius Casino offers.

    How to get started

    Embarking on your online gaming adventure at Charmius Casino is easy with just a few simple steps. Below is a quick guide to help you get started:

    1. Create an Account: Visit the Charmius Casino website and fill out the registration form with your details.
    2. Verify Your Details: Confirm your identity by providing any required documentation to ensure security.
    3. Make a Deposit: Choose your preferred payment method and deposit funds into your account. The minimum deposit is C$10.
    4. Select Your Game: Browse through the extensive game library featuring slots, table games, and live dealers.
    5. Start Playing: Choose a game and begin your gaming experience, utilizing your bonuses and free spins.
    • Quick access to over 5,000 games
    • Generous welcome bonus of up to C$2,000 + 100 free spins
    • Flexible payment options for easy funding

    Practical details for Charmius Casino

    At Charmius Casino, players are treated to an impressive selection of games, ensuring that there is something for everyone. Whether you enjoy the adrenaline rush of slots or the strategic play of table games, the casino has it all. With over 5,000 games powered by renowned software providers including Pragmatic Play, Evolution Gaming, and Microgaming, the quality and variety are exceptional.

    Aside from an extensive game library, Charmius Casino offers multiple payment methods that cater to Canadian players. These include traditional options like Interac, Visa, and Mastercard, as well as modern alternatives like Bitcoin Cash and MuchBetter. This variety makes it easier for players to deposit and withdraw funds securely. Each payment method is designed to facilitate safe and timely transactions, ensuring that players can focus on enjoying their gaming experience without unnecessary delays.

    • Access to a wide variety of games including slots and live dealer options
    • Multiple secure payment methods for convenience
    • Easy navigation and user-friendly interface

    This comprehensive approach to gaming and payments establishes Charmius Casino as a go-to platform for both new and experienced players looking for a reliable gaming experience.

    Key benefits

    Choosing Charmius Casino comes with a myriad of benefits that enhance the overall gaming experience. As a player, enjoying the perks of a well-structured online casino can significantly elevate your time spent playing. Below are some key advantages:

    • Lucrative Bonuses: The generous welcome bonus encourages players to explore more games right from the start.
    • Variety of Games: With thousands of games available, boredom is never an option.
    • Reliable Support: Customer support is readily available for any questions or assistance you may need.
    • Flexible Payment Options: A range of deposit methods caters to diverse player preferences.

    These benefits make Charmius Casino a standout choice among online gaming platforms, ensuring that players have everything they need for an enjoyable experience.

    Trust and security

    When it comes to online gaming, trust and security are paramount. Charmius Casino prioritizes the safety of its players by implementing the latest encryption technology to protect personal and financial information. This commitment ensures that transactions are conducted securely, giving players peace of mind while they enjoy their gaming sessions.

    Additionally, the casino follows standard practices to ensure fair play, including regular audits of games and systems. Players can trust that they are engaging in a safe environment where their data is protected, and the games are fair. This dedication to security forms the foundation of player confidence in Charmius Casino.

    • Robust encryption for secure transactions
    • Regular audits to ensure fair gaming
    • Responsive customer service for security concerns

    Why choose Charmius Casino

    With its extensive game offerings, generous bonuses, and a strong focus on player security, Charmius Casino has established itself as a top-notch gaming platform in Canada. Players seeking an engaging and secure gaming experience will find all the elements they need to maximize their enjoyment. With a minimum deposit requirement of C$10, it’s accessible for both casual players and high rollers alike.

    In summary, whether you’re looking to spin the reels on the latest slots or engage with a live dealer game, Charmius Casino is equipped to meet your gaming expectations. Join today and discover the world of exciting opportunities that await!

    ]]>
    Charmius Casino Canada payments made easy: Fast methods for secure transactions http://tierphysio-deutschland.de/public/charmius-casino-canada-payments-made-easy-fast-methods-for-secure-transactions/ Mon, 02 Nov 2026 11:02:01 +0000 http://tierphysio-deutschland.de/?p=1343

    As the online gaming industry continues to thrive, players are increasingly looking for the best platforms that offer not just a wide array of games but also secure and efficient payment methods. Charmius Casino in Canada has emerged as a premier destination for players seeking exciting gaming experiences and hassle-free transactions, which is why many enthusiasts turn to charmiuscasino-ca.com for their gaming needs. With a robust selection of over 5,000 games, including slots and live dealer options, the casino ensures that every player can find their favorite type of entertainment while enjoying swift and secure payment options.

    How online casino registration works for new players

    Registering at an online casino can be a straightforward process, and Charmius Casino simplifies this for new players. The registration journey begins by creating an account, which is essential for playing games and making transactions. Players are required to provide some personal information, including their name, email, and preferred currency. The process is designed to be user-friendly, so players can enjoy seamless access to a wide range of games as soon as they complete their registration.

    After registration, players can take advantage of enticing welcome bonuses, which often include match bonuses and free spins to get them started with more resources. This added incentive makes the registration process even more appealing for new players eager to dive into the vast gaming experience that Charmius Casino offers.

    How to get started

    Embarking on your online gaming adventure at Charmius Casino is easy with just a few simple steps. Below is a quick guide to help you get started:

    1. Create an Account: Visit the Charmius Casino website and fill out the registration form with your details.
    2. Verify Your Details: Confirm your identity by providing any required documentation to ensure security.
    3. Make a Deposit: Choose your preferred payment method and deposit funds into your account. The minimum deposit is C$10.
    4. Select Your Game: Browse through the extensive game library featuring slots, table games, and live dealers.
    5. Start Playing: Choose a game and begin your gaming experience, utilizing your bonuses and free spins.
    • Quick access to over 5,000 games
    • Generous welcome bonus of up to C$2,000 + 100 free spins
    • Flexible payment options for easy funding

    Practical details for Charmius Casino

    At Charmius Casino, players are treated to an impressive selection of games, ensuring that there is something for everyone. Whether you enjoy the adrenaline rush of slots or the strategic play of table games, the casino has it all. With over 5,000 games powered by renowned software providers including Pragmatic Play, Evolution Gaming, and Microgaming, the quality and variety are exceptional.

    Aside from an extensive game library, Charmius Casino offers multiple payment methods that cater to Canadian players. These include traditional options like Interac, Visa, and Mastercard, as well as modern alternatives like Bitcoin Cash and MuchBetter. This variety makes it easier for players to deposit and withdraw funds securely. Each payment method is designed to facilitate safe and timely transactions, ensuring that players can focus on enjoying their gaming experience without unnecessary delays.

    • Access to a wide variety of games including slots and live dealer options
    • Multiple secure payment methods for convenience
    • Easy navigation and user-friendly interface

    This comprehensive approach to gaming and payments establishes Charmius Casino as a go-to platform for both new and experienced players looking for a reliable gaming experience.

    Key benefits

    Choosing Charmius Casino comes with a myriad of benefits that enhance the overall gaming experience. As a player, enjoying the perks of a well-structured online casino can significantly elevate your time spent playing. Below are some key advantages:

    • Lucrative Bonuses: The generous welcome bonus encourages players to explore more games right from the start.
    • Variety of Games: With thousands of games available, boredom is never an option.
    • Reliable Support: Customer support is readily available for any questions or assistance you may need.
    • Flexible Payment Options: A range of deposit methods caters to diverse player preferences.

    These benefits make Charmius Casino a standout choice among online gaming platforms, ensuring that players have everything they need for an enjoyable experience.

    Trust and security

    When it comes to online gaming, trust and security are paramount. Charmius Casino prioritizes the safety of its players by implementing the latest encryption technology to protect personal and financial information. This commitment ensures that transactions are conducted securely, giving players peace of mind while they enjoy their gaming sessions.

    Additionally, the casino follows standard practices to ensure fair play, including regular audits of games and systems. Players can trust that they are engaging in a safe environment where their data is protected, and the games are fair. This dedication to security forms the foundation of player confidence in Charmius Casino.

    • Robust encryption for secure transactions
    • Regular audits to ensure fair gaming
    • Responsive customer service for security concerns

    Why choose Charmius Casino

    With its extensive game offerings, generous bonuses, and a strong focus on player security, Charmius Casino has established itself as a top-notch gaming platform in Canada. Players seeking an engaging and secure gaming experience will find all the elements they need to maximize their enjoyment. With a minimum deposit requirement of C$10, it’s accessible for both casual players and high rollers alike.

    In summary, whether you’re looking to spin the reels on the latest slots or engage with a live dealer game, Charmius Casino is equipped to meet your gaming expectations. Join today and discover the world of exciting opportunities that await!

    ]]>
    Δείτε τα πιο δημοφιλή παιχνίδια στο Ice Casino Ελλάδα για το 2026 http://tierphysio-deutschland.de/public/popular-games-ice-casino-greece-2026/ Mon, 02 Nov 2026 08:50:48 +0000 http://tierphysio-deutschland.de/?p=1339

    Ανακαλύψτε τα πιο δημοφιλή παιχνίδια που προσφέρει το Ice Casino στην Ελλάδα το 2026. Με μια εκτενή γκάμα παιχνιδιών, από κουλοχέρηδες έως επιτραπέζια παιχνίδια και live casino, οι παίκτες έχουν πολλές επιλογές για να απολαύσουν, όπως το ice casino που υπόσχεται μια μοναδική εμπειρία ψυχαγωγίας, εξερευνώντας τα καλύτερα που έχει να προσφέρει ο κόσμος των καζίνο.

    Πώς λειτουργεί το καζίνο για νέους παίκτες

    Η διαδικασία συμμετοχής σε ένα καζίνο, όπως το Ice Casino, είναι απλή και διαισθητική, ειδικά για τους νέους παίκτες. Από τη στιγμή που θα δημιουργήσουν τον λογαριασμό τους, μπορούν να εξερευνήσουν μια εκπληκτική ποικιλία παιχνιδιών και να επωφεληθούν από τα μπόνους που προσφέρονται. Το σημαντικό είναι να κατανοήσουν πώς να πλοηγηθούν στο περιβάλλον του καζίνο, πώς να επιλέξουν τα κατάλληλα παιχνίδια και πώς να διαχειριστούν τις πληρωμές τους.

    Ο κόσμος των online καζίνο έχει εξελιχθεί και προσφέρει πολλές δυνατότητες για απλότητα και ασφάλεια. Το Ice Casino, με πάνω από 3.000 παιχνίδια από 50 και πλέον παρόχους, παρέχει στους παίκτες τη δυνατότητα να δοκιμάσουν διάφορες στρατηγικές και στυλ παιχνιδιού.

    Πώς να ξεκινήσετε

    Η δημιουργία ενός λογαριασμού στο Ice Casino είναι το πρώτο βήμα για μια αξέχαστη εμπειρία παιχνιδιού. Ακολουθήστε τα παρακάτω βήματα για να ξεκινήσετε την περιπέτειά σας:

    1. Δημιουργία Λογαριασμού: Κάντε εγγραφή στο Ice Casino με τη συμπλήρωση της φόρμας εγγραφής.
    2. Επιβεβαίωση Στοιχείων: Επαληθεύστε τις λεπτομέρειες σας για να διασφαλίσετε την ασφάλεια του λογαριασμού.
    3. Κατάθεση Χρημάτων: Εισάγετε χρήματα στον λογαριασμό σας μέσω ασφαλών μεθόδων πληρωμής.
    4. Επιλογή Παιχνιδιού: Επιλέξτε ανάμεσα σε εκατοντάδες παιχνίδια για να βρείτε αυτό που σας ταιριάζει.
    5. Έναρξη Παιχνιδιού: Ξεκινήστε να παίζετε και απολαύστε την εμπειρία!
    • Δημιουργία λογαριασμού με εύκολο και γρήγορο τρόπο.
    • Η επιβεβαίωση στοιχείων παρέχει ασφάλεια.
    • Διαθέσιμες πολλές μέθοδοι κατάθεσης.

    Πρακτικές λεπτομέρειες για το Ice Casino

    Το Ice Casino προσφέρει πληθώρα επιλογών στους παίκτες του, με πάνω από 3.000 παιχνίδια που περιλαμβάνουν κουλοχέρηδες, επιτραπέζια παιχνίδια και live casino. Μέσα σε αυτούς τους τίτλους, μπορείτε να βρείτε δημοφιλή παιχνίδια και καινοτόμες προτάσεις που υπόσχονται ατελείωτες ώρες διασκέδασης. Ο συνδυασμός εντυπωσιακής γραφικής απεικόνισης και συναρπαστικών χαρακτηριστικών κάνει κάθε παιχνίδι μοναδικό και ελκυστικό.

    • Διαθέσιμες επιλογές παιχνιδιών από κορυφαίους παρόχους.
    • Ευέλικτες επιλογές κατάθεσης: Visa, Mastercard, Skrill, Neteller και κρυπτονομίσματα.
    • Γρήγορες αναλήψεις με δυνατότητα ολοκλήρωσης σε 0-24 ώρες με πορτοφόλια και κρυπτονομίσματα.

    Επιπλέον, οι παίκτες απολαμβάνουν την υποστήριξη 24/7 μέσω live chat, email και τηλεφώνου, εξασφαλίζοντας ότι οποιοδήποτε ζήτημα μπορεί να αντιμετωπιστεί άμεσα.

    Κύρια οφέλη

    Το Ice Casino προσφέρει πολλά πλεονεκτήματα για τους παίκτες του, καθιστώντας το μια εξαιρετική επιλογή για διαδικτυακό τζόγο. Από τα μπόνους καλωσορίσματος έως την ποικιλία παιχνιδιών, οι παίκτες θα βρουν κάτι που θα τους ενθουσιάσει. Εδώ είναι μερικά από τα σημαντικά οφέλη:

    • Μπόνους καλωσορίσματος έως €1,700 + 170 δωρεάν περιστροφές.
    • Ευρεία γκάμα παιχνιδιών που καλύπτει όλες τις προτιμήσεις.
    • Γρήγορες και ασφαλείς πληρωμές.
    • 24/7 υποστήριξη πελατών.

    Αυτά τα χαρακτηριστικά κάνουν το Ice Casino μια ελκυστική επιλογή για τους παίκτες που αναζητούν ποικιλία και ασφάλεια.

    Εμπιστοσύνη και ασφάλεια

    Η ασφάλεια και η εμπιστοσύνη είναι ουσιώδεις για κάθε παίκτη. Το Ice Casino χρησιμοποιεί προηγμένα συστήματα κρυπτογράφησης για να διασφαλίσει ότι τα προσωπικά και οικονομικά δεδομένα των παικτών προστατεύονται πλήρως. Οι διαδικασίες ασφαλείας περιλαμβάνουν την ταυτοποίηση και την επιβεβαίωση στοιχείων, διασφαλίζοντας ότι μόνο οι νόμιμοι χρήστες μπορούν να αποκτήσουν πρόσβαση στους λογαριασμούς.

    Επιπλέον, το Ice Casino συνεργάζεται μόνο με αξιόπιστους παρόχους πληρωμών, διασφαλίζοντας ότι οι συναλλαγές είναι ασφαλείς και ταχύτατες. Οι παίκτες μπορούν να αισθάνονται σίγουροι με την επιλογή τους, γνωρίζοντας ότι η ασφάλεια τους είναι προτεραιότητα.

    Γιατί να επιλέξετε το Ice Casino

    Το Ice Casino προσφέρει μια απολαυστική εμπειρία παιχνιδιού με πληθώρα δυνατοτήτων και πλεονεκτημάτων. Με την ευρεία γκάμα παιχνιδιών και τις γρήγορες διαδικασίες πληρωμής, οι παίκτες βρίσκουν εύκολα αυτό που ψάχνουν. Επιπλέον, η 24/7 υποστήριξη παρέχει την ηρεμία που χρειάζεστε κατά τη διάρκεια του παιχνιδιού σας.

    Εν τέλει, αν αναζητάτε ένα καζίνο που να συνδυάζει ασφάλεια, ποικιλία και υποστήριξη, το Ice Casino είναι η σωστή επιλογή. Εξερευνήστε τον κόσμο του online τζόγου μαζί του και απολαύστε μοναδικές στιγμές παιχνιδιού!

    ]]>
    Spinaway Casino ouvre de nouvelles portes aux joueurs en ligne http://tierphysio-deutschland.de/uncategorized/plus-ici/ Sat, 31 Oct 2026 04:06:51 +0000 http://tierphysio-deutschland.de/?p=1329 sécurisé bonus de fidélité promotion

    L’arrivée de plus ici sur le marché canadien transforme les attentes des passionnés de jeux d’argent numériques. La plateforme propose un environnement moderne où la netteté des conditions, la vitesse des transactions et la pluralité des divertissements occupent une place centrale. Dès la première connexion, le visiteur remarque une interface épurée conçue pour fluidifier la navigation, qu’il désire une machine à sous récente, une table de blackjack ou un salon de casino en direct. L’offre s’adresse autant aux joueurs occasionnels qu’aux habitués exigeants, avec un accent mis sur la lisibilité des bonus et la protection des données personnelles. Pour les Canadiens qui appréhendent l’univers des casinos en ligne ou qui envisagent changer de plateforme, Spinaway Casino représente une porte d’entrée actualisée, sans lourdeur technique et sans ambiguïté sur les règles du jeu.

    Un catalogue de jeux imaginé pour la diversité des préférences

    Le choix de jeux représente le premier motif de curiosité pour tout nouvel utilisateur, et Spinaway Casino s’appuie sur une sélection large qui couvre l’ensemble des grandes familles ludiques. Les titres sont issus de plusieurs éditeurs reconnus, ce qui garantit une variété de styles artistiques, de mécaniques de jeu et de rythmes de partie. L’utilisateur peut filtrer les jeux par type, par éditeur ou par notoriété, ce qui réduit le temps utilisé à dénicher une table ou une machine adaptée à ses https://www.reddit.com/r/poker/comments/8suo2u/best_completely_free_poker_site/?tl=fr préférences. Les nouveautés sont soulignées de façon régulière, et les classiques indémodables sont accessibles en quelques clics. Cette organisation claire prévient la impression d’éparpillement que l’on observe parfois sur des portails surchargés. Pour le public canadien, familiarisé à une sélection numérique de prestige, cette méthode méthodique représente un bénéfice tangible dès les initiales sessions de jeu.

    Bandits manchots et jackpots progressifs

    Les passionnés de machines à sous rencontrent chez Spinaway Casino un assortiment qui passe des titres à trois rouleaux inspirés des modèles mécaniques vers les vidéo slots les plus élaborées, dotées de multiples lignes de paiement et de fonctions bonus interactives. Les thèmes voyagent à travers les civilisations anciennes, la science-fiction, la mythologie ou les séries animalières, ce qui autorise à chacun de choisir un univers correspondant à son humeur du moment. Plusieurs machines sont reliées à des réseaux de jackpots progressifs dont les cagnottes s’accroissent à chaque mise placée par les joueurs, parfois jusqu’à atteindre des montants qui changent une vie. Le fonctionnement de ces jackpots est présenté dans les règles de chaque titre, et le montant en temps réel est affiché sur la vignette du jeu. Pour un joueur canadien qui désire tenter sa chance sur une somme cumulative, il suffit de examiner la contribution de sa mise au jackpot avant de lancer les rouleaux.

    Parties de table et vidéo poker

    Outre les machines à sous, Spinaway Casino présente une gamme complète de jeux de table qui reproduisent fidèlement l’ambiance des salles physiques. Le blackjack se décline en plusieurs versions, avec des limites de mise adaptées aux petits budgets comme aux joueurs plus audacieux. La roulette européenne, américaine et française est disponible, chacune avec ses particularités de tapis et ses taux de redistribution. Le baccara, le craps et plusieurs variantes de poker de casino enrichissent l’offre. Les amateurs de vidéo poker ne sont pas en reste : des titres comme le Jacks or Better, le Deuces Wild ou l’All American frôlent des versions multi-mains qui accélèrent le rythme des parties. Chaque jeu de table est accompagné d’un guide des règles consultable en un clic, ce qui aide aux nouveaux venus à comprendre les décisions de base sans quitter la table. Cette transparence accroît la confiance et diminue les erreurs coûteuses.

    Casino live

    Le volet casino en direct représente un pont reliant le confort du domicile et l’interaction sociale d’un établissement terrestre. Des croupiers professionnels conduisent les parties en temps réel depuis des studios munis de caméras haute définition, et le joueur peut regarder chaque geste, chaque distribution de cartes ou chaque lancer de bille via un flux vidéo stable. Le clavardage intégré autorise d’échanger avec le croupier et parfois avec les autres participants, ce qui reproduit une dynamique conviviale. Les tables de blackjack, de roulette et de baccara en direct demeurent disponibles à des horaires étendus, et les limites de mise sont clairement indiquées avant de prendre place. Pour un résident canadien qui aime le contact humain sans se déplacer, cette formule offre un compromis efficace. La qualité du streaming s’ajuste automatiquement à la connexion, ce qui évite les coupures intempestives pendant les tours décisifs.

    Jouer n’importe où, à tout moment : l’expérience mobile

    Spinaway Casino a été conçu pour opérer sans accroc sur les supports mobiles, qu’il s’agisse de téléphones mobiles ou de tablettes, sans exiger le téléchargement d’une application dédiée. Le site se conforme automatiquement à la taille de l’écran et au système d’exploitation, que le joueur utilise iOS ou Android. La navigation tactile est lisse, les boutons sont dimensionnés pour limiter les erreurs de clic, et les jeux se chargent rapidement même sur une connexion 4G. Cette disponibilité permanente répond aux habitudes des Canadiens qui alternent entre un ordinateur de bureau pendant la journée et un appareil mobile le soir ou dans les transports. La totalité du catalogue de jeux est disponible en version mobile, y compris les tables de casino en direct, dont le flux vidéo s’ajuste à la bande passante disponible.

    Les options de compte, telles que les dépôts, les retraits et la consultation de l’historique, restent intégralement accessibles depuis un navigateur mobile. Les joueurs peuvent ainsi contrôler leur budget et activer des bonus où qu’ils se trouvent, à condition de bénéficier d’une connexion internet stable. Les tests réalisés sur différents modèles de téléphones courants au Canada indiquent une compatibilité large, sans nécessité de matériel récent ou haut de gamme. Pour les utilisateurs qui préfèrent une expérience encore plus intégrée, il est possible d’ajouter un raccourci du site sur l’écran d’accueil, ce qui imite le comportement d’une application native sans utiliser d’espace de stockage supplémentaire. Cette approche simplifiée réduit les obstacles techniques et permet à chacun de se concentrer sur le jeu lui-même.

    Des méthodes financières adaptées aux utilisateurs canadiens

    La rapidité des transactions financières est un critère décisif dans le choix d’une plateforme en ligne, et Spinaway Casino s’appuie sur des méthodes de paiement familières au public canadien. Les dépôts arrivent en temps réel dans la grande majorité des cas, ce qui autorise de commencer à jouer sans délai. Les retraits observent un processus de vérification visant à protéger les fonds des utilisateurs, et les délais varient selon la méthode choisie. La plateforme autorise les dépôts en dollars canadiens, ce qui supprime les frais de conversion lorsque le joueur se sert d’une carte bancaire ou d’un portefeuille électronique libellé dans cette devise. Pour les Canadiens qui préfèrent les solutions de paiement locales, la présence d’Interac est un atout notable, car ce service est répandu d’un océan à l’autre pour les transactions courantes comme pour les loisirs en ligne.

    Dépôts rapides et méthodes courantes

    Parmi les options de dépôt disponibles, on compte les cartes Visa et Mastercard, les portefeuilles électroniques, les virements bancaires directs et les services de paiement en ligne prépayés. La plupart des versements sont traités immédiatement, et le solde de jeu est rafraîchi sans que le joueur ait à actualiser la page. Les montants minimums de dépôt sont définis à un seuil accessible, habituellement autour de dix à vingt dollars canadiens, ce qui permet de tester la plateforme sans engagement financier lourd. Les plafonds de dépôt peuvent être adaptés par le joueur lui-même dans les paramètres de son compte, un outil utile pour ceux qui souhaitent maîtriser leurs dépenses de façon proactive. Pour un habitant de Toronto, de Montréal ou de Vancouver, la possibilité d’utiliser Interac pour un dépôt immédiat enlève les frictions que l’on observe parfois avec des solutions bancaires moins connues au Canada.

    Retraits et délais de traitement

    La demande de retrait s’enclenche par une demande effectuée depuis l’espace client, suivie d’une vérification d’identité si celle-ci n’a pas déjà été achevée. Cette étape, requise pour des raisons de sécurité et de conformité réglementaire, revient à transmettre une pièce d’identité et un justificatif de domicile. Une fois le compte validé, les demandes sont examinées dans un délai qui est lié à la méthode de paiement sélectionnée. Les portefeuilles électroniques garantissent souvent les délais les plus rapides, parfois sous vingt-quatre heures, tandis que les virements bancaires peuvent nécessiter trois à cinq jours ouvrables. Les cartes bancaires se trouvent dans une fourchette intermédiaire. Spinaway Casino divulgue ces délais de façon limpide, et le joueur peut suivre l’état de sa demande dans l’historique des transactions. Pour un utilisateur canadien qui organise ses retraits, cette visibilité améliore la gestion de son budget loisir.

    Unités monétaires et conversion

    La prise en charge du dollar canadien comme devise de compte supprime les frais de change que supportent les joueurs obligés de convertir leurs dépôts en dollars américains ou en euros. Lorsque le compte est libellé en CAD, chaque mise, chaque gain et chaque retrait sont comptabilisés dans la même unité, ce qui facilite le suivi des https://www.lemonde.fr/societe/article/2024/08/07/une-enquete-ouverte-pour-menace-de-mort-apres-un-courrier-recu-par-l-arcom_6271415_3224.html sessions. Si un joueur souhaite utiliser une méthode de paiement dans une autre devise, les conditions de conversion sont spécifiées par le prestataire de paiement, et non par le casino lui-même. Il est recommandé de vérifier la devise par défaut au moment de l’inscription, car un changement ultérieur peut être soumis à des restrictions. Pour la majorité des Canadiens, cette adéquation monétaire constitue un confort non négligeable, surtout lorsqu’il s’agit d’évaluer rapidement un solde ou un gain sans calcul mental.

    Des récompenses structurées pour commencer et rester actif

    Spinaway Casino structure son système de récompenses autour de la lisibilité, un point souvent négligé par les acteurs traditionnels. Chaque promotion est accompagnée d’un résumé des conditions principales, notamment le coefficient de mise, la validité et les jeux éligibles. Cette stratégie offre au joueur québécois de comprendre clairement ce qu’il doit accomplir avant de retirer d’éventuels gains issus d’un bonus. Les montants proposés demeurent dans des plages attractives par rapport au marché, sans promesses extravagantes qui cachent des exigences impossibles à satisfaire. L’accent est porté sur la fréquence des gains plutôt que sur un seul événement marquant à l’inscription. De cette façon, un utilisateur qui fréquente la plateforme de jeu de façon chaque semaine peut gagner des bénéfices concrets sans avoir à déposer des grosses sommes à chaque session.

    L’offre de bienvenue

    L’offre de bienvenue se compose habituellement d’un bonus sur le premier dépôt, quelquefois complété par des tours gratuits sur une sélection de machines à sous populaires. Le pourcentage de correspondance et le plafond du bonus sont affichés sur la page promotionnelle, et le joueur doit activer l’offre avant d’effectuer son versement. Une fois le dépôt crédité, les fonds bonus se retrouvent sur un solde distinct, sujet aux exigences de mise. Ces exigences sont indiquées en multiple du montant du bonus, et le joueur doit les remplir dans un délai précis, souvent compris entre sept et trente jours. Les tours gratuits sont crédités par vagues quotidiennes ou en une seule fois, selon la campagne en cours. Pour un nouvel inscrit au Canada, il est recommandé de lire la section « Termes et conditions » de l’offre avant de déposer, afin d’éviter toute surprise au moment de demander un retrait.

    Promotions hebdomadaires et programme de récompenses

    En plus de l’accueil, Spinaway Casino entretient l’engagement par des promotions récurrentes qui peuvent comporter des bonus de recharge, des remises en argent sur les pertes nettes ou des tournois de machines à sous dotés de prix en argent réel. Ces événements sont signalés par courriel ou via une section dédiée du site, et les conditions de participation sont systématiquement exposées. Les joueurs réguliers peuvent également bénéficier de un programme de fidélité à plusieurs niveaux, dans lequel l’activité de jeu accumule des points échangeables contre des crédits ou des avantages exclusifs. Plus le niveau est élevé, plus les limites de retrait sont adaptables et plus les délais de traitement sont réduits. Pour un Canadien qui joue plusieurs fois par mois, cette structure de récompenses progressives représente une motivation supplémentaire à concentrer son activité sur une plateforme unique, tout en gardant le contrôle de son budget.

    Une plateforme sécurisée et officiellement réglementée

    La sécurité des données personnelles et bancaires est un préalable que Spinaway Casino prend au sérieux, en se fondant sur des protocoles de chiffrement qui préservent les informations transmises entre le navigateur du joueur et les serveurs de la plateforme. La détention d’une licence délivrée par une autorité de régulation reconnue constitue un indicateur de conformité que les joueurs canadiens peuvent contrôler en consultant le pied de page du site. Cette licence impose des audits réguliers des générateurs de nombres aléatoires utilisés par les jeux, garantissant que les résultats ne sont pas faussés. En outre, la plateforme offre des outils de jeu responsable : limites de dépôt, limites de session, auto-exclusion temporaire ou définitive. Ces dispositifs sont disponibles depuis le profil utilisateur et peuvent être activés sans intervention du service client. Pour un joueur canadien attentif de la légalité de ses activités de loisir, ces éléments apportent une tranquillité d’esprit immédiate.

    Outre des aspects techniques, la régulation requiert également des règles strictes en matière de lutte contre le blanchiment d’argent et de protection des fonds des joueurs. Les soldes des comptes clients sont conservés sur des comptes séparés des fonds opérationnels de l’entreprise, une pratique qui réduit le risque en cas de difficultés financières de l’opérateur. Les procédures de vérification d’identité, bien qu’elles puissent sembler contraignantes, contribuent à cet effort de transparence et de sécurité collective. Pour un résident canadien qui réalise des dépôts réguliers, connaître que ces mécanismes sont en place accroît la confiance à long terme. Il est suggéré de lire le document de politique de confidentialité pour comprendre précisément quelles données sont collectées et comment elles sont utilisées.

    Une aide accessible et en français

    La qualité du support client représente généralement la différence entre une plateforme que l’on recommande et une que l’on abandonne après une difficulté non traitée. Spinaway Casino met à disposition plusieurs canaux de contact, dont un clavardage en direct accessible depuis le site, un formulaire de courriel et une section de questions fréquentes structurée par thèmes. Le service est offert en français, ce qui constitue un avantage majeur pour les joueurs canadiens qui souhaitent communiquer dans leur langue maternelle sans utiliser à des outils de traduction. Les agents sont entraînés pour répondre aux questions techniques, aux interrogations sur les bonus et aux demandes de vérification de compte. Les délais de réponse par chat sont généralement courts, et les échanges par courriel reçoivent d’une réponse dans un délai de quelques heures à une journée ouvrable.

    La foire aux questions aborde les sujets les plus courants : création de compte, dépôts et retraits, conditions des bonus, vérification d’identité et problèmes techniques courants. Chaque article est écrit dans un langage simple et exclut le jargon inutile. Avant de contacter le support, un joueur peut donc souvent découvrir la réponse à sa question en quelques minutes de consultation autonome. Pour les situations plus délicates, comme un retard de retrait ou un litige sur une mise, le passage par un agent humain demeure la solution la plus rassurante. Dans un marché canadien où plusieurs opérateurs négligent le service en français, cet investissement dans l’accessibilité linguistique est un signal fort de la volonté de Spinaway Casino de s’implanter durablement.

    Ce qui rend unique vraiment Spinaway Casino sur le marché canadien

    Au-delà des fonctions attendues d’un casino en ligne, diverses caractéristiques offrent à Spinaway Casino une personnalité propre. La première est la transparence des conditions promotionnelles : chaque bonus présente ses exigences de mise de manière visible, sans renvoyer le joueur vers des documents illisibles. La deuxième est la rapidité de traitement des retraits une fois la vérification d’identité achevée, un point souvent souligné comme irritant par les utilisateurs d’autres plateformes. La troisième est la compatibilité monétaire native avec le dollar canadien, qui supprime les frais de conversion et simplifie la lecture des soldes. Enfin, l’interface utilisateur, épurée et réactive, réduit la fatigue visuelle et autorise de se concentrer sur l’essentiel : le choix du jeu et la gestion de ses mises.

    Un aspect particulier réside dans la constance des mises à jour du catalogue. De nouveaux titres font leur apparition chaque mois, souvent assortis de promotions ciblées qui donnent l’occasion de les découvrir avec des tours gratuits ou des bonus sans dépôt. Cette dynamique conserve l’intérêt des joueurs réguliers et donne une raison de revenir régulièrement. Pour un Canadien qui compare les offres disponibles, la association d’un support en français, d’une politique de retrait performante et d’une interface moderne représente un ensemble cohérent compliqué à trouver ailleurs. Spinaway Casino ne cherche pas à repenser le casino en ligne, mais à en perfectionner les rouages essentiels, ce qui répond à une demande réelle de fiabilité et de simplicité dans un secteur parfois perçu comme opaque.

    Les participants qui attachent de l’importance à la dimension communautaire apprécieront également les tournois périodiques et les classements publics qui ajoutent une touche de compétition amicale. Ces événements sont ouverts à tous les membres, sans frais d’inscription en sus, et les prix récompensent souvent les premières places ainsi que des rangs sélectionnés aléatoirement. Cette mécanique permet même aux petits budgets de participer et de éprouver l’excitation d’une compétition sans mettre en jeu des sommes déraisonnables. Pour un résident de Québec, d’Ottawa ou de Calgary, cette approche inclusive accroît le sentiment d’appartenance à une plateforme qui privilégie autant le divertissement que la responsabilité individuelle.

    Découvrez un aperçu des principaux atouts que les joueurs canadiens peuvent retenir de la plateforme :

    • Compatibilité intégrée du dollar canadien sans commissions dissimulées, avec dépôts et retraits affichés en CAD.
    • Catalogue de jeux constamment renouvelé, proposant des machines à sous, des jeux de table, du vidéo poker et un casino en direct avec croupiers francophones.
    • Service clientèle en français proposé par clavardage en direct et par courriel, avec des délais d’attente minimisés.
    • Outils de jeu responsable intégrés au profil utilisateur : limites de dépôt, limites de session et options d’auto-exclusion.
    • Programme de récompenses à plusieurs niveaux offrant des avantages progressifs, des retraits accélérés et des promotions exclusives.
    ]]>