├── .github └── FUNDING.yml ├── .gitignore ├── LICENSE.md ├── README.md ├── _build ├── config.json ├── resolvers │ ├── resolve.cleanup.php │ └── resolve.treehillstudio.php └── setup.options.php ├── _packages ├── imageplus-2.2.2-pl.transport.zip ├── imageplus-2.3.4-pl.transport.zip ├── imageplus-2.4.5-pl.transport.zip ├── imageplus-2.5.0-pl.transport.zip ├── imageplus-2.6.3-pl.transport.zip ├── imageplus-2.7.0-pl.transport.zip ├── imageplus-2.8.9-pl.transport.zip ├── imageplus-2.9.3-pl.transport.zip ├── imageplus-2.9.3-pl2.transport.zip ├── imageplus-2.9.4-pl.transport.zip └── imageplus-2.9.5-pl.transport.zip ├── assets └── components │ └── imageplus │ ├── connector.php │ ├── css │ └── mgr │ │ └── imageplus.min.css │ ├── img │ └── mgr │ │ ├── jcrop.gif │ │ ├── treehill-studio-small.png │ │ ├── treehill-studio-small@2x.png │ │ ├── treehill-studio.png │ │ └── treehill-studio@2x.png │ └── js │ └── mgr │ └── imageplus.min.js ├── core └── components │ └── imageplus │ ├── composer.json │ ├── composer.lock │ ├── docs │ ├── changelog.md │ ├── license.md │ └── readme.md │ ├── elements │ ├── chunks │ │ ├── imageplus.demo.html │ │ └── imageplus.image.html │ ├── plugins │ │ └── imageplus.plugin.php │ ├── snippets │ │ └── imageplus.snippet.php │ └── tv │ │ ├── input │ │ ├── imageplus.class.php │ │ ├── options │ │ │ └── imageplus.php │ │ └── tpl │ │ │ ├── imageplus.options.tpl │ │ │ └── imageplus.render.tpl │ │ └── output │ │ ├── imageplus.class.php │ │ ├── options │ │ └── imageplus.php │ │ └── tpl │ │ └── imageplus.options.tpl │ ├── lexicon │ ├── cs │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── da │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── de │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── en │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── es │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── fr │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── hu │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── it │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── nl │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── ro │ │ └── default.inc.php │ └── ru │ │ ├── default.inc.php │ │ ├── properties.inc.php │ │ └── setting.inc.php │ ├── model │ └── imageplus │ │ └── imageplus.class.php │ └── src │ ├── CropEngines │ ├── AbstractCropEngine.php │ ├── PhpThumbOf.php │ ├── PhpThumbOn.php │ └── PhpThumbsUp.php │ ├── ImagePlus.php │ ├── Plugins │ ├── Events │ │ ├── OnManagerPageBeforeRender.php │ │ ├── OnTVInputPropertiesList.php │ │ ├── OnTVInputRenderList.php │ │ ├── OnTVOutputRenderList.php │ │ └── OnTVOutputRenderPropertiesList.php │ └── Plugin.php │ └── Snippets │ ├── ImagePlus.php │ └── Snippet.php ├── docs ├── contributors.md ├── examples.md ├── getting-started.md ├── index.md ├── installation.md └── usage.md ├── gulpfile.js ├── icon ├── imageplus.ai └── imageplus.png ├── mkdocs.yml ├── package-lock.json ├── package.json └── source ├── css └── mgr │ └── imageplus.css ├── img └── mgr │ ├── jcrop.gif │ ├── treehill-studio-small.png │ ├── treehill-studio-small@2x.png │ ├── treehill-studio.png │ └── treehill-studio@2x.png ├── js └── mgr │ ├── imageplus.grid.js │ ├── imageplus.jquery.imagecrop.js │ ├── imageplus.js │ ├── imageplus.migx_renderer.js │ ├── imageplus.panel.input.js │ ├── imageplus.window.editor.js │ └── tools │ └── JSON2.js ├── sass └── mgr │ ├── imageplus.scss │ └── jquery.jcrop.scss └── vendor └── jcrop ├── MIT-LICENSE.txt ├── README.md ├── bower.json ├── css ├── Jcrop.gif ├── jquery.Jcrop.css └── jquery.Jcrop.min.css ├── demos ├── crop.php ├── demo_files │ ├── demos.css │ ├── main.css │ ├── pool.jpg │ ├── sago.jpg │ ├── sagomod.jpg │ └── sagomod.png ├── non-image.html ├── styling.html ├── tutorial1.html ├── tutorial2.html ├── tutorial3.html ├── tutorial4.html └── tutorial5.html ├── index.html ├── js ├── jquery.Jcrop.js ├── jquery.Jcrop.min.js ├── jquery.color.js └── jquery.min.js ├── package-lock.json └── package.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: Jako 4 | open_collective: treehillstudio 5 | ko_fi: treehillstudio 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _build/build.config.php 2 | config.core.php 3 | 4 | _build/site 5 | 6 | icon/*.svg 7 | 8 | _packages/*.* 9 | !_packages/.gitignore 10 | !_packages/*.zip 11 | 12 | node_modules/ 13 | core/components/*/vendor/ 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Default Lexicon](https://hosted.weblate.org/widget/modx-extras/imageplus/svg-badge.svg)](https://hosted.weblate.org/projects/modx-extras/imageplus/) 2 | 3 | # Image+ 4 | 5 | Advanced image custom template variable in MODX Revolution. 6 | 7 | ## Features 8 | 9 | With this MODX custom template variable an image could be cropped while 10 | maintaining the original image. The dimensions for the image can (optionally) be 11 | configured to constrain a minimal width and/or height. The image crop could be 12 | forced to remain at a pre-set ratio. A graphical tool could be used to crop the 13 | image to the required dimensions/proportions. 14 | 15 | ## Installation 16 | 17 | MODX Package Management 18 | 19 | ## Usage 20 | 21 | Install via package manager, create a TV and change the input & output type to 'Image+'. 22 | 23 | ## Documentation 24 | 25 | For more information please read the [documentation](https://jako.github.io/ImagePlus/). 26 | 27 | ## Dependencies 28 | 29 | MODX Cropping Engine i.e. [pthumb](https://modx.com/extras/package/pthumb) 30 | 31 | ## License 32 | 33 | The project is licensed under the [GPLv2 license](https://github.com/Jako/ImagePlus/blob/master/core/components/imageplus/docs/license.md). 34 | 35 | ## Translations 36 | 37 | Translations of the package can be made for the [Default Lexicon](https://hosted.weblate.org/projects/modx-extras/imageplus/standard/), the [Properties Lexicon](https://hosted.weblate.org/projects/modx-extras/imageplus/properties/) and the [System Setting Lexicon](https://hosted.weblate.org/projects/modx-extras/imageplus/system-settings/) 38 | -------------------------------------------------------------------------------- /_build/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ImagePlus", 3 | "lowCaseName": "imageplus", 4 | "description": "Advanced Image Template Variable", 5 | "author": "Alan Pich, Thomas Jakobi", 6 | "version": "2.9.5", 7 | "package": { 8 | "elements": { 9 | "chunks": [ 10 | { 11 | "name": "ImagePlus.demo", 12 | "file": "imageplus.demo.html", 13 | "description": "Demo chunk for Image+ template variable output." 14 | }, 15 | { 16 | "name": "ImagePlus.image", 17 | "file": "imageplus.image.html", 18 | "description": "Demo chunk for Image+ snippet output." 19 | } 20 | ], 21 | "plugins": [ 22 | { 23 | "name": "ImagePlus", 24 | "description": "Image+ runtime hooks - registers custom TV input & output types and includes javascripts on document edit pages.", 25 | "file": "imageplus.plugin.php", 26 | "events": [ 27 | "OnManagerPageBeforeRender", 28 | "OnTVInputPropertiesList", 29 | "OnTVInputRenderList", 30 | "OnTVOutputRenderList", 31 | "OnTVOutputRenderPropertiesList" 32 | ] 33 | } 34 | ], 35 | "snippets": [ 36 | { 37 | "name": "ImagePlus", 38 | "file": "imageplus.snippet.php", 39 | "description": "Snippet as an alternative to Image+ TV Output Type", 40 | "properties": [ 41 | { 42 | "name": "tvname", 43 | "value": "" 44 | }, 45 | { 46 | "name": "docid", 47 | "value": "" 48 | }, 49 | { 50 | "name": "type", 51 | "value": "" 52 | }, 53 | { 54 | "name": "options", 55 | "value": "" 56 | }, 57 | { 58 | "name": "tpl", 59 | "value": "ImagePlus.image" 60 | } 61 | ] 62 | } 63 | ] 64 | }, 65 | "systemSettings": [ 66 | { 67 | "key": "debug", 68 | "type": "combo-boolean", 69 | "area": "system", 70 | "value": "0" 71 | }, 72 | { 73 | "key": "target_width", 74 | "area": "imageplus", 75 | "value": "" 76 | }, 77 | { 78 | "key": "target_height", 79 | "area": "imageplus", 80 | "value": "" 81 | }, 82 | { 83 | "key": "target_ratio", 84 | "area": "imageplus", 85 | "value": "" 86 | }, 87 | { 88 | "key": "thumbnail_width", 89 | "area": "imageplus", 90 | "value": "" 91 | }, 92 | { 93 | "key": "allow_alt_tag", 94 | "type": "combo-boolean", 95 | "area": "imageplus", 96 | "value": "0" 97 | }, 98 | { 99 | "key": "allow_caption", 100 | "type": "combo-boolean", 101 | "area": "imageplus", 102 | "value": "0" 103 | }, 104 | { 105 | "key": "allow_credits", 106 | "type": "combo-boolean", 107 | "area": "imageplus", 108 | "value": "0" 109 | }, 110 | { 111 | "key": "select_config", 112 | "type": "sizes-ratio-grid", 113 | "area": "imageplus", 114 | "value": "[]" 115 | }, 116 | { 117 | "key": "force_config", 118 | "type": "combo-boolean", 119 | "area": "imageplus", 120 | "value": "0" 121 | } 122 | ] 123 | }, 124 | "dependencies": [ 125 | { 126 | "name": "php", 127 | "version": ">=7.1" 128 | }, 129 | { 130 | "name": "modx", 131 | "version": ">=2.6" 132 | } 133 | ], 134 | "build": { 135 | "readme": "docs/readme.md", 136 | "license": "docs/license.md", 137 | "changelog": "docs/changelog.md", 138 | "setupOptions": { 139 | "source": "setup.options.php" 140 | }, 141 | "resolver": { 142 | "after": [ 143 | "resolve.cleanup.php", 144 | "resolve.treehillstudio.php" 145 | ] 146 | } 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /_build/resolvers/resolve.cleanup.php: -------------------------------------------------------------------------------- 1 | xpdo) { 15 | if (!function_exists('recursiveRemoveFolder')) { 16 | function recursiveRemoveFolder($dir) 17 | { 18 | $files = array_diff(scandir($dir), ['.', '..']); 19 | foreach ($files as $file) { 20 | (is_dir("$dir/$file")) ? recursiveRemoveFolder($dir . '/' . $file) : unlink($dir . '/' . $file); 21 | } 22 | return rmdir($dir); 23 | } 24 | } 25 | 26 | if (!function_exists('cleanupFolders')) { 27 | function cleanupFolders($modx, $corePath, $assetsPath, $cleanup, $package, $version) 28 | { 29 | $paths = [ 30 | 'core' => $corePath, 31 | 'assets' => $assetsPath, 32 | ]; 33 | $countFiles = 0; 34 | $countFolders = 0; 35 | foreach ($cleanup as $folder => $files) { 36 | foreach ($files as $file) { 37 | $legacyFile = $paths[$folder] . $file; 38 | if (file_exists($legacyFile)) { 39 | if (is_dir($legacyFile)) { 40 | recursiveRemoveFolder($legacyFile); 41 | $countFolders++; 42 | } else { 43 | unlink($legacyFile); 44 | $countFiles++; 45 | } 46 | } 47 | } 48 | } 49 | if ($countFolders || $countFiles) { 50 | $modx->log(xPDO::LOG_LEVEL_INFO, 'Removed ' . $countFiles . ' legacy files and ' . $countFolders . ' legacy folders before ' . $package . ' ' . $version . '.'); 51 | } 52 | } 53 | } 54 | 55 | if (!function_exists('cleanupMenu')) { 56 | function cleanupMenu($modx, $namespace, $newAction) 57 | { 58 | /** @var modAction[] $actions */ 59 | $actions = $modx->getIterator('modAction', [ 60 | 'namespace:=' => $namespace, 61 | 'controller' => 'index' 62 | ]); 63 | foreach ($actions as $action) { 64 | /** @var modMenu $menu */ 65 | $menu = $modx->getObject('modMenu', $action->get('id')); 66 | if ($menu) { 67 | $menu->set('action', $newAction); 68 | $menu->save(); 69 | } 70 | $action->remove(); 71 | } 72 | } 73 | } 74 | 75 | if (!function_exists('cleanupPluginEvents')) { 76 | function cleanupPluginEvents($modx, $plugin, $events) 77 | { 78 | foreach ($events as $event) { 79 | $c = $modx->newQuery('modPluginEvent'); 80 | $c->leftJoin('modPlugin', 'Plugin', [ 81 | 'modPluginEvent.pluginid = Plugin.id' 82 | ]); 83 | $c->where([ 84 | 'event' => $event, 85 | 'Plugin.name' => $plugin 86 | ]); 87 | /** @var modPluginEvent $pluginEvent */ 88 | $pluginEvent = $modx->getObject('modPluginEvent', $c); 89 | if ($pluginEvent) { 90 | $pluginEvent->remove(); 91 | $modx->log(xPDO::LOG_LEVEL_INFO, 'Removed ' . $event . ' from ' . $plugin . ' plugin.'); 92 | } 93 | } 94 | } 95 | } 96 | 97 | /** @var xPDO $modx */ 98 | $modx =& $object->xpdo; 99 | 100 | switch ($options[xPDOTransport::PACKAGE_ACTION]) { 101 | case xPDOTransport::ACTION_INSTALL: 102 | case xPDOTransport::ACTION_UPGRADE: 103 | $c = $modx->newQuery('transport.modTransportPackage'); 104 | $c->where( 105 | [ 106 | 'workspace' => 1, 107 | "(SELECT 108 | `signature` 109 | FROM {$modx->getTableName('transport.modTransportPackage')} AS `latestPackage` 110 | WHERE `latestPackage`.`package_name` = `modTransportPackage`.`package_name` 111 | ORDER BY 112 | `latestPackage`.`version_major` DESC, 113 | `latestPackage`.`version_minor` DESC, 114 | `latestPackage`.`version_patch` DESC, 115 | IF(`release` = '' OR `release` = 'ga' OR `release` = 'pl','z',`release`) DESC, 116 | `latestPackage`.`release_index` DESC 117 | LIMIT 1,1) = `modTransportPackage`.`signature`", 118 | ] 119 | ); 120 | $c->where( 121 | [ 122 | 'modTransportPackage.signature:LIKE' => $options['namespace'] . '-%', 123 | 'modTransportPackage.installed:IS NOT' => null 124 | ] 125 | ); 126 | $c->limit(1); 127 | 128 | /** @var modTransportPackage $oldPackage */ 129 | $oldPackage = $modx->getObject('transport.modTransportPackage', $c); 130 | $corePath = $modx->getOption('core_path', null, MODX_CORE_PATH); 131 | $assetsPath = $modx->getOption('assets_path', null, MODX_ASSETS_PATH); 132 | 133 | if ($oldPackage && $oldPackage->compareVersion('2.8.8-pl2', '>')) { 134 | $cleanup = [ 135 | 'core' => [ 136 | 'components/imageplus/model/cropengines' 137 | ] 138 | ]; 139 | cleanupFolders($modx, $corePath, $assetsPath, $cleanup, 'ImagePlus', '2.8.8'); 140 | cleanupPluginEvents($modx, 'ImagePlus', ['OnDocFormRender']); 141 | } 142 | $success = true; 143 | break; 144 | case xPDOTransport::ACTION_UNINSTALL: 145 | $success = true; 146 | break; 147 | } 148 | } 149 | return $success; 150 | -------------------------------------------------------------------------------- /_build/resolvers/resolve.treehillstudio.php: -------------------------------------------------------------------------------- 1 | xpdo; 18 | $c = $modx->newQuery('transport.modTransportPackage'); 19 | $c->where( 20 | [ 21 | 'workspace' => 1, 22 | "(SELECT 23 | `signature` 24 | FROM {$modx->getTableName('transport.modTransportPackage')} AS `latestPackage` 25 | WHERE `latestPackage`.`package_name` = `modTransportPackage`.`package_name` 26 | ORDER BY 27 | `latestPackage`.`version_major` DESC, 28 | `latestPackage`.`version_minor` DESC, 29 | `latestPackage`.`version_patch` DESC, 30 | IF(`release` = '' OR `release` = 'ga' OR `release` = 'pl','z',`release`) DESC, 31 | `latestPackage`.`release_index` DESC 32 | LIMIT 1,1) = `modTransportPackage`.`signature`", 33 | ] 34 | ); 35 | $c->where( 36 | [ 37 | 'modTransportPackage.signature:LIKE' => $options['namespace'] . '-%', 38 | 'modTransportPackage.installed:IS NOT' => null 39 | ] 40 | ); 41 | $c->limit(1); 42 | 43 | /** @var modTransportPackage $oldPackage */ 44 | $oldPackage = $modx->getObject('transport.modTransportPackage', $c); 45 | 46 | $oldVersion = ''; 47 | if ($oldPackage) { 48 | $oldVersion = $oldPackage->get('version_major') . 49 | '.' . $oldPackage->get('version_minor') . 50 | '.' . $oldPackage->get('version_patch') . 51 | '-' . $oldPackage->get('release'); 52 | } 53 | 54 | $version = ''; 55 | if ($transport->version) { 56 | $version = $transport->version; 57 | } 58 | 59 | $modxVersionObj = $modx->getObject('modSystemSetting', ['key' => 'settings_version']); 60 | $modxVersion = ($modxVersionObj) ? $modxVersionObj->get('value') : ''; 61 | $managerLang = $modx->getOption('manager_language'); 62 | 63 | $action = ''; 64 | switch ($options[xPDOTransport::PACKAGE_ACTION]) { 65 | case xPDOTransport::ACTION_INSTALL: 66 | $action = 'install'; 67 | break; 68 | case xPDOTransport::ACTION_UPGRADE: 69 | $action = 'upgrade'; 70 | break; 71 | case xPDOTransport::ACTION_UNINSTALL: 72 | $action = 'uninstall'; 73 | break; 74 | } 75 | 76 | $params = [ 77 | 'name' => $options['namespace'], 78 | 'uuid' => $modx->uuid ?? 'unknown', 79 | 'host' => $modx->getOption('http_host', null, 'unknown'), 80 | 'php_version' => phpversion(), 81 | 'modx_version' => $modxVersion, 82 | 'manager_lang' => $managerLang, 83 | 'installation_type' => $action, 84 | 'package_version_from' => $oldVersion, 85 | 'package_version' => $version, 86 | 'date' => time() 87 | ]; 88 | 89 | /** 90 | * Curl POST. 91 | */ 92 | $curl = curl_init(); 93 | if ($curl) { 94 | curl_setopt($curl, CURLOPT_URL, $url); 95 | curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 96 | curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); 97 | curl_setopt($curl, CURLOPT_POST, true); 98 | curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params)); 99 | curl_setopt($curl, CURLOPT_TIMEOUT, 5); 100 | 101 | $response = curl_exec($curl); 102 | $responseInfo = curl_getinfo($curl); 103 | $curlError = curl_error($curl); 104 | curl_close($curl); 105 | } 106 | 107 | return true; 108 | -------------------------------------------------------------------------------- /_build/setup.options.php: -------------------------------------------------------------------------------- 1 | 12 | #modx-setupoptions-panel { display: none; } 13 | #modx-setupoptions-form p { margin-bottom: 10px; } 14 | #modx-setupoptions-form h2 { margin-bottom: 15px; } 15 | '; 16 | 17 | $values = []; 18 | switch ($options[xPDOTransport::PACKAGE_ACTION]) { 19 | case xPDOTransport::ACTION_INSTALL: 20 | $output .= '

Install Image+

21 | 22 |

Thanks for installing Image+. This open source extra was 23 | developed by Treehill Studio - MODX development in Münsterland.

24 | 25 |

During the installation, we will collect some statistical data (the 26 | hostname, the MODX UUID, the PHP version and the MODX version of your 27 | MODX installation). Your data will be kept confidential and under no 28 | circumstances be used for promotional purposes or disclosed to third 29 | parties. We only like to know the usage count of this package.

30 | 31 |

If you install this package, you are giving us your permission to 32 | collect, process and use that data for statistical purposes.

'; 33 | 34 | break; 35 | case xPDOTransport::ACTION_UPGRADE: 36 | $output .= '

Upgrade Image+

37 | 38 |

Image+ will be upgraded. This open source extra was developed by 39 | Treehill Studio - MODX development in Münsterland.

40 | 41 |

During the installation, we will collect some statistical data (the 42 | hostname, the MODX UUID, the PHP version and the MODX version of your 43 | MODX installation). Your data will be kept confidential and under no 44 | circumstances be used for promotional purposes or disclosed to third 45 | parties. We only like to know the usage count of this package.

46 | 47 |

If you upgrade this package, you are giving us your permission to 48 | collect, process and use that data for statistical purposes.

'; 49 | 50 | break; 51 | case xPDOTransport::ACTION_UNINSTALL: 52 | break; 53 | } 54 | 55 | return $output; 56 | -------------------------------------------------------------------------------- /_packages/imageplus-2.2.2-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.2.2-pl.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.3.4-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.3.4-pl.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.4.5-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.4.5-pl.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.5.0-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.5.0-pl.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.6.3-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.6.3-pl.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.7.0-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.7.0-pl.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.8.9-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.8.9-pl.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.9.3-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.9.3-pl.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.9.3-pl2.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.9.3-pl2.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.9.4-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.9.4-pl.transport.zip -------------------------------------------------------------------------------- /_packages/imageplus-2.9.5-pl.transport.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/_packages/imageplus-2.9.5-pl.transport.zip -------------------------------------------------------------------------------- /assets/components/imageplus/connector.php: -------------------------------------------------------------------------------- 1 | getOption('imageplus.core_path', null, $modx->getOption('core_path') . 'components/imageplus/'); 23 | /** @var ImagePlus $imageplus */ 24 | $imageplus = $modx->getService('imageplus', 'ImagePlus', $corePath . 'model/imageplus/', [ 25 | 'core_path' => $corePath 26 | ]); 27 | 28 | // Set HTTP_MODAUTH for web processors 29 | if (defined('MODX_REQP') && MODX_REQP === false) { 30 | $_SERVER['HTTP_MODAUTH'] = $modx->user->getUserToken($modx->context->get('key')); 31 | } 32 | 33 | // Handle request 34 | $modx->request->handleRequest([ 35 | 'processors_path' => $imageplus->getOption('processorsPath'), 36 | 'location' => '' 37 | ]); 38 | -------------------------------------------------------------------------------- /assets/components/imageplus/css/mgr/imageplus.min.css: -------------------------------------------------------------------------------- 1 | #modx-input-props.imageplus-props,#modx-widget-props.imageplus-props{padding-top:0}.modx-grid .x-grid-cell-icons .x-grid3-cell-inner{padding-right:5px}.modx-grid-small .x-grid3-cell-inner{padding:8px 5px}.modx-grid-small .x-grid3-hd-inner{padding:8px 18px 8px 5px}.modx-grid-small .x-grid3-td-checker{padding:6px 0 0}.modx-grid-small .x-grid3-td-checker.x-grid3-hd{padding-top:0}.modx-grid-small .x-panel-tbar .x-toolbar{padding-top:2px}.modx-grid-small .x-panel-tbar .x-toolbar.x-small-editor .x-form-text{margin-top:0;padding:3px 8px 2px}.modx-grid-small .x-panel-tbar .x-toolbar .x-btn{padding:4px 10px}.modx-grid-small .x-panel-bbar .x-toolbar .x-btn{padding:2px}.modx-grid-small .x-panel-bbar .x-toolbar .x-form-text{padding:2px 3px}.modx-grid-small .x-tbar-loading:before{line-height:16px}.modx-grid-small .x-tbar-page-first:before,.modx-grid-small .x-tbar-page-last:before,.modx-grid-small .x-tbar-page-next:before,.modx-grid-small .x-tbar-page-prev:before{line-height:16px}.modx-grid-small .x-btn-icon.arrow_down button:before,.modx-grid-small .x-btn-icon.arrow_up button:before,.modx-grid-small .x-btn-icon.refresh button:before{line-height:16px}.modx-grid-small .x-small-editor .x-form-field-wrap,.modx-grid-small .x-small-editor .x-form-text{margin-top:2px}.x-form-field-wrap .x-form-triple-triggers{border:0;border-radius:0 3px 3px 0;box-shadow:none;height:100%!important;padding:0;position:absolute;right:0;top:0;width:90px}.x-form-field-wrap .x-form-triple-triggers .x-form-trigger{display:inline-block;position:relative;top:auto;vertical-align:top}.x-form-field-wrap .x-form-triple-triggers .x-form-trigger.x-form-clear-trigger:before{content:"\f00d"}.x-form-field-wrap .x-form-triple-triggers .x-form-trigger.x-form-crop-trigger:before{content:"\f125"}.imageplus-hidden-textarea{display:none}.imageplus-sectiontitle .desc-under,.imageplus-sectiontitle .x-form-item-label{padding-top:0}.treehillstudio_about{cursor:pointer;height:40px;margin-top:20px;opacity:.25;transition:opacity .5s}.treehillstudio_about:hover{opacity:1}.treehillstudio_about .x-panel-body{text-align:right}.treehillstudio_window a{color:#b2bf28;text-decoration:none}.treehillstudio_window a:hover{color:#77801a}.jcrop-holder{direction:ltr;text-align:left;-ms-touch-action:none}.jcrop-hline,.jcrop-vline{background:#fff url(Jcrop.gif);font-size:0;position:absolute}.jcrop-vline{height:100%;width:1px!important}.jcrop-vline.right{right:0}.jcrop-hline{height:1px!important;width:100%}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;height:100%;-webkit-user-select:none;width:100%}.jcrop-handle{background-color:#333;border:1px solid #eee;font-size:1px;height:7px;width:7px}.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%}.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%}.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0}.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{margin-right:-4px;right:0}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-hline,.jcrop-light .jcrop-vline{background:#fff;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-light .jcrop-handle{background-color:#000;border-color:#fff;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.jcrop-dark .jcrop-hline,.jcrop-dark .jcrop-vline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-dark .jcrop-handle{background-color:#fff;border-color:#000;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.solid-line .jcrop-hline,.solid-line .jcrop-vline{background:#fff}.jcrop-holder img,img.jcrop-preview{max-width:none}.jcrop-hline,.jcrop-vline{background:#fff url(../../img/mgr/jcrop.gif)} 2 | /*! 3 | * ImagePlus - Advanced Image Template Variable 4 | * Version: 2.9.5 5 | * Build date: 2024-02-21 6 | */ -------------------------------------------------------------------------------- /assets/components/imageplus/img/mgr/jcrop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/assets/components/imageplus/img/mgr/jcrop.gif -------------------------------------------------------------------------------- /assets/components/imageplus/img/mgr/treehill-studio-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/assets/components/imageplus/img/mgr/treehill-studio-small.png -------------------------------------------------------------------------------- /assets/components/imageplus/img/mgr/treehill-studio-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/assets/components/imageplus/img/mgr/treehill-studio-small@2x.png -------------------------------------------------------------------------------- /assets/components/imageplus/img/mgr/treehill-studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/assets/components/imageplus/img/mgr/treehill-studio.png -------------------------------------------------------------------------------- /assets/components/imageplus/img/mgr/treehill-studio@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/assets/components/imageplus/img/mgr/treehill-studio@2x.png -------------------------------------------------------------------------------- /core/components/imageplus/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "treehillstudio/imageplus", 3 | "description": "Time Range Custom Template Variable", 4 | "authors": [ 5 | { 6 | "name": "Thomas Jakobi", 7 | "email": "office@treehillstudio.com", 8 | "homepage": "https://treehillstudio.com" 9 | } 10 | ], 11 | "license": "GPL-2.0-or-later", 12 | "config": { 13 | "platform": { 14 | "php": "7.1" 15 | } 16 | }, 17 | "require": { 18 | "php": ">=7.1" 19 | }, 20 | "autoload": { 21 | "psr-4": { 22 | "TreehillStudio\\ImagePlus\\": "src/" 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /core/components/imageplus/composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "80965595bee93dc0b3f406e3ade38afc", 8 | "packages": [], 9 | "packages-dev": [], 10 | "aliases": [], 11 | "minimum-stability": "stable", 12 | "stability-flags": [], 13 | "prefer-stable": false, 14 | "prefer-lowest": false, 15 | "platform": { 16 | "php": ">=7.2.5" 17 | }, 18 | "platform-dev": [], 19 | "platform-overrides": { 20 | "php": "7.2.5" 21 | }, 22 | "plugin-api-version": "2.2.0" 23 | } 24 | -------------------------------------------------------------------------------- /core/components/imageplus/docs/readme.md: -------------------------------------------------------------------------------- 1 | # Image+ 2 | 3 | Advanced image custom template variable for MODX Revolution. 4 | 5 | - Author: Alan Pich 6 | - Maintainer and further development: Thomas Jakobi 7 | - License: GNU GPLv2 8 | 9 | ## Features 10 | 11 | With this MODX Revolution custom template variable an image could be cropped 12 | while maintaining the original image. The dimensions for the image can 13 | (optionally) be configured to constrain a minimal width and/or height. The image 14 | crop could be forced to remain at a pre-set ratio. A graphical tool could be 15 | used to crop the image to the required dimensions/proportions. 16 | 17 | ## Installation 18 | 19 | MODX Package Management 20 | 21 | ## Usage 22 | 23 | Install via package manager, create a TV and change the input & output type to 24 | 'Image+' 25 | 26 | ## Documentation 27 | 28 | For more information please read the documentation on 29 | https://jako.github.io/ImagePlus/ 30 | 31 | ## GitHub Repository 32 | 33 | https://github.com/Jako/ImagePlus 34 | 35 | ## Dependencies 36 | 37 | MODX Cropping Engine i.e. pthumb 38 | -------------------------------------------------------------------------------- /core/components/imageplus/elements/chunks/imageplus.demo.html: -------------------------------------------------------------------------------- 1 |
2 |

Image+ Demo Chunk

3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
DescriptionCurrent Value
[[%imageplus.placeholder.url? &namespace=`imageplus`]][[+url]]
[[%imageplus.placeholder.alt? &namespace=`imageplus`]][[+alt]]
[[%imageplus.placeholder.width? &namespace=`imageplus`]][[+width]]
[[%imageplus.placeholder.height? &namespace=`imageplus`]][[+height]]
[[%imageplus.placeholder.source.src? &namespace=`imageplus`]][[+source.src]]
[[%imageplus.placeholder.source.width? &namespace=`imageplus`]][[+source.width]]
[[%imageplus.placeholder.source.height? &namespace=`imageplus`]][[+source.height]]
[[%imageplus.placeholder.crop.width? &namespace=`imageplus`]][[+crop.width]]
[[%imageplus.placeholder.crop.height? &namespace=`imageplus`]][[+crop.height]]
[[%imageplus.placeholder.crop.x? &namespace=`imageplus`]][[+crop.x]]
[[%imageplus.placeholder.crop.y? &namespace=`imageplus`]][[+crop.y]]
[[%imageplus.placeholder.options? &namespace=`imageplus`]][[+options]]
[[%imageplus.placeholder.crop.options? &namespace=`imageplus`]][[+crop.options]]
65 | 66 |

Default image output

67 | 68 |
69 | [[+alt]] 70 | [[+caption:notempty=`

[[+caption]]

`]] 71 | [[+credits:notempty=`

[[+credits]]

`]] 72 |
73 | 74 |

Responsive image output (different crops for different viewports)

75 | 76 |

77 | 78 | 83 | 85 | [[+alt]] 86 | 87 |

88 | [[+caption:notempty=`

[[+caption]]

`]] 89 | [[+credits:notempty=`

[[+credits]]

`]] 90 |
-------------------------------------------------------------------------------- /core/components/imageplus/elements/chunks/imageplus.image.html: -------------------------------------------------------------------------------- 1 | [[+alt]] 2 | [[+caption:notempty=`

[[+caption]]

`]] 3 | [[+credits:notempty=`

[[+credits]]

`]] 4 | -------------------------------------------------------------------------------- /core/components/imageplus/elements/plugins/imageplus.plugin.php: -------------------------------------------------------------------------------- 1 | event->name; 13 | 14 | $corePath = $modx->getOption('imageplus.core_path', null, $modx->getOption('core_path') . 'components/imageplus/'); 15 | /** @var ImagePlus $imageplus */ 16 | $imageplus = $modx->getService('imageplus', 'ImagePlus', $corePath . 'model/imageplus/', [ 17 | 'core_path' => $corePath 18 | ]); 19 | 20 | if ($imageplus) { 21 | if (class_exists($className)) { 22 | $handler = new $className($modx, $scriptProperties); 23 | if (get_class($handler) == $className) { 24 | $handler->run(); 25 | } else { 26 | $modx->log(xPDO::LOG_LEVEL_ERROR, $className. ' could not be initialized!', '', 'ImagePlus Plugin'); 27 | } 28 | } else { 29 | $modx->log(xPDO::LOG_LEVEL_ERROR, $className. ' was not found!', '', 'ImagePlus Plugin'); 30 | } 31 | } 32 | 33 | return; 34 | -------------------------------------------------------------------------------- /core/components/imageplus/elements/snippets/imageplus.snippet.php: -------------------------------------------------------------------------------- 1 | getOption('imageplus.core_path', null, $modx->getOption('core_path') . 'components/imageplus/'); 15 | /** @var ImagePlus $imageplus */ 16 | $imageplus = $modx->getService('imageplus', 'ImagePlus', $corePath . 'model/imageplus/', [ 17 | 'core_path' => $corePath 18 | ]); 19 | 20 | $snippet = new ImagePlus($modx, $scriptProperties); 21 | if ($snippet instanceof TreehillStudio\ImagePlus\Snippets\ImagePlus) { 22 | return $snippet->execute(); 23 | } 24 | return 'TreehillStudio\ImagePlus\Snippets\ImagePlus class not found'; -------------------------------------------------------------------------------- /core/components/imageplus/elements/tv/input/options/imageplus.php: -------------------------------------------------------------------------------- 1 | getOption('imageplus.core_path', null, $modx->getOption('core_path') . 'components/imageplus/'); 11 | /** @var ImagePlus $imageplus */ 12 | $imageplus = $modx->getService('imageplus', 'ImagePlus', $corePath . 'model/imageplus/', [ 13 | 'core_path' => $corePath 14 | ]); 15 | 16 | $selectConfig = json_decode($imageplus->getOption('select_config'), true); 17 | $forceConfig = $imageplus->getOption('force_config', false); 18 | 19 | if ($selectConfig) { 20 | $modx->smarty->assign('selectconfig', json_encode($selectConfig)); 21 | $modx->smarty->assign('forceconfig', intval($forceConfig)); 22 | $modx->smarty->assign('hide', 0); 23 | } else { 24 | $modx->smarty->assign('selectconfig', '[]'); 25 | $modx->smarty->assign('forceconfig', 0); 26 | $modx->smarty->assign('hide', 1); 27 | } 28 | return $modx->smarty->fetch($corePath . 'elements/tv/input/tpl/imageplus.options.tpl'); 29 | -------------------------------------------------------------------------------- /core/components/imageplus/elements/tv/input/tpl/imageplus.render.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 16 | -------------------------------------------------------------------------------- /core/components/imageplus/elements/tv/output/imageplus.class.php: -------------------------------------------------------------------------------- 1 | modx->getOption('imageplus.core_path', null, $this->modx->getOption('core_path') . 'components/imageplus/'); 22 | $imageplus = $this->modx->getService('imageplus', 'ImagePlus', $corePath . 'model/imageplus/', [ 23 | 'core_path' => $corePath 24 | ]); 25 | 26 | $params = array_merge([ 27 | 'docid' => ($this->modx->resource) ? $this->modx->resource->get('id') : 0 28 | ], $params); 29 | 30 | return $imageplus->getImageURL($value, $params, $this->tv); 31 | } 32 | } 33 | 34 | return 'ImagePlusOutputRender'; 35 | -------------------------------------------------------------------------------- /core/components/imageplus/elements/tv/output/options/imageplus.php: -------------------------------------------------------------------------------- 1 | getOption('imageplus.core_path', null, $modx->getOption('core_path') . 'components/imageplus/'); 11 | /** @var ImagePlus $imageplus */ 12 | $imageplus = $modx->getService('imageplus', 'ImagePlus', $corePath . 'model/imageplus/', [ 13 | 'core_path' => $corePath 14 | ]); 15 | 16 | return $modx->smarty->fetch($corePath . 'elements/tv/output/tpl/imageplus.options.tpl'); 17 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/cs/default.inc.php: -------------------------------------------------------------------------------- 1 | dokumentaci.'; 16 | $_lang['imageplus.selectConfig'] = 'Předdefinované velikosti cílů/poměry stran'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Zvolte předem definovaný cílový poměr velikostí a stran. Definice lze vytvořit v nastavení systému.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Vynucené předdefinované velikosti cílů/poměr stran'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Vynucený výběr předem definované velikosti ořezu/poměru stran. Definice lze vytvořit v nastavení systému.'; 20 | $_lang['imageplus.targetwidth'] = 'Cílová šířka (minimální)'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Volitelné, celé číslo) Cílová šířka pro výstupní obrázek. Nahraný obrázek by neměl být menší.'; 22 | $_lang['imageplus.targetheight'] = 'Cílová výška (minimální)'; 23 | $_lang['imageplus.targetheight_desc'] = '(Volitelné, celé číslo) Cílová výška pro výstupní obrázek. Nahraný obrázek by neměl být menší.'; 24 | $_lang['imageplus.targetRatio'] = 'Cílový poměr stran'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Volitelné, plovoucí) Cílový poměr stran výstupního obrázku. Pokud je nastavena cílová výška a šířka, tato hodnota je ignorována.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Šířka miniatury'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Volitelné, celé číslo) Šířka miniatury v panelu Template variable.'; 28 | $_lang['imageplus.allowAltTag'] = 'Zobrazit pole "alt" tag'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Povolit uživatelům zadat title/alt.'; 30 | $_lang['imageplus.allowCaption'] = 'Zobrazit pole titulků'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Umožňuje uživateli zadat popisek k obrázku.'; 32 | $_lang['imageplus.allowCredits'] = 'Zobrazit pole Kredity'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Umožnit uživateli zadat kredit obrázku.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Další phpThumb parametry'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'Přidání dalších filtrů atd. pro phpThumb. Dokumentaci najdete zde.'; 37 | $_lang['imageplus.outputChunk'] = 'Výstupní chunk'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Vyberte chunk pro výstup TV. Nechte prázdé pro výstup čisté URL.'; 39 | $_lang['imageplus.generateUrl'] = 'Generovat URL miniatury'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Volitelné) URL miniatury možná není třeba, pokud miniaturu generujete v chunku (například pomocí pthumb).'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Tuto možnost musíte aktivovat, pokud ve výstupních možnostech nezadáte výstupní oddíl nebo pokud v zadaném výstupním oddílu použijete zástupný znak [[+url]]. Jinak se obrázek neořízne/nezmění velikost a vrátí se původní cesta k obrázku.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'URL miniatury'; 44 | $_lang['imageplus.placeholder.alt'] = 'Alt text'; 45 | $_lang['imageplus.placeholder.width'] = 'Šířka miniatury (ignorováno pokud je 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Výška miniatury (ignorováno pokud je 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Cesta ke zdrojovému obrázku'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Šířka zdrojového obrázku'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Výška zdrojového obrázku'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Oříznout šířku zdrojového obrázku'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Oříznout výšku zdrojového obrázku'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Oříznout podle X osy zdrojového obrázku'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Oříznout podle Y osy zdrojového obrázku'; 54 | $_lang['imageplus.placeholder.options'] = 'phpThumb řetězec pro generování miniatur'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'phpThumb řetězec ořezu pro generování miniatur'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Obrázek je příliš malý'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'Vybraný obrázek je moc malý pro použití. Prosím vyberte jiný obrázek.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Obrázek nebyl nalezen'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'Obrázek nebyl nalezen a nelze ho oříznout. Prosím vyberte jiný obrázek.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/cs/properties.inc.php: -------------------------------------------------------------------------------- 1 | check tpl a thumb.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/cs/setting.inc.php: -------------------------------------------------------------------------------- 1 | dokumentationen for at finde de relevante taster i kontekst-/systemindstillingerne.'; 16 | $_lang['imageplus.selectConfig'] = 'Foruddefinerede målstørrelser/aspektforhold'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Vælg et foruddefineret målstørrelse/aspektforhold. Definitionerne kan oprettes i systemindstillingerne.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Forcerede foruddefinerede målstørrelser/aspektforhold'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Tvangsvalg af en foruddefineret afgrødestørrelse/aspektforhold. Definitionerne kan oprettes i systemindstillingerne.'; 20 | $_lang['imageplus.targetwidth'] = 'Ønsket (minimums) bredde'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Valgfrit, heltal) Målbredden for outputbilledet. Det uploadede billede skal have denne minimumsbredde.'; 22 | $_lang['imageplus.targetheight'] = 'Højde'; 23 | $_lang['imageplus.targetheight_desc'] = '(Valgfrit, heltal) Målhøjden for outputbilledet. Det uploadede billede skal have denne minimumshøjde.'; 24 | $_lang['imageplus.targetRatio'] = 'Ønsket højde- breddeforhold'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Valgfri, float) Det ønskede højde-breddeforhold for billedet som en float værdi. Hvis den ønskede højde og den ønskede bredde er sat bliver denne værdi ignoreret.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Miniature bredde'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Valgfrit, heltal) Bredden på miniaturebilledet i TV-fanen.'; 28 | $_lang['imageplus.allowAltTag'] = 'Alternativ tekst'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Tillader brugeren at indtaste en titel/alt-tag til billedet.'; 30 | $_lang['imageplus.allowCaption'] = 'Vis feltet med billedtekst'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Tillader brugeren at indtaste en billedtekst til billedet.'; 32 | $_lang['imageplus.allowCredits'] = 'Vis feltet Credits'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Tillader brugeren at angive en kredit for billedet.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Ekstra phpThumb parametre'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'Tilføj ekstra filtre osv. til phpThumb. Dokumentationen kan findes her.'; 37 | $_lang['imageplus.outputChunk'] = 'Output chunk'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Vælg en chunk til tv-udgang. Lad det være tomt for rå url-udgang.'; 39 | $_lang['imageplus.generateUrl'] = 'Generer URL til miniature'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Valgfrit) URL til miniature er måske ikke nødvendigt hvis du generer miniaturen i output chunk\'en f.eks. ved brug af pthumb output filter.'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Du skal aktivere denne indstilling, når du ikke angiver en output chunk i outputindstillingerne, eller når du bruger [[+url]]-pladsholderen [[+url]] i den angivne output chunk. Ellers beskæres/formindskes billedet ikke, og den originale billedsti returneres.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'URL til miniaturebilledet'; 44 | $_lang['imageplus.placeholder.alt'] = 'Alt-tekst'; 45 | $_lang['imageplus.placeholder.width'] = 'Miniaturebredde (ignoreret ved 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Miniaturehøjde (ignoreret ved 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Stien til kildebilledet'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Bredden på kildebilledet'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Højden på kildebilledet'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Beskær kildebilledets bredde'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Beskær kildebilledets højde'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Beskær x placering af kildebilledet'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Beskær y placering af kildebilledet'; 54 | $_lang['imageplus.placeholder.options'] = 'phpThumb indstillingsstreng til at generere miniaturebilledet'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'phpThumb beskæringsindstillingsstreng til at generere miniaturebilledet'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Billedet er for lille'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'Det valgte billede er for småt til at blive brugt her. Vælg venligst et andet billede.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Billedet blev ikke fundet'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'Billedet blev ikke fundet og kan dermed ikke blive beskåret. Vælg venligst et andet billede.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/da/properties.inc.php: -------------------------------------------------------------------------------- 1 | check tpl eller thumb.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/da/setting.inc.php: -------------------------------------------------------------------------------- 1 | Dokumentation für die entsprechenden Einträge in den System-/Kontexteinstellungen.'; 16 | $_lang['imageplus.selectConfig'] = 'Vordefinierte Ausgabegrößen/Ausgabe-Seitenverältnisse'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Wählen Sie eine vordefinierte Ausgabegröße/ein Seitenverhältnis. Die Vorgaben können in den Systemeinstellungen eingestellt werden.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Erzwungene vordefinierte Ausgabegrößen/Ausgabe-Seitenverältnisse'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Wählen Sie eine erzwungene vordefinierte Ausgabegröße/ein Seitenverhältnis. Die Vorgaben können in den Systemeinstellungen eingestellt werden.'; 20 | $_lang['imageplus.targetwidth'] = '(Minimale) Ausgabebreite'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Optional, Integer) Gibt die Ausgabebreite des Bildes an. Das hochgeladene Bild muss mindestens diese Breite haben.'; 22 | $_lang['imageplus.targetheight'] = '(Minimale) Ausgabehöhe'; 23 | $_lang['imageplus.targetheight_desc'] = '(Optional, Integer) Gibt die Ausgabehöhe des Bildes an. Das hochgeladene Bild muss mindestens diese Höhe haben.'; 24 | $_lang['imageplus.targetRatio'] = 'Ausgabe-Seitenverhältnis'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Optional, Float) Gibt das Seitenverhältnis des Bildes an. Wenn die Ausgabebreite und die Ausgabehöhe des Bildes angegeben sind, wird dieser Wert ignoriert.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Breite des Thumbnails'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Optional, Integer) Breite des Thumbnails im Template Variablen Bereich.'; 28 | $_lang['imageplus.allowAltTag'] = 'Alternatives Textfeld anzeigen'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Ermöglicht die Eingabe eines Alt oder Title-Attributes für das Bild.'; 30 | $_lang['imageplus.allowCaption'] = 'Titel Feld anzeigen'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Ermöglicht die Eingabe eines Titels für das Bild.'; 32 | $_lang['imageplus.allowCredits'] = 'Bildnachweis Feld anzeigen'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Ermöglicht die Eingabe eines Bildnachweises für das Bild.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Zursätzliche phpThumb Parameter'; 36 | $_lang['imageplus.phpThumbParams_desc'] = '(Optional) Geben Sie zusätzliche phpThumb Parameter an. Mehr Informationen zu phpThumb Parametern erhalten Sie hier.'; 37 | $_lang['imageplus.outputChunk'] = 'Ausgabe Chunk'; 38 | $_lang['imageplus.outputChunk_desc'] = '(Optional) Wählen Sie einen Ausgabe Chunk aus. Wenn kein Wert angebeben ist wird der Bildpfad ausgegeben.'; 39 | $_lang['imageplus.generateUrl'] = 'Thumbnail URL generieren'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Optional) Die Thumbnail URL eventuell wird nicht benötigt, wenn das Thumbnail im Ausgabe Chunk z.B. mit einem pThumb Output Filter generiert wird.'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Sie müssen diese Option aktivieren, wenn Sie keinen Ausgabe Chunk benutzen oder wenn Sie den [[+url]] Platzhalter im angegebenen Ausgabe Chunk einsetzen. Andernfalls wird das Bild nicht beschnitten/skaliert und der original Bildpfad ausgegeben.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'Thumbnail URL'; 44 | $_lang['imageplus.placeholder.alt'] = 'Alt-Text'; 45 | $_lang['imageplus.placeholder.width'] = 'Breite des Thumbnails (wird ignoriert, wenn 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Höhe des Thumbnails (wird ignoriert, wenn 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Server-Pfad zum Originalbild'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Minimale Breite des Originalbilds'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Minimale Höhe des Originalbilds'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Crop-Breite des Originalbilds'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Crop-Höhe des Originalbilds'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Crop-X-Startposition des Originalbilds'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Crop-Y-Startposition des Originalbilds'; 54 | $_lang['imageplus.placeholder.options'] = 'phpThumb Optionen für das Thumbnail'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'phpThumb Crop Optionen für das Thumbnail'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Bild ist zu klein'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'Das gewählte Bild ist zu klein um benutzt zu werden. Bitte wählen Sie ein anderes Bild.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Bild nicht gefunden'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'Das Bild wurde nicht gefunden und kann nicht zugeschnitten werden. Bitte wählen Sie ein anderes Bild.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/de/properties.inc.php: -------------------------------------------------------------------------------- 1 | check tpl oder thumb enthalten.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/de/setting.inc.php: -------------------------------------------------------------------------------- 1 | documentation for the appropriate keys in the context/system settings.'; 16 | $_lang['imageplus.selectConfig'] = 'Predefined target sizes/aspect ratios'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Select a predefined target size/aspect ratio. The definitions could be created in the system settings.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Forced predefined target sizes/aspect ratios'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Forced select a predefined crop size/aspect ratio. The definitions could be created in the system settings.'; 20 | $_lang['imageplus.targetwidth'] = 'Target (Minimal) Width'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Optional, Integer) The target width for the output image. The uploaded image should have this minimal width.'; 22 | $_lang['imageplus.targetheight'] = 'Target (Minimal) Height'; 23 | $_lang['imageplus.targetheight_desc'] = '(Optional, Integer) The target height for the output image. The uploaded image should have this minimal height.'; 24 | $_lang['imageplus.targetRatio'] = 'Target Aspect Ratio'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Optional, Float) The target aspect ratio for the output image as float value. If the target height and the targed width are set, this value is ignored.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Thumbnail Width'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Optional, Integer) The thumbnail width of the image in the template variable panel.'; 28 | $_lang['imageplus.allowAltTag'] = 'Show Alt Tag Field'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Allow user to enter a title/alt-tag for the image.'; 30 | $_lang['imageplus.allowCaption'] = 'Show Caption Field'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Allow user to enter a caption for the image.'; 32 | $_lang['imageplus.allowCredits'] = 'Show Credits Field'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Allow user to enter a credit for the image.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Additional phpThumb Parameters'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'Add additional filters etc for phpThumb. Documentation can be found here.'; 37 | $_lang['imageplus.outputChunk'] = 'Output Chunk'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Select a chunk for tv output. Leave blank for raw url output.'; 39 | $_lang['imageplus.generateUrl'] = 'Generate Thumb URL'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Optional) The thumb url is maybe not necessary, if you generate the thumbnail in output chunk i.e. by a pthumb output filter.'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'You have to activate this option, when you don’t specify an output chunk in the output options or when you use the [[+url]] placeholder in the specified output chunk. Otherwise the image is not cropped/resized and the original image path is returned.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'URL of the thumbnail image'; 44 | $_lang['imageplus.placeholder.alt'] = 'Alt text'; 45 | $_lang['imageplus.placeholder.width'] = 'Width of the thumbnail image (ignored when 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Height of the thumbnail image (ignored when 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Path to the source image'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Width of the source image'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Height of the source image'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Crop width of the source image'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Crop height of the source image'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Crop x position of the source image'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Crop y position of the source image'; 54 | $_lang['imageplus.placeholder.options'] = 'phpThumb option string to generate the thumbnail image'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'phpThumb crop option string to generate the thumbnail image'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Image too small'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'The selected image is too small to be used here. Please select a different image.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Image not found'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'The image was not found and can’t be cropped. Please select a different image.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/en/properties.inc.php: -------------------------------------------------------------------------------- 1 | check tpl and thumb.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/en/setting.inc.php: -------------------------------------------------------------------------------- 1 | documentación para conocer las claves apropiadas en la configuración del contexto/sistema.'; 16 | $_lang['imageplus.selectConfig'] = 'Tamaños predefinidos de objetivos/relación de aspectos'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Seleccione una proporción predefinida de tamaño y aspecto del objetivo. Las definiciones podrían crearse en los ajustes del sistema.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Tamaños de objetivos predefinidos y relaciones de aspecto forzadas'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Seleccionar forzosamente un tamaño de cultivo/relación de aspecto predefinido. Las definiciones podrían crearse en los ajustes del sistema.'; 20 | $_lang['imageplus.targetwidth'] = 'Ancho de la imagen'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Opcional, Entero) El ancho objetivo para la imagen de salida. La imagen cargada debe tener esta anchura mínima.'; 22 | $_lang['imageplus.targetheight'] = 'Alto de la imagen'; 23 | $_lang['imageplus.targetheight_desc'] = '(Opcional, Entero) La altura objetivo para la imagen de salida. La imagen cargada debe tener esta altura mínima.'; 24 | $_lang['imageplus.targetRatio'] = 'Relación de aspecto objetivo'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Opcional, Float) La relación de aspecto objetivo para la imagen de salida como valor float. Si se establecen la altura y la anchura objetivo, este valor se ignora.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Anchura de las miniaturas'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Opcional, Entero) El ancho de la miniatura de la imagen en el panel de variables de la plantilla.'; 28 | $_lang['imageplus.allowAltTag'] = 'Etiqueta Alt'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Permitir que el usuario introduzca un título/etiqueta de alto para la imagen.'; 30 | $_lang['imageplus.allowCaption'] = 'Mostrar campo de subtítulos'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Permite al usuario introducir un título para la imagen.'; 32 | $_lang['imageplus.allowCredits'] = 'Mostrar campo de créditos'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Permitir al usuario introducir un crédito para la imagen.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Parámetros phpThumb adicionales'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'Añade filtros adicionales etc a phpThumb. La documentación se puede encontrar aquí.'; 37 | $_lang['imageplus.outputChunk'] = 'Resultado chunk'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Selecciona un chunk para obtener un resultado del tv. Dejar en vacío para obtener un resultado de la url cruda.'; 39 | $_lang['imageplus.generateUrl'] = 'Generar la URL del pulgar'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Opcional) La url de la miniatura puede no ser necesaria si se genera la miniatura en el chunk de salida, es decir, mediante un filtro de salida pthumb.'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Tiene que activar esta opción, cuando no especifica un chunk de salida en las opciones de salida o cuando utiliza el marcador de posición [[+url]] en el chunk de salida especificado. En caso contrario, la imagen no se recortará/redimensionará y se devolverá la ruta original de la imagen.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'URL de la imagen en miniatura'; 44 | $_lang['imageplus.placeholder.alt'] = 'Alt text'; 45 | $_lang['imageplus.placeholder.width'] = 'Ancho de la imagen en miniatura (se ignora si es 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Altura de la imagen en miniatura (se ignora si es 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Ruta de acceso a la imagen de origen'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Anchura de la imagen de origen'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Altura de la imagen de origen'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Ancho de recorte de la imagen de origen'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Altura de recorte de la imagen de origen'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Recorte de la posición x de la imagen de origen'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Posición de recorte y de la imagen de origen'; 54 | $_lang['imageplus.placeholder.options'] = 'Cadena de opciones phpThumb para generar la imagen en miniatura'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'Cadena de opciones phpThumb para generar la imagen en miniatura'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Imagen demasiado pequeña'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'La imagen seleccionada es demasiado pequeña para ser utilizada aquí. Por favor, seleccione una imagen diferente.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Imagen no encontrada'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'La imagen no fue encontrada y no puede ser recortada. Por favor, seleccione una imagen diferente.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/es/properties.inc.php: -------------------------------------------------------------------------------- 1 | check tpl y thumb.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/es/setting.inc.php: -------------------------------------------------------------------------------- 1 | documentation pour connaître les clés appropriées dans les paramètres du contexte/système.'; 16 | $_lang['imageplus.selectConfig'] = 'Tailles cibles/ratios d’aspect prédéfinis'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Sélectionnez un rapport taille/aspect cible prédéfini. Les définitions peuvent être créées dans les paramètres du système.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Obligation de fixer des tailles cibles/ratios d’aspect prédéfinis'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Forcé de sélectionner un rapport taille/aspect de la culture prédéfini. Les définitions peuvent être créées dans les paramètres du système.'; 20 | $_lang['imageplus.targetwidth'] = 'Largeur (minimale) de la cible'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Facultatif, entier) La largeur ciblée de l’image en sortie. L’image téléchargée devrait avoir cette largeur minimale.'; 22 | $_lang['imageplus.targetheight'] = 'Hauteur (minimale) de la cible'; 23 | $_lang['imageplus.targetheight_desc'] = '(Facultatif, entier) La hauteur ciblée de l’image en sortie. L’image téléchargée devrait avoir cette hauteur minimale.'; 24 | $_lang['imageplus.targetRatio'] = 'Aspect ratio cible'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Facultatif, Float) Les proportions ciblée de l’image en sortie, valeur de type float. Si la hauteur et la largeur de la cible sont définies, cette valeur est ignorée.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Largeur miniature'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Optionnel, entier) Largeur de la miniature dans le panneau de variable de modèle (TV).'; 28 | $_lang['imageplus.allowAltTag'] = 'Afficher le champ tag alt'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Permettre à l’utilisateur à entrer un titre/tag alt pour l’image.'; 30 | $_lang['imageplus.allowCaption'] = 'Afficher le champ de légende'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Permettre à l’utilisateur d’entrer une légende pour l’image.'; 32 | $_lang['imageplus.allowCredits'] = 'Afficher le champ de crédits'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Permettre à l’utilisateur d’entrer un crédit pour l’image.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Paramètres phpThumb additionnels'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'Ajoutez des filtres additionnels pour phpThumb. La documentation est disponible ici.'; 37 | $_lang['imageplus.outputChunk'] = 'Chunk d’affichage'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Sélectionnez le chunk utilisé pour afficher le résultat de la TV. Laissez vide pour obtenir l’URL brute du résultat.'; 39 | $_lang['imageplus.generateUrl'] = 'Génère l’URL de la miniature'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Optionnel) L’URL de la miniature n’est peut-être pas nécessaire, si vous générez la miniature dans le chunk de sortie (exemple par un filtre pthumb).'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Vous devez activer cette option lorsque vous ne spécifiez pas de morceau de sortie dans les options de sortie ou lorsque vous utilisez le caractère de remplacement [[+url]] dans le morceau de sortie spécifié. Sinon, l’image n’est pas recadrée/redimensionnée et le chemin d’accès à l’image originale est renvoyé.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'URL de l’image de miniature'; 44 | $_lang['imageplus.placeholder.alt'] = 'Texte de l’attribut Alt'; 45 | $_lang['imageplus.placeholder.width'] = 'Largeur de l’image miniature (ignorée quand 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Hauteur de l’image miniature (ignorée quand 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Chemin de l’image source'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Largeur de l’image source'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Hauteur de l’image source'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Largeur de l’image source recadrée'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Hauteur de l’image source recadrée'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Position recadrage en x de l’image source'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Position recadrage en y de l’image source'; 54 | $_lang['imageplus.placeholder.options'] = 'chaîne d’option phpThumb pour générer l’image miniature'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'chaîne d’option de recadrage phpThumb pour générer l’image miniature'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Image trop petite'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'L’image sélectionnée est trop petite pour être utilisé ici. Veuillez sélectionner une image différente.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Image non trouvée'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'L’image est introuvable et ne peut être recadrée. Veuillez sélectionner une image différente.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/fr/properties.inc.php: -------------------------------------------------------------------------------- 1 | vérifier tpl ou thumb.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/fr/setting.inc.php: -------------------------------------------------------------------------------- 1 | dokumentációt a megfelelő kulcsokért a kontextus/rendszerbeállításokban.'; 16 | $_lang['imageplus.selectConfig'] = 'Előre meghatározott célméretek/aspektusarányok'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Válasszon ki egy előre meghatározott célméret/szögarányt. A definíciókat a rendszerbeállításokban lehet létrehozni.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Kényszerített előre meghatározott célméretek/aspektusarányok'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Kényszerített választás egy előre meghatározott termésméret/szögarány. A definíciókat a rendszerbeállításokban lehet létrehozni.'; 20 | $_lang['imageplus.targetwidth'] = 'Új szélesség'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Választható, egész szám) A kimeneti kép célszélessége. A feltöltött képnek ezzel a minimális szélességgel kell rendelkeznie.'; 22 | $_lang['imageplus.targetheight'] = 'Új magasság'; 23 | $_lang['imageplus.targetheight_desc'] = '(Választható, egész szám) A kimeneti kép célmagassága. A feltöltött képnek ezzel a minimális magassággal kell rendelkeznie.'; 24 | $_lang['imageplus.targetRatio'] = 'A cél képarány'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Választható, Float) A kimeneti kép céloldali képaránya float értékként. Ha a célmagasság és a célszélesség be van állítva, ez az érték figyelmen kívül marad.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Miniatűr szélessége'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Választható, egész szám) A kép miniatűr szélessége a sablon változó panelen.'; 28 | $_lang['imageplus.allowAltTag'] = 'Alt tag megengedése'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Lehetővé teszi a felhasználó számára a kép címének/alt-tagjének megadását.'; 30 | $_lang['imageplus.allowCaption'] = 'Felirat mező megjelenítése'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Lehetővé teszi a felhasználó számára a kép feliratának megadását.'; 32 | $_lang['imageplus.allowCredits'] = 'Mutasd a kreditek mezőt'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Lehetővé teszi a felhasználó számára, hogy megadja a kép kreditpontját.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'További phpThumb paraméterek'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'További szűrők stb. hozzáadása a phpThumbhoz. A dokumentáció megtalálható itt.'; 37 | $_lang['imageplus.outputChunk'] = 'Kimeneti chunk'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Válasszon ki egy darabot a tv-kimenethez. Hagyja üresen a nyers url kimenethez.'; 39 | $_lang['imageplus.generateUrl'] = 'Hüvelykujj URL generálása'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Választható) A thumb url-re talán nincs szükség, ha a kimeneti csomagban, azaz egy pthumb kimeneti szűrővel generálod a miniatűr képet.'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Ezt az opciót akkor kell aktiválnod, ha nem adsz meg kimeneti egységet a kimeneti beállítások között, vagy ha a [[+url]] helyőrzőt használod a megadott kimeneti egységben. Ellenkező esetben a képet nem vágja le/méretezi, és az eredeti kép elérési útvonalát adja vissza.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'A miniatűr kép URL címe'; 44 | $_lang['imageplus.placeholder.alt'] = 'Alt text'; 45 | $_lang['imageplus.placeholder.width'] = 'A miniatűr kép szélessége (0 esetén figyelmen kívül hagyva)'; 46 | $_lang['imageplus.placeholder.height'] = 'A miniatűr kép magassága (0 esetén figyelmen kívül hagyva)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'A forráskép elérési útvonala'; 48 | $_lang['imageplus.placeholder.source.width'] = 'A forráskép szélessége'; 49 | $_lang['imageplus.placeholder.source.height'] = 'A forráskép magassága'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'A forráskép vágási szélessége'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'A forráskép vágási magassága'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'A forráskép x pozíciójának kivágása'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'A forráskép y pozíciójának vágása'; 54 | $_lang['imageplus.placeholder.options'] = 'phpThumb crop option string to generate the thumbnail image'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'phpThumb crop opció string a miniatűr kép létrehozásához'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Túl kicsi kép'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'A kiválasztott kép túl kicsi ahhoz, hogy itt felhasználható legyen. Kérjük, válasszon másik képet.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Kép nem található'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'A képet nem találtuk, és nem lehet levágni. Kérjük, válasszon másik képet.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/hu/properties.inc.php: -------------------------------------------------------------------------------- 1 | check tpl és thumb.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/hu/setting.inc.php: -------------------------------------------------------------------------------- 1 | documentazione per conoscere le chiavi da utilizzare nelle impostazioni di sistema/contesto.'; 16 | $_lang['imageplus.selectConfig'] = 'Destinazione con dimensioni/proporzioni predefinite'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Seleziona un’impostazione di dimensioni/proporzioni predefinita. Le definizioni possono essere create nelle impostazioni del sistema.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Forza destinazione con dimensioni/proporzioni predefinite'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Selezione forzata di un ritaglio con dimensioni/proporzioni predefinite. Le definizioni possono essere create nelle impostazioni di sistema.'; 20 | $_lang['imageplus.targetwidth'] = 'Larghezza (minima)'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Facoltativo, Intero) La larghezza desiderata per l’immagine finale. L’immagine caricata dovrebbe avere almeno questa larghezza.'; 22 | $_lang['imageplus.targetheight'] = 'Altezza (minima)'; 23 | $_lang['imageplus.targetheight_desc'] = '(Facoltativo, Intero) L’altezza desiderata per l’immagine finale. L’immagine caricata dovrebbe avere almeno questa altezza.'; 24 | $_lang['imageplus.targetRatio'] = 'Proporzioni di destinazione'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Opzionale, Float [numero intero/frazionale]) Le proporzioni con valore di tipo Float per l’immagine finale. Se l’altezza e la larghezza hanno il valore impostato, il valore delle proporzioni viene ignorato.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Larghezza delle anteprime'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Opzionale, Intero) La larghezza della miniatura dell’immagine nella pannello della Template Variable.'; 28 | $_lang['imageplus.allowAltTag'] = 'Visualizza campo tag Alt'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Consente all’utente di inserire un titolo/tag-alt per l’immagine.'; 30 | $_lang['imageplus.allowCaption'] = 'Visualizza campo didascalia'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Consente all’utente di inserire una didascalia per l’immagine.'; 32 | $_lang['imageplus.allowCredits'] = 'Mostra il campo Credits'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Consente all’utente di inserire un credito per l’immagine.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Parametri aggiuntivi di phpThumb'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'Aggiungi filtri aggiuntivi ecc. per phpThumb. La documentazione può essere trovata qui.'; 37 | $_lang['imageplus.outputChunk'] = 'Chunk Output'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Seleziona un chunk per l’output della variabile tv. Lascia vuoto per avere un semplice url come output.'; 39 | $_lang['imageplus.generateUrl'] = 'Generare l’URL dell’anteprima'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Facoltativo) L’URL della miniatura dell’immagine potrebbe non essere necessario se questa viene generata nel chunk di output, per esempio con un filtro di output pThumb.'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Devi attivare questa opzione quando non specifichi un chunk di output nelle opzioni di output o quando usi il segnaposto [[+url]] nel chunk di output specificato. Altrimenti l’immagine non viene ritagliata/ridimensionata e viene restituito il percorso originale dell’immagine.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'URL dell’immagine di anteprima'; 44 | $_lang['imageplus.placeholder.alt'] = 'Testo per l’attributo Alt'; 45 | $_lang['imageplus.placeholder.width'] = 'Larghezza dell’anteprima dell’immagine (ignorata quando 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Altezza dell’anteprima dell’immagine (ignorata quando 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Percorso dell’immagine di origine'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Larghezza dell’immagine di origine'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Altezza dell’immagine di origine'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Larghezza del ritaglio dell’immagine di origine'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Altezza del ritaglio dell’immagine di origine'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Posizione orizzontale (asse x) del ritaglio dell’immagine di origine'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Posizione verticale (asse y) del ritaglio dell’immagine di origine'; 54 | $_lang['imageplus.placeholder.options'] = 'L’opzione su phpThumb per generare l’anteprima dell’immagine'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'L’opzione di ritaglio su phpthumb per generare l’anteprima dell’immagine'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Immagine troppo piccola'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'L’immagine selezionata è troppo piccola per essere usata qui. Si prega di selezionare un’altra immagine.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'L’immagine non è stata trovata'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'L’immagine non è stata trovata e perciò non può essere tagliata. Si prega di selezionare un’altra immagine.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/it/properties.inc.php: -------------------------------------------------------------------------------- 1 | check tpl e thumb.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/it/setting.inc.php: -------------------------------------------------------------------------------- 1 | documentatie voor de juiste keys.'; 16 | $_lang['imageplus.selectConfig'] = 'Voorgedefinieerde doel maten/aspect ratios'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Selecteer een vooraf gedefinieerde doel grootte/hoogte-breedteverhouding. Deze kunnen aangemaakt worden in de systeeminstellingen.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Forceer vooraf gedefinieerde doel maten/hoogte-breedteverhoudingen'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Forceer een vooraf gedefinieerde uitsnede grootte/hoogte-breedteverhouding. Deze kunnen aangemaakt worden in de systeeminstellingen.'; 20 | $_lang['imageplus.targetwidth'] = 'Doel (minimale) breedte'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Optioneel, geheel getal) De breedte van de uiteindelijke afbeelding.'; 22 | $_lang['imageplus.targetheight'] = 'Doel (minimale) hoogte'; 23 | $_lang['imageplus.targetheight_desc'] = '(Optioneel, geheel getal) De hoogte van de uiteindelijke afbeelding.'; 24 | $_lang['imageplus.targetRatio'] = 'Hoogte/breedteverhouding voor het doelbestand'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Optioneel, drijvend) De hoogte/breedteverhouding van de afbeelding. Als de hoogte en breedte voor de output zijn ingesteld wordt deze waarde genegeerd.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Thumbnail breedte'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Optioneel, geheel getal) De breedte van de thumbnail in het Template Variabele paneel.'; 28 | $_lang['imageplus.allowAltTag'] = 'Alt-Tag veld weergeven'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Laat de gebruiker een titel/alt-tag voor de afbeelding invoeren.'; 30 | $_lang['imageplus.allowCaption'] = 'Toon bijschriftveld'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Gebruiker toestaan aan een bijschrift voor de afbeelding in te voeren.'; 32 | $_lang['imageplus.allowCredits'] = 'Credits-veld weergeven'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Mogelijk maken dat de gebruiker een naamsvermelding (credits) voor de afbeelding kan invoeren.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Extra phpThumb opties'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'Voeg extra phpThumb opties zoals filters toe. Documentatie is hier te vinden.'; 37 | $_lang['imageplus.outputChunk'] = 'Output Chunk'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Selecteer een chunk voor de TV output. Laat leeg om alleen een link naar de afbeelding terug te krijgen.'; 39 | $_lang['imageplus.generateUrl'] = 'Genereer Thumbnail URL'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Optioneel) De thumbnail URL is mogelijk niet nodig, als de thumbnail gegenereerd wordt in de output chunk met bijvoorbeeld een pthumb output filter.'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Deze optie moet ingeschakeld zijn wanneer je geen "output chunk" hebt gedefineerd; of wanneer je de "output chunk" wel hebt gedefineerd en de [[+url]] placeholder hierin gebruikt. Als deze optie in voorgaande situaties niet is ingeschakeld dan worden afbeeldingen niet bijgesneden en/of vergroot en verkleind en wordt het pad naar de originele afbeelding weergegeven.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'URL van de thumbnail'; 44 | $_lang['imageplus.placeholder.alt'] = 'Alternatieve tekst'; 45 | $_lang['imageplus.placeholder.width'] = 'Breedte van de thumbnail (genegeerd indien 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Hoogte van de thumbnail (genegeerd indien 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Pad naar de bronafbeelding'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Breedte van de bronafbeelding'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Hoogte van de bronafbeelding'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Cropbreedte van de bronafbeelding'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Crophoogte van de bronafbeelding'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Crop X positie van de bronafbeelding'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Crop Y positie van de bronafbeelding'; 54 | $_lang['imageplus.placeholder.options'] = 'phpThumb waarde om de thumbnail te genereren'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'phpThumb crop waarde om de thumbnail te genereren'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Afbeelding is te klein'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'De geselecteerde afbeelding is te klein om hier gebruikt te worden. Selecteer een andere afbeelding.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Afbeelding niet gevonden'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'De afbeelding kan niet worden bijgesneden omdat hij niet gevonden kon worden. Selecteer een andere afbeelding.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/nl/properties.inc.php: -------------------------------------------------------------------------------- 1 | check, tpl of thumb.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/nl/setting.inc.php: -------------------------------------------------------------------------------- 1 | documentația pentru tastele corespunzătoare din setările de context/sistem.'; 16 | $_lang['imageplus.selectConfig'] = 'Dimensiuni țintă predefinite/raporturi de aspect'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Selectați un raport predefinit de dimensiune/aspect țintă. Definițiile ar putea fi create în setările sistemului.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Dimensiuni țintă predefinite forțate/raporturi de aspect'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Selectare forțată a unei dimensiuni predefinite a culturii/raport de aspect. Definițiile ar putea fi create în setările sistemului.'; 20 | $_lang['imageplus.targetwidth'] = 'Lățimea țintă (minimă)'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Opțional, număr întreg) Lățimea țintă pentru imaginea de ieșire. Imaginea încărcată trebuie să aibă această lățime minimă.'; 22 | $_lang['imageplus.targetheight'] = 'Înălțimea țintă (minimă)'; 23 | $_lang['imageplus.targetheight_desc'] = '(Opțional, număr întreg) Înălțimea țintă pentru imaginea de ieșire. Imaginea încărcată trebuie să aibă această înălțime minimă.'; 24 | $_lang['imageplus.targetRatio'] = 'Raportul de aspect țintă'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Opțional, float) Raportul de aspect țintă pentru imaginea de ieșire ca valoare float. În cazul în care înălțimea țintă și lățimea țintă sunt stabilite, această valoare este ignorată.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Lățimea miniaturii'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Opțional, număr întreg) Lățimea miniaturii imaginii din panoul de variabile al șablonului.'; 28 | $_lang['imageplus.allowAltTag'] = 'Afișați câmpul Alt Tag'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Permiteți utilizatorului să introducă un titlu/un etichet pentru imagine.'; 30 | $_lang['imageplus.allowCaption'] = 'Afișați câmpul de legendă'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Permiteți utilizatorului să introducă o legendă pentru imagine.'; 32 | $_lang['imageplus.allowCredits'] = 'Afișați câmpul Credite'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Permite utilizatorului să introducă un credit pentru imagine.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Parametrii suplimentari phpThumb'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'Adăugați filtre suplimentare etc. pentru phpThumb. Documentația poate fi găsită aici.'; 37 | $_lang['imageplus.outputChunk'] = 'Output Chunk'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Selectați o bucată pentru ieșirea TV. Lăsați gol pentru ieșirea în format raw url.'; 39 | $_lang['imageplus.generateUrl'] = 'Generarea URL-ului degetului mare'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Opțional) Adresa URL a thumbnail-ului poate să nu fie necesară dacă generați thumbnail-ul în fișierul de ieșire, de exemplu, printr-un filtru de ieșire pthumb.'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Trebuie să activați această opțiune atunci când nu specificați o bucată de ieșire în opțiunile de ieșire sau atunci când folosiți simbolul de poziție [[+url]] în bucată de ieșire specificată. În caz contrar, imaginea nu este decupată/redimensionată și se returnează calea originală a imaginii.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'URL-ul imaginii în miniatură'; 44 | $_lang['imageplus.placeholder.alt'] = 'Alt text'; 45 | $_lang['imageplus.placeholder.width'] = 'Lățimea imaginii miniaturale (ignorată când este 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Înălțimea imaginii miniaturale (ignorată dacă este 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Cale de acces la imaginea sursă'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Lățimea imaginii sursă'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Înălțimea imaginii sursă'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Lățimea de tăiere a imaginii sursă'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Înălțimea de tăiere a imaginii sursă'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Poziția x de tăiere a imaginii sursă'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Poziția y de tăiere a imaginii sursă'; 54 | $_lang['imageplus.placeholder.options'] = 'phpThumb șir de opțiuni pentru a genera imaginea miniaturală'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'phpThumb crop șir de opțiuni pentru generarea imaginii thumbnail'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Imagine prea mică'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'Imaginea selectată este prea mică pentru a fi utilizată aici. Vă rugăm să selectați o altă imagine.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Imaginea nu a fost găsită'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'Imaginea nu a fost găsită și nu poate fi decupată. Vă rugăm să selectați o altă imagine.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/ru/default.inc.php: -------------------------------------------------------------------------------- 1 | документацию для соответствующих ключей в контексте/системных настройках.'; 16 | $_lang['imageplus.selectConfig'] = 'Предопределенные размеры/соотношения сторон'; 17 | $_lang['imageplus.selectConfig_desc'] = 'Выберите заранее заданное соотношение размера/аспекта. Определения могут быть созданы в настройках системы.'; 18 | $_lang['imageplus.selectConfigForce'] = 'Принудительные предопределенные размеры/пропорции'; 19 | $_lang['imageplus.selectConfigForce_desc'] = 'Выберите заранее заданное соотношение размера/аспекта. Определения могут быть созданы в настройках системы.'; 20 | $_lang['imageplus.targetwidth'] = 'Необходимая (минимальная) ширина'; 21 | $_lang['imageplus.targetwidth_desc'] = '(Необязательно, Integer) Необходимая ширина для отображаемого изображения. Загружаемое изображение должно иметь эту минимальную ширину.'; 22 | $_lang['imageplus.targetheight'] = 'Необходимая (минимальная) высота'; 23 | $_lang['imageplus.targetheight_desc'] = '(Необязательно, Integer) Необходимая высота для отображаемого изображения. Загружаемое изображение должно иметь эту минимальную высоту.'; 24 | $_lang['imageplus.targetRatio'] = 'Необходимые пропорции'; 25 | $_lang['imageplus.targetRatio_desc'] = '(Необязательно, Float) Необходимые пропорции для отображаемого изображения. Если заданы минимальная высота и ширина, это значение игнорируется.'; 26 | $_lang['imageplus.thumbnailWidth'] = 'Ширина иконки'; 27 | $_lang['imageplus.thumbnailWidth_desc'] = '(Необязательно) Ширина изображения в панели управления TV.'; 28 | $_lang['imageplus.allowAltTag'] = 'Показывать поле для атрибута Аlt'; 29 | $_lang['imageplus.allowAltTag_desc'] = 'Позволяет пользователю ввести заголовок/альтернативный текст для изображения.'; 30 | $_lang['imageplus.allowCaption'] = 'Показать поле заголовка'; 31 | $_lang['imageplus.allowCaption_desc'] = 'Разрешить пользователю ввести подпись для изображения.'; 32 | $_lang['imageplus.allowCredits'] = 'Показать поле «Авторы»'; 33 | $_lang['imageplus.allowCredits_desc'] = 'Разрешить пользователю ввести Автора для изображения.'; 34 | /** Output options render **/ 35 | $_lang['imageplus.phpThumbParams'] = 'Дополнительные параметры phpThumb'; 36 | $_lang['imageplus.phpThumbParams_desc'] = 'Добавляет дополнительные фильтры и другие параметры для phpThumb. Документацию можно найти здесь.'; 37 | $_lang['imageplus.outputChunk'] = 'Чанк для вывода'; 38 | $_lang['imageplus.outputChunk_desc'] = 'Выберите чанк для вывода TV. Оставьте пустым для обычного вывода текстом.'; 39 | $_lang['imageplus.generateUrl'] = 'Генерировать Thumb URL'; 40 | $_lang['imageplus.generateUrl_desc'] = '(Необязательно) URL иконки может быть необязательным, если вы генерируете иконку в чанке, т.е. когда phpThumb используется как output filter.'; 41 | $_lang['imageplus.generateUrl_desc_warning'] = 'Вы должны активировать эту опцию, когда вы не указываете выходной блок в опциях вывода или когда вы используете заполнитель [[+url]] в указанном выходном блоке. В противном случае изображение не обрезается/не изменяется, и возвращается исходный путь к изображению.'; 42 | /** Placeholder descriptions */ 43 | $_lang['imageplus.placeholder.url'] = 'URL иконки изображения'; 44 | $_lang['imageplus.placeholder.alt'] = 'Альтернатиный текст (alt)'; 45 | $_lang['imageplus.placeholder.width'] = 'Ширина иконки изображения (игнорируется когда 0)'; 46 | $_lang['imageplus.placeholder.height'] = 'Высота иконки изображения (игнорируется когда 0)'; 47 | $_lang['imageplus.placeholder.source.src'] = 'Путь к исходному изображению'; 48 | $_lang['imageplus.placeholder.source.width'] = 'Ширина исходного изображения'; 49 | $_lang['imageplus.placeholder.source.height'] = 'Высота исходного изображения'; 50 | $_lang['imageplus.placeholder.crop.width'] = 'Ширина обрезки исходного изображения'; 51 | $_lang['imageplus.placeholder.crop.height'] = 'Высота обрезки исходного изображения'; 52 | $_lang['imageplus.placeholder.crop.x'] = 'Позиция обрезки исходного изображения по оси X (горизонталь)'; 53 | $_lang['imageplus.placeholder.crop.y'] = 'Позиция обрезки исходного изображения по оси Y (вертикаль)'; 54 | $_lang['imageplus.placeholder.options'] = 'Строка параметров phpThumb для генерации иконки изображения'; 55 | $_lang['imageplus.placeholder.crop.options'] = 'Строка опций обрезки phpThumb для генерации иконки изображения'; 56 | $_lang['imageplus.error.image_too_small.title'] = 'Изображение слишком маленькое'; 57 | $_lang['imageplus.error.image_too_small.msg'] = 'Выбранное изображение слишком маленькое для использования здесь. Выберите другое изображение, пожалуйста.'; 58 | $_lang['imageplus.error.image_not_found.title'] = 'Изображение не найдено'; 59 | $_lang['imageplus.error.image_not_found.msg'] = 'Изображение не найдено и не может быть обрезано. Выберите другое изображение, пожалуйста.'; 60 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/ru/properties.inc.php: -------------------------------------------------------------------------------- 1 | check, tpl и thumb.'; 13 | -------------------------------------------------------------------------------- /core/components/imageplus/lexicon/ru/setting.inc.php: -------------------------------------------------------------------------------- 1 | 6 | * Copyright 2015-2023 by Thomas Jakobi 7 | * 8 | * @package imageplus 9 | * @subpackage classfile 10 | */ 11 | 12 | require_once dirname(__DIR__, 2) . '/vendor/autoload.php'; 13 | 14 | /** 15 | * Class DaterangeTV 16 | */ 17 | class ImagePlus extends \TreehillStudio\ImagePlus\ImagePlus 18 | { 19 | } 20 | -------------------------------------------------------------------------------- /core/components/imageplus/src/CropEngines/AbstractCropEngine.php: -------------------------------------------------------------------------------- 1 | modx =& $modx; 32 | 33 | $corePath = $this->modx->getOption('imageplus.core_path', null, $this->modx->getOption('core_path') . 'components/imageplus/'); 34 | $this->imageplus = $this->modx->getService('imageplus', 'ImagePlus', $corePath . 'model/imageplus/', [ 35 | 'core_path' => $corePath 36 | ]); 37 | } 38 | 39 | /** 40 | * Checks that all requirements are met for using this engine 41 | * 42 | * @param modX $modx 43 | * @return bool True if engine is usable 44 | */ 45 | public static function engineRequirementsMet(modX $modx) 46 | { 47 | return true; 48 | } 49 | 50 | /** 51 | * Parse image+ data and return an url for the cropped 52 | * version of the image 53 | * 54 | * @param $json 55 | * @param array $opts 56 | * @param modTemplateVar $tv 57 | * @return string 58 | */ 59 | abstract public function getImageUrl($json, $opts = [], $tv = null); 60 | } 61 | -------------------------------------------------------------------------------- /core/components/imageplus/src/Plugins/Events/OnManagerPageBeforeRender.php: -------------------------------------------------------------------------------- 1 | modx->controller->addLexiconTopic('imageplus:default'); 16 | $this->modx->controller->addLexiconTopic('imageplus:setting'); 17 | $this->imageplus->includeScriptAssets(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /core/components/imageplus/src/Plugins/Events/OnTVInputPropertiesList.php: -------------------------------------------------------------------------------- 1 | modx->event->output($this->imageplus->getOption('corePath') . 'elements/tv/input/options/'); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /core/components/imageplus/src/Plugins/Events/OnTVInputRenderList.php: -------------------------------------------------------------------------------- 1 | modx->event->output($this->imageplus->getOption('corePath') . 'elements/tv/input/'); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /core/components/imageplus/src/Plugins/Events/OnTVOutputRenderList.php: -------------------------------------------------------------------------------- 1 | modx->event->output($this->imageplus->getOption('corePath') . 'elements/tv/output/'); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /core/components/imageplus/src/Plugins/Events/OnTVOutputRenderPropertiesList.php: -------------------------------------------------------------------------------- 1 | modx->event->output($this->imageplus->getOption('corePath') . 'elements/tv/output/options/'); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /core/components/imageplus/src/Plugins/Plugin.php: -------------------------------------------------------------------------------- 1 | scriptProperties = &$scriptProperties; 35 | $this->modx =& $modx; 36 | $corePath = $this->modx->getOption('imageplus.core_path', null, $this->modx->getOption('core_path') . 'components/imageplus/'); 37 | $this->imageplus = $this->modx->getService('imageplus', 'ImagePlus', $corePath . 'model/imageplus/', [ 38 | 'core_path' => $corePath 39 | ]); 40 | } 41 | 42 | /** 43 | * Run the plugin event. 44 | */ 45 | public function run() 46 | { 47 | $init = $this->init(); 48 | if ($init !== true) { 49 | return; 50 | } 51 | 52 | $this->process(); 53 | } 54 | 55 | /** 56 | * Initialize the plugin event. 57 | * 58 | * @return bool 59 | */ 60 | public function init() 61 | { 62 | return true; 63 | } 64 | 65 | /** 66 | * Process the plugin event code. 67 | * 68 | * @return mixed 69 | */ 70 | abstract public function process(); 71 | } -------------------------------------------------------------------------------- /core/components/imageplus/src/Snippets/ImagePlus.php: -------------------------------------------------------------------------------- 1 | '', 25 | 'tvname' => '', 26 | 'docid::int' => (isset($this->modx->resource)) ? $this->modx->resource->get('id') : 0, 27 | 'type' => '', 28 | 'options' => '', 29 | 'tpl' => 'ImagePlus.image', 30 | 'input::bool' => $this->imageplus->getOption('debug') 31 | ]; 32 | } 33 | 34 | /** 35 | * Execute the snippet and return the result. 36 | * 37 | * @return string 38 | */ 39 | public function execute() 40 | { 41 | $value = $this->getProperty('value'); 42 | $tvname = $this->getProperty('tvname'); 43 | $docid = $this->getProperty('docid'); 44 | $type = $this->getProperty('type'); 45 | $options = $this->getProperty('options'); 46 | $tpl = $this->getProperty('tpl'); 47 | $debug = $this->getProperty('debug'); 48 | 49 | if ($value) { 50 | // Value is set by snippet property 51 | $data = json_decode($value); 52 | if (!$data) { 53 | if ($debug) { 54 | $this->modx->log(xPDO::LOG_LEVEL_ERROR, 'Unable to decode JSON in snippet property', '', 'Image+'); 55 | return 'Unable to decode JSON in snippet property'; 56 | } 57 | } 58 | // No TV is used 59 | $tv = null; 60 | $tvOutputProperties = []; 61 | } else { 62 | // Value is retreived from template variable 63 | /** @var modTemplateVar $tv */ 64 | $tv = $this->modx->getObject('modTemplateVar', ['name' => $tvname]); 65 | if ($tv) { 66 | // Get the raw content of the TV 67 | $value = $tv->getValue($docid); 68 | $value = $tv->processBindings($value, $docid); 69 | $tvOutputProperties = $tv->get('output_properties'); 70 | foreach ($tvOutputProperties as &$tvOutputProperty) { 71 | switch ($tvOutputProperty) { 72 | case 'true' : 73 | $tvOutputProperty = true; 74 | break; 75 | case 'false' : 76 | $tvOutputProperty = false; 77 | break; 78 | } 79 | } 80 | } else { 81 | if ($debug) { 82 | $this->modx->log(xPDO::LOG_LEVEL_ERROR, "Template Variable '$tvname' not found.", '', 'Image+'); 83 | return "Template Variable '$tvname' not found."; 84 | } 85 | $tvOutputProperties = []; 86 | } 87 | } 88 | 89 | // Render output 90 | switch ($type) { 91 | case 'check': 92 | $data = json_decode($value); 93 | $output = ($data && $data->sourceImg->src) ? 'image' : 'noimage'; 94 | break; 95 | case 'tpl': 96 | $data = json_decode($value); 97 | $output = ($value) ? $this->imageplus->getImageURL($value, array_merge($tvOutputProperties, $this->getProperties(), [ 98 | 'docid' => $docid, 99 | 'phpThumbParams' => $options, 100 | 'outputChunk' => $tpl, 101 | 'caption' => ($data && isset($data->caption)) ? $data->caption : '', 102 | 'credits' => ($data && isset($data->credits)) ? $data->credits : '' 103 | ]), $tv) : ''; 104 | break; 105 | case 'thumb': 106 | $output = ($value) ? $this->imageplus->getImageURL($value, array_merge($tvOutputProperties, $this->getProperties(), [ 107 | 'docid' => $docid, 108 | 'phpThumbParams' => $options, 109 | 'outputChunk' => '', 110 | ]), $tv) : ''; 111 | break; 112 | default: 113 | $output = ($value) ? $this->imageplus->getImageURL($value, array_merge($tvOutputProperties, $this->getProperties(), [ 114 | 'docid' => $docid, 115 | 'phpThumbParams' => $options, 116 | ]), $tv) : ''; 117 | break; 118 | } 119 | return $output; 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /core/components/imageplus/src/Snippets/Snippet.php: -------------------------------------------------------------------------------- 1 | modx =& $modx; 52 | 53 | $corePath = $this->modx->getOption('imageplus.core_path', null, $this->modx->getOption('core_path') . 'components/imageplus/'); 54 | $this->imageplus = $this->modx->getService('imageplus', 'ImagePlus', $corePath . 'model/imageplus/', [ 55 | 'core_path' => $corePath 56 | ]); 57 | 58 | $this->properties = $this->initProperties($properties); 59 | } 60 | 61 | /** 62 | * Get default snippet properties. 63 | * 64 | * @return array 65 | */ 66 | public function getDefaultProperties() 67 | { 68 | return []; 69 | } 70 | 71 | /** 72 | * @param array $properties 73 | * @return array 74 | */ 75 | public function initProperties(array $properties = []) 76 | { 77 | $result = []; 78 | foreach ($this->getDefaultProperties() as $key => $value) { 79 | $parts = explode('::', $key); 80 | $key = ($this->propertyPrefix && !in_array('noPrefix', $parts)) ? $this->propertyPrefix . ucfirst($parts[0]) : $parts[0]; 81 | if (isset($parts[1]) && method_exists($this, 'get' . ucfirst($parts[1]))) { 82 | if (isset($parts[2])) { 83 | $result[$parts[0]] = $this->{'get' . ucfirst($parts[1])}($this->modx->getOption($key, $properties, $value, true), $parts[2]); 84 | } else { 85 | $result[$parts[0]] = $this->{'get' . ucfirst($parts[1])}($this->modx->getOption($key, $properties, $value, true)); 86 | } 87 | } else { 88 | $result[$parts[0]] = $this->modx->getOption($key, $properties, $value, true); 89 | } 90 | if ($this->propertyPrefix) { 91 | unset($properties[$key]); 92 | } 93 | unset($properties[$parts[0]]); 94 | } 95 | return array_merge($result, $properties); 96 | } 97 | 98 | /** 99 | * @param $value 100 | * @return int 101 | */ 102 | protected function getInt($value) 103 | { 104 | return (int)$value; 105 | } 106 | 107 | /** 108 | * @param $value 109 | * @return bool 110 | */ 111 | protected function getBool($value) 112 | { 113 | return ($value == 1 || $value == '1' || $value == true || $value == 'true'); 114 | } 115 | 116 | /** 117 | * @param $value 118 | * @return array|null 119 | */ 120 | protected function getAssociativeJson($value) 121 | { 122 | return (is_string($value)) ? json_decode($value, true) : $value; 123 | } 124 | 125 | /** 126 | * Explode a separated value to an array. 127 | * 128 | * @param mixed $value 129 | * @param string $separator 130 | * @return array 131 | */ 132 | protected function getExplodeSeparated($value, $separator = ',') 133 | { 134 | return (is_string($value) && $value !== '') ? array_map('trim', explode($separator, $value)) : []; 135 | } 136 | 137 | /** 138 | * Get the snippet properties. 139 | * 140 | * @return array 141 | */ 142 | public function getProperties() 143 | { 144 | return $this->properties; 145 | } 146 | 147 | /** 148 | * Get a snippet property value or the default value. 149 | * 150 | * @param string $key 151 | * @param null $default 152 | * @return mixed 153 | */ 154 | public function getProperty(string $key, $default = null) 155 | { 156 | if (isset($this->properties[$key])) { 157 | return $this->properties[$key]; 158 | } 159 | return $default; 160 | } 161 | 162 | abstract public function execute(); 163 | } 164 | -------------------------------------------------------------------------------- /docs/contributors.md: -------------------------------------------------------------------------------- 1 | The Image+ project was started in 2012 by [Alan 2 | Pich](https://github.com/alanpich) and is maintained and developed further since 3 | 2015 by [Thomas Jakobi](https://github.com/jako). 4 | 5 | Many thanks to all who contributed, whether by creating pull requests, submitting bug reports, or donating. -------------------------------------------------------------------------------- /docs/examples.md: -------------------------------------------------------------------------------- 1 | **Image+* can be used for various purposes. On this page you will find some 2 | *examples of how it can be used: 3 | 4 | ### Collections 5 | 6 | You can display the *Image+* thumbnail in a column of the Collections grid by 7 | setting the column's renderer to *ImagePlus.MIGX_Renderer*. 8 | 9 | ### MIGX 10 | 11 | If you want to use *Image+* in MIGX, you can configure all *Image+* TV 12 | properties with a JSON string in the *Configs* textarea in the MIGX formtabs 13 | field. The following properties are possible: 14 | 15 | ```json 16 | { 17 | "targetWidth":"", 18 | "targetHeight":"", 19 | "targetRatio":"", 20 | "thumbnailWidth":"", 21 | "allowAltTag":"", 22 | "allowCaption":"", 23 | "allowCredits":"" 24 | } 25 | ``` 26 | 27 | You also need to change the *Input TV Type* to `imageplus`. 28 | 29 | You can display the thumbnail in the grid column by setting the renderer to 30 | *ImagePlus.MIGX_Renderer*. In earlier versions of MIGX, you need to edit a MIGX 31 | configuration to do this. 32 | 33 | To use this *Image+* MIGX field in the frontend, call the *ImagePlus Snippet* 34 | where the value parameter is the name of the MIGX field: 35 | 36 | ```html 37 | [[ImagePlus? 38 | &value=`[[+migxImagePlusField]]` 39 | ]] 40 | ``` 41 | 42 | This will give you the prepared URL for the cropped image instead of the raw 43 | JSON object. 44 | 45 | ### getResources/pdoResources 46 | 47 | In order for the TV to be parsed using the *getResources/pdoResources snippet*, 48 | you need to add the following lines to your *getResources/pdoResources* call 49 | Snippet* call: 50 | 51 | ```html 52 | &includeTVs=`name_of_your_tv` 53 | &processTVs=`name_of_your_tv` 54 | ``` 55 | 56 | In the template chunk of the *getResources/pdoResources snippet* call, you can 57 | use the placeholder `[[+tv.name_your_TV]]` if the TV's Output Type is set to 58 | `Image+`. Without any further changes, the placeholder will contain the URL of 59 | the cropped image. 60 | 61 | ### Using the ImagePlus snippet in the getResources/pdoResources template chunk 62 | 63 | In your template chunk for calling *getResources/pdoResources Snippet*, you need 64 | to add a parameter so that the *ImagePlus Snippet* call knows the origin ID from 65 | which to retrieve data: 66 | 67 | ```html 68 | &docid=`[[+id]]` 69 | ``` 70 | 71 | Here is an example of a call and configuration, where *image* is your Image+ TV: 72 | 73 | **Snippet Call** 74 | ``` 75 |
76 | [[!pdoPage? 77 | &element=`pdoResources` 78 | &tpl=`tplBlogPost` 79 | &limit=`11` 80 | &includeContent=`1` 81 | &showHidden=`0` 82 | &hideContainers=`1` 83 | ]] 84 |
85 |
86 | [[!+page.nav]] 87 |
88 | ``` 89 | 90 | **Chunk tplBlogPost** 91 | 92 | ```html 93 |
94 |
95 |

[[+longtitle:default=`[[+pagetitle]]`]]

96 | 97 | [[ImagePlus? 98 | &tvname=`image` 99 | &type=`tpl` 100 | &docid=`[[+id]]` 101 | &tpl=`tplBlogIntroImg` 102 | ]] 103 | 104 |
105 |
106 |

[[+content:striptags:ellipsis=`255`:typography]] 107 | read more »

108 |
109 |
110 | 111 | 112 |
113 |
114 | ``` 115 | 116 | **Chunk tplBlogIntroImg** 117 | 118 | ```html 119 |
120 | [[+alt]] 121 |
122 | ``` 123 | 124 | ### Responsive images 125 | 126 | If you want to display responsive images with and without the crop, you can use 127 | the *ImagePlus Snippet*. 128 | 129 | **Snippet Call** 130 | ``` 131 | [[ImagePlus? 132 | &tvname=`yourtvname` 133 | &type=`tpl` 134 | &options=`&w=320` 135 | &tpl=`tplResponsiveImage` 136 | &pagetitle=`[[*pagetitle]]` 137 | ]] 138 | ``` 139 | 140 | **Chunk tplResponsiveImage** 141 | ``` 142 | 143 | 148 | 150 | [[+alt:default=`[[+pagetitle]]`]] 151 | 152 | ``` 153 | -------------------------------------------------------------------------------- /docs/getting-started.md: -------------------------------------------------------------------------------- 1 | ## Create a new template variable 2 | 3 | Once Image+ is installed, you can create template variables [TV] in the usual 4 | way, but instead of setting the **Input Type** in the Input Options to *Image*, 5 | choose *Image+* instead. 6 | 7 | For most use cases, you should also set the **Output Type** in the Output 8 | Options to *Image+*. This allows you to control the image output on a resource. 9 | 10 | ## The cropping tool 11 | 12 | When using an *Image+* TV, you can select an image in the same way as you would 13 | with a regular *Image* TV. Once an image is selected, a cropping window will 14 | appear where you can select the area of the image to use. The original image is 15 | not changed. So you can upload a single image and reuse it in multiple places on 16 | the website at different sizes (and crops with multiple Image+ TVs). 17 | 18 | If you want to change the cropping area, you need to click the crop trigger of 19 | the Image+ TV. 20 | 21 | In the cropping window you need to drag the handles of the dotted box to change 22 | the cropping area. If the TV has been configured with size constraints or an 23 | aspect ratio, the cropping area will be limited to that aspect ratio. 24 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Image+ 2 | 3 | Image+ is an advanced image template for MODx Revolution. The dimensions for the 4 | uploaded image can be configured (optionally) to restrict a minimum width and/or 5 | height. Image cropping can be forced to stay within a preset ratio. A graphical 6 | tool can be used to resize the image to the desired dimensions/proportions. 7 | 8 | ### Requirements 9 | 10 | * MODX Revolution 2.6+ 11 | * PHP 7.1+ 12 | * MODX Cropping Engine i.e. [pThumb](https://modx.com/extras/package/pthumb) 13 | 14 | ### Features 15 | 16 | * Visual tool for cropping images, integrated with MODX Manager interface. 17 | * Option to restrict minimum width and/or height for uploaded image. 18 | * User image cropping can be forced to stay at preset ratio. 19 | * Use chunk as output mask and fill placeholders with url, height, width, alt 20 | tag, phpthumb options etc. of cropped uploaded image. 21 | 22 | ### License 23 | 24 | The project is licensed under the [GPLv2 license](https://github.com/Jako/ImagePlus/LICENSE.md). 25 | 26 | ### Translations [![Default Lexicon](https://hosted.weblate.org/widget/modx-extras/imageplus/standard/svg-badge.svg)](https://hosted.weblate.org/projects/modx-extras/imageplus/) 27 | 28 | Translations of the package can be made for the [Default Lexicon](https://hosted.weblate.org/projects/modx-extras/imageplus/standard/), the [Properties Lexicon](https://hosted.weblate.org/projects/modx-extras/imageplus/properties/) and the [System Setting Lexicon](https://hosted.weblate.org/projects/modx-extras/imageplus/system-settings/) 29 | 30 | -------------------------------------------------------------------------------- /docs/installation.md: -------------------------------------------------------------------------------- 1 | ## Install from MODX Extras 2 | 3 | Search for Image+ in the Package Manager of your MODX installation and install 4 | it in there. 5 | 6 | ## Manual installation 7 | 8 | If you can't access the MODX Extras Repository in your MODX installation, you 9 | can manually install Image+. 10 | 11 | * Download the transport package from [MODX Extras](https://modx.com/extras/package/imageplustvinput) (or one of the pre-built transport packages in [_packages](https://github.com/Jako/ImagePlus/tree/master/_packages)) 12 | * Upload the zip file to your MODX installation's `core/packages` folder or upload it manually in the MODX Package Manager. 13 | * In the MODX Manager, navigate to the Package Manager page, and select 'Search locally for packages' from the dropdown button. 14 | * Image+ should now show up in the list of available packages. Click the corresponding 'Install' button and follow the instructions to complete the installation. 15 | 16 | ## Build it from source 17 | 18 | To build and install the package from source you could use [Git Package 19 | Management](https://github.com/TheBoxer/Git-Package-Management). The GitHub 20 | repository of Image+ contains a 21 | [config.json](https://github.com/Jako/ImagePlus/blob/master/_build/config.json) 22 | to build that package locally. Use this option, if you want to debug Image+ 23 | and/or contribute bugfixes and enhancements. 24 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | const gulp = require('gulp'), 2 | autoprefixer = require('autoprefixer'), 3 | composer = require('gulp-uglify/composer'), 4 | concat = require('gulp-concat'), 5 | cssnano = require('cssnano'), 6 | footer = require('gulp-footer'), 7 | format = require('date-format'), 8 | header = require('@fomantic/gulp-header'), 9 | postcss = require('gulp-postcss'), 10 | rename = require('gulp-rename'), 11 | replace = require('gulp-replace'), 12 | sass = require('gulp-sass')(require('sass')), 13 | uglifyjs = require('uglify-js'), 14 | uglify = composer(uglifyjs, console), 15 | pkg = require('./_build/config.json'); 16 | 17 | const banner = '/*!\n' + 18 | ' * <%= pkg.name %> - <%= pkg.description %>\n' + 19 | ' * Version: <%= pkg.version %>\n' + 20 | ' * Build date: ' + format("yyyy-MM-dd", new Date()) + '\n' + 21 | ' */'; 22 | const year = new Date().getFullYear(); 23 | 24 | let phpversion; 25 | let modxversion; 26 | pkg.dependencies.forEach(function (dependency, index) { 27 | switch (pkg.dependencies[index].name) { 28 | case 'php': 29 | phpversion = pkg.dependencies[index].version.replace(/>=/, ''); 30 | break; 31 | case 'modx': 32 | modxversion = pkg.dependencies[index].version.replace(/>=/, ''); 33 | break; 34 | } 35 | }); 36 | 37 | const scriptsMgr = function () { 38 | return gulp.src([ 39 | 'source/js/mgr/imageplus.js', 40 | 'source/js/mgr/imageplus.panel.input.js', 41 | 'source/js/mgr/imageplus.window.editor.js', 42 | 'source/js/mgr/imageplus.migx_renderer.js', 43 | 'source/js/mgr/tools/JSON2.js', 44 | 'node_modules/jquery/dist/jquery.slim.min.js', 45 | 'source/vendor/jcrop/js/jquery.Jcrop.min.js', 46 | 'source/js/mgr/imageplus.jquery.imagecrop.js', 47 | 'source/js/mgr/imageplus.grid.js' 48 | ]) 49 | .pipe(concat('imageplus.min.js')) 50 | .pipe(uglify()) 51 | .pipe(header(banner + '\n', {pkg: pkg})) 52 | .pipe(gulp.dest('assets/components/imageplus/js/mgr/')) 53 | }; 54 | gulp.task('scripts', gulp.series(scriptsMgr)); 55 | 56 | const sassMgr = function () { 57 | return gulp.src([ 58 | 'source/sass/mgr/imageplus.scss' 59 | ]) 60 | .pipe(sass().on('error', sass.logError)) 61 | .pipe(postcss([ 62 | autoprefixer() 63 | ])) 64 | .pipe(gulp.dest('source/css/mgr/')) 65 | .pipe(concat('imageplus.css')) 66 | .pipe(postcss([ 67 | cssnano({ 68 | preset: ['default', { 69 | discardComments: { 70 | removeAll: true 71 | } 72 | }] 73 | }) 74 | ])) 75 | .pipe(rename({ 76 | suffix: '.min' 77 | })) 78 | .pipe(footer('\n' + banner, {pkg: pkg})) 79 | .pipe(gulp.dest('assets/components/imageplus/css/mgr/')) 80 | }; 81 | gulp.task('sass', gulp.series(sassMgr)); 82 | 83 | const imagesMgr = function () { 84 | return gulp.src('./source/img/**/*.+(png|jpg|gif|svg)', {encoding: false}) 85 | .pipe(gulp.dest('assets/components/imageplus/img/')); 86 | }; 87 | gulp.task('images', gulp.series(imagesMgr)); 88 | 89 | const bumpCopyright = function () { 90 | return gulp.src([ 91 | 'core/components/imageplus/model/imageplus/imageplus.class.php', 92 | 'core/components/imageplus/src/ImagePlus.php' 93 | ], {base: './'}) 94 | .pipe(replace(/Copyright 2015(-\d{4})? by/g, 'Copyright ' + (year > 2015 ? '2015-' : '') + year + ' by')) 95 | .pipe(replace(/(@copyright .*?) 2015(-\d{4})?/g, '$1 ' + (year > 2015 ? '2015-' : '') + year)) 96 | .pipe(gulp.dest('.')); 97 | }; 98 | const bumpVersion = function () { 99 | return gulp.src([ 100 | 'core/components/imageplus/src/ImagePlus.php' 101 | ], {base: './'}) 102 | .pipe(replace(/version = '\d+\.\d+\.\d+-?[0-9a-z]*'/ig, 'version = \'' + pkg.version + '\'')) 103 | .pipe(gulp.dest('.')); 104 | }; 105 | const bumpOptions = function () { 106 | return gulp.src([ 107 | 'core/components/imageplus/elements/tv/input/tpl/imageplus.options.tpl', 108 | 'core/components/imageplus/elements/tv/output/tpl/imageplus.options.tpl' 109 | ], {base: './'}) 110 | .pipe(replace(/© 2015(-\d{4})?/g, '© ' + (year > 2015 ? '2015-' : '') + year)) 111 | .pipe(gulp.dest('.')); 112 | }; 113 | const bumpDocs = function () { 114 | return gulp.src([ 115 | 'mkdocs.yml', 116 | ], {base: './'}) 117 | .pipe(replace(/© 2015(-\d{4})?/g, '© ' + (year > 2015 ? '2015-' : '') + year)) 118 | .pipe(gulp.dest('.')); 119 | }; 120 | const bumpRequirements = function () { 121 | return gulp.src([ 122 | 'docs/index.md', 123 | ], {base: './'}) 124 | .pipe(replace(/[*-] MODX Revolution \d.\d.*/g, '* MODX Revolution ' + modxversion + '+')) 125 | .pipe(replace(/[*-] PHP (v)?\d.\d.*/g, '* PHP ' + phpversion + '+')) 126 | .pipe(gulp.dest('.')); 127 | }; 128 | gulp.task('bump', gulp.series(bumpCopyright, bumpVersion, bumpOptions, bumpDocs, bumpRequirements)); 129 | 130 | gulp.task('watch', function () { 131 | // Watch .js files 132 | gulp.watch(['./source/js/**/*.js'], gulp.series('scripts')); 133 | // Watch .scss files 134 | gulp.watch(['./source/sass/**/*.scss'], gulp.series('sass')); 135 | // Watch *.(png|jpg|gif|svg) files 136 | gulp.watch(['./source/img/**/*.(png|jpg|gif|svg)'], gulp.series('images')); 137 | }); 138 | 139 | // Default Task 140 | gulp.task('default', gulp.series('bump', 'scripts', 'sass', 'images')); 141 | -------------------------------------------------------------------------------- /icon/imageplus.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/icon/imageplus.ai -------------------------------------------------------------------------------- /icon/imageplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/icon/imageplus.png -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: Image+ 2 | docs_dir: docs 3 | site_dir: _build/site 4 | edit_uri: tree/master/docs 5 | 6 | repo_name: 'Jako/ImagePlus' 7 | repo_url: https://github.com/Jako/ImagePlus 8 | 9 | copyright: '© 2015-2023 Treehill Studio' 10 | 11 | nav: 12 | - Description: 'index.md' 13 | - Installation: 'installation.md' 14 | - Getting Started: 'getting-started.md' 15 | - Usage: 'usage.md' 16 | - Examples: 'examples.md' 17 | - Contributors: 'contributors.md' 18 | 19 | extra: 20 | analytics: 21 | provider: matomo 22 | url: matomo.treehillstudio.com 23 | site: 40 24 | social: 25 | - icon: fontawesome/brands/github 26 | link: https://github.com/Jako 27 | 28 | theme: 29 | name: material 30 | custom_dir: ../../mkdocs-material-treehillstudio/material 31 | 32 | # 404 page 33 | static_templates: 34 | - 404.html 35 | 36 | # Default values, taken from mkdocs_theme.yml 37 | language: en 38 | feature: 39 | tabs: false 40 | font: false 41 | 42 | markdown_extensions: 43 | - footnotes 44 | - tables 45 | - admonition 46 | - meta 47 | - toc 48 | - pymdownx.details 49 | - pymdownx.superfences 50 | - attr_list 51 | - pymdownx.emoji: 52 | emoji_index: !!python/name:material.extensions.emoji.twemoji 53 | emoji_generator: !!python/name:material.extensions.emoji.to_svg 54 | 55 | plugins: 56 | - glightbox 57 | - search 58 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "imageplus", 3 | "description": "Advanced Image template variable", 4 | "author": "Thomas Jakobi ", 5 | "private": true, 6 | "devDependencies": { 7 | "autoprefixer": "^10.4.20", 8 | "cssnano": "^7.0.6", 9 | "date-format": "^4.0.14", 10 | "gulp": "^5.0.0", 11 | "gulp-concat": "^2.6.1", 12 | "gulp-footer": "^2.1.0", 13 | "@fomantic/gulp-header": "^2.1.1", 14 | "gulp-postcss": "^10.0.0", 15 | "gulp-rename": "^2.0.0", 16 | "gulp-replace": "^1.1.4", 17 | "gulp-sass": "^5.1.0", 18 | "gulp-uglify": "^3.0.2", 19 | "postcss": "^8.4.45", 20 | "sass": "^1.78.0", 21 | "uglify-js": "^3.19.3" 22 | }, 23 | "dependencies": { 24 | "jquery": "^3.7.1" 25 | }, 26 | "browserslist": [ 27 | "last 2 version", 28 | "> 1%", 29 | "maintained node versions", 30 | "not dead" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /source/img/mgr/jcrop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/img/mgr/jcrop.gif -------------------------------------------------------------------------------- /source/img/mgr/treehill-studio-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/img/mgr/treehill-studio-small.png -------------------------------------------------------------------------------- /source/img/mgr/treehill-studio-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/img/mgr/treehill-studio-small@2x.png -------------------------------------------------------------------------------- /source/img/mgr/treehill-studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/img/mgr/treehill-studio.png -------------------------------------------------------------------------------- /source/img/mgr/treehill-studio@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/img/mgr/treehill-studio@2x.png -------------------------------------------------------------------------------- /source/js/mgr/imageplus.jquery.imagecrop.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Image+ Custom Manager Page Script 3 | * 4 | * @package imageplus 5 | * @subpackage script 6 | */ 7 | 8 | var $jqIP = jQuery.noConflict(); 9 | 10 | ImagePlus.jquery.ImageCrop = function (config) { 11 | config = config || {}; 12 | this.image = config.image; 13 | this.window = config.window; 14 | this.imageDOMid = Ext.id(); 15 | 16 | Ext.apply(config, { 17 | cropData: this.image.crop, 18 | collapsable: false, 19 | items: [{ 20 | border: false, 21 | html: '' 22 | }], 23 | listeners: { 24 | afterRender: { 25 | fn: this.onAfterRender, 26 | scope: this 27 | }, 28 | destroy: { 29 | fn: function () { 30 | this.cropper.destroy() 31 | }, 32 | scope: this 33 | } 34 | } 35 | }); 36 | ImagePlus.jquery.ImageCrop.superclass.constructor.call(this, config); 37 | }; 38 | Ext.extend(ImagePlus.jquery.ImageCrop, Ext.Panel, { 39 | 40 | onAfterRender: function () { 41 | this.initJcrop.defer(10, this) 42 | }, 43 | 44 | initJcrop: function () { 45 | this.$image = $jqIP('#' + this.imageDOMid).data('ext', this.window); 46 | 47 | var conf = { 48 | minSize: this.window.getMinCropSize(), 49 | aspectRatio: this.window.getAspectRatio(), 50 | setSelect: this.window.getCropCoords(), 51 | outerImage: this.window.getOuterImageUrl(), 52 | onSelect: function (ext) { 53 | return function (crop) { 54 | ext.onCropChange({ 55 | x: crop.x, 56 | y: crop.y, 57 | width: crop.w, 58 | height: crop.h 59 | }) 60 | } 61 | }(this.window) 62 | }; 63 | this.$image.Jcrop(conf, function (ths) { 64 | return function () { 65 | ths.cropper = this; 66 | this.setOptions({ 67 | outerImage: ths.window.getOuterImageUrl(), 68 | bgOpacity: 0.5 69 | }) 70 | } 71 | }(this)) 72 | }, 73 | 74 | get_image: function () { 75 | return this.$image; 76 | } 77 | 78 | }); 79 | Ext.reg('imageplus-jquery-imagecrop', ImagePlus.jquery.ImageCrop); 80 | -------------------------------------------------------------------------------- /source/js/mgr/imageplus.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Image+ Custom Manager Page Script 3 | * 4 | * @package imageplus 5 | * @subpackage script 6 | */ 7 | 8 | var imagePlus = function (config) { 9 | config = config || {}; 10 | imagePlus.superclass.constructor.call(this, config); 11 | }; 12 | 13 | Ext.extend(imagePlus, Ext.Component, { 14 | page: {}, window: {}, grid: {}, tree: {}, panel: {}, combo: {}, config: {}, jquery: {}, form: {}, 15 | 16 | generateThumbUrl: function (params) { 17 | return this.generatePhpThumbUrl(params); 18 | }, 19 | 20 | generatePhpThumbUrl: function (params) { 21 | var url = MODx.config.connectors_url + 'system/phpthumb.php?'; 22 | var defaults = { 23 | wctx: 'mgr', 24 | w: 150, 25 | source: 1 26 | }; 27 | for (var i in params) { 28 | defaults[i] = params[i] 29 | } 30 | var qs = ''; 31 | for (i in defaults) { 32 | qs += encodeURIComponent(i) + '=' + encodeURIComponent(defaults[i]) + '&'; 33 | } 34 | if (qs.length > 0) { 35 | qs = qs.substring(0, qs.length - 1); 36 | url = url + "?" + qs; 37 | } 38 | return url; 39 | 40 | }, 41 | 42 | warnAboutUnmetDependencies: function () { 43 | var warningWindow = MODx.load({ 44 | xtype: 'modx-window', 45 | title: 'Image+ Warning – Unmet Dependencies', 46 | modal: true, 47 | padding: 25, 48 | allowDrop: false, 49 | resizable: true, 50 | collapsible: true, 51 | maximizable: true, 52 | buttons: [{ 53 | text: _('ok'), 54 | handler: function (L) { 55 | L.ownerCt.ownerCt.close(); 56 | } 57 | }], 58 | html: '

You don\'t have any crop engines!

' + 59 | '

Before you can use Image+, you need at least one Crop Engine installed to handle image manipulation.

' + 60 | '

A quick fix is to install either pThumb, phpThumbOf, phpThumbsUp or phpThumbOn from the MODX Package Repository

' 61 | }); 62 | warningWindow.show(); 63 | } 64 | }); 65 | Ext.reg('imageplus', imagePlus); 66 | 67 | ImagePlus = new imagePlus(); 68 | -------------------------------------------------------------------------------- /source/js/mgr/imageplus.migx_renderer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Image+ MIGX Renderer 3 | * 4 | * @package imageplus 5 | * @subpackage script 6 | * @return {string} 7 | */ 8 | 9 | ImagePlus.MIGX_Renderer = function (json) { 10 | if (typeof (json) === 'undefined' || json === null || !json.length) { 11 | return ''; 12 | } 13 | var data, url, cls; 14 | try { 15 | data = JSON.parse(json); 16 | url = ImagePlus.generateThumbUrl({ 17 | src: data.sourceImg.src, 18 | source: data.sourceImg.source, 19 | sw: data.crop.width, 20 | sh: data.crop.height, 21 | sx: data.crop.x, 22 | sy: data.crop.y 23 | }); 24 | cls = 'imageplus'; 25 | } catch (e) { 26 | url = MODx.config.base_url + json; 27 | cls = 'plain'; 28 | } 29 | return ''; 30 | }; 31 | -------------------------------------------------------------------------------- /source/js/mgr/imageplus.window.editor.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Image+ Image Editor 3 | * 4 | * @package imageplus 5 | * @subpackage script 6 | */ 7 | 8 | 9 | ImagePlus.window.Editor = function (config) { 10 | config = config || {}; 11 | 12 | this.image = config.image; 13 | this.options = config.options; 14 | this.inputPanel = config.inputPanel; 15 | this.displayRatio = config.displayRatio; 16 | 17 | var cropSettings = { 18 | x: this.image.crop.x, 19 | y: this.image.crop.y, 20 | width: this.image.crop.width, 21 | height: this.image.crop.height 22 | }; 23 | 24 | Ext.apply(config, { 25 | bodyStyle: {'padding': '0'}, 26 | border: false, 27 | crop: cropSettings, 28 | resizable: false, 29 | closeAction: 'close', 30 | listeners: { 31 | close: { 32 | fn: this.onClose, 33 | scope: this 34 | }, 35 | success: { 36 | fn: function () { 37 | console.log('success') 38 | } 39 | } 40 | }, 41 | items: [{ 42 | border: false, 43 | xtype: 'imageplus-jquery-imagecrop', 44 | image: this.image, 45 | initialWidth: this.getDisplayWidth(), 46 | initialHeight: this.getDisplayHeight(), 47 | imageUrl: this.getImageUrl(), 48 | window: this, 49 | listeners: { 50 | change: { 51 | fn: this.onCropChange, 52 | scope: this 53 | } 54 | }, 55 | cropData: this.image.crop 56 | }], 57 | buttonAlign: 'right', 58 | buttons: [{ 59 | text: _('cancel'), 60 | handler: this.closeFromEditor, 61 | scope: this 62 | }, { 63 | text: _('update'), 64 | handler: this.updateFromEditor, 65 | scope: this 66 | }] 67 | }); 68 | ImagePlus.window.Editor.superclass.constructor.call(this, config); 69 | }; 70 | Ext.extend(ImagePlus.window.Editor, Ext.Window, { 71 | // Get the required width of the cropper 72 | getDisplayWidth: function () { 73 | return Math.round(this.image.sourceImg.width * this.displayRatio); 74 | }, 75 | getDisplayHeight: function () { 76 | return Math.round(this.image.sourceImg.height * this.displayRatio); 77 | }, 78 | // Get an url to image resized for window 79 | getImageUrl: function () { 80 | return this.inputPanel.generateThumbUrl({ 81 | src: this.image.sourceImg.src, 82 | w: this.getDisplayWidth(), 83 | h: this.getDisplayHeight() 84 | }); 85 | }, 86 | getOuterImageUrl: function () { 87 | return this.inputPanel.generateThumbUrl({ 88 | src: this.image.sourceImg.src, 89 | w: this.getDisplayWidth(), 90 | h: this.getDisplayHeight(), 91 | 'fltr[]': 'blur|25' 92 | }); 93 | }, 94 | getMinCropSize: function () { 95 | return [ 96 | Math.round(this.options.targetWidth * this.displayRatio), 97 | Math.round(this.options.targetHeight * this.displayRatio) 98 | ] 99 | }, 100 | getMinCropWidth: function () { 101 | return Math.round(this.options.targetWidth * this.displayRatio); 102 | }, 103 | getMinCropHeight: function () { 104 | return Math.round(this.options.targetHeight * this.displayRatio); 105 | }, 106 | getInitialCropX: function () { 107 | return Math.round(this.image.crop.x * this.displayRatio); 108 | }, 109 | getInitialCropY: function () { 110 | return Math.round(this.image.crop.y * this.displayRatio); 111 | }, 112 | getInitialCropWidth: function () { 113 | if (this.image.crop.width === 0) { 114 | return Math.round(this.options.targetWidth * this.displayRatio); 115 | } else { 116 | return Math.round(this.image.crop.width * this.displayRatio); 117 | } 118 | }, 119 | getInitialCropHeight: function () { 120 | if (this.image.crop.height === 0) { 121 | return Math.round(this.options.targetHeight * this.displayRatio) 122 | } else { 123 | return Math.round(this.image.crop.height * this.displayRatio); 124 | } 125 | }, 126 | getAspectRatio: function () { 127 | if (this.options.targetRatio) { 128 | return this.options.targetRatio; 129 | } else { 130 | if (this.options.targetWidth > 0 && this.options.targetHeight > 0) { 131 | return this.options.targetWidth / this.options.targetHeight; 132 | } else { 133 | return false 134 | } 135 | } 136 | }, 137 | getCropCoords: function () { 138 | var W = this.getInitialCropWidth(); 139 | var H = this.getInitialCropHeight(); 140 | if (W === 0 || H === 0) { 141 | return false; 142 | } 143 | var X = this.getInitialCropX(); 144 | var Y = this.getInitialCropY(); 145 | return [X, Y, (X + W), (Y + H)]; 146 | }, 147 | // Handle window 148 | onClose: function () { 149 | this.inputPanel.editorWindow = false; 150 | }, 151 | // Handle crop area change 152 | onCropChange: function (data) { 153 | this.crop.height = Math.round(data.height / this.displayRatio); 154 | this.crop.width = Math.round(data.width / this.displayRatio); 155 | this.crop.x = Math.round(data.x / this.displayRatio); 156 | this.crop.y = Math.round(data.y / this.displayRatio); 157 | }, 158 | updateFromEditor: function () { 159 | this.inputPanel.updateFromEditor(this.crop); 160 | this.close(); 161 | }, 162 | closeFromEditor: function () { 163 | this.crop.width = this.image.crop.width; 164 | this.crop.height = this.image.crop.height; 165 | this.crop.x = this.image.crop.x; 166 | this.crop.y = this.image.crop.y; 167 | this.close(); 168 | } 169 | }); 170 | Ext.reg('imageplus-window-editor', ImagePlus.window.Editor); 171 | -------------------------------------------------------------------------------- /source/sass/mgr/imageplus.scss: -------------------------------------------------------------------------------- 1 | @use "sass:color"; 2 | 3 | $treehillstudio-color: #cbd842; 4 | 5 | #modx-input-props, #modx-widget-props { 6 | &.imageplus-props { 7 | padding-top: 0; 8 | } 9 | } 10 | 11 | .modx-grid { 12 | .x-grid-cell-icons { 13 | .x-grid3-cell-inner { 14 | padding-right: 5px; 15 | } 16 | } 17 | } 18 | 19 | .modx-grid-small { 20 | .x-grid3-cell-inner { 21 | padding: 8px 5px 8px 5px; 22 | } 23 | 24 | .x-grid3-hd-inner { 25 | padding: 8px 18px 8px 5px; 26 | } 27 | 28 | .x-grid3-td-checker { 29 | padding: 6px 0 0; 30 | 31 | &.x-grid3-hd { 32 | padding-top: 0; 33 | } 34 | } 35 | 36 | .x-panel-tbar { 37 | .x-toolbar { 38 | padding-top: 2px; 39 | 40 | &.x-small-editor { 41 | .x-form-text { 42 | padding: 3px 8px 2px 8px; 43 | margin-top: 0; 44 | } 45 | } 46 | 47 | .x-btn { 48 | padding: 4px 10px 4px 10px; 49 | } 50 | } 51 | } 52 | 53 | .x-panel-bbar { 54 | .x-toolbar { 55 | .x-btn { 56 | padding: 2px 2px; 57 | } 58 | 59 | .x-form-text { 60 | padding: 2px 3px; 61 | } 62 | } 63 | } 64 | 65 | .x-tbar-loading { 66 | &:before { 67 | line-height: 16px; 68 | } 69 | } 70 | 71 | .x-tbar-page { 72 | &-last, &-next, &-prev, &-first { 73 | &:before { 74 | line-height: 16px; 75 | } 76 | } 77 | } 78 | 79 | .x-btn-icon { 80 | &.arrow_up, &.arrow_down, &.refresh { 81 | button { 82 | &:before { 83 | line-height: 16px; 84 | } 85 | } 86 | } 87 | } 88 | 89 | .x-small-editor { 90 | .x-form-text, .x-form-field-wrap { 91 | margin-top: 2px; 92 | } 93 | } 94 | } 95 | 96 | .x-form-field-wrap { 97 | .x-form-triple-triggers { 98 | border: 0; 99 | border-radius: 0 3px 3px 0; 100 | box-shadow: none; 101 | height: 100% !important; 102 | padding: 0; 103 | position: absolute; 104 | right: 0; 105 | top: 0; 106 | width: 90px; 107 | .x-form-trigger { 108 | display: inline-block; 109 | position: relative; 110 | top: auto; 111 | vertical-align: top; 112 | &.x-form-clear-trigger { 113 | &:before { 114 | content: "\f00d"; 115 | } 116 | } 117 | &.x-form-crop-trigger { 118 | &:before { 119 | content: "\f125"; 120 | } 121 | } 122 | } 123 | } 124 | } 125 | 126 | .imageplus-hidden-textarea { 127 | display: none; 128 | } 129 | 130 | .imageplus-sectiontitle { 131 | .x-form-item-label { 132 | padding-top: 0; 133 | } 134 | .desc-under { 135 | padding-top: 0; 136 | } 137 | } 138 | 139 | .treehillstudio_about { 140 | cursor: pointer; 141 | height: 40px; 142 | opacity: .25; 143 | transition: opacity 0.5s; 144 | margin-top: 20px; 145 | &:hover { 146 | opacity: 1; 147 | } 148 | .x-panel-body { 149 | text-align: right; 150 | } 151 | } 152 | 153 | .treehillstudio_window { 154 | a { 155 | color: color.adjust($treehillstudio-color, $lightness: -10%); 156 | text-decoration: none; 157 | &:hover { 158 | color: color.adjust($treehillstudio-color, $lightness: -25%); 159 | } 160 | } 161 | } 162 | 163 | @import "jquery.jcrop"; 164 | -------------------------------------------------------------------------------- /source/sass/mgr/jquery.jcrop.scss: -------------------------------------------------------------------------------- 1 | @import "../../vendor/jcrop/css/jquery.Jcrop"; 2 | 3 | .jcrop-hline, .jcrop-vline { 4 | background: #ffffff url('../../img/mgr/jcrop.gif'); 5 | } 6 | 7 | -------------------------------------------------------------------------------- /source/vendor/jcrop/MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 Tapmodo Interactive LLC, 2 | http://github.com/tapmodo/Jcrop 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /source/vendor/jcrop/README.md: -------------------------------------------------------------------------------- 1 | Jcrop Image Cropping Plugin 2 | =========================== 3 | 4 | Jcrop is the quick and easy way to add image cropping functionality to 5 | your web application. It combines the ease-of-use of a typical jQuery 6 | plugin with a powerful cross-platform DHTML cropping engine that is 7 | faithful to familiar desktop graphics applications. 8 | 9 | Cross-platform Compatibility 10 | ---------------------------- 11 | 12 | * Firefox 2+ 13 | * Safari 3+ 14 | * Opera 9.5+ 15 | * Google Chrome 0.2+ 16 | * Internet Explorer 6+ 17 | 18 | Feature Overview 19 | ---------------- 20 | 21 | * Attaches unobtrusively to any image 22 | * Supports aspect ratio locking 23 | * Supports minSize/maxSize setting 24 | * Callbacks for selection done, or while moving 25 | * Keyboard support for nudging selection 26 | * API features to create interactivity, including animation 27 | * Support for CSS styling 28 | * Experimental touch-screen support (iOS, Android, etc) 29 | 30 | Contributors 31 | ============ 32 | 33 | **Special thanks to the following contributors:** 34 | 35 | * [Bruno Agutoli](mailto:brunotla1@gmail.com) 36 | * dhorrigan 37 | * Phil-B 38 | * jaymecd 39 | * all others who have committed their time and effort to help improve Jcrop 40 | 41 | MIT License 42 | =========== 43 | 44 | **Jcrop is free software under MIT License.** 45 | 46 | #### Copyright (c) 2008-2018 Tapmodo Interactive LLC,
http://github.com/tapmodo/Jcrop 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of this software and associated documentation files (the 50 | "Software"), to deal in the Software without restriction, including 51 | without limitation the rights to use, copy, modify, merge, publish, 52 | distribute, sublicense, and/or sell copies of the Software, and to 53 | permit persons to whom the Software is furnished to do so, subject to 54 | the following conditions: 55 | 56 | The above copyright notice and this permission notice shall be 57 | included in all copies or substantial portions of the Software. 58 | 59 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 60 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 61 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 62 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 63 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 64 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 65 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 66 | 67 | -------------------------------------------------------------------------------- /source/vendor/jcrop/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Jcrop", 3 | "version": "0.9.15", 4 | "homepage": "https://github.com/tapmodo/Jcrop", 5 | "authors": [ "Tapmodo " ], 6 | "description": "Image cropping plugin for jQuery", 7 | "main": [ 8 | "js/jquery.Jcrop.js", 9 | "css/jquery.Jcrop.css" 10 | ], 11 | "keywords": [ "img", "image", "form", "crop", "cropping", "cropper" ], 12 | "license": "MIT", 13 | "ignore": [ 14 | "**/.*", 15 | "build", 16 | "demos", 17 | "node_modules", 18 | "bower_components" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /source/vendor/jcrop/css/Jcrop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/vendor/jcrop/css/Jcrop.gif -------------------------------------------------------------------------------- /source/vendor/jcrop/css/jquery.Jcrop.css: -------------------------------------------------------------------------------- 1 | /* jquery.Jcrop.css v0.9.15 - MIT License */ 2 | /* 3 | The outer-most container in a typical Jcrop instance 4 | If you are having difficulty with formatting related to styles 5 | on a parent element, place any fixes here or in a like selector 6 | 7 | You can also style this element if you want to add a border, etc 8 | A better method for styling can be seen below with .jcrop-light 9 | (Add a class to the holder and style elements for that extended class) 10 | */ 11 | .jcrop-holder { 12 | direction: ltr; 13 | text-align: left; 14 | /* IE10 touch compatibility */ 15 | -ms-touch-action: none; 16 | } 17 | /* Selection Border */ 18 | .jcrop-vline, 19 | .jcrop-hline { 20 | background: #ffffff url("Jcrop.gif"); 21 | font-size: 0; 22 | position: absolute; 23 | } 24 | .jcrop-vline { 25 | height: 100%; 26 | width: 1px !important; 27 | } 28 | .jcrop-vline.right { 29 | right: 0; 30 | } 31 | .jcrop-hline { 32 | height: 1px !important; 33 | width: 100%; 34 | } 35 | .jcrop-hline.bottom { 36 | bottom: 0; 37 | } 38 | /* Invisible click targets */ 39 | .jcrop-tracker { 40 | height: 100%; 41 | width: 100%; 42 | /* "turn off" link highlight */ 43 | -webkit-tap-highlight-color: transparent; 44 | /* disable callout, image save panel */ 45 | -webkit-touch-callout: none; 46 | /* disable cut copy paste */ 47 | -webkit-user-select: none; 48 | } 49 | /* Selection Handles */ 50 | .jcrop-handle { 51 | background-color: #333333; 52 | border: 1px #eeeeee solid; 53 | width: 7px; 54 | height: 7px; 55 | font-size: 1px; 56 | } 57 | .jcrop-handle.ord-n { 58 | left: 50%; 59 | margin-left: -4px; 60 | margin-top: -4px; 61 | top: 0; 62 | } 63 | .jcrop-handle.ord-s { 64 | bottom: 0; 65 | left: 50%; 66 | margin-bottom: -4px; 67 | margin-left: -4px; 68 | } 69 | .jcrop-handle.ord-e { 70 | margin-right: -4px; 71 | margin-top: -4px; 72 | right: 0; 73 | top: 50%; 74 | } 75 | .jcrop-handle.ord-w { 76 | left: 0; 77 | margin-left: -4px; 78 | margin-top: -4px; 79 | top: 50%; 80 | } 81 | .jcrop-handle.ord-nw { 82 | left: 0; 83 | margin-left: -4px; 84 | margin-top: -4px; 85 | top: 0; 86 | } 87 | .jcrop-handle.ord-ne { 88 | margin-right: -4px; 89 | margin-top: -4px; 90 | right: 0; 91 | top: 0; 92 | } 93 | .jcrop-handle.ord-se { 94 | bottom: 0; 95 | margin-bottom: -4px; 96 | margin-right: -4px; 97 | right: 0; 98 | } 99 | .jcrop-handle.ord-sw { 100 | bottom: 0; 101 | left: 0; 102 | margin-bottom: -4px; 103 | margin-left: -4px; 104 | } 105 | /* Dragbars */ 106 | .jcrop-dragbar.ord-n, 107 | .jcrop-dragbar.ord-s { 108 | height: 7px; 109 | width: 100%; 110 | } 111 | .jcrop-dragbar.ord-e, 112 | .jcrop-dragbar.ord-w { 113 | height: 100%; 114 | width: 7px; 115 | } 116 | .jcrop-dragbar.ord-n { 117 | margin-top: -4px; 118 | } 119 | .jcrop-dragbar.ord-s { 120 | bottom: 0; 121 | margin-bottom: -4px; 122 | } 123 | .jcrop-dragbar.ord-e { 124 | margin-right: -4px; 125 | right: 0; 126 | } 127 | .jcrop-dragbar.ord-w { 128 | margin-left: -4px; 129 | } 130 | /* The "jcrop-light" class/extension */ 131 | .jcrop-light .jcrop-vline, 132 | .jcrop-light .jcrop-hline { 133 | background: #ffffff; 134 | filter: alpha(opacity=70) !important; 135 | opacity: .70!important; 136 | } 137 | .jcrop-light .jcrop-handle { 138 | -moz-border-radius: 3px; 139 | -webkit-border-radius: 3px; 140 | background-color: #000000; 141 | border-color: #ffffff; 142 | border-radius: 3px; 143 | } 144 | /* The "jcrop-dark" class/extension */ 145 | .jcrop-dark .jcrop-vline, 146 | .jcrop-dark .jcrop-hline { 147 | background: #000000; 148 | filter: alpha(opacity=70) !important; 149 | opacity: 0.7 !important; 150 | } 151 | .jcrop-dark .jcrop-handle { 152 | -moz-border-radius: 3px; 153 | -webkit-border-radius: 3px; 154 | background-color: #ffffff; 155 | border-color: #000000; 156 | border-radius: 3px; 157 | } 158 | /* Simple macro to turn off the antlines */ 159 | .solid-line .jcrop-vline, 160 | .solid-line .jcrop-hline { 161 | background: #ffffff; 162 | } 163 | /* Fix for twitter bootstrap et al. */ 164 | .jcrop-holder img, 165 | img.jcrop-preview { 166 | max-width: none; 167 | } 168 | -------------------------------------------------------------------------------- /source/vendor/jcrop/css/jquery.Jcrop.min.css: -------------------------------------------------------------------------------- 1 | /* jquery.Jcrop.min.css v0.9.15 (build:20180819) */ 2 | .jcrop-holder{direction:ltr;text-align:left;-ms-touch-action:none}.jcrop-hline,.jcrop-vline{background:#fff url(Jcrop.gif);font-size:0;position:absolute}.jcrop-vline{height:100%;width:1px!important}.jcrop-vline.right{right:0}.jcrop-hline{height:1px!important;width:100%}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{height:100%;width:100%;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none}.jcrop-handle{background-color:#333;border:1px #eee solid;width:7px;height:7px;font-size:1px}.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%}.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%}.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0}.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{margin-right:-4px;right:0}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-hline,.jcrop-light .jcrop-vline{background:#fff;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#fff;border-radius:3px}.jcrop-dark .jcrop-hline,.jcrop-dark .jcrop-vline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#fff;border-color:#000;border-radius:3px}.solid-line .jcrop-hline,.solid-line .jcrop-vline{background:#fff}.jcrop-holder img,img.jcrop-preview{max-width:none} 3 | -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/crop.php: -------------------------------------------------------------------------------- 1 | 31 | 32 | 33 | Live Cropping Demo 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 68 | 79 | 80 | 81 | 82 | 83 |
84 |
85 |
86 |
87 | 88 | 96 | 97 | 98 | 99 | 100 | 101 |
102 | 103 | 104 | 105 | 106 | 107 |
108 | 109 |

110 | An example server-side crop script. Hidden form values 111 | are set when a selection is made. If you press the Crop Image 112 | button, the form will be submitted and a 150x150 thumbnail will be 113 | dumped to the browser. Try it! 114 |

115 | 116 | 117 |
118 |
119 |
120 |
121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/demo_files/demos.css: -------------------------------------------------------------------------------- 1 | /* Jcrop Demo Site CSS - 2014 Tapmodo Interactive LLC - MIT License 2 | Not required to run Jcrop - contains twitter bootstrap code */ 3 | /* To build these CSS files you must have LESS and run 4 | * $ git submodule init 5 | * $ git submodule update 6 | * ...to pull in the Twitter bootstrap files 7 | */ 8 | .clearfix { 9 | *zoom: 1; 10 | } 11 | .clearfix:before, 12 | .clearfix:after { 13 | display: table; 14 | content: ""; 15 | line-height: 0; 16 | } 17 | .clearfix:after { 18 | clear: both; 19 | } 20 | .hide-text { 21 | font: 0/0 a; 22 | color: transparent; 23 | text-shadow: none; 24 | background-color: transparent; 25 | border: 0; 26 | } 27 | .input-block-level { 28 | display: block; 29 | width: 100%; 30 | min-height: 30px; 31 | -webkit-box-sizing: border-box; 32 | -moz-box-sizing: border-box; 33 | box-sizing: border-box; 34 | } 35 | /* JCROP DEMOS CSS */ 36 | li small { 37 | color: #f07878; 38 | } 39 | .inline-labels label { 40 | display: inline; 41 | } 42 | div#interface.span3 fieldset { 43 | margin-bottom: 1.5em; 44 | } 45 | div#interface.span3 fieldset legend { 46 | margin-bottom: 2px; 47 | padding-bottom: 2px; 48 | line-height: 1.2; 49 | } 50 | .article h1 { 51 | color: #333; 52 | margin-top: .2em; 53 | } 54 | .jc-demo { 55 | text-align: center; 56 | } 57 | .jcropper-holder { 58 | border: 1px #bbb solid; 59 | } 60 | .jc-demo-box { 61 | text-align: left; 62 | margin: 2em auto; 63 | background: white; 64 | border: 1px #bbb solid; 65 | -webkit-border-radius: 4px; 66 | -moz-border-radius: 4px; 67 | border-radius: 4px; 68 | -webkit-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.25); 69 | -moz-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.25); 70 | box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.25); 71 | padding: 1em 2em 2em; 72 | } 73 | form { 74 | margin: 1.5em 0; 75 | } 76 | form.coords label { 77 | margin-right: 1em; 78 | font-weight: bold; 79 | color: #900; 80 | } 81 | form.coords input { 82 | width: 3em; 83 | } 84 | .ui-widget-overlay { 85 | opacity: 0.80; 86 | filter: alpha(opacity=70); 87 | } 88 | .jc-dialog { 89 | padding-top: 1em; 90 | } 91 | .ui-dialog p tt { 92 | color: yellow; 93 | } 94 | .jcrop-light .jcrop-selection { 95 | -moz-box-shadow: 0px 0px 15px #999; 96 | /* Firefox */ 97 | -webkit-box-shadow: 0px 0px 15px #999; 98 | /* Safari, Chrome */ 99 | box-shadow: 0px 0px 15px #999; 100 | /* CSS3 */ 101 | } 102 | .jcrop-dark .jcrop-selection { 103 | -moz-box-shadow: 0px 0px 15px #000; 104 | /* Firefox */ 105 | -webkit-box-shadow: 0px 0px 15px #000; 106 | /* Safari, Chrome */ 107 | box-shadow: 0px 0px 15px #000; 108 | /* CSS3 */ 109 | } 110 | .jcrop-fancy .jcrop-handle.ord-e { 111 | -webkit-border-top-left-radius: 0px; 112 | -webkit-border-bottom-left-radius: 0px; 113 | } 114 | .jcrop-fancy .jcrop-handle.ord-w { 115 | -webkit-border-top-right-radius: 0px; 116 | -webkit-border-bottom-right-radius: 0px; 117 | } 118 | .jcrop-fancy .jcrop-handle.ord-nw { 119 | -webkit-border-bottom-right-radius: 0px; 120 | } 121 | .jcrop-fancy .jcrop-handle.ord-ne { 122 | -webkit-border-bottom-left-radius: 0px; 123 | } 124 | .jcrop-fancy .jcrop-handle.ord-sw { 125 | -webkit-border-top-right-radius: 0px; 126 | } 127 | .jcrop-fancy .jcrop-handle.ord-se { 128 | -webkit-border-top-left-radius: 0px; 129 | } 130 | .jcrop-fancy .jcrop-handle.ord-s { 131 | -webkit-border-top-left-radius: 0px; 132 | -webkit-border-top-right-radius: 0px; 133 | } 134 | .jcrop-fancy .jcrop-handle.ord-n { 135 | -webkit-border-bottom-left-radius: 0px; 136 | -webkit-border-bottom-right-radius: 0px; 137 | } 138 | .description { 139 | margin: 16px 0; 140 | } 141 | .jcrop-droptarget canvas { 142 | background-color: #f0f0f0; 143 | } 144 | -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/demo_files/pool.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/vendor/jcrop/demos/demo_files/pool.jpg -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/demo_files/sago.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/vendor/jcrop/demos/demo_files/sago.jpg -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/demo_files/sagomod.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/vendor/jcrop/demos/demo_files/sagomod.jpg -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/demo_files/sagomod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jako/ImagePlus/5630d2e8f74f6dfed6ba78a22db8667e1f3d8134/source/vendor/jcrop/demos/demo_files/sagomod.png -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/non-image.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Non-image Cropping | Jcrop Demo 5 | 6 | 7 | 8 | 9 | 24 | 25 | 26 | 27 | 38 | 39 | 40 | 41 | 42 |
43 |
44 |
45 |
46 | 47 | 55 | 56 |

57 | 58 | This is an example of attaching Jcrop to a target that is not an image. You are now cropping a paragraph tag. 59 | 60 |

61 | 62 |
63 |

64 | Attaching Jcrop to a non-image element.
65 | This is mostly useful to implement other interfaces, such as canvas or over an arbitrary div. 66 |

67 |
68 | 69 | 70 | 76 | 77 |
78 | 79 |
80 |
81 |
82 |
83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/styling.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CSS Styling Example | Jcrop Demo 5 | 6 | 7 | 8 | 9 | 10 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
71 |
72 |
73 |
74 | 75 | 83 | 84 | [Jcrop Example] 85 | 86 |
87 |
88 | Manipulate classes 89 |
90 | 91 | 92 | 93 |
94 |
95 |
96 | 97 |

98 | Example styling tricks. Click the buttons above to change the appearance of Jcrop in real-time. 99 |

100 | 101 | 102 | 108 | 109 |
110 | 111 |
112 |
113 |
114 |
115 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/tutorial1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Hello World | Jcrop Demo 5 | 6 | 7 | 8 | 9 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |
27 |
28 |
29 | 30 | 38 | 39 | [Jcrop Example] 40 | 41 |
42 |

43 | This example demonstrates the default behavior of Jcrop.
44 | Since no event handlers have been attached it only performs 45 | the cropping behavior. 46 |

47 |
48 | 49 | 55 | 56 |
57 | 58 |
59 |
60 |
61 |
62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/tutorial2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Basic Handler | Jcrop Demo 5 | 6 | 7 | 8 | 9 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 |
61 |
62 |
63 |
64 | 65 | 73 | 74 | 75 | [Jcrop Example] 76 | 77 | 78 |
82 | 83 |
84 | 85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 |
94 |

95 | An example with a basic event handler. Here we've tied 96 | several form values together with a simple event handler invocation. 97 | The result is that the form values are updated in real-time as 98 | the selection is changed using Jcrop's onChange handler. 99 |

100 | 101 |

102 | That's how easily Jcrop can be integrated into a traditional web form! 103 |

104 |
105 | 106 | 107 | 113 | 114 |
115 | 116 |
117 |
118 |
119 |
120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /source/vendor/jcrop/demos/tutorial3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Aspect Ratio with Preview Pane | Jcrop Demo 5 | 6 | 7 | 8 | 9 | 61 | 62 | 63 | 64 | 97 | 98 | 99 | 100 | 101 |
102 |
103 |
104 |
105 | 106 | 114 | 115 | [Jcrop Example] 116 | 117 |
118 |
119 | Preview 120 |
121 |
122 | 123 |
124 |

125 | An example implementing a preview pane. 126 | Obviously the most visual demo, the preview pane is accomplished 127 | entirely outside of Jcrop with a simple jQuery-flavored callback. 128 | This type of interface could be useful for creating a thumbnail 129 | or avatar. The onChange event handler is used to update the 130 | view in the preview pane. 131 |

132 |
133 | 134 | 140 | 141 |
142 | 143 |
144 |
145 |
146 |
147 | 148 | 149 | 150 | 151 | -------------------------------------------------------------------------------- /source/vendor/jcrop/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Jcrop: the jQuery Image Cropping Plugin 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 17 | 24 | 25 | 26 | 27 | Jcrop 28 | is the image cropping plugin for 29 | jQuery.
30 | You've successfully unpacked Jcrop. 31 |
32 | 33 |

Static Demos

34 | 35 | 55 | 56 |

Live Demo

57 | 58 | 62 | 63 |

Jcrop Links

64 | 65 | 69 | 70 | 76 |
77 | 78 |
79 |
80 |
81 |
82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /source/vendor/jcrop/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jcrop", 3 | "version": "0.9.15", 4 | "description": "Jcrop Javascript Image Cropper", 5 | "main": "js/jquery.Jcrop.js", 6 | "dependencies": {}, 7 | "devDependencies": { 8 | "grunt-contrib-cssmin": "^0.6.2", 9 | "grunt": "^0.4.5", 10 | "grunt-contrib-concat": "^0.3.0", 11 | "grunt-contrib-uglify": "^0.2.7", 12 | "grunt-contrib-less": "^0.7.0", 13 | "grunt-contrib-watch": "^0.5.3", 14 | "grunt-banner": "^0.1.4" 15 | }, 16 | "scripts": { 17 | "test": "echo \"Error: no test specified\" && exit 1" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "git+https://github.com/tapmodo/Jcrop.git" 22 | }, 23 | "keywords": [ 24 | "jcrop", 25 | "image", 26 | "cropping", 27 | "ui" 28 | ], 29 | "author": "Tapmodo ", 30 | "license": "MIT", 31 | "bugs": { 32 | "url": "https://github.com/tapmodo/Jcrop/issues" 33 | }, 34 | "homepage": "https://github.com/tapmodo/Jcrop#readme" 35 | } 36 | --------------------------------------------------------------------------------