diff --git a/code/DataObjectManager.php b/code/DataObjectManager.php index c877d02..1f6cc67 100644 --- a/code/DataObjectManager.php +++ b/code/DataObjectManager.php @@ -2,12 +2,12 @@ class DataObjectManager extends ComplexTableField { - + protected static $allow_assets_override = true; protected static $allow_css_override = false; public static $popup_width = 640; protected static $confirm_delete = true; - + protected $template = "DataObjectManager"; protected $start = "0"; protected $per_page = "10"; @@ -32,8 +32,8 @@ class DataObjectManager extends ComplexTableField public $singleTitle; public $hasNested = false; public $isNested = false; - - + + public $actions = array( @@ -52,11 +52,11 @@ class DataObjectManager extends ComplexTableField static $url_handlers = array( 'duplicate/$ID' => 'handleDuplicate' ); - - + + public $popupClass = "DataObjectManager_Popup"; public $templatePopup = "DataObjectManager_popup"; - + public static function allow_assets_override($bool) { if($bool) { @@ -66,27 +66,27 @@ public static function allow_assets_override($bool) else DataObject::remove_extension("Folder","AssetManagerFolder"); } - + public static function allow_css_override($bool) { self::$allow_css_override = $bool; } - + public static function set_popup_width($width) { self::$popup_width = $width; } - + public static function set_confirm_delete($bool) { self::$confirm_delete = $bool; } - - function __construct($controller, $name = null, $sourceClass = null, $fieldList = null, $detailFormFields = null, $sourceFilter = "", $sourceSort = null, $sourceJoin = "") + + function __construct($controller, $name = null, $sourceClass = null, $fieldList = null, $detailFormFields = null, $sourceFilter = "", $sourceSort = null, $sourceJoin = "") { if(!class_exists("ComplexTableField_ItemRequest")) die(""._t('DataObjectManager.ERROR','Error').": "._t('DataObjectManager.SILVERSTRIPEVERSION','DataObjectManager requires Silverstripe version 2.3 or higher.')); - + // If no name is given, search the has_many for the first relation. if($name === null && $sourceClass === null) { if($has_manys = $controller->stat('has_many')) { @@ -98,7 +98,7 @@ function __construct($controller, $name = null, $sourceClass = null, $fieldList } } $SNG = singleton($sourceClass); - + if($fieldList === null) { $diff = array_diff($SNG->summaryFields(),singleton('DataObject')->summaryFields()); @@ -119,11 +119,11 @@ function __construct($controller, $name = null, $sourceClass = null, $fieldList if(self::$allow_css_override) Requirements::css('dataobject_manager/css/dataobjectmanager_override.css'); Requirements::javascript(THIRDPARTY_DIR.'/jquery-livequery/jquery.livequery.js'); - Requirements::javascript('dataobject_manager/javascript/facebox.js'); + Requirements::javascript('dataobject_manager/javascript/facebox.js'); Requirements::javascript('dataobject_manager/javascript/dom_jquery_ui.js'); Requirements::javascript('dataobject_manager/javascript/tooltip.js'); Requirements::javascript('dataobject_manager/javascript/dataobject_manager.js'); - + $this->filter_empty_string = '-- '._t('DataObjectManager.NOFILTER','No filter').' --'; if($this->sourceSort) { @@ -144,12 +144,12 @@ function __construct($controller, $name = null, $sourceClass = null, $fieldList $this->per_page = $_REQUEST['ctf'][$this->Name()]['per_page']; $this->showAll = $_REQUEST['ctf'][$this->Name()]['showall']; $this->search = $_REQUEST['ctf'][$this->Name()]['search']; - $this->filter = $_REQUEST['ctf'][$this->Name()]['filter']; + $this->filter = $_REQUEST['ctf'][$this->Name()]['filter']; $this->sort = $_REQUEST['ctf'][$this->Name()]['sort']; $this->sort_dir = $_REQUEST['ctf'][$this->Name()]['sort_dir']; } - - + + $this->setPageSize($this->per_page); $this->loadSort(); $this->loadSourceFilter(); @@ -170,27 +170,27 @@ function __construct($controller, $name = null, $sourceClass = null, $fieldList public function setClickToToggle($bool) { $this->clickToToggle = $bool; } - + public function setSourceFilter($filter) { $this->sourceFilter = $filter; } - + public function setUseViewAll($bool) { $this->use_view_all = $bool; } - + public function setPerPageMap($values) { $this->per_page_map = $values; } - + public function setPluralTitle($title) { $this->pluralTitle = $title; } - + public function setWideMode($bool) { $this->hasNested = $bool; @@ -200,29 +200,29 @@ public function PluralTitle() { return $this->pluralTitle ? $this->pluralTitle : $this->AddTitle()."s"; } - - + + protected function loadSort() { - if($this->ShowAll()) + if($this->ShowAll()) $this->setPageSize(999); - - if($this->Sortable() && (!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == "SortOrder")) { + + $frontendSort = empty($_REQUEST['ctf'][$this->Name()]['sort']) + ? null + : $_REQUEST['ctf'][$this->Name()]['sort']; + if($this->Sortable() && (empty($frontendSort) || $frontendSort == "SortOrder")) { $this->sort = "SortOrder"; $this->sourceSort = "\"SortOrder\" ASC"; - } - elseif(isset($_REQUEST['ctf'][$this->Name()]['sort']) && !empty($_REQUEST['ctf'][$this->Name()]['sort'])) { - $this->sourceSort = "\"" . $_REQUEST['ctf'][$this->Name()]['sort'] . "\" " . $this->sort_dir; - } - elseif($sort = singleton($this->sourceClass())->stat('default_sort')) { + } elseif($frontendSort) { + $this->sourceSort = "\"$frontendSort\" {$this->sort_dir}"; + } elseif($sort = singleton($this->sourceClass())->stat('default_sort')) { $this->sourceSort = $sort; - } - else { + } else { $this->sourceSort = "Created DESC"; } } - + protected function loadSourceFilter() { $filter_string = ""; @@ -231,15 +231,19 @@ protected function loadSourceFilter() $field = substr($this->filter, 0, $break); $value = substr($this->filter, $break+1, strlen($this->filter) - strlen($field)); $filter_string = $field . "='$value'"; - } + } $search_string = ""; if(!empty($this->search)) { $search = array(); - $SNG = singleton($this->sourceClass); + $SNG = singleton($this->sourceClass); foreach(parent::Headings() as $field) { - if($SNG->hasDatabaseField($field->Name)) - $search[] = "UPPER({$this->sourceClass}.$field->Name) LIKE '%".Convert::raw2sql(strtoupper($this->search))."%'"; + // If the source class doesn't own this field, then its parent might. + while(!$SNG->hasOwnTableDatabaseField($field->Name) && $parentKls = get_parent_class($SNG->class)) { + $SNG = singleton($parentKls); + } + if($SNG->hasDatabaseField($field->Name)) + $search[] = "UPPER({$SNG->class}.$field->Name) LIKE '%".Convert::raw2sql(strtoupper($this->search))."%'"; } if(!empty($search)) { $search_string = "(".implode(" OR ", $search).")"; @@ -248,15 +252,15 @@ protected function loadSourceFilter() $and = (!empty($this->filter) && !empty($this->search)) ? " AND " : ""; $source_filter = $filter_string.$and.$search_string; if(!$this->sourceFilter) $this->sourceFilter = $source_filter; - else if($this->sourceFilter && !empty($source_filter)) $this->sourceFilter .= " AND " . $source_filter; + else if($this->sourceFilter && !empty($source_filter)) $this->sourceFilter .= " AND " . $source_filter; } - + public function handleItem($request) { return new DataObjectManager_ItemRequest($this, $request->param('ID')); } public function getQueryString($params = array()) - { + { $start = isset($params['start'])? $params['start'] : $this->start; $per_page = isset($params['per_page'])? $params['per_page'] : $this->per_page; $show_all = isset($params['show_all'])? $params['show_all'] : $this->showAll; @@ -266,7 +270,7 @@ public function getQueryString($params = array()) $search = isset($params['search'])? $params['search'] : $this->search; return "ctf[{$this->Name()}][start]={$start}&ctf[{$this->Name()}][per_page]={$per_page}&ctf[{$this->Name()}][showall]={$show_all}&ctf[{$this->Name()}][sort]={$sort}&ctf[{$this->Name()}][sort_dir]={$sort_dir}&ctf[{$this->Name()}][search]={$search}&ctf[{$this->Name()}][filter]={$filter}"; } - + public function getSetting($setting) { if($this->$setting) { @@ -274,7 +278,7 @@ public function getSetting($setting) } return Object::get_static($this->class,DOMUtil::to_underscore($setting)); } - + function FieldHolder() { if(!$this->controller->ID && $this->isNested) @@ -282,7 +286,7 @@ function FieldHolder() return parent::FieldHolder(); } - + public function HasSearch() { $SNG = singleton($this->sourceClass); foreach(parent::Headings() as $field) { @@ -292,17 +296,17 @@ public function HasSearch() { } return false; } - + public function Headings() { $headings = array(); foreach($this->fieldList as $fieldName => $fieldTitle) { - if(isset($_REQUEST['ctf'][$this->Name()]['sort_dir'])) + if(!empty($_REQUEST['ctf'][$this->Name()]['sort_dir'])) $dir = $_REQUEST['ctf'][$this->Name()]['sort_dir'] == "ASC" ? "DESC" : "ASC"; - else - $dir = "ASC"; + else + $dir = "ASC"; $headings[] = new ArrayData(array( - "Name" => $fieldName, + "Name" => $fieldName, "Title" => ($this->sourceClass) ? singleton($this->sourceClass)->fieldLabel($fieldTitle) : $fieldTitle, "IsSortable" => singleton($this->sourceClass)->hasDatabaseField($fieldName), "SortLink" => $this->RelativeLink(array( @@ -310,72 +314,72 @@ public function Headings() 'sort' => $fieldName )), "SortDirection" => $dir, - "IsSorted" => (isset($_REQUEST['ctf'][$this->Name()]['sort'])) && ($_REQUEST['ctf'][$this->Name()]['sort'] == $fieldName), + "IsSorted" => (!empty($_REQUEST['ctf'][$this->Name()]['sort'])) && ($_REQUEST['ctf'][$this->Name()]['sort'] == $fieldName), "ColumnWidthCSS" => !empty($this->column_widths) ? sprintf("style='width:%f%%;'",($this->column_widths[$fieldName] - 0.1)) : "" )); } return new DataObjectSet($headings); } - + function saveComplexTableField($data, $form, $params) { $className = $this->sourceClass(); $childData = new $className(); $form->saveInto($childData); try { $childData->write(); - } + } catch(ValidationException $e) { $form->sessionMessage($e->getResult()->message(), 'bad'); return Director::redirectBack(); - } + } if($childData->many_many()) { $form->saveInto($childData); $childData->write(); - } + } $form->sessionMessage(sprintf(_t('DataObjectManager.ADDEDNEW','Added new %s successfully'),$this->SingleTitle()), 'good'); if($form->getFileFields() || $form->getNestedDOMs()) { $form->clearMessage(); - Director::redirect(Controller::join_links($this->BaseLink(),'item', $childData->ID, 'edit')); + Director::redirect(Controller::join_links($this->BaseLink(),'item', $childData->ID, 'edit')); } else Director::redirectBack(); } - - function setSourceID($val) { - if (is_numeric($val)) { - $this->sourceID = $val; + + function setSourceID($val) { + if (is_numeric($val)) { + $this->sourceID = $val; $this->hasCustomSourceID = true; - } - } - + } + } + function sourceID() { if ($this->hasCustomSourceID) { return $this->sourceID; } - + if($this->isNested) - return $this->controller->ID; - $idField = $this->form->dataFieldByName('ID'); - return ($idField && is_numeric($idField->Value())) ? $idField->Value() : (isset($_REQUEST['ctf']['ID']) ? $_REQUEST['ctf']['ID'] : null); - } - - + return $this->controller->ID; + $idField = $this->form->dataFieldByName('ID'); + return ($idField && is_numeric($idField->Value())) ? $idField->Value() : (isset($_REQUEST['ctf']['ID']) ? $_REQUEST['ctf']['ID'] : null); + } + + protected function getRawDetailFields($childData) { - if(is_a($this->detailFormFields,"Fieldset")) + if(is_a($this->detailFormFields,"Fieldset")) $fields = $this->detailFormFields; else { if(!is_string($this->detailFormFields)) $this->detailFormFields = "getCMSFields"; $functioncall = $this->detailFormFields; if(!$childData->hasMethod($functioncall)) $functioncall = "getCMSFields"; - + $fields = $childData->{$functioncall}($this); } - return $fields; + return $fields; } - + public function getCustomFieldsFor($childData) { $fields = $this->getRawDetailFields($childData); foreach($fields as $field) { @@ -384,17 +388,17 @@ public function getCustomFieldsFor($childData) { } return $fields; } - + function AddForm($childID = null) { $form = parent::AddForm($childID); - $actions = new FieldSet(); + $actions = new FieldSet(); $titles = array(); if($files = $form->getFileFields()) { foreach($files as $field) $titles[] = DOMUtil::readable_class($field->Title()); } if($doms = $form->getNestedDOMs()) - foreach($doms as $field) $titles[] = $field->PluralTitle(); + foreach($doms as $field) $titles[] = $field->PluralTitle(); if(empty($titles)) $text = _t('DataObjectManager.SAVE','Save'); elseif(sizeof($titles) > 3) { @@ -408,7 +412,7 @@ function AddForm($childID = null) $actions->push( $saveAction = new FormAction("saveComplexTableField", $text) - ); + ); $saveAction->addExtraClass('save'); $form->setActions($actions); $form->Fields()->insertFirst(new LiteralField('open','
')); @@ -421,80 +425,80 @@ function AddForm($childID = null) public function ClickToToggle() { return $this->clickToToggle; } - + public function Link($action = null) { return Controller::join_links(parent::Link($action),'?'.$this->getQueryString()); } - + public function BaseLink() { return parent::Link(); } - + public function CurrentLink() { return $this->Link(); - } - + } + public function RelativeLink($params = array()) { return Controller::join_links(parent::Link(),'?'.$this->getQueryString($params)); - } + } public function FirstLink() { return parent::FirstLink() ? $this->RelativeLink(array('start' => '0')) : false; } - + public function PrevLink() { $start = ($this->start - $this->pageSize < 0) ? 0 : $this->start - $this->pageSize; return parent::PrevLink() ? $this->RelativeLink(array('start' => $start)) : false; } - + public function NextLink() { $currentStart = isset($_REQUEST['ctf'][$this->Name()]['start']) ? $_REQUEST['ctf'][$this->Name()]['start'] : 0; $start = ($currentStart + $this->pageSize < $this->TotalCount()) ? $currentStart + $this->pageSize : $this->TotalCount() % $this->pageSize > 0; return parent::NextLink() ? $this->RelativeLink(array('start' => $start)) : false; } - + public function LastLink() { $pageSize = ($this->TotalCount() % $this->pageSize > 0) ? $this->TotalCount() % $this->pageSize : $this->pageSize; $start = $this->TotalCount() - $pageSize; return parent::LastLink() ? $this->RelativeLink(array('start' => $start)) : false; } - + public function ShowAllLink() { return $this->RelativeLink(array('show_all' => '1')); } - + public function PaginatedLink() { return $this->RelativeLink(array('show_all' => '0')); } public function AddLink() { - return Controller::join_links($this->BaseLink(), 'add'); + return Controller::join_links($this->BaseLink(), 'add?cacheb=' . time()); } - + public function ShowAll() { return $this->showAll == "1"; } - + public function Paginated() { return $this->showAll == "0"; } - + public function Sortable() { return DataObject::has_extension($this->sourceClass(), 'SortableDataObject'); } - + public function setFilter($field, $label, $map, $default = null) { if(is_array($map)) { @@ -512,7 +516,7 @@ public function HasFilter() { return !empty($this->filter_map); } - + public function FilterDropdown() { $map = $this->filter_empty_string ? array($this->RelativeLink(array('filter' => '')) => $this->filter_empty_string) : array(); @@ -523,7 +527,7 @@ public function FilterDropdown() $dropdown = new DropdownField('Filter',$this->filter_label . " ("._t('DataObjectManager.REFRESH','refresh').")", $map, $value); return $dropdown->FieldHolder(); } - + public function PerPageDropdown() { $map = array(); @@ -542,62 +546,62 @@ public function SearchValue() { return !empty($this->search) ? $this->search : false; } - + public function AddTitle() { return $this->addTitle ? $this->addTitle : DOMUtil::readable_class($this->Title()); } - + public function SingleTitle() { return $this->singleTitle ? $this->singleTitle : DOMUtil::readable_class($this->AddTitle()); } - + public function setAddTitle($title) { $this->addTitle = $title; } - + public function setSingleTitle($title) { $this->singleTitle = $title; } - + public function getColumnWidths() { return $this->column_widths; } - + public function setColumnWidths($widths) { if(is_array($widths)) { $total = 0; foreach($widths as $name => $value) $total += $value; - if($total != 100) + if($total != 100) die('DataObjectManager::setColumnWidths():' . sprintf(_t('DataObjectManager.TOTALNOT100','Column widths must total 100 and not %s'), $total)); else $this->column_widths = $widths; } } - + public function setFilterEmptyString($str) { $this->filter_empty_string = $str; } - + public function addPermission($perm) { if(!in_array($perm,$this->permissions)) $this->permissions[] = $perm; } - + public function removePermission($perm) { $key = array_search($perm,$this->permissions); if($key !== false) unset($this->permissions[$key]); } - + public function NestedType() { if($this->hasNested) @@ -607,46 +611,46 @@ public function NestedType() else return ""; } - + public function handleDuplicate($request) { return new DataObjectManager_ItemRequest($this,$request->param('ID')); } - + public function setPopupWidth($val) { $this->popupWidth = $val; } - + public function setConfirmDelete($bool) { $this->confirmDelete = $bool; } - + public function PopupWidth() { return $this->popupWidth ? $this->popupWidth : self::$popup_width; } - + public function ConfirmDelete() { return $this->getSetting('confirmDelete'); } - - + + } class DataObjectManager_Item extends ComplexTableField_Item { - function __construct(DataObject $item, DataObjectManager $parent) + function __construct(DataObject $item, DataObjectManager $parent) { parent::__construct($item, $parent); } - + function Link() { return Controller::join_links($this->parent->BaseLink(), 'item', $this->item->ID); } - + function Fields() { $fields = parent::Fields(); $widths = $this->parent->getColumnWidths(); @@ -655,21 +659,21 @@ function Fields() { $field->ColumnWidthCSS = sprintf("style='width:%f%%;'",($widths[$field->Name] - 0.1)); } } - return $fields; + return $fields; } - + public function CanViewOrEdit() { return $this->parent->Can('view') || $this->parent->Can('edit'); } - + public function ViewOrEdit() { if($this->CanViewOrEdit()) return $this->parent->Can('edit') ? "edit" : "view"; return false; } - + public function ViewOrEdit_i18n() { if($res = $this->ViewOrEdit()) { @@ -677,7 +681,7 @@ public function ViewOrEdit_i18n() } return null; } - + public function EditLink() { return Controller::join_links($this->Link(), "edit","?".$this->parent->getQueryString()); @@ -695,12 +699,12 @@ public function CustomActions() } return false; } - + public function PopupWidth() { return $this->parent->PopupWidth(); } - + public function Actions() { $actions = new DataObjectSet(); @@ -708,18 +712,21 @@ public function Actions() $action = false; switch($perm) { case "edit": + if(!$this->item->canEdit()) continue; case "view": + if(!$this->item->canView()) continue; $actions->push(new DataObjectManagerAction( $this->ViewOrEdit_i18n(), $this->EditLink(), "popup", "dataobject_manager/images/page_white_{$this->ViewOrEdit()}.png", "editlink" , - $this->parent->PopupWidth() + $this->parent->PopupWidth() )); break; - + case "delete": + if(!$this->item->canDelete()) continue; $actions->push(new DataObjectManagerAction( _t('DataObjectManager.DELETE','Delete'), $this->DeleteLink(), @@ -729,8 +736,9 @@ public function Actions() $this->parent->getSetting('confirmDelete') ? "confirm" : null )); break; - + case "duplicate": + if(!$this->item->canCreate()) continue; $actions->push(new DataObjectManagerAction( _t('DataObjectManager.DUPLICATE','Duplicate'), $this->DuplicateLink(), @@ -762,29 +770,30 @@ public function dosort() list($ownerClass, $className) = explode("-",$className); } $many_many = ((is_numeric($this->urlParams['OtherID'])) && SortableDataObject::is_sortable_many_many($className)); - foreach($_POST as $group => $map) { + foreach($_POST as $group => $map) { if(substr($group, 0, 7) == "record-") { if($many_many) { - $controllerID = $this->urlParams['OtherID']; + $controllerID = $this->urlParams['OtherID']; $candidates = singleton($ownerClass)->many_many(); if(is_array($candidates)) { foreach($candidates as $name => $class) - if($class == $className) { + if($class == $className and substr($group, -strlen($name)-1) == '_'.$name) { $relationName = $name; break; } } if(!isset($relationName)) return false; - list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($ownerClass)->many_many($relationName); - foreach($map as $sort => $id) - DB::query("UPDATE \"$table\" SET \"SortOrder\" = $sort WHERE \"{$className}ID\" = $id AND \"{$ownerClass}ID\" = $controllerID"); + list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($ownerClass)->many_many($relationName); + foreach($map as $sort => $id) { + DB::query("UPDATE \"$table\" SET \"SortOrder\" = $sort WHERE \"{$componentField}\" = $id AND \"{$parentField}\" = $controllerID"); + } } else { foreach($map as $sort => $id) { $obj = DataObject::get_by_id($className, $id); $obj->SortOrder = $sort; $obj->write(); - } + } } break; } @@ -813,7 +822,7 @@ function __construct($controller, $name, $fields, $validator, $readonly, $dataOb // added prototype.js to provide support for TreeDropdownField Requirements::javascript(THIRDPARTY_DIR.'/prototype/prototype.js'); Requirements::javascript(THIRDPARTY_DIR.'/jquery/jquery.js'); - Requirements::javascript(THIRDPARTY_DIR.'/jquery-livequery/jquery.livequery.js'); + Requirements::javascript(THIRDPARTY_DIR.'/jquery-livequery/jquery.livequery.js'); Requirements::block(THIRDPARTY_DIR.'/behaviour.js'); Requirements::block(SAPPHIRE_DIR.'/javascript/Validator.js'); Requirements::clear(THIRDPARTY_DIR.'/behavior.js'); @@ -837,30 +846,30 @@ function __construct($controller, $name, $fields, $validator, $readonly, $dataOb $this->dataObject->getRequirementsForPopup(); } Requirements::javascript('dataobject_manager/javascript/dataobjectmanager_popup.js'); - - - $actions = new FieldSet(); + + + $actions = new FieldSet(); if(!$readonly) { $actions->push( $saveAction = new FormAction("saveComplexTableField", _t('DataObjectManager.SAVE','Save')) - ); + ); $saveAction->addExtraClass('save'); } - + parent::__construct($controller, $name, $fields, $actions, $validator); if ($this->validator instanceof Validator) { $this->validator->setJavascriptValidationHandler('none'); - } + } else { $this->unsetValidator(); } - + if($this->getNestedDOMs()) { Requirements::javascript(THIRDPARTY_DIR.'/jquery-livequery/jquery.livequery.js'); Requirements::javascript('dataobject_manager/javascript/dom_jquery_ui.js'); - Requirements::javascript('dataobject_manager/javascript/tooltip.js'); + Requirements::javascript('dataobject_manager/javascript/tooltip.js'); Requirements::javascript('dataobject_manager/javascript/dataobject_manager.js'); } $this->NestedController = $this->controller->isNested; @@ -869,7 +878,7 @@ function __construct($controller, $name, $fields, $validator, $readonly, $dataOb function FieldHolder() { return $this->renderWith('ComplexTableField_Form'); } - + public function getFileFields() { $file_fields = array(); @@ -877,9 +886,9 @@ public function getFileFields() if($field instanceof FileIFrameField || $field instanceof ImageField) $file_fields[] = $field; } - return !empty($file_fields)? $file_fields : false; + return !empty($file_fields)? $file_fields : false; } - + public function getNestedDOMs() { $dom_fields = array(); @@ -899,21 +908,21 @@ public function getNestedDOMs() } } } - return !empty($dom_fields)? $dom_fields : false; + return !empty($dom_fields)? $dom_fields : false; } - - + + } -class DataObjectManager_ItemRequest extends ComplexTableField_ItemRequest +class DataObjectManager_ItemRequest extends ComplexTableField_ItemRequest { public $isNested = false; protected $itemList; protected $currentIndex; - - function __construct($ctf, $itemID) + + function __construct($ctf, $itemID) { parent::__construct($ctf, $itemID); $this->isNested = $this->ctf->isNested; @@ -923,9 +932,9 @@ function __construct($ctf, $itemID) } } - function Link() + function Link() { - return Controller::join_links($this->ctf->BaseLink() , 'item', $this->itemID); + return Controller::join_links($this->ctf->BaseLink() , 'item', $this->itemID); } function saveComplexTableField($data, $form, $request) { @@ -933,7 +942,7 @@ function saveComplexTableField($data, $form, $request) { $form->saveInto($dataObject); try { $dataObject->write(); - } + } catch(ValidationException $e) { $form->sessionMessage($e->getResult()->message(), 'bad'); return Director::redirectBack(); @@ -946,12 +955,12 @@ function saveComplexTableField($data, $form, $request) { $componentSet = $parentRecord->getManyManyComponents($relationName); $componentSet->add($dataObject); } - + $form->sessionMessage(sprintf(_t('DataObjectManager.SAVED','Saved %s successfully'),$this->ctf->SingleTitle()), 'good'); Director::redirectBack(); } - + function DetailForm($childID = null) { $form = parent::DetailForm($childID); @@ -964,7 +973,7 @@ function DetailForm($childID = null) } return $form; } - + function edit() { if(!$this->ctf->Can('view') && !$this->ctf->Can('edit')) return false; @@ -973,16 +982,16 @@ function edit() { echo $this->renderWith($this->ctf->templatePopup); } - + public function duplicate() { if(!$this->ctf->Can('duplicate')) return false; $this->methodName = "duplicate"; - + echo $this->renderWith(array('DataObjectManager_duplicate')); } - + public function DuplicateForm() { return new Form( @@ -1001,7 +1010,7 @@ public function DuplicateForm() ) ); } - + public function doDuplicate($data,$form) { if($obj = $this->dataObj()) { @@ -1017,7 +1026,7 @@ public function doDuplicate($data,$form) if($related_objects = $obj->$name()) { foreach($related_objects as $related_obj) { $o = $related_obj->duplicate(false); - $o->$ownerID = $new->ID; + $o->$ownerID = $new->ID; $o->write(); } } @@ -1037,7 +1046,7 @@ public function doDuplicate($data,$form) } $new->write(); } - } + } } $ret = "$i " . _t('DataObjectManager.DUPLICATESCREATED','duplicate(s) created'); if(isset($data['Relations']) && $data['Relations'] == "1") $ret .= ", " . _t('DataObjectManager.WITHRELATIONS','with relations included'); @@ -1047,13 +1056,13 @@ public function doDuplicate($data,$form) $form->sessionMessage(_t('DataObjectManager.ERRORDUPLICATING','There was an error duplicating the object.'),'bad'); Director::redirectBack(); } - - + + protected function getPrevID() { return $this->itemList[$this->currentIndex - 1]; } - + protected function getNextID() { return $this->itemList[$this->currentIndex + 1]; @@ -1065,40 +1074,40 @@ function NextRecordLink() if(!$this->itemList || $this->currentIndex == sizeof($this->itemList)-1) return false; return Controller::join_links($this->ctf->BaseLink() , 'item/' . $this->getNextID().'/edit',"?".$this->ctf->getQueryString()); } - + function PrevRecordLink() { if(!$this->itemList || $this->currentIndex == 0) return false; return Controller::join_links($this->ctf->BaseLink() , 'item/' . $this->getPrevID().'/edit',"?".$this->ctf->getQueryString()); } - - + + function HasPagination() { return $this->NextRecordLink() || $this->PrevRecordLink(); } - + function HasDuplicate() { return $this->ctf->Can('duplicate'); } - + function SingleTitle() { return $this->ctf->SingleTitle(); } - + function DuplicateLink() { return Controller::join_links($this->ctf->BaseLink(),'duplicate'.$this->itemID); } - + function HasRelated() { $has_many = singleton($this->ctf->SourceClass())->has_many(); return is_array($has_many) && !empty($has_many); } - + } class DataObjectManagerAction extends ViewableData @@ -1109,13 +1118,13 @@ class DataObjectManagerAction extends ViewableData 'refresh' => 'refresh-button', 'window' => 'window-link' ); - + public $Title; public $Behaviour; public $ActionClass; public $Link; public $IconURL; - + public function __construct($title, $link, $behaviour = "popup", $icon = null, $class = null, $rel = null) { parent::__construct(); $this->Title = $title; @@ -1148,12 +1157,12 @@ public static function readable_list($array) return implode(', ', $array).", $and $last"; } } - + public static function readable_class($string) { - return ucwords(trim(strtolower(ereg_replace('([A-Z])',' \\1',$string)))); + return ucwords(trim(strtolower(ereg_replace('([A-Z])',' \\1',$string)))); } - + /** * Translates a camel case string into a string with underscores (e.g. firstName -> first_name) * @param string $str String in camel case format @@ -1164,7 +1173,7 @@ public static function to_underscore($str) { $func = create_function('$c', 'return "_" . strtolower($c[1]);'); return preg_replace_callback('/([A-Z])/', $func, $str); } - + /** * Translates a string with underscores into camel case (e.g. first_name -> firstName) * @param string $str String in underscore format @@ -1178,7 +1187,5 @@ public static function to_camel_case($str, $capitalise_first_char = false) { $func = create_function('$c', 'return strtoupper($c[1]);'); return preg_replace_callback('/_([a-z])/', $func, $str); } - -} - +} diff --git a/code/FileDataObjectManager.php b/code/FileDataObjectManager.php index de1c08f..e87e2e0 100644 --- a/code/FileDataObjectManager.php +++ b/code/FileDataObjectManager.php @@ -10,6 +10,7 @@ class FileDataObjectManager extends DataObjectManager public static $upgrade_video = true; public static $upgrade_image = true; public static $upload_limit = "40"; + public static $copy_on_import = true; public $view; public $default_view = "grid"; @@ -18,6 +19,7 @@ class FileDataObjectManager extends DataObjectManager protected $limitFileTypes; protected $uploadLimit; protected $allowUploadFolderSelection = true; + protected $allowDragDrop = true; protected $enableUploadDebugging = false; public $hasDataObject = true; public $importClass = "File"; @@ -43,7 +45,7 @@ class FileDataObjectManager extends DataObjectManager public $uploadifyField = "MultipleFileUploadField"; - public $copyOnImport = true; + public $copyOnImport; public function __construct($controller, $name = null, $sourceClass = null, $fileFieldName = null, $fieldList = null, $detailFormFields = null, $sourceFilter = "", $sourceSort = "", $sourceJoin = "") { @@ -195,6 +197,16 @@ public function getUploadLimit() return $this->getSetting('uploadLimit'); } + public function setCopyOnImport($bool) + { + $this->copyOnImport = $bool; + } + + public function getCopyOnImport() + { + return $this->getSetting('copyOnImport'); + } + public function setBrowseButtonText($text) { $this->browseButtonText = $text; @@ -215,6 +227,11 @@ public function allowUploadFolderSelection() $this->allowUploadFolderSelection = true; } + public function allowDragDrop() + { + return $this->allowDragDrop ? true : false; + } + public function enableUploadDebugging() { $this->enableUploadDebugging = true; @@ -427,7 +444,7 @@ public function saveUploadifyForm($data, $form) if($file = DataObject::get_by_id("File", (int) $id)) { $upload_folder = $form->Fields()->fieldByName('UploadedFiles')->uploadFolder; $folder_id = Folder::findOrMake($upload_folder)->ID; - if($this->copyOnImport && ($file->ParentID != $folder_id)) { + if($this->getCopyOnImport() && ($file->ParentID != $folder_id)) { $new_file_path = $upload_folder.'/'.$file->Name; copy($file->getFullPath(), BASE_PATH.'/'.ASSETS_DIR.'/'.$new_file_path); $clone = new $file_class(); diff --git a/code/HasManyDataObjectManager.php b/code/HasManyDataObjectManager.php index 07af4e2..3cf4f1c 100644 --- a/code/HasManyDataObjectManager.php +++ b/code/HasManyDataObjectManager.php @@ -140,6 +140,7 @@ function ExtraData() { $inputId = $this->id() . '_' . $this->htmlListEndName; return << + HTML; } @@ -151,7 +152,7 @@ function ExtraData() { function getSelectedIDs() { $ids = array(); $dataQuery = $this->getQuery(); - $dataQuery->having("{$this->joinField} = '{$this->controller->ID}'"); + $dataQuery->where("\"{$this->joinField}\" = '{$this->controller->ID}'"); $records = $dataQuery->execute(); $class = $this->sourceClass; foreach($records as $record) { diff --git a/code/ManyManyDataObjectManager.php b/code/ManyManyDataObjectManager.php index 17eba2d..8eb4cea 100644 --- a/code/ManyManyDataObjectManager.php +++ b/code/ManyManyDataObjectManager.php @@ -60,7 +60,7 @@ function __construct($controller, $name, $sourceClass, $fieldList = null, $detai $sourceField = 'Child'; $parentID = $this->controller->ID; - $this->sourceJoin .= " LEFT JOIN \"$manyManyTable\" ON (\"$source\".\"ID\" = \"{$sourceField}ID\" AND \"$manyManyTable\".\"{$this->manyManyParentClass}ID\" = '$parentID')"; + $this->sourceJoin .= " LEFT JOIN \"$manyManyTable\" ON (\"$source\".\"ID\" = \"$manyManyTable\".\"{$sourceField}ID\" AND \"$manyManyTable\".\"{$this->manyManyParentClass}ID\" = '$parentID')"; $this->joinField = 'Checked'; if(isset($_REQUEST['ctf'][$this->Name()]['only_related'])) @@ -86,20 +86,23 @@ protected function loadSort() { $this->setPageSize(999); $original_sort = $this->sourceSort; + $frontendSort = empty($_REQUEST['ctf'][$this->Name()]['sort']) + ? null + : $_REQUEST['ctf'][$this->Name()]['sort']; if(SortableDataObject::is_sortable_many_many($this->sourceClass(), $this->manyManyParentClass)) { list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($this->controllerClass())->many_many($this->Name()); $sort_column = "MMSort"; - if(!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == $sort_column) { + if(empty($frontendSort) || $frontendSort == $sort_column) { $this->sort = $sort_column; $this->sourceSort = "\"$sort_column\" " . SortableDataObject::$sort_dir; $this->sourceSort .= ", \"Checked\" DESC"; } - } elseif($this->Sortable() && (!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == "SortOrder")) { + } elseif($this->Sortable() && (empty($frontendSort) || $frontendSort == "SortOrder")) { $this->sort = "SortOrder"; $this->sourceSort = "\"SortOrder\" " . SortableDataObject::$sort_dir; $this->sourceSort .= ", \"Checked\" DESC"; - } elseif(isset($_REQUEST['ctf'][$this->Name()]['sort']) && !empty($_REQUEST['ctf'][$this->Name()]['sort'])) { - $this->sourceSort = "\"".$_REQUEST['ctf'][$this->Name()]['sort'] . "\" " . $this->sort_dir; + } elseif($frontendSort) { + $this->sourceSort = "\"{$frontendSort}\" {$this->sort_dir}"; } elseif (empty($original_sort)) { $this->sourceSort = singleton($this->sourceClass())->stat('default_sort'); } @@ -191,6 +194,7 @@ function ExtraData() { return << + HTML; } @@ -202,7 +206,7 @@ function ExtraData() { function getSelectedIDs() { $ids = array(); $dataQuery = $this->getQuery(); - $dataQuery->having("Checked = '1'"); + $dataQuery->where("(\"$this->manyManyTable\".\"{$this->manyManyParentClass}ID\" IS NOT NULL)"); $records = $dataQuery->execute(); $class = $this->sourceClass; foreach($records as $record) { diff --git a/code/ManyManyFileDataObjectManager.php b/code/ManyManyFileDataObjectManager.php index 411bc8e..5ea7429 100644 --- a/code/ManyManyFileDataObjectManager.php +++ b/code/ManyManyFileDataObjectManager.php @@ -83,20 +83,21 @@ protected function loadSort() { $this->setPageSize(999); $original_sort = $this->sourceSort; + $frontendSort = empty($_REQUEST['ctf'][$this->Name()]['sort']) + ? null + : $_REQUEST['ctf'][$this->Name()]['sort']; if (SortableDataObject::is_sortable_many_many($this->sourceClass(), $this->manyManyParentClass)) { list($parentClass, $componentClass, $parentField, $componentField, $table) = singleton($this->controllerClass())->many_many($this->Name()); $sort_column = "$table.SortOrder"; - if (!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == $sort_column) { + if (empty($frontendSort) || $frontendSort == $sort_column) { $this->sort = $sort_column; $this->sourceSort = "\"$table\".\"SortOrder\" " . SortableDataObject::$sort_dir; } - } elseif ($this->Sortable() && (!isset($_REQUEST['ctf'][$this->Name()]['sort']) || $_REQUEST['ctf'][$this->Name()]['sort'] == "SortOrder")) { + } elseif ($this->Sortable() && (empty($frontendSort) || $frontendSort == "SortOrder")) { $this->sort = "SortOrder"; $this->sourceSort = "\"SortOrder\" " . SortableDataObject::$sort_dir; - } elseif (isset($_REQUEST['ctf'][$this->Name()]['sort'])) { - $this->sourceSort = "\"" . $_REQUEST['ctf'][$this->Name()]['sort'] . "\" " . $this->sort_dir; - } elseif(isset($_REQUEST['ctf'][$this->Name()]['sort']) && !empty($_REQUEST['ctf'][$this->Name()]['sort'])) { - $this->sourceSort = $_REQUEST['ctf'][$this->Name()]['sort'] . " " . $this->sort_dir; + } elseif ($frontendSort) { + $this->sourceSort = "\"{$frontendSort}\" {$this->sort_dir}"; } elseif (empty($original_sort)) { $this->sourceSort = singleton($this->sourceClass())->stat('default_sort'); } diff --git a/code/SortableDataObject.php b/code/SortableDataObject.php index 3e3cab1..9a50bfc 100644 --- a/code/SortableDataObject.php +++ b/code/SortableDataObject.php @@ -48,7 +48,7 @@ public static function add_sortable_many_many_relation($ownerClass,$componentNam if(!isset(self::$many_many_sortable_relations[$componentClass])) self::$many_many_sortable_relations[$componentClass] = array(); - self::$many_many_sortable_relations[$componentClass][$parentClass] = $table; + self::$many_many_sortable_relations[$componentClass][$parentClass][] = $table; self::add_sortable_class($componentClass); } @@ -90,36 +90,46 @@ public static function get_join_tables($classname) } - public function augmentSQL(SQLQuery &$query) - { - if(empty($query->select) || $query->delete || in_array("COUNT(*)",$query->select) || in_array("count(*)",$query->select)) return; - $sort_field = false; - if($join_tables = self::get_join_tables($this->owner->class)) { - foreach($query->from as $from) { - if($sort_field) break; - foreach($join_tables as $join_table) { - if(stristr($from,$join_table)) { - $sort_field = "\"$join_table\".\"SortOrder\""; - if(isset($query->select['SortOrder'])) { - $query->select['SortOrder'] = "\"{$this->owner->class}\".SortOrder AS LocalSort"; - } - break; - } - } - } - } - if(!$sort_field) $sort_field = "\"SortOrder\""; - - if(!$query->orderby || ($query->orderby == $this->owner->stat('default_sort'))) - $query->orderby = "$sort_field " . self::$sort_dir; + public function augmentSQL(SQLQuery &$query) { + if(empty($query->select) || $query->delete || in_array("COUNT(*)",$query->select) || in_array("count(*)",$query->select)) + return; + + $sort_field = false; + if($join_classes = self::get_join_tables($this->owner->class)) { + foreach($query->from as $from) { + if($sort_field) + break; + foreach($join_classes as $join_tables) { + if($sort_field) + break; + foreach ($join_tables as $join_table) { + if(stristr($from,$join_table)) { + $sort_field = "\"$join_table\".\"SortOrder\""; + if(isset($query->select['SortOrder'])) { + $query->select['SortOrder'] = "$sort_field AS LocalSort"; + } + break; + } + } + } + } + } + + if(!$sort_field) + $sort_field = "\"SortOrder\""; + + if(!$query->orderby or $query->orderby == $this->owner->stat('default_sort')) { + $query->orderby = "$sort_field " . self::$sort_dir; + } } public function onBeforeWrite() { if(!$this->owner->ID) { - if($peers = DataObject::get($this->owner->class)) - $this->owner->SortOrder = $peers->Count()+1; + $sql = new SQLQuery("count(ID)", array_shift(ClassInfo::dataClassesFor($this->owner->class))); + $val = $sql->execute()->value(); + $this->owner->SortOrder = is_numeric($val)?$val+1:1; } } diff --git a/code/dropdown_fields/LiveDropdownField.php b/code/dropdown_fields/LiveDropdownField.php index 2ff95cf..e69efef 100755 --- a/code/dropdown_fields/LiveDropdownField.php +++ b/code/dropdown_fields/LiveDropdownField.php @@ -16,7 +16,16 @@ public function __construct($name, $title, $className = "SiteTree", $label = "Ti public function getresults(SS_HTTPRequest $r) { $q = Convert::raw2sql($r->requestVar('q')); - $results = DataObject::get($this->sourceClass,$this->labelField . " LIKE '%{$q}%'"); + $qArray = explode(" ", $q); + if (is_array($qArray) && count($qArray) > 1) { + $where = $this->labelField . "!='' "; + foreach ($qArray as $value) { + $where .= "AND ". $this->labelField . " LIKE '%{$value}%' "; + } + } else { + $where = $this->labelField . " LIKE '%{$q}%'"; + } + $results = DataObject::get($this->sourceClass, $where); if($results) { $set = new DataObjectSet(); foreach($results->toDropdownMap('ID', $this->labelField) as $key => $val) { @@ -59,4 +68,4 @@ public function Field() { } -} \ No newline at end of file +} diff --git a/code/flv/shadowbox/languages/shadowbox-uk.js b/code/flv/shadowbox/languages/shadowbox-uk.js new file mode 100644 index 0000000..f76304f --- /dev/null +++ b/code/flv/shadowbox/languages/shadowbox-uk.js @@ -0,0 +1 @@ +if(typeof Shadowbox=="undefined"){throw"Unable to load Shadowbox language file, Shadowbox not found."}Shadowbox.lang={code:"uk",of:"з",loading:"завантаження",cancel:"Скасувати",next:"Наступна",previous:"Попередня",play:"Почати",pause:"Пауза",close:"Закрити",errors:{single:'Вам необхідно встановити для браузера плагін {1} щоб мати змогу переглядати цей вміст.',shared:'Щоб переглядати цей вміст необхідно встановити такі плагіни {1} та {3}.',either:'Вам необхідно встановити один з плагінів: {1} або {3} щоб мати змогу переглядати цей вміст.'}}; \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/langs/uk.js b/code/simple_tinymce_field/javascript/tiny_mce/langs/uk.js new file mode 100644 index 0000000..8400c65 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/langs/uk.js @@ -0,0 +1,154 @@ +tinyMCE.addI18n({uk:{ +common:{ +edit_confirm:"Чи бажаэте ви використати WYSIWYG-редактор для цього поля?", +apply:"Застосувати", +insert:"Вставити", +update:"Поновити", +cancel:"Відмінити", +close:"Зактити", +browse:"Обрати", +class_name:"Клас", +not_set:"-- не встановлено --", +clipboard_msg:"Копіювання/Вирізка/Вставка не доступні в Mozilla та Firefox.\nЧи бажаєте узнати більше про цю проблему?", +clipboard_no_support:"Наразі не підтримується вашим браузером. Використовуйте клавіатурні комбінації для цієї дії.", +popup_blocked:"Прикро, але ваш блокувальник popup-вікон заблокував вікно, яке реалізує функціонал редактора. Вам необхідно відключити блокування для цього сайту, щоб мати змогу користуватися цим інструментом.", +invalid_data:"Помилка: Введено некоретні дані. Такі поля позначені червоним.", +more_colors:"Ще кольори" +}, +contextmenu:{ +align:"Вирівнювання", +left:"По лівому краю", +center:"По центру", +right:"По правому краю", +full:"По ширині" +}, +insertdatetime:{ +date_fmt:"%Y-%m-%d", +time_fmt:"%H:%M:%S", +insertdate_desc:"Вставити дату", +inserttime_desc:"Вставити час", +months_long:"Січень,Лютий,Березень,Квітень,Травень,Червень,Липень,Серпень,Вересень,Жовтень,Листопад,Грудень", +months_short:"Січ,Лют,Бер,Квт,Трв,Чрв,Лип,Сер,Вер,Жов,Лис,Грд", +day_long:"Неділя,Понеділок,Вівторок,Середа,Червер,П'ятниця,Субота,Неділя", +day_short:"Нд,Пн,Вт,Ср,Чт,Пт,Сб,Нд" +}, +print:{ +print_desc:"Друкувати" +}, +preview:{ +preview_desc:"Попередній перегляд" +}, +directionality:{ +ltr_desc:"Напрям зліва направо", +rtl_desc:"Напрям зправа наліво" +}, +layer:{ +insertlayer_desc:"Додати новий шар", +forward_desc:"Вперед", +backward_desc:"Назад", +absolute_desc:"Перемкнути абсолютне позиціювання", +content:"Новий шар..." +}, +save:{ +save_desc:"Зберегти", +cancel_desc:"Відмінити всі зміни" +}, +nonbreaking:{ +nonbreaking_desc:"Вставити нерозривний пробіл" +}, +iespell:{ +iespell_desc:"Перевірити орфографію", +download:"ieSpell не знайдено. Чи бажаєте встановити?" +}, +advhr:{ +advhr_desc:"Horizontal rule" +}, +emotions:{ +emotions_desc:"Смайлики" +}, +searchreplace:{ +search_desc:"Шукати", +replace_desc:"Пошук/Заміна" +}, +advimage:{ +image_desc:"Вставити/редагувати зображення" +}, +advlink:{ +link_desc:"Вставити/редагувати посилання" +}, +xhtmlxtras:{ +cite_desc:"Цитування", +abbr_desc:"Абревіатура", +acronym_desc:"Акронім", +del_desc:"Видалити", +ins_desc:"Вставити", +attribs_desc:"Вставити/редагувати атрибути" +}, +style:{ +desc:"Редагувати CSS Стиль" +}, +paste:{ +paste_text_desc:"Вставити як текст", +paste_word_desc:"Вставити з Word", +selectall_desc:"Виділити все" +}, +paste_dlg:{ +text_title:"Користуйтесь CTRL+V на клавіатурі щоб вставити текст у вікно.", +text_linebreaks:"Зберігати переноси рядків", +word_title:"Користуйтесь CTRL+V на клавіатурі щоб вставити текст у вікно." +}, +table:{ +desc:"Вставити нову таблицю", +row_before_desc:"Додати рядок перед", +row_after_desc:"Додати рядок після", +delete_row_desc:"Видалити рядок", +col_before_desc:"Додати стовбчик перед", +col_after_desc:"Додати стовбчик після", +delete_col_desc:"Видалити стовбчик", +split_cells_desc:"Розділити об'єднані комірки таблиці", +merge_cells_desc:"Об'єднати комірки", +row_desc:"Властивості рядка таблиці", +cell_desc:"Властивості комірки таблиці", +props_desc:"Властивості таблиці", +paste_row_before_desc:"Вставити рядок перед", +paste_row_after_desc:"Вставити рядок після", +cut_row_desc:"Вирізати рядок", +copy_row_desc:"Копіювати рядок", +del:"Видалити таблицю", +row:"Рядок", +col:"Стовбчик", +cell:"Комірка" +}, +autosave:{ +unload_msg:"Якщо ви залишите сторінку, ві зміни, що ви не зберегли, буде втрачено." +}, +fullscreen:{ +desc:"Перемкнути повноекранний режим" +}, +media:{ +desc:"Встатити/редагувати embedded media", +edit:"Редагувати embedded media" +}, +fullpage:{ +desc:"Властивості документу" +}, +template:{ +desc:"Вставити predefined template content" +}, +visualchars:{ +desc:"Показувати/ні службові символи." +}, +spellchecker:{ +desc:"Увімкнути/вимкнути перевірку орфографії", +menu:"Налаштування перевірки орфографії", +ignore_word:"Ігнорувати слово", +ignore_words:"Ігнорувати все", +langs:"Мови", +wait:"Будь ласка, зачекайте...", +sug:"Підказки", +no_sug:"Немає підказок", +no_mpell:"Помилок не знайдено." +}, +pagebreak:{ +desc:"Вставити розрив сторінки." +}}}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/advhr/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/advhr/langs/uk_dlg.js new file mode 100644 index 0000000..8303634 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/advhr/langs/uk_dlg.js @@ -0,0 +1,5 @@ +tinyMCE.addI18n('uk.advhr_dlg',{ +width:"\u0428\u0438\u0440\u0438\u043D\u0430", +size:"\u0412\u0438\u0441\u043E\u0442\u0430", +noshade:"\u0411\u0435\u0437 \u0442\u0456\u043D\u0456" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/advimage/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/advimage/langs/uk_dlg.js new file mode 100644 index 0000000..a27068b --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/advimage/langs/uk_dlg.js @@ -0,0 +1,43 @@ +tinyMCE.addI18n('uk.advimage_dlg',{ +tab_general:"Загальне", +tab_appearance:"Вигляд", +tab_advanced:"Додатково", +general:"Загальне", +title:"Заголовок", +preview:"Попередній перегляд", +constrain_proportions:"Зберігати пропорції", +langdir:"Напрямок письма", +langcode:"Код мови", +long_desc:"Long description link", +style:"Стиль", +classes:"Класи", +ltr:"Зліва направо", +rtl:"Зправа наліво", +id:"Атрибут Id", +map:"Атрибут map", +swap_image:"Swap image", +alt_image:"Альтернативне зображення", +mouseover:"при навеленні миші", +mouseout:"при відведенні миші", +misc:"Різне", +example_img:"Попередній перегляд", +missing_alt:"Ви певні, що бажаєте продовжити, не заповнюючи опис зображення? Без зображення буде недоступне користувачам з деякими вадами, а також користувачам текстових браузерів та тим, хто вимкнув зображення.", +dialog_title:"Вставити/редагувати зображення", +src:"URL зображення", +alt:"Атрибут Alt (відображається, якщо зображення не завантажене)", +list:"Image list", +border:"Рамка", +dimensions:"Розміри", +vspace:"Вертикальний відступ", +hspace:"Горизонтальний відступ", +align:"Вирівнювання", +align_baseline:"Baseline", +align_top:"Top", +align_middle:"Middle", +align_bottom:"Bottom", +align_texttop:"Text top", +align_textbottom:"Text bottom", +align_left:"По лівому краю", +align_right:"По правому краю", +image_list:"Image list" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/advlink/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/advlink/langs/uk_dlg.js new file mode 100644 index 0000000..fb26187 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/advlink/langs/uk_dlg.js @@ -0,0 +1,52 @@ +tinyMCE.addI18n('uk.advlink_dlg',{ +title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043C\u0456\u043D\u0438\u0442\u0438 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F", +url:"\u0410\u0434\u0440\u0435\u0441\u0430", +target:"\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0432...", +titlefield:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", +is_email:"\u0412\u0432\u0435\u0434\u0435\u043D\u0438\u0439 URL \u0441\u0445\u043E\u0436\u0438\u0439 \u043D\u0430 email \u0430\u0434\u0440\u0435\u0441\u0443, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043E\u0434\u0430\u0442\u0438 \u043D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u0438\u0439 \u043F\u0440\u0435\u0444\u0456\u043A\u0441 mailto?", +is_external:"\u0412\u0432\u0435\u0434\u0435\u043D\u0438\u0439 URL \u0441\u0445\u043E\u0436\u0438\u0439 \u043D\u0430 \u0437\u043E\u0432\u043D\u0456\u0448\u043D\u0454 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043E\u0434\u0430\u0442\u0438 \u043D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u0438\u0439 \u043F\u0440\u0435\u0444\u0456\u043A\u0441 http://?", +list:"\u0421\u043F\u0438\u0441\u043E\u043A \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C", +general_tab:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0435", +popup_tab:"Popup", +events_tab:"\u041F\u043E\u0434\u0456\u0457", +advanced_tab:"\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u043E", +general_props:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0456 \u0432\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456", +popup_props:"\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 Popup", +event_props:"\u041F\u043E\u0434\u0456\u0457", +advanced_props:"\u0420\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u043D\u0456 \u0432\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456", +popup_opts:"\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456", +anchor_names:"\u042F\u043A\u043E\u0440\u0456", +target_same:"\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0432 \u0446\u044C\u043E\u043C\u0443 \u0436 \u0432\u0456\u043A\u043D\u0456 / \u0444\u0440\u0435\u0439\u043C\u0456", +target_parent:"\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0432 \u0431\u0430\u0442\u044C\u043A\u0456\u0432\u0441\u044C\u043A\u043E\u043C\u0443 \u0432\u0456\u043A\u043D\u0456 / \u0444\u0440\u0435\u0439\u043C\u0456", +target_top:"\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0443 \u0432\u0435\u0440\u0445\u043D\u044C\u043E\u043C\u0443 \u0444\u0440\u0435\u0439\u043C\u0456 (\u0437\u0430\u043C\u0456\u043D\u0438\u0442\u0438 \u0432\u0441\u0456 \u0444\u0440\u0435\u0439\u043C\u0438)", +target_blank:"\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0432 \u043D\u043E\u0432\u043E\u043C\u0443 \u0432\u0456\u043A\u043D\u0456", +popup:"Javascript popup", +popup_url:"Popup URL", +popup_name:"\u041D\u0430\u0437\u0432\u0430 \u0432\u0456\u043A\u043D\u0430", +popup_return:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 'return false'", +popup_scrollbars:"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u043A\u0440\u043E\u043B\u0435\u0440\u0438", +popup_statusbar:"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u0442\u0430\u0442\u0443\u0441", +popup_toolbar:"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043F\u0430\u043D\u0435\u043B\u0456 \u0456\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0456\u0432", +popup_menubar:"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043C\u0435\u043D\u044E", +popup_location:"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043F\u0430\u043D\u0435\u043B\u044C location", +popup_resizable:"\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0442\u0438 \u0437\u043C\u0456\u043D\u044E\u0432\u0430\u0442\u0438 \u0440\u043E\u0437\u043C\u0456\u0440", +popup_dependent:"Dependent (\u043B\u0438\u0448\u0435 \u0434\u043B\u044F Mozilla/Firefox)", +popup_size:"\u0420\u043E\u0437\u043C\u0456\u0440", +popup_position:"\u041F\u043E\u0437\u0438\u0446\u0456\u044F (X/Y)", +id:"Id", +style:"\u0421\u0442\u0438\u043B\u044C", +classes:"\u041A\u043B\u0430\u0441\u0438", +target_name:"Target name", +langdir:"\u041D\u0430\u043F\u0440\u044F\u043C \u043C\u043E\u0432\u0438", +target_langcode:"Target language", +langcode:"\u041A\u043E\u0434 \u043C\u043E\u0432\u0438", +encoding:"Target character encoding", +mime:"Target MIME type", +rel:"Relationship page to target", +rev:"Relationship target to page", +tabindex:"Tabindex", +accesskey:"Accesskey", +ltr:"\u0417\u043B\u0456\u0432\u0430 \u043F\u0440\u0430\u0432\u043E\u0440\u0443\u0447", +rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043B\u0456\u0432\u043E\u0440\u0443\u0447", +link_list:"\u0421\u043F\u0438\u0441\u043E\u043A \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/emotions/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/emotions/langs/uk_dlg.js new file mode 100644 index 0000000..bedb694 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/emotions/langs/uk_dlg.js @@ -0,0 +1,20 @@ +tinyMCE.addI18n('uk.emotions_dlg',{ +title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0441\u043C\u0430\u0439\u043B", +desc:"\u0421\u043C\u0430\u0439\u043B\u0438", +cool:"Cool", +cry:"Cry", +embarassed:"Embarassed", +foot_in_mouth:"Foot in mouth", +frown:"Frown", +innocent:"Innocent", +kiss:"Kiss", +laughing:"Laughing", +money_mouth:"Money mouth", +sealed:"Sealed", +smile:"Smile", +surprised:"Surprised", +tongue_out:"Tongue out", +undecided:"Undecided", +wink:"Wink", +yell:"Yell" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/example/langs/uk.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/example/langs/uk.js new file mode 100644 index 0000000..20d356f --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/example/langs/uk.js @@ -0,0 +1,3 @@ +tinyMCE.addI18n('uk.example',{ + desc : 'Це лише кнопка шаблону' +}); diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/example/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/example/langs/uk_dlg.js new file mode 100644 index 0000000..5a729d4 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/example/langs/uk_dlg.js @@ -0,0 +1,3 @@ +tinyMCE.addI18n('uk.example_dlg',{ + title : 'Це лише заголовок прикладу' +}); diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/fullpage/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/fullpage/langs/uk_dlg.js new file mode 100644 index 0000000..909936b --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/fullpage/langs/uk_dlg.js @@ -0,0 +1,85 @@ +tinyMCE.addI18n('uk.fullpage_dlg',{ +title:"\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0443", +meta_tab:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0435", +appearance_tab:"\u0412\u0438\u0433\u043B\u044F\u0434", +advanced_tab:"\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u043E", +meta_props:"\u041C\u0435\u0442\u0430 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F", +langprops:"\u041C\u043E\u0432\u0430 \u0442\u0430 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u044F", +meta_title:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", +meta_keywords:"\u041A\u043B\u044E\u0447\u043E\u0432\u0456 \u0441\u043B\u043E\u0432\u0430", +meta_description:"\u041E\u043F\u0438\u0441", +meta_robots:"\u0420\u043E\u0431\u043E\u0442\u0438", +doctypes:"Doctype", +langcode:"\u041A\u043E\u0434 \u043C\u043E\u0432\u0438", +langdir:"\u041D\u0430\u043F\u0440\u044F\u043C \u043C\u043E\u0432\u0438", +ltr:"\u0417\u043B\u0456\u0432\u0430 \u043F\u0440\u0430\u0432\u043E\u0440\u0443\u0447", +rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043B\u0456\u0432\u043E\u0440\u0443\u0447", +xml_pi:"XML declaration", +encoding:"\u041A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", +appearance_bgprops:"\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 \u0444\u043E\u043D\u0443", +appearance_marginprops:"\u0412\u0456\u0434\u0441\u0442\u0443\u043F\u0438", +appearance_linkprops:"\u041A\u043E\u043B\u0456\u0440 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C", +appearance_textprops:"\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 \u0442\u0435\u043A\u0441\u0442\u0443", +bgcolor:"\u041A\u043E\u043B\u0456\u0440 \u0444\u043E\u043D\u0443", +bgimage:"\u0424\u043E\u043D\u043E\u0432\u0435 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F", +left_margin:"\u0412\u0456\u0434\u0441\u0442\u0443\u043F \u043B\u0456\u0432\u043E\u0440\u0443\u0447", +right_margin:"\u0412\u0456\u0434\u0441\u0442\u0443\u043F \u043F\u0440\u0430\u0432\u043E\u0440\u0443\u0447", +top_margin:"\u0412\u0456\u0434\u0441\u0442\u0443\u043F \u0437\u0432\u0435\u0440\u0445\u0443", +bottom_margin:"\u0412\u0456\u0434\u0441\u0442\u0443\u043F \u0437\u043D\u0438\u0437\u0443", +text_color:"\u041A\u043E\u043B\u0456\u0440 \u0442\u0435\u043A\u0441\u0442\u0443", +font_size:"\u0420\u043E\u0437\u043C\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0430", +font_face:"\u0428\u0440\u0438\u0444\u0442", +link_color:"\u041A\u043E\u043B\u0456\u0440 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F", +hover_color:"\u041A\u043E\u043B\u0456\u0440 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u043D\u0456", +visited_color:"\u041A\u043E\u043B\u0456\u0440 \u043D\u0430\u0442\u0438\u0441\u043D\u0443\u0442\u043E\u0433\u043E \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F", +active_color:"\u041A\u043E\u043B\u0456\u0440 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0433\u043E \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F", +textcolor:"\u041A\u043E\u043B\u0456\u0440", +fontsize:"\u0420\u043E\u0437\u043C\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0430", +fontface:"\u0421\u0456\u043C\u0435\u0439\u0441\u0442\u0432\u043E \u0448\u0440\u0438\u0444\u0442\u0430", +meta_index_follow:"Index and follow the links", +meta_index_nofollow:"Index and don't follow the links", +meta_noindex_follow:"Do not index but follow the links", +meta_noindex_nofollow:"Do not index and don\'t follow the links", +appearance_style:"Stylesheet and style properties", +stylesheet:"Stylesheet", +style:"\u0421\u0442\u0438\u043B\u044C", +author:"\u0410\u0432\u0442\u043E\u0440", +copyright:"\u041A\u043E\u043F\u0456\u0440\u0430\u0439\u0442", +add:"\u0414\u043E\u0434\u0430\u0442\u0438 \u043D\u043E\u0432\u0438\u0439 \u0435\u043B\u0435\u043C\u0435\u043D\u0442", +remove:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432\u0438\u0434\u0456\u043B\u0435\u043D\u0438\u0439 \u0435\u043B\u0435\u043C\u0435\u043D\u0442", +moveup:"\u041F\u0435\u0440\u0435\u043C\u0456\u0441\u0442\u0438\u0442\u0438 \u0435\u043B\u0435\u043C\u0435\u043D\u0442 \u0432\u0433\u043E\u0440\u0443", +movedown:"\u041F\u0435\u0440\u0435\u043C\u0456\u0441\u0442\u0438\u0442\u0438 \u0435\u043B\u0435\u043C\u0435\u043D\u0442 \u0432\u043D\u0438\u0437\u0443", +head_elements:"Head elements", +info:"\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F", +add_title:"Title element", +add_meta:"Meta element", +add_script:"Script element", +add_style:"Style element", +add_link:"Link element", +add_base:"Base element", +add_comment:"Comment node", +title_element:"Title element", +script_element:"Script element", +style_element:"Style element", +base_element:"Base element", +link_element:"Link element", +meta_element:"Meta \u0435\u043B\u0435\u043C\u0435\u043D\u0442", +comment_element:"\u041A\u043E\u043C\u0435\u043D\u0442\u0430\u0440", +src:"Src", +language:"\u041C\u043E\u0432\u0430", +href:"Href", +target:"Target", +type:"Type", +charset:"Charset", +defer:"Defer", +media:"Media", +properties:"Properties", +name:"\u041D\u0430\u0437\u0432\u0430", +value:"\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F", +content:"\u0417\u043C\u0456\u0441\u0442", +rel:"Rel", +rev:"Rev", +hreflang:"Href lang", +general_props:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0435", +advanced_props:"\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u043E" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/media/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/media/langs/uk_dlg.js new file mode 100644 index 0000000..8187e35 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/media/langs/uk_dlg.js @@ -0,0 +1,103 @@ +tinyMCE.addI18n('uk.media_dlg',{ +title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 / \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 embedded media", +general:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0435", +advanced:"\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u043E", +file:"\u0424\u0430\u0439\u043B/URL", +list:"\u0421\u043F\u0438\u0441\u043E\u043A", +size:"\u0420\u043E\u0437\u043C\u0456\u0440\u0438", +preview:"\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u0434", +constrain_proportions:"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043F\u0440\u043E\u043F\u043E\u0440\u0446\u0456\u0457", +type:"\u0422\u0438\u043F", +id:"Id", +name:"\u041D\u0430\u0437\u0432\u0430", +class_name:"\u041A\u043B\u0430\u0441", +vspace:"\u0432\u0435\u0440\u0442.\u0432\u0456\u0434\u0441\u0442\u0443\u043F", +hspace:"\u0433\u043E\u0440.\u0432\u0456\u0434\u0441\u0442\u0443\u043F", +play:"\u0410\u0432\u0442\u043E\u043F\u043B\u0435\u0439", +loop:"\u041B\u0443\u043F", +menu:"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043C\u0435\u043D\u044E", +quality:"\u042F\u043A\u0456\u0441\u0442\u044C", +scale:"Scale", +align:"Align", +salign:"SAlign", +wmode:"WMode", +bgcolor:"\u0424\u043E\u043D", +base:"Base", +flashvars:"Flashvars", +liveconnect:"SWLiveConnect", +autohref:"AutoHREF", +cache:"\u041A\u0435\u0448", +hidden:"Hidden", +controller:"Controller", +kioskmode:"Kiosk mode", +playeveryframe:"Play every frame", +targetcache:"Target cache", +correction:"No correction", +enablejavascript:"Enable JavaScript", +starttime:"Start time", +endtime:"End time", +href:"Href", +qtsrcchokespeed:"Choke speed", +target:"Target", +volume:"\u0413\u0443\u0447\u043D\u0456\u0441\u0442\u044C", +autostart:"\u0410\u0432\u0442\u043E\u0441\u0442\u0430\u0440\u0442", +enabled:"Enabled", +fullscreen:"Fullscreen", +invokeurls:"Invoke URLs", +mute:"Mute", +stretchtofit:"Stretch to fit", +windowlessvideo:"Windowless video", +balance:"\u0411\u0430\u043B\u0430\u043D\u0441", +baseurl:"Base URL", +captioningid:"Captioning id", +currentmarker:"Current marker", +currentposition:"Current position", +defaultframe:"Default frame", +playcount:"Play count", +rate:"Rate", +uimode:"UI Mode", +flash_options:"Flash options", +qt_options:"Quicktime options", +wmp_options:"Windows media player options", +rmp_options:"Real media player options", +shockwave_options:"Shockwave options", +autogotourl:"Auto goto URL", +center:"Center", +imagestatus:"Image status", +maintainaspect:"Maintain aspect", +nojava:"No java", +prefetch:"Prefetch", +shuffle:"Shuffle", +console:"Console", +numloop:"Num loops", +controls:"Controls", +scriptcallbacks:"Script callbacks", +swstretchstyle:"Stretch style", +swstretchhalign:"Stretch H-Align", +swstretchvalign:"Stretch V-Align", +sound:"Sound", +progress:"Progress", +qtsrc:"QT Src", +qt_stream_warn:"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..", +align_top:"Top", +align_right:"Right", +align_bottom:"Bottom", +align_left:"Left", +align_center:"Center", +align_top_left:"Top left", +align_top_right:"Top right", +align_bottom_left:"Bottom left", +align_bottom_right:"Bottom right", +flv_options:"Flash video options", +flv_scalemode:"Scale mode", +flv_buffer:"Buffer", +flv_startimage:"Start image", +flv_starttime:"Start time", +flv_defaultvolume:"Default volumne", +flv_hiddengui:"Hidden GUI", +flv_autostart:"Auto start", +flv_loop:"Loop", +flv_showscalemodes:"Show scale modes", +flv_smoothvideo:"Smooth video", +flv_jscallback:"JS Callback" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/paste/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/paste/langs/uk_dlg.js new file mode 100644 index 0000000..1bead77 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/paste/langs/uk_dlg.js @@ -0,0 +1,5 @@ +tinyMCE.addI18n('uk.paste_dlg',{ +text_title:"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0442\u0435\u043A\u0441\u0442\u0443 \u0443 \u0432\u0456\u043A\u043D\u043E.", +text_linebreaks:"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u044B \u0441\u0442\u0440\u043E\u043A", +word_title:"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0442\u0435\u043A\u0441\u0442\u0443 \u0443 \u0432\u0456\u043A\u043D\u043E." +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/searchreplace/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/searchreplace/langs/uk_dlg.js new file mode 100644 index 0000000..8719842 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/searchreplace/langs/uk_dlg.js @@ -0,0 +1,16 @@ +tinyMCE.addI18n('uk.searchreplace_dlg',{ +searchnext_desc:"\u0417\u043D\u0430\u0439\u0442\u0438 \u0449\u0435", +notfound:"\u041F\u043E\u0448\u0443\u043A \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E. \u041F\u043E\u0448\u0443\u043A\u043E\u0432\u0438\u0439 \u0440\u044F\u0434\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E.", +search_title:"\u0417\u043D\u0430\u0439\u0442\u0438", +replace_title:"\u0417\u043D\u0430\u0439\u0442\u0438/\u0417\u0430\u043C\u0456\u043D\u0438\u0442\u0438", +allreplaced:"\u0412\u0441\u0456 \u0432\u0445\u043E\u0434\u0436\u0435\u043D\u043D\u044F \u0440\u044F\u0434\u043A\u0430 \u0431\u0443\u043B\u0438 \u0437\u0430\u043C\u0456\u043D\u0435\u043D\u0456.", +findwhat:"\u0417\u043D\u0430\u0439\u0442\u0438", +replacewith:"\u0417\u0430\u043C\u0456\u043D\u0438\u0442\u0438 \u043D\u0430", +direction:"\u041D\u0430\u043F\u0440\u044F\u043C", +up:"\u0412\u0433\u043E\u0440\u0443", +down:"\u0412\u043D\u0438\u0437", +mcase:"\u0412\u0440\u0430\u0445\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440", +findnext:"\u0417\u043D\u0430\u0439\u0442\u0438 \u043D\u0430\u0441\u0442\u0443\u043F\u043D\u0435", +replace:"\u0417\u0430\u043C\u0456\u043D\u0438\u0442\u0438", +replaceall:"\u0417\u0430\u043C\u0456\u043D\u0438\u0442\u0438 \u0432\u0441\u0435" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/style/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/style/langs/uk_dlg.js new file mode 100644 index 0000000..273479d --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/style/langs/uk_dlg.js @@ -0,0 +1,63 @@ +tinyMCE.addI18n('uk.style_dlg',{ +title:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F CSS \u0441\u0442\u0438\u043B\u044E", +apply:"\u0417\u0430\u0441\u0442\u043E\u0441\u0443\u0432\u0430\u0442\u0438", +text_tab:"\u0422\u0435\u043A\u0441\u0442", +background_tab:"\u0424\u043E\u043D", +block_tab:"\u0411\u043B\u043E\u043A", +box_tab:"Box", +border_tab:"\u0413\u0440\u0430\u043D\u0438\u0446\u044F", +list_tab:"\u0421\u043F\u0438\u0441\u043E\u043A", +positioning_tab:"\u041F\u043E\u0437\u0438\u0446\u0456\u043E\u043D\u0443\u0432\u0430\u043D\u043D\u044F", +text_props:"\u0422\u0435\u043A\u0441\u0442", +text_font:"\u0428\u0440\u0438\u0444\u0442", +text_size:"\u0420\u043E\u0437\u043C\u0456\u0440", +text_weight:"\u0422\u043E\u0432\u0449\u0438\u043D\u0430", +text_style:"\u0421\u0442\u0438\u043B\u044C", +text_variant:"Variant", +text_lineheight:"\u0412\u0438\u0441\u043E\u0442\u0430 \u0440\u044F\u0434\u043A\u0443", +text_case:"Case", +text_color:"\u041A\u043E\u043B\u0456\u0440", +text_decoration:"\u041E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u043D\u044F", +text_overline:"\u0432\u0435\u0440\u0445\u043D\u044F \u0440\u0438\u0441\u043A\u0430", +text_underline:"\u043D\u0438\u0436\u043D\u044F \u0440\u0438\u0441\u043A\u0430", +text_striketrough:"\u0437\u0430\u043A\u0440\u0435\u0441\u043B\u0435\u043D\u0438\u0439", +text_blink:"\u043C\u0435\u0440\u0435\u0445\u0442\u0456\u043D\u043D\u044F", +text_none:"\u043D\u0456\u0447\u043E\u0433\u043E", +background_color:"\u041A\u043E\u043B\u0456\u0440 \u0444\u043E\u043D\u0443", +background_image:"\u0424\u043E\u043D\u043E\u0432\u0435 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F", +background_repeat:"\u041F\u043E\u0432\u0442\u043E\u0440", +background_attachment:"Attachment", +background_hpos:"\u0413\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u0430 \u043F\u043E\u0437\u0438\u0446\u0456\u044F", +background_vpos:"\u0412\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u0430 \u043F\u043E\u0437\u0438\u0446\u0456\u044F", +block_wordspacing:"\u0412\u0456\u0434\u0441\u0442\u0443\u043F\u0438 \u043C\u0456\u0436 \u0441\u043B\u043E\u0432\u0430\u043C\u0438", +block_letterspacing:"\u0412\u0456\u0434\u0441\u0442\u0443\u043F\u0438 \u043C\u0456\u0436 \u043B\u0456\u0442\u0435\u0440\u0430\u043C\u0438", +block_vertical_alignment:"\u0412\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u0435 \u0432\u0438\u0440\u0456\u0432\u043D\u044E\u0432\u0430\u043D\u043D\u044F", +block_text_align:"\u0412\u0438\u0440\u0456\u0432\u043D\u044E\u0432\u0430\u043D\u043D\u044F \u0442\u0435\u043A\u0441\u0442\u0443", +block_text_indent:"Text indent", +block_whitespace:"Whitespace", +block_display:"Display", +box_width:"\u0428\u0438\u0440\u0438\u043D\u0430", +box_height:"\u0412\u0438\u0441\u043E\u0442\u0430", +box_float:"Float", +box_clear:"Clear", +padding:"Padding", +same:"\u041E\u0434\u043D\u0430\u043A\u043E\u0435 \u0434\u043B\u044F \u0432\u0441\u0456\u0445", +top:"\u0412\u0433\u043E\u0440\u0443", +right:"\u041F\u0440\u0430\u0432\u043E\u0440\u0443\u0447", +bottom:"\u0417\u043D\u0438\u0437\u0443", +left:"\u041B\u0456\u0432\u043E\u0440\u0443\u0447", +margin:"Margin", +style:"\u0421\u0442\u0438\u043B\u044C", +width:"\u0428\u0438\u0440\u0438\u043D\u0430", +height:"\u0412\u0438\u0441\u043E\u0442\u0430", +color:"\u041A\u043E\u043B\u0456\u0440", +list_type:"\u0422\u0438\u043F", +bullet_image:"Bullet image", +position:"\u041F\u043E\u0437\u0438\u0446\u0456\u044F", +positioning_type:"\u0422\u0438\u043F", +visibility:"\u0412\u0438\u0434\u0438\u043C\u0456\u0441\u0442\u044C", +zindex:"Z-index", +overflow:"Overflow", +placement:"Placement", +clip:"Clip" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/table/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/table/langs/uk_dlg.js new file mode 100644 index 0000000..b8e3ad4 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/table/langs/uk_dlg.js @@ -0,0 +1,74 @@ +tinyMCE.addI18n('uk.table_dlg',{ +general_tab:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0435", +advanced_tab:"\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u043E", +general_props:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0456 \u0432\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456", +advanced_props:"\u0420\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u0456 \u0432\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456", +rowtype:"Row in table part", +title:"\u0414\u043E\u0434\u0430\u0432\u0430\u043D\u043D\u044F/\u0417\u043C\u0456\u043D\u0430 \u0442\u0430\u0431\u043B\u0438\u0446\u0456", +width:"\u0428\u0438\u0440\u0438\u043D\u0430", +height:"\u0412\u0438\u0441\u043E\u0442\u0430", +cols:"\u0421\u0442\u043E\u043B\u0431\u0446\u044B", +rows:"\u0421\u0442\u0440\u043E\u043A\u0438", +cellspacing:"\u0412\u0456\u0434\u0441\u0442\u0430\u043D\u044C \u043C\u0456\u0436 \u043A\u043E\u043C\u0456\u0440\u043A\u0430\u043C\u0438", +cellpadding:"\u0412\u0456\u0434\u0441\u0442\u0443\u043F\u0438 \u0443 \u043A\u043E\u043C\u0456\u0440\u043A\u0430\u0445", +border:"\u0413\u0440\u0430\u043D\u0438\u0446\u044F", +align:"\u0412\u0438\u0440\u0456\u0432\u043D\u044E\u0432\u0430\u043D\u043D\u044F", +align_default:"\u0417\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C", +align_left:"\u041F\u043E \u043B\u0456\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E", +align_right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E", +align_middle:"\u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443", +row_title:"\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 \u0440\u044F\u0434\u043A\u0443 \u0442\u0430\u0431\u043B\u0438\u0446\u0456", +cell_title:"\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 \u043A\u043E\u043C\u0456\u0440\u043A\u0438 \u0442\u0430\u0431\u043B\u0438\u0446\u0456", +cell_type:"\u0422\u0438\u043F \u043A\u043E\u043C\u0456\u0440\u043A\u0438", +valign:"\u0412\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435", +align_top:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E", +align_bottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u044C\u043E\u043C\u0443 \u043A\u0440\u0430\u044E", +bordercolor:"\u043A\u043E\u043B\u0456\u0440 \u0433\u0440\u0430\u043D\u0438\u0446\u044B", +bgcolor:"\u043A\u043E\u043B\u0456\u0440 \u0444\u043E\u043D\u0443", +merge_cells_title:"\u041E\u0431'\u0454\u0434\u043D\u0430\u0442\u0438 \u043A\u043E\u043C\u0456\u0440\u043A\u0438", +id:"Id", +style:"\u0421\u0442\u0438\u043B\u044C", +langdir:"\u041D\u0430\u043F\u0440\u044F\u043C \u043C\u043E\u0432\u0438", +langcode:"\u041A\u043E\u0434 \u043C\u043E\u0432\u0438", +mime:"Target MIME-\u0442\u0438\u043F", +ltr:"\u0417\u043B\u0456\u0432\u0430 \u043F\u0440\u0430\u0432\u043E\u0440\u0443\u0447", +rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043B\u0456\u0432\u043E\u0440\u0443\u0447", +bgimage:"\u0424\u043E\u043D\u043E\u0432\u0435 \u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F", +summary:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0435", +td:"\u0414\u0430\u043D\u043D\u0456", +th:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", +cell_cell:"\u041E\u043D\u043E\u0432\u0438\u0442\u0438 \u043F\u043E\u0442\u043E\u0447\u043D\u0443 \u043A\u043E\u043C\u0456\u0440\u043A\u0443", +cell_row:"\u041E\u043D\u043E\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043A\u043E\u043C\u0456\u0440\u043A\u0438 \u0432 \u0440\u044F\u0434\u043A\u0443", +cell_all:"\u041E\u043D\u043E\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043A\u043E\u043C\u0456\u0440\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0456", +row_row:"\u041E\u043D\u043E\u0432\u0438\u0442\u0438 \u043F\u043E\u0442\u043E\u0447\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A", +row_odd:"\u041E\u043D\u043E\u0432\u0438\u0442\u0438 \u043D\u0435\u043F\u0430\u0440\u043D\u0456 \u0440\u044F\u0434\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446", +row_even:"\u041E\u043D\u043E\u0432\u0438\u0442\u0438 \u043F\u0430\u0440\u043D\u0456 \u0440\u044F\u0434\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0456", +row_all:"\u043D\u043E\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u0440\u044F\u0434\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0456", +thead:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0442\u0430\u0431\u043B\u0438\u0446\u0456", +tbody:"\u0422\u0456\u043B\u043E \u0442\u0430\u0431\u043B\u0438\u0446\u0456", +tfoot:"\u041D\u0438\u0436\u043D\u044F \u0447\u0430\u0441\u0442\u0441\u0438\u043D\u0430", +scope:"Scope", +rowgroup:"Row Group", +colgroup:"Col Group", +col_limit:"You've exceeded the maximum number of columns of {$cols}.", +row_limit:"You've exceeded the maximum number of rows of {$rows}.", +cell_limit:"You've exceeded the maximum number of cells of {$cells}.", +missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.", +caption:"Table caption", +frame:"\u0424\u0440\u0435\u0439\u043C", +frame_none:"none", +frame_groups:"groups", +frame_rows:"rows", +frame_cols:"cols", +frame_all:"all", +rules:"Rules", +rules_void:"void", +rules_above:"above", +rules_below:"below", +rules_hsides:"hsides", +rules_lhs:"lhs", +rules_rhs:"rhs", +rules_vsides:"vsides", +rules_box:"box", +rules_border:"border" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/template/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/template/langs/uk_dlg.js new file mode 100644 index 0000000..86cee42 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/template/langs/uk_dlg.js @@ -0,0 +1,15 @@ +tinyMCE.addI18n('uk.template_dlg',{ +title:"\u0428\u0430\u0431\u043B\u043E\u043D\u0438", +label:"\u0428\u0430\u0431\u043B\u043E\u043D", +desc_label:"\u041E\u043F\u0438\u0441", +desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u043D\u0438\u0439 \u043A\u043E\u043D\u0442\u0435\u043D\u0442", +select:"\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D", +preview:"\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u0434", +warning:"\u0423\u0432\u0430\u0433\u0430: \u043E\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0448\u0430\u0431\u043B\u043E\u043D\u0430 \u043D\u0430 \u0456\u043D\u0448\u0438\u0439 \u043C\u043E\u0436\u0435 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0434\u043E \u0432\u0442\u0440\u0430\u0442 \u0434\u0430\u043D\u0438\u0445.", +mdate_format:"%Y-%m-%d %H:%M:%S", +cdate_format:"%Y-%m-%d %H:%M:%S", +months_long:"\u0421\u0456\u0447\u0435\u043D\u044C,\u041B\u044E\u0442\u0438\u0439,\u0411\u0435\u0440\u0435\u0437\u0435\u043D\u044C,\u041A\u0432\u0456\u0442\u0435\u043D\u044C,\u0422\u0440\u0430\u0432\u0435\u043D\u044C,\u0427\u0435\u0440\u0432\u0435\u043D\u044C,\u041B\u0438\u043F\u0435\u043D\u044C,\u0421\u0435\u0440\u043F\u0435\u043D\u044C,\u0412\u0435\u0440\u0435\u0441\u0435\u043D\u044C,\u0416\u043E\u0432\u0442\u0435\u043D\u044C,\u041B\u0438\u0441\u0442\u043E\u043F\u0430\u0434,\u0413\u0440\u0443\u0434\u0435\u043D\u044C", +months_short:"\u0421\u0456\u0447,\u041B\u044E\u0442,\u0411\u0435\u0440,\u041A\u0432\u0456,\u0422\u0440\u0430,\u0427\u0435\u0440,\u041B\u0438\u043F,\u0421\u0435\u0440,\u0412\u0435\u0440,\u0416\u043E\u0432,\u041B\u0438\u0441,\u0413\u0440\u0443", +day_long:"\u041D\u0435\u0434\u0456\u043B\u044F,\u041F\u043E\u043D\u0435\u0434\u0456\u043B\u043E\u043A,\u0412\u0456\u0432\u0442\u043E\u0440\u043E\u043A,\u0421\u0435\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0435\u0440,\u041F'\u044F\u0442\u043D\u0438\u0446\u044F,\u0421\u0443\u0431\u043E\u0442\u0430,\u041D\u0435\u0434\u0456\u043B\u044F", +day_short:"\u041D\u0434,\u041F\u043D,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041F\u0442,\u0421\u0431,\u041D\u0434" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/plugins/xhtmlxtras/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/plugins/xhtmlxtras/langs/uk_dlg.js new file mode 100644 index 0000000..255285a --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/plugins/xhtmlxtras/langs/uk_dlg.js @@ -0,0 +1,32 @@ +tinyMCE.addI18n('uk.xhtmlxtras_dlg',{ +attribute_label_title:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", +attribute_label_id:"ID", +attribute_label_class:"\u041A\u043B\u0430\u0441", +attribute_label_style:"\u0421\u0442\u0438\u043B\u044C", +attribute_label_cite:"\u0426\u0438\u0442\u0430\u0442\u0430", +attribute_label_datetime:"\u0414\u0430\u0442\u0430/\u0427\u0430\u0441", +attribute_label_langdir:"\u041D\u0430\u043F\u0440\u044F\u043C \u0442\u0435\u043A\u0441\u0442\u0443", +attribute_option_ltr:"\u0417\u043B\u0456\u0432\u0430 \u043F\u0440\u0430\u0432\u043E\u0440\u0443\u0447", +attribute_option_rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043B\u0456\u0432\u043E\u0440\u0443\u0447", +attribute_label_langcode:"\u041C\u043E\u0432\u0430", +attribute_label_tabindex:"TabIndex", +attribute_label_accesskey:"AccessKey", +attribute_events_tab:"\u041F\u043E\u0434\u0456\u0457", +attribute_attrib_tab:"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438", +general_tab:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0435", +attrib_tab:"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438", +events_tab:"\u041F\u043E\u0434\u0456\u0457", +fieldset_general_tab:"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0456 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", +fieldset_attrib_tab:"Element Attributes", +fieldset_events_tab:"Element Events", +title_ins_element:"Insertion Element", +title_del_element:"Deletion Element", +title_acronym_element:"Acronym Element", +title_abbr_element:"Abbreviation Element", +title_cite_element:"Citation Element", +remove:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438", +insert_date:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043F\u043E\u0442\u043E\u0447\u043D\u0456 \u0434\u0430\u0442\u0443/\u0447\u0430\u0441", +option_ltr:"\u0417\u043B\u0456\u0432\u0430 \u043F\u0440\u0430\u0432\u043E\u0440\u0443\u0447", +option_rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043B\u0456\u0432\u043E\u0440\u0443\u0447", +attribs_title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043C\u0456\u043D\u0438\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/themes/advanced/langs/uk.js b/code/simple_tinymce_field/javascript/tiny_mce/themes/advanced/langs/uk.js new file mode 100644 index 0000000..680f9b2 --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/themes/advanced/langs/uk.js @@ -0,0 +1,62 @@ +tinyMCE.addI18n('uk.advanced',{ +style_select:"Стилі", +font_size:"Розмір шрифту", +fontdefault:"Шрифт", +block:"Форматувати", +paragraph:"Параграф (p)", +div:"Div", +address:"Адресa", +pre:"Преформатований (pre)", +h1:"Заголовок 1", +h2:"Заголовок 2", +h3:"Заголовок 3", +h4:"Заголовок 4", +h5:"Заголовок 5", +h6:"Заголовок 6", +blockquote:"Цитування (blockquote)", +code:"Програмний текст (code)", +samp:"Зразок коду (samp)", +dt:"Термін (dt)", +dd:"Опис терміну (dd)", +bold_desc:"Жирний (Ctrl+B)", +italic_desc:"Курсив (Ctrl+I)", +underline_desc:"Підкреслений (Ctrl+U)", +striketrough_desc:"Закреслений", +justifyleft_desc:"По лівому крію", +justifycenter_desc:"По центру", +justifyright_desc:"По правому краю", +justifyfull_desc:"По ширині", +bullist_desc:"Невпорядкований список", +numlist_desc:"Впорядкований список", +outdent_desc:"Зменшити відступ", +indent_desc:"Збільшити відступ", +undo_desc:"Відмінити (Ctrl+Z)", +redo_desc:"Застосувати (Ctrl+Y)", +link_desc:"Вставити/редагувати посилання", +unlink_desc:"Розірвати посилання", +image_desc:"Вставити/редагувати зображення", +cleanup_desc:"Cleanup messy code", +code_desc:"Редагувати HTML", +sub_desc:"Верхній індекс", +sup_desc:"Нижній індекс", +hr_desc:"Вставити горизонтальну лінію (hr)", +removeformat_desc:"Прибрати форматування", +custom1_desc:"Вставте сюди опис", +forecolor_desc:"Оберіть колір тексту", +backcolor_desc:"Оберіть колір тла", +charmap_desc:"Вставити довільний символ", +visualaid_desc:"Перемкнути напрямні/невидимі елементи", +anchor_desc:"Вставити/редагувати якір", +cut_desc:"Вирізати", +copy_desc:"Копіювати", +paste_desc:"Вставити", +image_props_desc:"Властивості зображення", +newdocument_desc:"Новий документ", +help_desc:"Допомога", +blockquote_desc:"Цитування", +clipboard_msg:"Копіювання/Вирізання/Вставка не доступні в Mozilla та Firefox.\r\nЧи бажаєте дізнатися більше про цю проблему?", +path:"Шлях", +newdocument:"Ви впевнені, що бажаєте зтерти весь вміст?", +toolbar_focus:"Перейти до іструментів - Alt+Q, Перейти до редактора - Alt-Z, Перейти до елементів шляху - Alt-X", +more_colors:"Ще кольори" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/themes/advanced/langs/uk_dlg.js b/code/simple_tinymce_field/javascript/tiny_mce/themes/advanced/langs/uk_dlg.js new file mode 100644 index 0000000..29d0d5d --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/themes/advanced/langs/uk_dlg.js @@ -0,0 +1,51 @@ +tinyMCE.addI18n('гл.advanced_dlg',{ +about_title:"Про TinyMCE", +about_general:"Про", +about_help:"Допомога", +about_license:"Ліцензія", +about_plugins:"Плагіни", +about_plugin:"Плагін", +about_author:"Автор", +about_version:"Версія", +about_loaded:"Завантажені плагіни", +anchor_title:"Вставити/редагувати якір", +anchor_name:"Ім'я якору", +code_title:"Редактор HTML", +code_wordwrap:"Перенос слів", +colorpicker_title:"Оберіть колір", +colorpicker_picker_tab:"Вибір кольору", +colorpicker_picker_title:"Вибір кольору", +colorpicker_palette_tab:"Палітра", +colorpicker_palette_title:"Кольори палітри", +colorpicker_named_tab:"Кольори з назвами", +colorpicker_named_title:"Кольори з назвами", +colorpicker_color:"Колір:", +colorpicker_name:"Назва:", +charmap_title:"Виберіть символ", +image_title:"Вставити/редагувати зображення", +image_src:"URL зображення", +image_alt:"Опис зображення", +image_list:"Список зображень", +image_border:"Рамка", +image_dimensions:"Розміри", +image_vspace:"Вертикальний відступ", +image_hspace:"Горизонтальний відступ", +image_align:"Вирівнювання", +image_align_baseline:"Baseline", +image_align_top:"Top", +image_align_middle:"Middle", +image_align_bottom:"Bottom", +image_align_texttop:"Text top", +image_align_textbottom:"Text-bottom", +image_align_left:"По лівому краю", +image_align_right:"По правому краю", +link_title:"Вставити/редагувати посилання", +link_url:"URL посилання", +link_target:"Атрибут Target", +link_target_same:"Відкривати послання в тому ж вікні", +link_target_blank:"Відкривати посилання в новому вікні", +link_titlefield:"Атрибут Title", +link_is_email:"URL, що ви ввели, ймовірно е поштовою адресою. Чи бажаєте додати необхідний префікс mailto: ?", +link_is_external:"URL, що ви ввели, ймовірно є посиланням на інший сайт. Чи бажаєте додати необхідний префікс http:// ?", +link_list:"Link list" +}); \ No newline at end of file diff --git a/code/simple_tinymce_field/javascript/tiny_mce/themes/simple/langs/uk.js b/code/simple_tinymce_field/javascript/tiny_mce/themes/simple/langs/uk.js new file mode 100644 index 0000000..289b2af --- /dev/null +++ b/code/simple_tinymce_field/javascript/tiny_mce/themes/simple/langs/uk.js @@ -0,0 +1,11 @@ +tinyMCE.addI18n('uk.simple',{ +bold_desc:"Жирний (Ctrl+B)", +italic_desc:"Курсив (Ctrl+I)", +underline_desc:"Підкреслений (Ctrl+U)", +striketrough_desc:"Закреслений", +bullist_desc:"Список", +numlist_desc:"Нумерований список", +undo_desc:"Відмінити (Ctrl+Z)", +redo_desc:"Застосувати (Ctrl+Y)", +cleanup_desc:"Прибрати безлад" +}); \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..037b848 --- /dev/null +++ b/composer.json @@ -0,0 +1,13 @@ +{ + "name": "silverstripe/dataobject_manager", + "description": "Enhanced dataobjct editing for SilverStripe 2.x.", + "type": "silverstripe-module", + "keywords": ["silverstripe", "cms"], + "authors": [{ + "name": "unclecheese" + }], + "require": { + "silverstripe/framework": "~2.4", + "silverstripe/cms": "~2.4" + } +} diff --git a/css/dataobject_manager.css b/css/dataobject_manager.css index 4e1ae57..b4b0a5d 100644 --- a/css/dataobject_manager.css +++ b/css/dataobject_manager.css @@ -68,6 +68,9 @@ .dataobjectmanager-search .sbox input {background: white url('../images/srch_bg.gif') repeat-x top left;float: left;border: 0;height: 13px; width: 112px;padding: 3px;font: 11px/13px arial;color: #666;} .dataobjectmanager-search .srch_clear {background: white url('../images/srch_r_f2.gif') no-repeat top left;} +.dataobjectmanager-button {float: left; margin-top: 5px; left: 5px; padding: 2px 0px; background-color: #eee; border-color: #CCCCCC #999999 #999999 #CCCCCC; border-style: double; border-width: 2px;} +.dataobjectmanager-button a {padding: 5px 5px; font-size: 1.1em; color: #333; text-decoration: none;} +.dataobjectmanager-button a:hover {background-color: #f4f4f4;} .dataobjectmanager-filter {position:relative;width:30%;float:right;text-align:right;} .dataobjectmanager-filter select {width:100%;max-width:250px;} diff --git a/images/move_icon.jpg b/images/move_icon.jpg index fe91645..01fe452 100644 Binary files a/images/move_icon.jpg and b/images/move_icon.jpg differ diff --git a/javascript/dataobject_manager.js b/javascript/dataobject_manager.js index 21ec09b..33571f5 100644 --- a/javascript/dataobject_manager.js +++ b/javascript/dataobject_manager.js @@ -20,7 +20,9 @@ $.fn.DataObjectManager.init = function(obj) { $('#facebox .content').removeClass().addClass('content'); $('#facebox_overlay').remove(); $('#facebox .loading').remove(); - refresh($container, $container.attr('href')); + $(".DataObjectManager").each(function() { + refresh($(this), $(this).attr('href')); + }); }) }; @@ -170,7 +172,7 @@ $.fn.DataObjectManager.init = function(obj) { // Click function for the LI $container.find('ul:not(.ui-sortable) li.data').unbind('click').click(function(e) { var $this = $(this); - if ($this.parent().hasClass('toggleSelect')) { + if ($this.parent().parent().hasClass('toggleSelect')) { var $input = $this.find('input'), checker = !$input.attr('checked'); //don't ask me wtf is going on here! @@ -293,6 +295,11 @@ $.fn.DataObjectManager.init = function(obj) { $(this).parents('li').toggleClass('selected'); val = ($(this).attr('checked')) ? $checkedList.val() + $(this).val()+"," : $checkedList.val().replace(","+$(this).val()+",",","); $checkedList.attr('value', val); + + + $uCheckedList=$(container_id+'_CheckedList_UnChecked'); + uVal = ($(this).attr('checked')==false ? $uCheckedList.val() + $(this).val()+"," : $uCheckedList.val().replace(","+$(this).val()+",",",")); + $(container_id+'_CheckedList_UnChecked').val(uVal); } e.stopPropagation(); }); @@ -395,6 +402,7 @@ function refresh($div, link, focus) { // Kind of a hack. Pass the list of ids to the next refresh var listValue = ($div.hasClass('RelationDataObjectManager')) ? jQuery('#'+$div.attr('id')+'_CheckedList').val() : false; + var uncheckedListValue = ($div.hasClass('RelationDataObjectManager')) ? jQuery('#'+$div.attr('id')+'_CheckedList_UnChecked').val() : false; // Make a list of all ids so we can detect newly created ones var all = ','; @@ -414,6 +422,7 @@ function refresh($div, link, focus) if(listValue) { jQuery('#'+$div.attr('id')+'_CheckedList').attr('value',listValue); } + // Add newly created items in if checked jQuery(html).find('li.data input:checkbox') .each( @@ -421,7 +430,7 @@ function refresh($div, link, focus) el = jQuery(el); if (el.attr('checked') && jQuery.inArray(el.val(), all - .split(',')) == -1) { + .split(',')) == -1 && jQuery.inArray(el.val(), listValue.split(',')) == -1 && jQuery.inArray(el.val(), uncheckedListValue.split(',')) == -1) { jQuery( '#' + $div.attr('id') + '_CheckedList').val( @@ -432,6 +441,10 @@ function refresh($div, link, focus) + el.val() + ','); } }); + + //Migrate unchecked + jQuery('#'+$div.attr('id')+'_CheckedList_UnChecked').val(uncheckedListValue); + var $container = jQuery('#'+$div.attr('id')); $container.DataObjectManager(); @@ -446,4 +459,4 @@ function refresh($div, link, focus) DragFileItem.applyTo('#Form_EditForm_Files tr td.dragfile'); } }); -} +} \ No newline at end of file diff --git a/lang/de_DE.php b/lang/de_DE.php index 8d86a1c..9f8c050 100644 --- a/lang/de_DE.php +++ b/lang/de_DE.php @@ -11,6 +11,7 @@ $lang['de_DE']['DataObjectManager']['DISPLAYING'] = 'Zeige'; $lang['de_DE']['DataObjectManager']['DRAGDROP'] = 'Drag & Drop neuordnen'; $lang['de_DE']['DataObjectManager']['ERROR'] = 'Fehler'; +$lang['de_DE']['DataObjectManager']['EXPORT'] = '%s exportieren'; $lang['de_DE']['DataObjectManager']['IMPORTFROMFOLDER'] = 'Importieren aus einem existierenden Ordner'; $lang['de_DE']['DataObjectManager']['NOFILTER'] = 'Kein Filter'; $lang['de_DE']['DataObjectManager']['NOITEMSFOUND'] = 'Keine %s gefunden'; diff --git a/lang/en_US.php b/lang/en_US.php index 68ff085..151194d 100644 --- a/lang/en_US.php +++ b/lang/en_US.php @@ -14,6 +14,7 @@ $lang['en_US']['DataObjectManager']['DISPLAYING'] = 'Displaying'; $lang['en_US']['DataObjectManager']['DRAGDROP'] = 'Allow drag & drop reordering'; $lang['en_US']['DataObjectManager']['ERROR'] = 'Error'; +$lang['en_US']['DataObjectManager']['EXPORT'] = 'Export %s'; $lang['en_US']['DataObjectManager']['IMPORTFROMFOLDER'] = 'Import from an existing folder'; $lang['en_US']['DataObjectManager']['NOFILTER'] = 'No filter'; $lang['en_US']['DataObjectManager']['NOITEMSFOUND'] = 'No %s found'; diff --git a/lang/fr_FR.php b/lang/fr_FR.php new file mode 100644 index 0000000..5a04b65 --- /dev/null +++ b/lang/fr_FR.php @@ -0,0 +1,82 @@ + \ No newline at end of file diff --git a/lang/ru_RU.php b/lang/ru_RU.php new file mode 100644 index 0000000..b259cce --- /dev/null +++ b/lang/ru_RU.php @@ -0,0 +1,43 @@ + <% sprintf(_t('DataObjectManager.ADDITEM','Add %s',PR_MEDIUM,'Add [name]'),$AddTitle) %> - + <% else %>

$PluralTitle

<% end_if %> @@ -39,8 +39,8 @@
-
-
-
-
    +
    +
    • <% control Headings %> @@ -100,7 +100,7 @@ checked="checked"<% end_if %> value="<% if OnlyRelated %>$AllRecordsLink<% else %>$OnlyRelatedLink<% end_if %>" />
      <% end_if %> - <% end_if %> + <% end_if %>
      <% if ShowAll %><% else %>$PerPageDropdown<% end_if %>
      @@ -108,5 +108,5 @@
- $ExtraData + $ExtraData
diff --git a/templates/RelationFileDataObjectManager.ss b/templates/RelationFileDataObjectManager.ss index f72cbb4..d43063a 100644 --- a/templates/RelationFileDataObjectManager.ss +++ b/templates/RelationFileDataObjectManager.ss @@ -89,8 +89,8 @@ <% else %>
<% if Top.ShowAll %><% end_if %> -
-
$FileLabel
$MarkingCheckbox
+
+
$FileLabel
$MarkingCheckbox
<% if Can(delete) %>
delete
<% end_if %>
$ExtraData - \ No newline at end of file +