├── .gitignore ├── IiifItemsPlugin.php ├── LICENSE ├── README.md ├── config_form.php ├── controllers ├── AnnotationController.php ├── AnnotatorController.php ├── CollectionsController.php ├── ImportController.php ├── ManifestController.php ├── MiradorController.php └── SearchController.php ├── helpers └── IiifItemsFunctions.php ├── languages ├── en.mo ├── en.po ├── fr.mo ├── fr.po ├── special_strings.php ├── template.pot ├── zh_CN.mo ├── zh_CN.po ├── zh_TW.mo └── zh_TW.po ├── libraries └── IiifItems │ ├── BaseController.php │ ├── BaseIntegration.php │ ├── BaseMigration.php │ ├── Form │ ├── Config.php │ └── Import.php │ ├── IiifUtil.php │ ├── ImageDownloader.php │ ├── Integration │ ├── Annotations.php │ ├── Collections.php │ ├── ExhibitBuilder.php │ ├── Files.php │ ├── Items.php │ ├── Search.php │ ├── SimplePages.php │ └── System.php │ ├── Job │ ├── AddAnnotationThumbnail.php │ ├── AddUuid.php │ ├── Import.php │ └── RemoveSubannotations.php │ ├── Migration │ ├── 0_0_1.php │ ├── 0_0_1_1.php │ ├── 0_0_1_10.php │ ├── 0_0_1_11.php │ ├── 0_0_1_3.php │ ├── 0_0_1_4.php │ ├── 0_0_1_5.php │ ├── 0_0_1_6.php │ ├── 0_0_1_7.php │ ├── 0_0_1_8.php │ ├── 0_0_1_9.php │ ├── 1_0_1_1_Unification.php │ └── 1_0_1_2_View_Options.php │ └── Util │ ├── Annotation.php │ ├── Canvas.php │ ├── Collection.php │ ├── CollectionOptions.php │ ├── Manifest.php │ └── Search.php ├── models ├── IiifItems │ ├── CachedJsonData.php │ └── JobStatus.php └── Table │ └── IiifItems │ ├── CachedJsonData.php │ └── JobStatus.php ├── options.ini.example ├── placeholders ├── iiifitems_audio.jpg ├── iiifitems_file.jpg ├── iiifitems_image.jpg ├── iiifitems_mixed.jpg ├── iiifitems_none.jpg ├── iiifitems_pdf.jpg ├── iiifitems_text.jpg ├── iiifitems_video.jpg └── iiifitems_zip.jpg ├── plugin.ini ├── routes.ini └── views ├── admin ├── annotator │ └── annotate.php ├── collections │ ├── explorer.php │ ├── members.php │ └── tree.php ├── import │ ├── _nav.php │ ├── form.php │ ├── maintenance.php │ └── status.php └── mirador │ └── annotator.php ├── public ├── collections │ ├── explorer.php │ └── tree.php └── mirador │ ├── multiviewer.php │ ├── neatline.php │ └── viewer.php └── shared ├── exhibit_layouts ├── iiifitem │ ├── form.php │ ├── layout.css │ ├── layout.php │ └── layout.png └── iiifmanifest │ ├── form.php │ ├── layout.css │ ├── layout.php │ └── layout.png ├── img └── icon_collection.png └── js ├── iiif-explorer-component ├── css │ └── iiif-explorer-component.css ├── img │ ├── folder-closed.png │ ├── folder-open.png │ └── resource.png └── js │ ├── base-component.bundle.js │ ├── iiif-explorer-component.js │ └── manifold.bundle.js ├── mirador ├── ZeroClipboard.swf ├── css │ └── mirador-combined.css ├── fonts │ ├── FontAwesome.otf │ ├── MaterialIcons-Regular.eot │ ├── MaterialIcons-Regular.ijmap │ ├── MaterialIcons-Regular.svg │ ├── MaterialIcons-Regular.ttf │ ├── MaterialIcons-Regular.woff │ ├── MaterialIcons-Regular.woff2 │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ └── fontawesome-webfont.woff2 ├── images │ ├── border_type_1.png │ ├── border_type_2.png │ ├── border_type_3.png │ ├── border_type_4.png │ ├── border_type_5.png │ ├── debut_dark.png │ ├── jstree │ │ ├── 32px.png │ │ ├── 40px.png │ │ └── throbber.gif │ └── palette_icon.png ├── locales │ ├── ar │ │ └── translation.json │ ├── de │ │ └── translation.json │ ├── en │ │ └── translation.json │ ├── es │ │ └── translation.json │ ├── fr │ │ └── translation.json │ ├── ga │ │ └── translation.json │ ├── ja │ │ └── translation.json │ ├── ko │ │ └── translation.json │ ├── nl │ │ └── translation.json │ ├── zh-CN │ │ └── translation.json │ ├── zh-TW │ │ └── translation.json │ └── zh │ │ └── translation.json ├── mirador.js ├── plugins │ ├── advlist │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── anchor │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── autolink │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── autoresize │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── autosave │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── bbcode │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── charmap │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── code │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── codesample │ │ ├── css │ │ │ └── prism.css │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── colorpicker │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── contextmenu │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── directionality │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── emoticons │ │ ├── img │ │ │ ├── smiley-cool.gif │ │ │ ├── smiley-cry.gif │ │ │ ├── smiley-embarassed.gif │ │ │ ├── smiley-foot-in-mouth.gif │ │ │ ├── smiley-frown.gif │ │ │ ├── smiley-innocent.gif │ │ │ ├── smiley-kiss.gif │ │ │ ├── smiley-laughing.gif │ │ │ ├── smiley-money-mouth.gif │ │ │ ├── smiley-sealed.gif │ │ │ ├── smiley-smile.gif │ │ │ ├── smiley-surprised.gif │ │ │ ├── smiley-tongue-out.gif │ │ │ ├── smiley-undecided.gif │ │ │ ├── smiley-wink.gif │ │ │ └── smiley-yell.gif │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── fullpage │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── fullscreen │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── hr │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── image │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── imagetools │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── importcss │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── insertdatetime │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── layer │ │ ├── index.js │ │ └── plugin.min.js │ ├── legacyoutput │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── link │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── lists │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── media │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── nonbreaking │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── noneditable │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── pagebreak │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── paste │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── preview │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── print │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── save │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── searchreplace │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── spellchecker │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── tabfocus │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── table │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── template │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── textcolor │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── textpattern │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── toc │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── visualblocks │ │ ├── css │ │ │ └── visualblocks.css │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── visualchars │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js │ └── wordcount │ │ ├── index.js │ │ ├── plugin.js │ │ └── plugin.min.js ├── skins │ └── lightgray │ │ ├── content.inline.min.css │ │ ├── content.min.css │ │ ├── fonts │ │ ├── tinymce-small.eot │ │ ├── tinymce-small.svg │ │ ├── tinymce-small.ttf │ │ ├── tinymce-small.woff │ │ ├── tinymce.eot │ │ ├── tinymce.svg │ │ ├── tinymce.ttf │ │ └── tinymce.woff │ │ ├── img │ │ ├── anchor.gif │ │ ├── loader.gif │ │ ├── object.gif │ │ └── trans.gif │ │ ├── skin.ie7.min.css │ │ └── skin.min.css └── themes │ ├── inlite │ ├── index.js │ ├── theme.js │ └── theme.min.js │ └── modern │ ├── index.js │ ├── theme.js │ └── theme.min.js ├── mirador_endpoint.js └── omeka_tinymce.js /.gitignore: -------------------------------------------------------------------------------- 1 | /options.ini 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IIIF Toolkit 2 | 3 | Annotate. Present. Impress. 4 | 5 | IIIF Toolkit by University of Toronto Libraries is a plugin for Omeka Classic 2.3 and up. It integrates Mirador with a built-in annotator, a manifest generator, Simple Pages shortcodes and Exhibit Builder blocks for a rich presentation experience. 6 | 7 | ## System Requirements 8 | 9 | * Omeka Classic 2.3 and up 10 | * IIIF image server pointing to the Omeka installation's files/original directory (optional if you will only be importing content from existing manifests) 11 | 12 | ## Optional Requirements 13 | 14 | IIIF Toolkit can integrate with several popular Omeka rich presentation plugins. At the moment, the following are officially supported: 15 | 16 | * Exhibits Builder 3.x and up 17 | * Simple Pages 3.x and up 18 | * Neatline 2.2.x and up 19 | 20 | ## Installation 21 | 22 | * Clone this repository to the ```plugins``` directory of your Omeka installation. 23 | * Sign in as a super user. 24 | * In the top menu bar, select "Plugins". 25 | * Find IIIF Toolkit in the list of plugins and select "Install". 26 | * If you plan to serve your own images via IIIF, see "Pointing a IIIF image server" for details. 27 | * Select "Save Changes" to continue. 28 | 29 | ### Pointing a IIIF image server 30 | 31 | If you plan to serve your own images via IIIF, you must install a IIIF image server pointed to the Omeka installation's ```files/original``` directory. Please consult the documentation for your preferred IIIF image server for setup instructions. 32 | 33 | After setting up your IIIF image server, you can set the correspondence between file names in ```files/original``` and the image server's URIs. 34 | 35 | * Sign in as a super user. 36 | * In the top menu bar, select "Plugins". 37 | * Find IIIF Toolkit in the list of plugins and select "Configure". 38 | * Enter the server, prefix and identifier portion of a standard IIIF image request URI to your IIIF image server in the "IIIF Prefix" option. The following placeholders can be used to represent file-specific properties in the identifier portion: 39 | * ```{FULLNAME}```: The full name of the file (e.g. ```8997b027303b523ab7c4351c4761e4a0.jpg```) 40 | * ```{FILENAME}```: The name of the file without the extension (e.g. ```8997b027303b523ab7c4351c4761e4a0```) 41 | * ```{EXTENSION}```: The extension of the file, without the leading dot (e.g. ```jpg```) 42 | 43 | For example, if your IIIF image server would serve an image as ```http://iiif.example.org/images/8997b027303b523ab7c4351c4761e4a0/full/full/0/default.jpg```, you can enter ```http://iiif.example.org/images/{FILENAME}``` for IIIF Prefix. 44 | 45 | 46 | ## Upgrading 47 | 48 | Note: It is strongly recommended that you back up or snapshot the Omeka installation before upgrading, in case of unwanted changes or errors. 49 | 50 | * Run ```git pull``` or replace the directory with a download. 51 | * Sign in as a super user. 52 | * In the top menu bar, select "Plugins". 53 | * Find IIIF Toolkit in the list of plugins and select "Upgrade". 54 | 55 | ## License 56 | 57 | IIIF Toolkit is licensed under Apache License 2.0. -------------------------------------------------------------------------------- /config_form.php: -------------------------------------------------------------------------------- 1 | removeDecorator('Form'); 4 | $form->removeDecorator('Zend_Form_Decorator_Form'); 5 | echo $form; 6 | ?> -------------------------------------------------------------------------------- /controllers/AnnotationController.php: -------------------------------------------------------------------------------- 1 | getParam('id'); 17 | $item = get_record_by_id('Item', $id); 18 | if (!$item) { 19 | throw new Omeka_Controller_Exception_404; 20 | } 21 | // Respond with JSON 22 | try { 23 | $jsonData = IiifItems_Util_Annotation::buildList($item); 24 | $this->__respondWithJson($jsonData); 25 | } catch (Exception $e) { 26 | $this->__respondWithJson(array( 27 | 'message' => $e->getMessage() 28 | ), 500); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /controllers/ManifestController.php: -------------------------------------------------------------------------------- 1 | getParam('id'); 13 | $type = $this->getParam('things'); 14 | $class = Inflector::camelize(Inflector::singularize($type)); 15 | $thing = get_record_by_id($class, $id); 16 | if (empty($thing) || !in_array($class, self::$allowedThings)) { 17 | throw new Omeka_Controller_Exception_404; 18 | } 19 | 20 | //Respond with JSON 21 | try { 22 | switch ($class) { 23 | case 'Collection': 24 | $jsonData = IiifItems_Util_Manifest::buildManifest($thing, is_admin_theme()); 25 | IiifItems_Util_Search::insertSearchApiFor($thing, $jsonData); 26 | break; 27 | case 'Item': 28 | $jsonData = IiifItems_Util_Manifest::buildItemManifest($thing); 29 | if ($thing->item_type_id != get_option('iiifitems_annotation_item_type')) { 30 | IiifItems_Util_Search::insertSearchApiFor($thing, $jsonData); 31 | } 32 | break; 33 | case 'File': $jsonData = IiifItems_Util_Manifest::buildFileManifest($thing); break; 34 | case 'ExhibitPageBlock': $jsonData = IiifItems_Util_Manifest::buildExhibitPageBlockManifest($thing); break; 35 | } 36 | $this->__respondWithJson($jsonData); 37 | } catch (Exception $e) { 38 | $this->__respondWithJson(array( 39 | 'message' => $e->getMessage() 40 | ), 500); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /controllers/MiradorController.php: -------------------------------------------------------------------------------- 1 | getParam('things'); 18 | $class = Inflector::camelize(Inflector::singularize($type)); 19 | if (!in_array($class, self::$allowedThings)) { 20 | throw new Omeka_Controller_Exception_404; 21 | } 22 | $this->__passModelToView(); 23 | } 24 | 25 | /** 26 | * Renders a Mirador viewer featuring multiple items and/or manifests. 27 | * Pass GET parameter items=(comma separated list of item IDs) to embed items. 28 | * Pass GET parameter u[]=(URL) to embed manifests 29 | * 30 | * GET iiif-items/multiviewer 31 | */ 32 | public function multiviewerAction() { 33 | if ($this->getParam('items')) { 34 | $this->view->item_ids = explode(',', $this->getParam('items')); 35 | } 36 | $this->view->manifests = $this->getParam('u'); 37 | $this->view->collections = $this->getParam('c'); 38 | $this->view->popup = $this->getParam('p'); 39 | } 40 | 41 | /** 42 | * Renders a minimal Mirador viewer for embedding in Neatline. 43 | * 44 | * GET iiif-items/nlmirador/:id 45 | */ 46 | public function neatlineAction() { 47 | $this->view->itemId = $this->getParam('id'); 48 | } 49 | 50 | /** 51 | * Renders an annotation-enabled Mirador viewer for the given manifest-type collection or non-annotation item. 52 | * GET: :things/:id/annotator 53 | * 54 | * @throws Omeka_Controller_Exception_404 55 | */ 56 | public function annotatorAction() { 57 | // Check existence 58 | $id = $this->getParam('id'); 59 | $type = $this->getParam('things'); 60 | $class = Inflector::titleize(Inflector::singularize($type)); 61 | $thing = get_record_by_id($class, $id); 62 | if (empty($thing) || !in_array($class, self::$allowedThings)) { 63 | throw new Omeka_Controller_Exception_404; 64 | } 65 | // Collection 66 | if ($class == 'Collection') { 67 | // Reject Collection-type items 68 | if (raw_iiif_metadata($thing, 'iiifitems_collection_type_element') == 'Collection') { 69 | throw new Omeka_Controller_Exception_404; 70 | } 71 | $this->__passModelToView(); 72 | return; 73 | } 74 | // Item 75 | elseif ($class == 'Item') { 76 | // Reject Annotation-type items 77 | if ($thing->item_type_id == get_option('iiifitems_annotation_item_type')) { 78 | throw new Omeka_Controller_Exception_404; 79 | } 80 | $this->__passModelToView(); 81 | return; 82 | } 83 | // Reject all others 84 | $this->__respondWithJson(null, 400); 85 | } 86 | } 87 | ?> 88 | -------------------------------------------------------------------------------- /controllers/SearchController.php: -------------------------------------------------------------------------------- 1 | getParam('id'); 13 | $type = $this->getParam('things'); 14 | $class = Inflector::titleize(Inflector::singularize($type)); 15 | $thing = get_record_by_id($class, $id); 16 | if (empty($thing) || !in_array($class, self::$allowedThings)) { 17 | throw new Omeka_Controller_Exception_404; 18 | } 19 | 20 | try { 21 | $results = IiifItems_Util_Search::findResultsFor($thing, $this->getParam('q'), public_full_url() . '?' . http_build_query($_GET)); 22 | $this->__respondWithJson($results); 23 | } catch (Exception $ex) { 24 | $this->__respondWithJson(null, 400); 25 | } 26 | return; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /languages/en.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/languages/en.mo -------------------------------------------------------------------------------- /languages/fr.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/languages/fr.mo -------------------------------------------------------------------------------- /languages/special_strings.php: -------------------------------------------------------------------------------- 1 | isActive()) { 46 | $this->initialize(); 47 | $className = get_called_class(); 48 | foreach ($this->_hooks as $hook) { 49 | add_plugin_hook($hook, array($this, 'hook' . Inflector::camelize($hook))); 50 | } 51 | foreach ($this->_filters as $filter) { 52 | add_filter($filter, array($this, 'filter' . Inflector::camelize($filter))); 53 | } 54 | } 55 | } 56 | 57 | /** 58 | * Echo an element-element text pair on admin-facing pages 59 | * 60 | * @param string $label The label for the element 61 | * @param string $id The HTML id attribute 62 | * @param string $entry The text for the element 63 | * @param boolean $html Whether the text is already HTML 64 | */ 65 | protected function _adminElementTextPair($label, $id, $entry, $html) { 66 | echo '
' . ($html ? $entry : ('

'. html_escape($entry) .'

')) . '
'; 67 | } 68 | 69 | /** 70 | * Echo an element-element text pair on public-facing pages 71 | * 72 | * @param string $label The label for the element 73 | * @param string $id The HTML id attribute 74 | * @param string $entry The text for the element 75 | * @param boolean $html Whether the text is already HTML 76 | */ 77 | protected function _publicElementTextPair($label, $id, $entry, $html) { 78 | echo '

' . html_escape($label) . '

' . ($html ? $entry : html_escape($entry)) . '
'; 79 | } 80 | 81 | /** 82 | * Returns options from a config file. 83 | * 84 | * @param string $section The section fo the config file to load (e.g. "system") 85 | * @return Zend_config_ini|false 86 | */ 87 | protected function _config($section = null) { 88 | $file = IIIF_ITEMS_DIRECTORY.'/options.ini'; 89 | if(file_exists($file)) { 90 | return new Zend_Config_ini($file, $section); 91 | } 92 | return false; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /libraries/IiifItems/BaseMigration.php: -------------------------------------------------------------------------------- 1 | _db = get_db(); 23 | } 24 | 25 | /** 26 | * Adds a table to the database. 27 | * 28 | * @param string $name Name of the table, without the Omeka prefix 29 | * @param string $schema The schema part of the table, in SQL 30 | */ 31 | protected function _createTable($name, $schema) { 32 | $this->_db->query("CREATE TABLE IF NOT EXISTS `{$this->_db->prefix}{$name}` ({$schema}) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;"); 33 | } 34 | 35 | /** 36 | * Copies an existing table to a backup. 37 | * 38 | * @param string $name Name of the table, without the Omeka prefix 39 | */ 40 | protected function _backupTable($name) { 41 | $originalTableName = $this->_db->prefix . $name; 42 | $backupTableName = $originalTableName . '_backup_' . $this->getVersionSlug(); 43 | $this->_db->query("CREATE TABLE `{$backupTableName}` LIKE `{$originalTableName}`;"); 44 | $this->_db->query("INSERT `{$backupTableName}` SELECT * FROM `{$originalTableName}`;"); 45 | } 46 | 47 | /** 48 | * Returns the version of this plugin, with dots replaced by underscores. 49 | * 50 | * @return string 51 | */ 52 | protected function _getVersionSlug() { 53 | return preg_replace('/[^\da-z]/i', '_', $this->version); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /libraries/IiifItems/Form/Config.php: -------------------------------------------------------------------------------- 1 | applyOmekaStyles(); 16 | $this->setAutoApplyOmekaStyles(false); 17 | // Enable automated HTTP-IIIF Bridge 18 | $this->addElement('text', 'iiifitems_bridge_prefix', array( 19 | 'label' => __('IIIF Prefix'), 20 | 'description' => __('The URL root of the HTTP-resolved IIIF server referencing this Omeka installation. Use {FILENAME} for a file name without the extension, {EXTENSION} for the file extension alone and {FULLNAME} for a file name with the extension.'), 21 | 'value' => get_option('iiifitems_bridge_prefix'), 22 | )); 23 | // Mirador 24 | $this->addElement('text', 'iiifitems_mirador_path', array( 25 | 'label' => __('Mirador Path'), 26 | 'description' => __('URL to the directory holding the main mirador.js and supporting files.'), 27 | 'value' => get_option('iiifitems_mirador_path'), 28 | )); 29 | $this->addElement('text', 'iiifitems_mirador_js', array( 30 | 'label' => __('Mirador JS file'), 31 | 'description' => __('Path to the main Mirador JS file, relative to the specified Mirador Path.'), 32 | 'value' => get_option('iiifitems_mirador_js'), 33 | )); 34 | $this->addElement('text', 'iiifitems_mirador_css', array( 35 | 'label' => __('Mirador CSS file'), 36 | 'description' => __('Path to the main Mirador CSS file. Can be absolute (starting with http:// or https://) or relative to the specified Mirador Path.'), 37 | 'value' => get_option('iiifitems_mirador_css'), 38 | )); 39 | // Display/hide 40 | $this->addElement('checkbox', 'iiifitems_show_mirador_collections', array( 41 | 'label' => __('Show Mirador on IIIF Collections?'), 42 | 'description' => __('Whether to embed Mirador on IIIF Collections.'), 43 | 'value' => get_option('iiifitems_show_mirador_collections'), 44 | )); 45 | $this->addElement('checkbox', 'iiifitems_show_mirador_manifests', array( 46 | 'label' => __('Show Mirador on IIIF Manifests?'), 47 | 'description' => __('Whether to embed Mirador on IIIF Manifests.'), 48 | 'value' => get_option('iiifitems_show_mirador_manifests'), 49 | )); 50 | $this->addElement('checkbox', 'iiifitems_show_mirador_items', array( 51 | 'label' => __('Show Mirador on items?'), 52 | 'description' => __('Whether to embed Mirador on items.'), 53 | 'value' => get_option('iiifitems_show_mirador_items'), 54 | )); 55 | $this->addElement('checkbox', 'iiifitems_show_mirador_files', array( 56 | 'label' => __('Show Mirador on files?'), 57 | 'description' => __('Whether to embed Mirador on files. (Admin-side only)'), 58 | 'value' => get_option('iiifitems_show_mirador_files'), 59 | )); 60 | $this->addElement('checkbox', 'iiifitems_show_public_catalogue', array( 61 | 'label' => __('Display public catalogue?'), 62 | 'description' => __('Whether to display the "Browse Catalogue" link in the public navigation menu.'), 63 | 'value' => get_option('iiifitems_show_public_catalogue'), 64 | )); 65 | } 66 | } -------------------------------------------------------------------------------- /libraries/IiifItems/Integration/ExhibitBuilder.php: -------------------------------------------------------------------------------- 1 | __('IIIF Items'), 22 | 'description' => __('Embed a Mirador viewer for one or more items'), 23 | ); 24 | $layouts['iiifmanifest'] = array( 25 | 'name' => __('IIIF Manifests'), 26 | 'description' => __('Embed a Mirador viewer for one or more manifests'), 27 | ); 28 | return $layouts; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /libraries/IiifItems/Integration/Search.php: -------------------------------------------------------------------------------- 1 | element_id, $doNotSearchElementIds)) { 34 | $newElementTexts[] = $elementText; 35 | } 36 | } 37 | return $newElementTexts; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /libraries/IiifItems/Job/AddUuid.php: -------------------------------------------------------------------------------- 1 | createJobStatus( 17 | $this->countRecords('Collection')+$this->countRecords('Item') 18 | ); 19 | $this->addUuidToType('Collection', $jobStatus); 20 | $this->addUuidToType('Item', $jobStatus); 21 | $jobStatus->status = 'Completed'; 22 | $jobStatus->progress = $jobStatus->total; 23 | $jobStatus->modified = date('Y-m-d H:i:s'); 24 | $jobStatus->save(); 25 | } catch (Exception $e) { 26 | debug($e->getTraceAsString()); 27 | } 28 | } 29 | 30 | /** 31 | * Return the total number of Records under the given type. 32 | * 33 | * @param string $type Name of the type. 34 | * @return integer 35 | */ 36 | private function countRecords($type) { 37 | return get_db()->getTable($type)->count(); 38 | } 39 | 40 | /** 41 | * Create a new IiifItems_JobStatus for this kind of job. 42 | * 43 | * @param integer $total 44 | * @return IiifItems_JobStatus 45 | */ 46 | private function createJobStatus($total=0) { 47 | $jobStatusId = $this->_db->insert('IiifItems_JobStatus', array( 48 | 'source' => __('Adding UUID to collections and items'), 49 | 'dones' => 0, 50 | 'skips' => 0, 51 | 'fails' => 0, 52 | 'status' => 'In Progress', 53 | 'progress' => 0, 54 | 'total' => $total, 55 | 'added' => date('Y-m-d H:i:s'), 56 | )); 57 | return $this->_db->getTable('IiifItems_JobStatus')->find($jobStatusId); 58 | } 59 | 60 | /** 61 | * Add UUIDs to all records of the given type. 62 | * 63 | * @param string $type Name of the type. "File", "Item" and "Collection" are expected. 64 | * @param IiifItems_JobStatus $jobStatus 65 | */ 66 | private function addUuidToType($type, $jobStatus) { 67 | // For each batch of 100 68 | $page = 1; 69 | $table = get_db()->getTable($type); 70 | debug($type); 71 | $element = get_db()->getTable('Element')->findByElementSetNameAndElementName('IIIF ' . $type . ' Metadata', 'UUID'); 72 | while ($batch = $table->findBy(array(), $this->batchSize, $page++)) { 73 | // For each record in the batch 74 | foreach ($batch as $record) { 75 | // If its UUID metadata field is empty 76 | if (!metadata($record, array('IIIF ' . $type . ' Metadata', 'UUID'), array('no_filter' => true, 'no_escape' => true))) { 77 | // Generate a UUID 78 | $uuid = generate_uuid(); 79 | // Set its UUID metadata field to the generated UUID 80 | $record->addTextForElement($element, $uuid); 81 | // Save it 82 | $record->save(); 83 | // Add one done to job status 84 | $jobStatus->dones++; 85 | 86 | } else { 87 | $jobStatus->skips++; 88 | } 89 | // Update job status 90 | $jobStatus->progress++; 91 | $jobStatus->modified = date('Y-m-d H:i:s'); 92 | $jobStatus->save(); 93 | } 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /libraries/IiifItems/Job/RemoveSubannotations.php: -------------------------------------------------------------------------------- 1 | _item_uuid = $options['item_uuid']; 18 | } 19 | 20 | /** 21 | * Main runnable method. 22 | */ 23 | public function perform() { 24 | try { 25 | $onCanvasMatches = get_db()->getTable('ElementText')->findBySql("element_texts.record_type = ? AND element_texts.element_id = ? AND element_texts.text = ?", array( 26 | 'Item', 27 | get_option('iiifitems_annotation_on_element'), 28 | $this->_item_uuid, 29 | )); 30 | $annoItems = array(); 31 | foreach ($onCanvasMatches as $onCanvasMatch) { 32 | $annoItems[] = get_record_by_id('Item', $onCanvasMatch->record_id); 33 | } 34 | foreach ($annoItems as $annoItem) { 35 | $annoItem->delete(); 36 | } 37 | } catch (Exception $e) { 38 | debug(__("Error in RemoveSubannotations job: %s", $e->getTraceAsString())); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1.php: -------------------------------------------------------------------------------- 1 | _createTable('iiif_items_job_statuses', " 16 | `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, 17 | `source` varchar(255) NOT NULL, 18 | `dones` int(11) NOT NULL, 19 | `skips` int(11) NOT NULL, 20 | `fails` int(11) NOT NULL, 21 | `status` varchar(32) NOT NULL, 22 | `progress` int(11) NOT NULL DEFAULT 0, 23 | `total` int(11) NOT NULL DEFAULT 100, 24 | `added` timestamp DEFAULT '2016-11-01 00:00:00', 25 | `modified` timestamp DEFAULT NOW() ON UPDATE NOW() 26 | "); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_1.php: -------------------------------------------------------------------------------- 1 | 'IIIF File Metadata', 18 | 'description' => '', 19 | 'record_type' => 'File' 20 | ), array( 21 | array('name' => 'Original @id', 'description' => ''), 22 | array('name' => 'JSON Data', 'description' => ''), 23 | )); 24 | set_option('iiifitems_file_element_set', $file_metadata->id); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_10.php: -------------------------------------------------------------------------------- 1 | getTable('Element')->find($unwantedParentElementId); 17 | $unwantedParentElement->delete(); 18 | delete_option('iiifitems_item_parent_element'); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_11.php: -------------------------------------------------------------------------------- 1 | \"'; 18 | $quote = '\\\"'; 19 | $newQuote = '\"'; 20 | $selectorElementId = get_option('iiifitems_annotation_selector_element'); 21 | $db->query("UPDATE `{$db->prefix}element_texts` SET `text` = REPLACE(REPLACE(REPLACE(`text`, '{$quoteOpen}', '<'), '{$quoteClose}', '>'), '{$quote}', '{$newQuote}') WHERE `element_id` = {$selectorElementId}"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_3.php: -------------------------------------------------------------------------------- 1 | getElementId('IIIF File Metadata', 'Original @id')); 16 | set_option('iiifitems_file_json_element', $this->getElementId('IIIF File Metadata', 'JSON Data')); 17 | set_option('iiifitems_item_display_element', $this->getElementId('IIIF Item Metadata', 'Display as IIIF?')); 18 | set_option('iiifitems_item_atid_element', $this->getElementId('IIIF Item Metadata', 'Original @id')); 19 | set_option('iiifitems_item_parent_element', $this->getElementId('IIIF Item Metadata', 'Parent Collection')); 20 | set_option('iiifitems_item_json_element', $this->getElementId('IIIF Item Metadata', 'JSON Data')); 21 | set_option('iiifitems_collection_atid_element', $this->getElementId('IIIF Collection Metadata', 'Original @id')); 22 | set_option('iiifitems_collection_type_element', $this->getElementId('IIIF Collection Metadata', 'IIIF Type')); 23 | set_option('iiifitems_collection_parent_element', $this->getElementId('IIIF Collection Metadata', 'Parent Collection')); 24 | set_option('iiifitems_collection_json_element', $this->getElementId('IIIF Collection Metadata', 'JSON Data')); 25 | set_option('iiifitems_annotation_on_element', $this->getElementId('Item Type Metadata', 'On Canvas')); 26 | set_option('iiifitems_annotation_selector_element', $this->getElementId('Item Type Metadata', 'Selector')); 27 | } 28 | 29 | /** 30 | * Helper for finding the element ID of an ElementSet-Element combination. 31 | * @param string $elementSetName Name of the element set 32 | * @param string $elementName Name of the element 33 | * @return integer 34 | */ 35 | private function getElementId($elementSetName, $elementName) { 36 | return $this->_db->getTable('Element')->findByElementSetNameAndElementName($elementSetName, $elementName)->id; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_4.php: -------------------------------------------------------------------------------- 1 | _createTable('iiif_items_cached_json_data', " 16 | `id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT, 17 | `record_id` int(11) NOT NULL, 18 | `record_type` varchar(50) NOT NULL, 19 | `url` varchar(255) NOT NULL, 20 | `data` mediumtext NOT NULL, 21 | `generated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 22 | "); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_5.php: -------------------------------------------------------------------------------- 1 | _db->getTable('Element')->findBy(array('name' => 'Text')); 17 | if ($textElement) { 18 | $textElement = $textElement[0]; 19 | $textElementId = $textElement->id; 20 | } else { 21 | $textElementId = $this->_db->insert('Element', array( 22 | 'element_set_id' => $this->_db->getTable('ElementSet')->findBy(array('name' => 'Item Type Metadata'), 1)[0]->id, 23 | 'name' => 'Text', 24 | 'description' => 'Any textual data included in the document', 25 | )); 26 | } 27 | 28 | // Add element to annotation item type 29 | $itemType = $this->_db->getTable('ItemType')->find(get_option('iiifitems_annotation_item_type')); 30 | $itemType->addElementById($textElementId); 31 | $itemType->save(); 32 | set_option('iiifitems_annotation_text_element', $textElementId); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_6.php: -------------------------------------------------------------------------------- 1 | addElements(array('UUID')); 19 | $collectionElementSet->save(); 20 | } catch (Omeka_Validate_Exception $ex) { 21 | debug("Passed UUID element for collections."); 22 | } 23 | $itemElementSet = get_record_by_id('ElementSet', get_option('iiifitems_item_element_set')); 24 | try { 25 | $itemElementSet->addElements(array('UUID')); 26 | $itemElementSet->save(); 27 | } catch (Omeka_Validate_Exception $ex) { 28 | debug("Passed UUID element for items."); 29 | } 30 | // Set quick-access options 31 | $tableElement = get_db()->getTable('Element'); 32 | $uuidCollectionElement = $tableElement->findByElementSetNameAndElementName($collectionElementSet->name, 'UUID'); 33 | set_option('iiifitems_collection_uuid_element', $uuidCollectionElement->id); 34 | $uuidItemElement = $tableElement->findByElementSetNameAndElementName($itemElementSet->name, 'UUID'); 35 | set_option('iiifitems_item_uuid_element', $uuidItemElement->id); 36 | 37 | // Start UUID job 38 | Zend_Registry::get('bootstrap')->getResource('jobs')->sendLongRunning('IiifItems_Job_AddUuid', array()); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_7.php: -------------------------------------------------------------------------------- 1 | getTempDir() . DIRECTORY_SEPARATOR . $fname); 21 | $storage->store($storage->getTempDir() . DIRECTORY_SEPARATOR . $fname, $storage->getPathByType($fname, 'original')); 22 | } catch (Exception $e) {} 23 | } 24 | } 25 | 26 | /** 27 | * Uninstall the placeholder images. 28 | */ 29 | public function uninstall() { 30 | // Uninstall placeholder images 31 | $storage = Zend_Registry::get('storage'); 32 | $placeholderDir = join(DIRECTORY_SEPARATOR, array(__DIR__, '..', '..', '..', 'placeholders')); 33 | foreach (array_diff(scandir($placeholderDir), array('.', '..')) as $fname) { 34 | try { 35 | $storage->delete($storage->getPathByType($fname, 'original')); 36 | } catch (Exception $e) {} 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_8.php: -------------------------------------------------------------------------------- 1 | _db->getTable('Element')->findBy(array('name' => 'Annotated Region')); 17 | if ($xywhElement) { 18 | $xywhElement = $xywhElement[0]; 19 | $xywhElementId = $xywhElement->id; 20 | } else { 21 | $xywhElementId = $this->_db->insert('Element', array( 22 | 'name' => 'Annotated Region', 23 | 'description' => 'The rectangular region of the annotation, in xywh format.', 24 | 'element_set_id' => $this->_db->getTable('ElementSet')->findBy(array('name' => 'Item Type Metadata'), 1)[0]->id, 25 | )); 26 | } 27 | // Add element to annotation item type 28 | $itemType = $this->_db->getTable('ItemType')->find(get_option('iiifitems_annotation_item_type')); 29 | $itemType->addElementById($xywhElementId); 30 | $itemType->save(); 31 | set_option('iiifitems_annotation_xywh_element', $xywhElementId); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/0_0_1_9.php: -------------------------------------------------------------------------------- 1 | getTable('ElementSet'); 17 | if (empty($collection_metadata = $elementSetTable->findByName('IIIF Collection Metadata'))) { 18 | // Add Collection type metadata elements 19 | $collection_metadata = insert_element_set_failsafe(array( 20 | 'name' => 'IIIF Collection Metadata', 21 | 'description' => '', 22 | 'record_type' => 'Collection' 23 | ), array( 24 | array('name' => 'Original @id', 'description' => ''), 25 | array('name' => 'IIIF Type', 'description' => ''), 26 | array('name' => 'Parent Collection', 'description' => ''), 27 | array('name' => 'JSON Data', 'description' => ''), 28 | array('name' => 'UUID', 'description' => ''), 29 | )); 30 | } 31 | $elementTable = $db->getTable('Element'); 32 | if (empty($elementTable->findByElementSetNameAndElementName('IIIF Collection Metadata', 'Parent Collection'))) { 33 | $parentElement = new Element(); 34 | $parentElement->element_set_id = $collection_metadata->id; 35 | $parentElement->name = 'Parent Collection'; 36 | $parentElement->save(); 37 | } 38 | set_option('iiifitems_collection_element_set', $collection_metadata->id); 39 | set_option('iiifitems_collection_atid_element', $elementTable->findByElementSetNameAndElementName('IIIF Collection Metadata', 'Original @id')->id); 40 | set_option('iiifitems_collection_type_element', $elementTable->findByElementSetNameAndElementName('IIIF Collection Metadata', 'IIIF Type')->id); 41 | set_option('iiifitems_collection_parent_element', $elementTable->findByElementSetNameAndElementName('IIIF Collection Metadata', 'Parent Collection')->id); 42 | set_option('iiifitems_collection_json_element', $elementTable->findByElementSetNameAndElementName('IIIF Collection Metadata', 'JSON Data')->id); 43 | set_option('iiifitems_collection_uuid_element', $elementTable->findByElementSetNameAndElementName('IIIF Collection Metadata', 'UUID')->id); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /libraries/IiifItems/Migration/1_0_1_2_View_Options.php: -------------------------------------------------------------------------------- 1 | data, true); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /models/IiifItems/JobStatus.php: -------------------------------------------------------------------------------- 1 | __('Annotating: "%s"', $title), 5 | )); 6 | ?> 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /views/admin/collections/explorer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <?php echo metadata($collection, array('Dublin Core', 'Title')) ?> 5 | 6 | 7 | 8 | 9 | '; 11 | echo ''; 12 | echo ''; 13 | echo ''; 14 | ?> 15 | 16 | 17 |
18 | 56 | 57 | -------------------------------------------------------------------------------- /views/admin/import/_nav.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin/import/form.php: -------------------------------------------------------------------------------- 1 | __('IIIF Toolkit'), 4 | )); 5 | include __DIR__ . '/_nav.php'; 6 | ?> 7 | 8 |
9 | 10 |

11 | form; ?> 12 | 43 |
44 | 47 | -------------------------------------------------------------------------------- /views/admin/import/maintenance.php: -------------------------------------------------------------------------------- 1 | __('IIIF Toolkit'), 4 | )); 5 | include __DIR__ . '/_nav.php'; 6 | echo flash(); 7 | ?> 8 | 9 |
10 |

11 |
12 |
13 | 14 |
15 |
16 |

17 |

18 | 19 | 20 | 21 |

22 |
23 |
24 |
25 | 26 | -------------------------------------------------------------------------------- /views/public/collections/explorer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <?php echo metadata($collection, array('Dublin Core', 'Title')) ?> 5 | 6 | 7 | 8 | 9 | '; 11 | echo ''; 12 | echo ''; 13 | echo ''; 14 | ?> 15 | 16 | 17 |
Loading...
18 | 56 | 57 | -------------------------------------------------------------------------------- /views/public/mirador/neatline.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 17 | 18 | 19 |
20 | 21 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /views/shared/exhibit_layouts/iiifitem/form.php: -------------------------------------------------------------------------------- 1 | getFormStem(); 3 | $options = $block->getOptions(); 4 | ?> 5 |
6 |

7 | exhibitFormAttachments($block); ?> 8 |

9 | exhibitFormText($block); ?> 10 |
-------------------------------------------------------------------------------- /views/shared/exhibit_layouts/iiifitem/layout.css: -------------------------------------------------------------------------------- 1 | .exhibit-block.layout-iiifitem iframe { 2 | width: 100%; 3 | height: 600px; 4 | } 5 | -------------------------------------------------------------------------------- /views/shared/exhibit_layouts/iiifitem/layout.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |

6 |
7 | 8 | 9 | -------------------------------------------------------------------------------- /views/shared/exhibit_layouts/iiifitem/layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/exhibit_layouts/iiifitem/layout.png -------------------------------------------------------------------------------- /views/shared/exhibit_layouts/iiifmanifest/form.php: -------------------------------------------------------------------------------- 1 | getFormStem(); 3 | $options = $block->getOptions(); 4 | $template = '
' 5 | . $this->formSelect("{$formStem}[options][types][]", 'Manifest', array('style' => 'width: 18%; margin-right: 2%; height: 30px; margin-bottom: 10px;', 'multiple' => false), array('Manifest' => 'Manifest', 'Collection' => 'Collection')) 6 | . $this->formText("{$formStem}[options][manifests][]", '', array('style' => 'width:80%;', 'placeholder' => 'URL')) 7 | . '' 8 | . '' 9 | . '
'; 10 | ?> 11 |
12 | 49 | 52 | $manifest) { 60 | echo '
'; 61 | echo $this->formSelect("{$formStem}[options][types][]", @$options['types'][$i], array('style' => 'width: 18%; margin-right: 2%; height: 30px; margin-bottom: 10px;', 'multiple' => false), array('Manifest' => 'Manifest', 'Collection' => 'Collection')); 62 | echo $this->formText("{$formStem}[options][manifests][]", $manifest, array('style' => 'width:80%;', 'placeholder' => 'URL')); 63 | echo ''; 64 | echo ''; 65 | echo '
'; 66 | } 67 | ?> 68 |
-------------------------------------------------------------------------------- /views/shared/exhibit_layouts/iiifmanifest/layout.css: -------------------------------------------------------------------------------- 1 | .exhibit-block.layout-iiifmanifest iframe { 2 | width: 100%; 3 | height: 600px; 4 | } -------------------------------------------------------------------------------- /views/shared/exhibit_layouts/iiifmanifest/layout.php: -------------------------------------------------------------------------------- 1 |
2 | array(), 5 | 'c' => array(), 6 | 'p' => !empty($options['types']) && $options['types'][0] == 'Collection', 7 | ); 8 | foreach ($options['manifests'] as $i => $url) { 9 | if ($options['types'][$i] == 'Collection') { 10 | $params['c'][] = $url; 11 | } else { 12 | $params['u'][] = $url; 13 | } 14 | } 15 | ?> 16 | 17 |
18 | -------------------------------------------------------------------------------- /views/shared/exhibit_layouts/iiifmanifest/layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/exhibit_layouts/iiifmanifest/layout.png -------------------------------------------------------------------------------- /views/shared/img/icon_collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/img/icon_collection.png -------------------------------------------------------------------------------- /views/shared/js/iiif-explorer-component/css/iiif-explorer-component.css: -------------------------------------------------------------------------------- 1 | .iiif-explorer-component { 2 | line-height: 1.2; 3 | } 4 | .iiif-explorer-component .explorer-link { 5 | color: inherit; 6 | text-decoration: none; 7 | } 8 | .iiif-explorer-component .explorer-link:hover { 9 | text-decoration: underline; 10 | } 11 | .iiif-explorer-component .explorer-breadcrumb, 12 | .iiif-explorer-component .explorer-folder, 13 | .iiif-explorer-component .explorer-resource { 14 | padding-left: 20px; 15 | background-position: 1px center; 16 | background-repeat: no-repeat; 17 | } 18 | .iiif-explorer-component .explorer-breadcrumb { 19 | background-image: url('../img/folder-open.png'); 20 | background-position: 0 center; 21 | } 22 | .iiif-explorer-component .explorer-folder { 23 | background-image: url('../img/folder-closed.png'); 24 | } 25 | .iiif-explorer-component .explorer-resource { 26 | background-image: url('../img/resource.png'); 27 | } 28 | .iiif-explorer-component .selected { 29 | background-color: #000; 30 | color: #fff; 31 | } 32 | -------------------------------------------------------------------------------- /views/shared/js/iiif-explorer-component/img/folder-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/iiif-explorer-component/img/folder-closed.png -------------------------------------------------------------------------------- /views/shared/js/iiif-explorer-component/img/folder-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/iiif-explorer-component/img/folder-open.png -------------------------------------------------------------------------------- /views/shared/js/iiif-explorer-component/img/resource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/iiif-explorer-component/img/resource.png -------------------------------------------------------------------------------- /views/shared/js/mirador/ZeroClipboard.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/ZeroClipboard.swf -------------------------------------------------------------------------------- /views/shared/js/mirador/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /views/shared/js/mirador/fonts/MaterialIcons-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/fonts/MaterialIcons-Regular.eot -------------------------------------------------------------------------------- /views/shared/js/mirador/fonts/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/fonts/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /views/shared/js/mirador/fonts/MaterialIcons-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/fonts/MaterialIcons-Regular.woff -------------------------------------------------------------------------------- /views/shared/js/mirador/fonts/MaterialIcons-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/fonts/MaterialIcons-Regular.woff2 -------------------------------------------------------------------------------- /views/shared/js/mirador/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /views/shared/js/mirador/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /views/shared/js/mirador/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /views/shared/js/mirador/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /views/shared/js/mirador/images/border_type_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/border_type_1.png -------------------------------------------------------------------------------- /views/shared/js/mirador/images/border_type_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/border_type_2.png -------------------------------------------------------------------------------- /views/shared/js/mirador/images/border_type_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/border_type_3.png -------------------------------------------------------------------------------- /views/shared/js/mirador/images/border_type_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/border_type_4.png -------------------------------------------------------------------------------- /views/shared/js/mirador/images/border_type_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/border_type_5.png -------------------------------------------------------------------------------- /views/shared/js/mirador/images/debut_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/debut_dark.png -------------------------------------------------------------------------------- /views/shared/js/mirador/images/jstree/32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/jstree/32px.png -------------------------------------------------------------------------------- /views/shared/js/mirador/images/jstree/40px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/jstree/40px.png -------------------------------------------------------------------------------- /views/shared/js/mirador/images/jstree/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/jstree/throbber.gif -------------------------------------------------------------------------------- /views/shared/js/mirador/images/palette_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/images/palette_icon.png -------------------------------------------------------------------------------- /views/shared/js/mirador/locales/ar/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "addItem": "أضف عنصراً", 3 | "changeLayout": "غيّر الإطار", 4 | "selectGrid": "اختر تقسيم الشاشة في الأسفل", 5 | "bookmark": "أضف للمفضلة", 6 | "close": "أغلق", 7 | "bookmarkTitle": "أضف للمفضلة أو شارك مساحة العمل", 8 | "filterObjects": "فلتر المواضيع", 9 | "addNewObject": "أضف موضوعاً جديداً من الرابط", 10 | "more": "أكثر", 11 | "item": "عنصر", 12 | "items": "عناصر", 13 | "details": "تفاصيل", 14 | "rights": "الحقوق", 15 | "rightsStatus": "حالة الحقوق", 16 | "unspecified": "غير محدد", 17 | "links": "روابط", 18 | "addSlotRight": "أضف شريحة إلى اليمين", 19 | "addSlotLeft": "أضف شريحة إلى اليسار", 20 | "addSlotAbove": "أضف شريحة في الأعلى", 21 | "addSlotBelow": "أصف شريحة في الأسفل", 22 | "imageView": "مشاهدة الصورة", 23 | "bookView": "مشاهدة الكتاب", 24 | "scrollView": "مشاهدة الانتقال", 25 | "thumbnailsView": "مشاهدة ظفر الإبهام", 26 | "comments": "التعليقات", 27 | "addTagsHere": "أضف الإشارة هنا", 28 | "save": "حفظ", 29 | "cancel": "إلغاء", 30 | "edit": "تحرير", 31 | "delete": "مسح", 32 | "url": "الرابط", 33 | "newObject": "موضوع جديد", 34 | "objectMetadata": "البيانات الوصفية للموضوع", 35 | "fullScreen": "ملء الشاشة", 36 | "logo": "الشعار", 37 | "load": "عبأ", 38 | "dropToLoad": "إسقاط لتحميل واضح" 39 | } 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /views/shared/js/mirador/locales/es/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "addItem": "Añadir artículo", 3 | "changeLayout": "Cambiar diseño", 4 | "selectGrid": "Elija una cuadrícula de abajo", 5 | "bookmark": "Añadir a la lista de marcadores", 6 | "close": "Cerrar", 7 | "bookmarkTitle": "Añadir a la lista de marcadores o compartir su espacio de trabajo", 8 | "filterObjects": "Filtrar objetos", 9 | "addNewObject": "Añadir nuevo objeto de URL", 10 | "item": "artículo", 11 | "items": "artículos", 12 | "more": "más", 13 | "details": "Detalles", 14 | "rights": "Derechos", 15 | "rightsStatus": "Estado de los Derechos", 16 | "unspecified": "Sin Especificar", 17 | "links": "Enlaces", 18 | "Label": "Etiqueta", 19 | "Description": "Descripción", 20 | "Attribution": "Atribución", 21 | "addSlotRight": "Añadir derecho ranura", 22 | "addSlotLeft": "Añadir izquierda ranura", 23 | "addSlotAbove": "Añadir sobre ranura", 24 | "addSlotBelow": "Añadir debajo ranura", 25 | "newObject": "Nuevo Objeto", 26 | "imageView": "Vista de la Imagen", 27 | "bookView": "Vista del Libro", 28 | "scrollView": "Vista del rollo de papel", 29 | "thumbnailsView": "Miniaturas", 30 | "objectMetadata": "Metadatos", 31 | "fullScreen": "Pantalla completa", 32 | "logo": "Logo", 33 | "load": "Cargar", 34 | "dropToLoad": "Soltar aquí para añadir el objeto" 35 | } -------------------------------------------------------------------------------- /views/shared/js/mirador/locales/fr/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "addItem": "Ajouter un objet", 3 | "addNewObject": "Ajouter un objet à partir de son URL", 4 | "addSlotAbove": "Ajouter une fenêtre au-dessus", 5 | "addSlotBelow": "Ajouter une fenêtre en dessous", 6 | "addSlotLeft": "Ajouter une fenêtre à gauche", 7 | "addSlotRight": "Ajouter une fenêtre à droite", 8 | "addTagsHere": "Ajouter des mots-clés", 9 | "annotationTooltip": "Annoter / Voir les annotations", 10 | "bookmark": "Sauvegarder / Partager", 11 | "bookmarkTitle": "Sauvegarder ou partager cet espace de travail", 12 | "bookmarkTooltip": "Obtenir le lien vers cet espace de travail", 13 | "bookView": "Double page", 14 | "borderColorTooltip": "Choisir la couleur de bordure", 15 | "borderTypeTooltip": "Choisir le style de bordure", 16 | "brightnessTooltip": "Luminosité", 17 | "cancel": "Annuler", 18 | "cancelAnnotation": "Voulez-vous supprimer cette annotation", 19 | "changeLayout": "Changer la disposition", 20 | "changeLayoutTooltip": "Changer le nombre de fenêtres visibles", 21 | "close": "Fermer", 22 | "closeTooltip": "Fermer cette fenêtre", 23 | "comments": "Commentaires", 24 | "contrastTooltip": "Contraste", 25 | "dashed":"Tirets", 26 | "delete": "Supprimer", 27 | "deleteAnnotation": "Voulez-vous supprimer cette annotation et toutes les formes associées", 28 | "deleteShape":"Voulez-vous supprimer cette forme", 29 | "details": "Détails", 30 | "dotDashed":"Pointillés et traits", 31 | "dropToLoad": "Déposer ici pour ajouter l'objet", 32 | "edit": "Editer", 33 | "editModalBtnDeleteAnnotation":"Supprimer cette annotation", 34 | "editModalBtnSaveWithoutShapes":"Enregistrer l'annotation sans aucune forme associée ?", 35 | "editModalSaveAnnotationWithNoShapesMsg":"Aucune forme n'est associée à cette annotation.", 36 | "ellipseTooltip": "Ovale", 37 | "fillColorTooltip": "Choisir une couleur de remplissage", 38 | "filterObjects": "Filtrer la liste", 39 | "freehandTooltip": "Tracé libre", 40 | "fullScreen": "Plein écran", 41 | "fullScreenTooltip": "Ouvrir en plein écran", 42 | "fullScreenWindowTooltip": "Ouvrir cette fenêtre en plein écran", 43 | "grayscaleTooltip": "Niveaux de gris", 44 | "imageManipulationTooltip": "Modifier les réglages de l'image", 45 | "imageView": "Simple page", 46 | "invertTooltip": "Couleurs inversées", 47 | "item": "objet", 48 | "items": "objets", 49 | "links": "Liens", 50 | "load": "Ajouter", 51 | "logo": "Logo", 52 | "metadataTooltip": "Afficher les informations/métadonnées", 53 | "more": "restants", 54 | "myManifests": "Mes objets", 55 | "newObject": "Nouvel objet", 56 | "no": "Non", 57 | "objectMetadata": "Métadonnées", 58 | "pinTooltip": "Marqueur", 59 | "pointerTooltip": "Pointeur", 60 | "polygonTooltip": "Polygone", 61 | "preloadedManifests": "Objets disponibles", 62 | "rectangleTooltip": "Rectangle", 63 | "resetTooltip": "Réinitialiser", 64 | "rights": "Droits", 65 | "rightsStatus": "Statut des droits", 66 | "rotateLeftTooltip": "Rotation antihoraire 90°", 67 | "rotateRightTooltip": "Rotation horaire 90°", 68 | "saturationTooltip": "Saturation", 69 | "save": "Enregistrer", 70 | "scrollView": "Défilement horizontal", 71 | "selectGrid": "Sélectionner la grille de votre choix", 72 | "sidePanelTooltip": "Ouvrir le panneau latéral", 73 | "solid":"Ligne continue", 74 | "thumbnailsView": "Mosaïque", 75 | "unspecified": "Non spécifié", 76 | "url": "URL", 77 | "viewTypeTooltip": "Changer le type de vue", 78 | "yes": "Oui" 79 | } 80 | -------------------------------------------------------------------------------- /views/shared/js/mirador/locales/ja/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "addItem": "アイテム追加", 3 | "addNewObject": "URLで新規オブジェクト追加", 4 | "addSlotAbove": "上にスロット追加", 5 | "addSlotBelow": "下にスロット追加", 6 | "addSlotLeft": "左にスロット追加", 7 | "addSlotRight": "右にスロット追加", 8 | "addTagsHere": "ここでタグを追加", 9 | "annotationTooltip": "アノテーション", 10 | "attribution": "帰属", 11 | "bookmark": "ブックマーク", 12 | "bookmarkTitle": "現在の表示内容をブックマーク", 13 | "bookmarkTooltip": "このインスタンスをブックマーク", 14 | "bookView": "Book表示モード", 15 | "borderColorTooltip": "線の色を選択", 16 | "borderTypeTooltip": "線のスタイルを選択", 17 | "brightnessTooltip": "明度調整", 18 | "cancel": "キャンセル", 19 | "cancelAnnotation": "この注釈を取消したいですか?", 20 | "changeLayout": "レイアウト変更", 21 | "changeLayoutTooltip": "スロット数の変更", 22 | "close": "閉じる", 23 | "closeTooltip": "このウインドウを閉じる", 24 | "comments": "コメント", 25 | "contrastTooltip": "コントラスト調整", 26 | "dashed":"破線", 27 | "delete": "削除", 28 | "deleteAnnotation": "この注釈と関連するすべての図形を削除したいですか?", 29 | "deleteShape":"この図形を削除したいですか?", 30 | "details": "詳細", 31 | "dotDashed":"一点鎖線", 32 | "dropToLoad": "ドロップしてマニフェストを読み込み", 33 | "edit": "編集", 34 | "editModalBtnDeleteAnnotation":"この注釈を削除", 35 | "editModalBtnSaveWithoutShapes":"図形なしで注釈を保存", 36 | "editModalSaveAnnotationWithNoShapesMsg":"この注釈に関連する図形はありません。", 37 | "ellipseTooltip": "楕円形で注釈", 38 | "fillColorTooltip": "塗り潰し色を選択", 39 | "filterObjects": "フィルタをかける対象", 40 | "freehandTooltip": "フリーハンドで注釈", 41 | "fullScreen": "全画面表示", 42 | "fullScreenTooltip": "フルスクリーン表示", 43 | "fullScreenWindowTooltip": "このウインドウをフルスクリーン表示", 44 | "grayscaleTooltip": "グレースケール", 45 | "imageManipulationTooltip": "画像操作", 46 | "imageView": "画像表示モード", 47 | "invertTooltip": "色反転", 48 | "item": "アイテム", 49 | "items": "アイテム", 50 | "license": "利用許諾条件(ライセンス)", 51 | "links": "リンク", 52 | "load": "読み込み", 53 | "logo": "ロゴ", 54 | "metadataTooltip": "この資料の情報を表示", 55 | "more": "さらに", 56 | "newObject": "新しいオブジェクト", 57 | "no": "いいえ", 58 | "objectMetadata": "オブジェクトのメタデータ", 59 | "pinTooltip": "ピンポイントで注釈", 60 | "pointerTooltip": "ポインター", 61 | "polygonTooltip": "多角形で注釈", 62 | "rectangleTooltip": "矩形で注釈", 63 | "related": "関連リソース", 64 | "resetTooltip": "設定をリセット", 65 | "rights": "権利関係", 66 | "rightsStatus": "権利状態", 67 | "rotateLeftTooltip": "90度左回転", 68 | "rotateRightTooltip": "90度右回転", 69 | "saturationTooltip": "彩度調整", 70 | "save": "保存", 71 | "scrollView": "スクロール表示モード", 72 | "seeAlso": "機械可読形式の解説", 73 | "selectGrid": "以下のグリッドから選択", 74 | "sidePanelTooltip": "サイドパネルを表示", 75 | "solid":"実線", 76 | "thumbnailsView": "ギャラリー表示モード", 77 | "unspecified": "未特定の", 78 | "url": "URL", 79 | "viewTypeTooltip": "表示モード切替え", 80 | "within": "このリソースを含むリソース", 81 | "yes": "はい" 82 | } 83 | -------------------------------------------------------------------------------- /views/shared/js/mirador/locales/ko/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "addItem": "아이템 추가", 3 | "addNewObject": "URL 사용 오브젝트 추가", 4 | "addSlotAbove": "슬롯 추가 - 위", 5 | "addSlotBelow": "슬롯 추가 - 아래", 6 | "addSlotLeft": "슬롯 추가 - 왼쪽", 7 | "addSlotRight": "슬롯 추가 - 오른쪽", 8 | "addTagsHere": "태그 추가", 9 | "annotationTooltip": "주석 모드 전환", 10 | "attribution": "저작자 정보", 11 | "bookmark": "북마크", 12 | "bookmarkTitle": "작업공간 공유/북마크", 13 | "bookmarkTooltip": "북마크 하기", 14 | "bookView": "책으로 보기", 15 | "borderColorTooltip": "경계 색 선택", 16 | "borderTypeTooltip": "경계 스타일", 17 | "brightnessTooltip": "명도 변환", 18 | "cancel": "취소", 19 | "cancelAnnotation": "이 주석을 취소하시겠습니까?", 20 | "changeLayout": "레이아웃 변경", 21 | "changeLayoutTooltip": "슬롯 개수 변경", 22 | "close": "닫기", 23 | "closeTooltip": "창 닫기", 24 | "comments": "코멘트", 25 | "contrastTooltip": "대비 조절", 26 | "dashed": "파선", 27 | "delete": "지우기", 28 | "deleteAnnotation": "이 주석과 그에 관련된 도형들을 삭제하시겠습니까?", 29 | "deleteShape":"이 도형을 삭제하시겠습니까?", 30 | "details": "세부 정보", 31 | "dotDashed":"쇄선", 32 | "dropToLoad": "매니페스트를 여기 놓으세요.", 33 | "edit": "편집", 34 | "editModalBtnDeleteAnnotation":"주석 삭제", 35 | "editModalBtnSaveWithoutShapes":"도형 없이 주석 저장하기", 36 | "editModalSaveAnnotationWithNoShapesMsg":"이 주석과 관련된 도형이 없습니다.", 37 | "ellipseTooltip": "타원형", 38 | "fillColorTooltip": "면색", 39 | "filterObjects": "오브젝트 필터", 40 | "freehandTooltip": "프리핸드", 41 | "fullScreen": "전체화면", 42 | "fullScreenTooltip": "전체화면 전환", 43 | "fullScreenWindowTooltip": "이 창을 전체화면으로", 44 | "grayscaleTooltip": "그레이스케일 전환", 45 | "imageManipulationTooltip": "이미지 변환", 46 | "imageView": "이미지로 보기", 47 | "invertTooltip": "색상 반전", 48 | "item": "아이템", 49 | "items": "아이템", 50 | "license": "라이선스", 51 | "links": "고리", 52 | "load": "불러오기", 53 | "logo": "로고", 54 | "metadataTooltip": "메타데이터", 55 | "more": "더 보기", 56 | "newObject": "새 오브젝트", 57 | "no": "아니요", 58 | "noIndex": "인덱스가 없습니다", 59 | "objectMetadata": "오브젝트 메타데이터", 60 | "pinTooltip": "핀", 61 | "pointerTooltip": "포인터", 62 | "polygonTooltip": "다각형", 63 | "rectangleTooltip": "직사각형", 64 | "related": "관련고리", 65 | "resetTooltip": "이미지 리셋", 66 | "rights": "저작권 정보", 67 | "rightsStatus": "저작권 상황", 68 | "rotateLeftTooltip": "90도 좌회전", 69 | "rotateRightTooltip": "90도 우회전", 70 | "saturationTooltip": "채도 변환", 71 | "save": "저장", 72 | "scrollView": "스크롤로 보기", 73 | "seeAlso": "같이 보기", 74 | "selectGrid": "격자 선택하기", 75 | "sidePanelTooltip": "사이드 패널 전환", 76 | "solid":"실선", 77 | "thumbnailsView": "썸네일로 보기", 78 | "unspecified": "불특정", 79 | "url": "URL", 80 | "viewTypeTooltip": "뷰 타입 전환", 81 | "within": "상위 컬렉션", 82 | "yes": "네" 83 | } 84 | -------------------------------------------------------------------------------- /views/shared/js/mirador/locales/nl/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "addItem": "Voeg item toe", 3 | "changeLayout": "Pas layout aan", 4 | "selectGrid": "Kies een grid hieronder", 5 | "bookmark": "Favoriet", 6 | "close": "Sluiten", 7 | "bookmarkTitle": "Favoriet of deel uw werkset", 8 | "filterObjects": "Filter objecten", 9 | "addNewObject": "Voeg nieuw object toe via URL", 10 | "more": "meer", 11 | "item": "item", 12 | "items": "items", 13 | "details": "Details", 14 | "rights": "Copyright", 15 | "rightsStatus": "Copyright Status", 16 | "unspecified": "Niet gespecifieerd", 17 | "links": "Links", 18 | "addSlotRight": "Voeg Slot toe rechts", 19 | "addSlotLeft": "Voeg Slot toe links", 20 | "addSlotAbove": "Voeg Slot toe bovenaan", 21 | "addSlotBelow": "Voeg Slot toe onderaan", 22 | "imageView": "Beeld presentatie", 23 | "bookView": "Boek presentatie", 24 | "scrollView": "Navigeer door presentatie", 25 | "thumbnailsView": "Galerie presentatie", 26 | "comments": "Commentaar", 27 | "addTagsHere": "Voeg hier tags toe", 28 | "save": "Bewaren", 29 | "cancel": "Annuleren", 30 | "edit": "Bewerken", 31 | "delete": "Verwijderen", 32 | "url": "URL", 33 | "newObject": "Nieuw Object", 34 | "objectMetadata": "Object Metadata", 35 | "fullScreen": "Volledig scherm", 36 | "logo": "Logo", 37 | "load": "Opladen", 38 | "dropToLoad": "Vallen hier om object te laden" 39 | } 40 | -------------------------------------------------------------------------------- /views/shared/js/mirador/locales/zh-CN/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "addItem": "添加项", 3 | "addNewObject": "从 URL 建立新的物件", 4 | "addSlotAbove": "添加插槽(上)", 5 | "addSlotBelow": "添加插槽(下)", 6 | "addSlotLeft": "添加插槽(左)", 7 | "addSlotRight": "添加插槽(右)", 8 | "addTagsHere": "添加标签", 9 | "bookmark": "添加书签", 10 | "bookmarkTitle": "为当前工作区创建书签", 11 | "bookmarkTooltip": "为当前进程创建书签", 12 | "bookView": "书本视图", 13 | "borderColorTooltip": "选择边框颜色", 14 | "borderTypeTooltip": "选择边框样式", 15 | "brightnessTooltip": "调整亮度", 16 | "cancel": "取消", 17 | "cancelAnnotation": "你想取消这个注释吗?", 18 | "changeLayout": "更改布局", 19 | "changeLayoutTooltip": "更改可见插槽的数量", 20 | "close": "关闭", 21 | "closeTooltip": "关闭这个窗口", 22 | "comments": "评论", 23 | "contrastTooltip": "调整对比度", 24 | "dashed": "虚线", 25 | "delete": "删除", 26 | "deleteAnnotation": "你想删除这个注释和所有相关的形状吗?", 27 | "deleteShape": "你想删除这个形状吗?", 28 | "details": "详细资料", 29 | "dotDashed": "点和虚线", 30 | "dropToLoad": "拖放以装载清单", 31 | "edit": "编辑", 32 | "editModalBtnDeleteAnnotation": "删除这个注释", 33 | "editModalBtnSaveWithoutShapes": "存储注释但忽略形状", 34 | "editModalSaveAnnotationWithNoShapesMsg": "这个注释没有相关的形状。", 35 | "ellipseTooltip": "椭圆形注释", 36 | "fillColorTooltip": "选择填充颜色", 37 | "filterObjects": "过滤物件", 38 | "freehandTooltip": "自由注释", 39 | "fullScreen": "全屏", 40 | "fullScreenTooltip": "进入/退出全屏", 41 | "fullScreenWindowTooltip": "进入/退出全屏", 42 | "grayscaleTooltip": "灰度", 43 | "imageView": "图像视图", 44 | "invertTooltip": "反色", 45 | "item": "项目", 46 | "items": "项目", 47 | "links": "链接", 48 | "load": "载入", 49 | "logo": "徽标", 50 | "metadataTooltip": "查看这个物件的信息/元数据", 51 | "more": "更多", 52 | "myManifests": "我的配置集", 53 | "newObject": "建立新的物件", 54 | "no": "否", 55 | "objectMetadata": "物件元数据", 56 | "pinTooltip": "点注释", 57 | "polygonTooltip": "多边形注释", 58 | "preloadedManifests": "预设配置集", 59 | "rectangleTooltip": "长方形注释", 60 | "resetTooltip": "重置图像", 61 | "rights": "版权", 62 | "rightsStatus": "版权状态", 63 | "rotateLeftTooltip": "顺时针旋转 90 度", 64 | "rotateRightTooltip": "逆时针旋转 90 度", 65 | "saturationTooltip": "调整色彩饱和度", 66 | "save": "保存", 67 | "scrollView": "滚动视图", 68 | "selectGrid": "选中下方单元格", 69 | "sidePanelTooltip": "打开/关闭侧边栏", 70 | "solid": "实线", 71 | "thumbnailsView": "图库视图", 72 | "unspecified": "未指定的", 73 | "url": "URL", 74 | "viewTypeTooltip": "更改视图", 75 | "yes": "是" 76 | } 77 | -------------------------------------------------------------------------------- /views/shared/js/mirador/locales/zh-TW/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "addItem": "添加項", 3 | "addNewObject": "從 URL 建立新的物件", 4 | "addSlotAbove": "添加插槽(上)", 5 | "addSlotBelow": "添加插槽(下)", 6 | "addSlotLeft": "添加插槽(左)", 7 | "addSlotRight": "添加插槽(右)", 8 | "addTagsHere": "添加標簽", 9 | "bookmark": "添加書簽", 10 | "bookmarkTitle": "為當前工作區創建書簽", 11 | "bookmarkTooltip": "為當前進程創建書簽", 12 | "bookView": "書本視圖", 13 | "borderColorTooltip": "選擇邊框顏色", 14 | "borderTypeTooltip": "選擇邊框樣式", 15 | "brightnessTooltip": "調整亮度", 16 | "cancel": "取消", 17 | "cancelAnnotation": "你想取消這個注釋嗎?", 18 | "changeLayout": "改變布局", 19 | "changeLayoutTooltip": "更改可見插槽的數量", 20 | "close": "關閉", 21 | "closeTooltip": "關閉這個窗口", 22 | "comments": "評論", 23 | "contrastTooltip": "調整對比度", 24 | "dashed": "虛線", 25 | "delete": "刪除", 26 | "deleteAnnotation": "你想刪除這個注釋和所有相關的形狀嗎?", 27 | "deleteShape": "你想刪除這個形狀嗎?", 28 | "details": "詳細資料", 29 | "dotDashed": "點和虛線", 30 | "dropToLoad": "拖放以裝載清單", 31 | "edit": "編輯", 32 | "editModalBtnDeleteAnnotation": "刪除這個注釋", 33 | "editModalBtnSaveWithoutShapes": "存儲注釋但忽略形狀", 34 | "editModalSaveAnnotationWithNoShapesMsg": "這個注釋沒有相關的形狀。", 35 | "ellipseTooltip": "橢圓形注釋", 36 | "fillColorTooltip": "選擇填充顏色", 37 | "filterObjects": "過濾物件", 38 | "freehandTooltip": "自由注釋", 39 | "fullScreen": "全屏", 40 | "fullScreenTooltip": "進入/退出全屏", 41 | "fullScreenWindowTooltip": "進入/退出全屏", 42 | "grayscaleTooltip": "灰度", 43 | "imageView": "圖像視圖", 44 | "invertTooltip": "反色", 45 | "item": "項目", 46 | "items": "項目", 47 | "links": "鏈接", 48 | "load": "載入", 49 | "logo": "徽標", 50 | "metadataTooltip": "查看這個物件的信息/元數據", 51 | "more": "更多", 52 | "myManifests": "我的配置集", 53 | "newObject": "建立新的物件", 54 | "no": "否", 55 | "objectMetadata": "物件元數據", 56 | "pinTooltip": "點注釋", 57 | "polygonTooltip": "多邊形注釋", 58 | "preloadedManifests": "預設配置集", 59 | "rectangleTooltip": "長方形注釋", 60 | "resetTooltip": "重置圖像", 61 | "rights": "版權", 62 | "rightsStatus": "版權狀態", 63 | "rotateLeftTooltip": "順時針旋轉 90 度", 64 | "rotateRightTooltip": "逆時針旋轉 90 度", 65 | "saturationTooltip": "調整色彩飽和度", 66 | "save": "保存", 67 | "scrollView": "滾動視圖", 68 | "selectGrid": "選中下方單元格", 69 | "sidePanelTooltip": "打開/關閉側邊欄", 70 | "solid": "實線", 71 | "thumbnailsView": "圖庫視圖", 72 | "unspecified": "未指定的", 73 | "url": "URL", 74 | "viewTypeTooltip": "更改視圖", 75 | "yes": "是" 76 | } 77 | -------------------------------------------------------------------------------- /views/shared/js/mirador/locales/zh/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "addItem": "添加项", 3 | "addNewObject": "从 URL 建立新的物件", 4 | "addSlotAbove": "添加插槽(上)", 5 | "addSlotBelow": "添加插槽(下)", 6 | "addSlotLeft": "添加插槽(左)", 7 | "addSlotRight": "添加插槽(右)", 8 | "addTagsHere": "添加标签", 9 | "bookmark": "添加书签", 10 | "bookmarkTitle": "为当前工作区创建书签", 11 | "bookmarkTooltip": "为当前进程创建书签", 12 | "bookView": "书本视图", 13 | "borderColorTooltip": "选择边框颜色", 14 | "borderTypeTooltip": "选择边框样式", 15 | "brightnessTooltip": "调整亮度", 16 | "cancel": "取消", 17 | "cancelAnnotation": "你想取消这个注释吗?", 18 | "changeLayout": "更改布局", 19 | "changeLayoutTooltip": "更改可见插槽的数量", 20 | "close": "关闭", 21 | "closeTooltip": "关闭这个窗口", 22 | "comments": "评论", 23 | "contrastTooltip": "调整对比度", 24 | "dashed": "虚线", 25 | "delete": "删除", 26 | "deleteAnnotation": "你想删除这个注释和所有相关的形状吗?", 27 | "deleteShape": "你想删除这个形状吗?", 28 | "details": "详细资料", 29 | "dotDashed": "点和虚线", 30 | "dropToLoad": "拖放以装载清单", 31 | "edit": "编辑", 32 | "editModalBtnDeleteAnnotation": "删除这个注释", 33 | "editModalBtnSaveWithoutShapes": "存储注释但忽略形状", 34 | "editModalSaveAnnotationWithNoShapesMsg": "这个注释没有相关的形状。", 35 | "ellipseTooltip": "椭圆形注释", 36 | "fillColorTooltip": "选择填充颜色", 37 | "filterObjects": "过滤物件", 38 | "freehandTooltip": "自由注释", 39 | "fullScreen": "全屏", 40 | "fullScreenTooltip": "进入/退出全屏", 41 | "fullScreenWindowTooltip": "进入/退出全屏", 42 | "grayscaleTooltip": "灰度", 43 | "imageView": "图像视图", 44 | "invertTooltip": "反色", 45 | "item": "项目", 46 | "items": "项目", 47 | "links": "链接", 48 | "load": "载入", 49 | "logo": "徽标", 50 | "metadataTooltip": "查看这个物件的信息/元数据", 51 | "more": "更多", 52 | "newObject": "建立新的物件", 53 | "no": "否", 54 | "objectMetadata": "物件元数据", 55 | "pinTooltip": "点注释", 56 | "polygonTooltip": "多边形注释", 57 | "rectangleTooltip": "长方形注释", 58 | "resetTooltip": "重置图像", 59 | "rights": "版权", 60 | "rightsStatus": "版权状态", 61 | "rotateLeftTooltip": "顺时针旋转 90 度", 62 | "rotateRightTooltip": "逆时针旋转 90 度", 63 | "saturationTooltip": "调整色彩饱和度", 64 | "save": "保存", 65 | "scrollView": "滚动视图", 66 | "selectGrid": "选中下方单元格", 67 | "sidePanelTooltip": "打开/关闭侧边栏", 68 | "solid": "实线", 69 | "thumbnailsView": "图库视图", 70 | "unspecified": "未指定的", 71 | "url": "URL", 72 | "viewTypeTooltip": "更改视图", 73 | "yes": "是" 74 | } 75 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/advlist/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "advlist" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/advlist') 5 | // ES2015: 6 | // import 'tinymce/plugins/advlist' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/advlist/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("advlist",function(e){function t(t){return e.$.contains(e.getBody(),t)}function n(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)&&t(e)}function r(e,t){var n=[];return t&&tinymce.each(t.split(/[ ,]/),function(e){n.push({text:e.replace(/\-/g," ").replace(/\b\w/g,function(e){return e.toUpperCase()}),data:"default"==e?"":e})}),n}function i(t,n){e.undoManager.transact(function(){var r,i=e.dom,o=e.selection;if(r=i.getParent(o.getNode(),"ol,ul"),!r||r.nodeName!=t||n===!1){var a={"list-style-type":n?n:""};e.execCommand("UL"==t?"InsertUnorderedList":"InsertOrderedList",!1,a)}r=i.getParent(o.getNode(),"ol,ul"),r&&tinymce.util.Tools.each(i.select("ol,ul",r).concat([r]),function(e){e.nodeName!==t&&n!==!1&&(e=i.rename(e,t)),i.setStyle(e,"listStyleType",n?n:null),e.removeAttribute("data-mce-style")}),e.focus()})}function o(t){var n=e.dom.getStyle(e.dom.getParent(e.selection.getNode(),"ol,ul"),"listStyleType")||"";t.control.items().each(function(e){e.active(e.settings.data===n)})}var a,s,l=function(e,t){var n=e.settings.plugins?e.settings.plugins:"";return tinymce.util.Tools.inArray(n.split(/[ ,]/),t)!==-1};a=r("OL",e.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),s=r("UL",e.getParam("advlist_bullet_styles","default,circle,disc,square"));var u=function(t){return function(){var r=this;e.on("NodeChange",function(e){var i=tinymce.util.Tools.grep(e.parents,n);r.active(i.length>0&&i[0].nodeName===t)})}};l(e,"lists")&&(e.addCommand("ApplyUnorderedListStyle",function(e,t){i("UL",t["list-style-type"])}),e.addCommand("ApplyOrderedListStyle",function(e,t){i("OL",t["list-style-type"])}),e.addButton("numlist",{type:a.length>0?"splitbutton":"button",tooltip:"Numbered list",menu:a,onPostRender:u("OL"),onshow:o,onselect:function(e){i("OL",e.control.settings.data)},onclick:function(){i("OL",!1)}}),e.addButton("bullist",{type:s.length>0?"splitbutton":"button",tooltip:"Bullet list",onPostRender:u("UL"),menu:s,onshow:o,onselect:function(e){i("UL",e.control.settings.data)},onclick:function(){i("UL",!1)}}))}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/anchor/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "anchor" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/anchor') 5 | // ES2015: 6 | // import 'tinymce/plugins/anchor' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/anchor/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('anchor', function(editor) { 14 | var isAnchorNode = function (node) { 15 | return !node.attr('href') && (node.attr('id') || node.attr('name')) && !node.firstChild; 16 | }; 17 | 18 | var setContentEditable = function (state) { 19 | return function (nodes) { 20 | for (var i = 0; i < nodes.length; i++) { 21 | if (isAnchorNode(nodes[i])) { 22 | nodes[i].attr('contenteditable', state); 23 | } 24 | } 25 | }; 26 | }; 27 | 28 | var isValidId = function (id) { 29 | // Follows HTML4 rules: https://www.w3.org/TR/html401/types.html#type-id 30 | return /^[A-Za-z][A-Za-z0-9\-:._]*$/.test(id); 31 | }; 32 | 33 | var showDialog = function () { 34 | var selectedNode = editor.selection.getNode(); 35 | var isAnchor = selectedNode.tagName == 'A' && editor.dom.getAttrib(selectedNode, 'href') === ''; 36 | var value = ''; 37 | 38 | if (isAnchor) { 39 | value = selectedNode.id || selectedNode.name || ''; 40 | } 41 | 42 | editor.windowManager.open({ 43 | title: 'Anchor', 44 | body: {type: 'textbox', name: 'id', size: 40, label: 'Id', value: value}, 45 | onsubmit: function(e) { 46 | var id = e.data.id; 47 | 48 | if (!isValidId(id)) { 49 | e.preventDefault(); 50 | editor.windowManager.alert( 51 | 'Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.' 52 | ); 53 | return; 54 | } 55 | 56 | if (isAnchor) { 57 | selectedNode.removeAttribute('name'); 58 | selectedNode.id = id; 59 | } else { 60 | editor.selection.collapse(true); 61 | editor.execCommand('mceInsertContent', false, editor.dom.createHTML('a', { 62 | id: id 63 | })); 64 | } 65 | } 66 | }); 67 | }; 68 | 69 | if (tinymce.Env.ceFalse) { 70 | editor.on('PreInit', function () { 71 | editor.parser.addNodeFilter('a', setContentEditable('false')); 72 | editor.serializer.addNodeFilter('a', setContentEditable(null)); 73 | }); 74 | } 75 | 76 | editor.addCommand('mceAnchor', showDialog); 77 | 78 | editor.addButton('anchor', { 79 | icon: 'anchor', 80 | tooltip: 'Anchor', 81 | onclick: showDialog, 82 | stateSelector: 'a:not([href])' 83 | }); 84 | 85 | editor.addMenuItem('anchor', { 86 | icon: 'anchor', 87 | text: 'Anchor', 88 | context: 'insert', 89 | onclick: showDialog 90 | }); 91 | }); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/anchor/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("anchor",function(e){var t=function(e){return!e.attr("href")&&(e.attr("id")||e.attr("name"))&&!e.firstChild},n=function(e){return function(n){for(var r=0;rn&&(t=n)}return t}function i(e,t){1!=e.nodeType||e.hasChildNodes()?s.setStart(e,r(e,t)):s.setStartBefore(e)}function o(e,t){1!=e.nodeType||e.hasChildNodes()?s.setEnd(e,r(e,t)):s.setEndAfter(e)}var s,l,u,c,d,f,p,h,m,g;if("A"!=e.selection.getNode().tagName){if(s=e.selection.getRng(!0).cloneRange(),s.startOffset<5){if(h=s.endContainer.previousSibling,!h){if(!s.endContainer.firstChild||!s.endContainer.firstChild.nextSibling)return;h=s.endContainer.firstChild.nextSibling}if(m=h.length,i(h,m),o(h,m),s.endOffset<5)return;l=s.endOffset,c=h}else{if(c=s.endContainer,3!=c.nodeType&&c.firstChild){for(;3!=c.nodeType&&c.firstChild;)c=c.firstChild;3==c.nodeType&&(i(c,0),o(c,c.nodeValue.length))}l=1==s.endOffset?2:s.endOffset-1-t}u=l;do i(c,l>=2?l-2:0),o(c,l>=1?l-1:0),l-=1,g=s.toString();while(" "!=g&&""!==g&&160!=g.charCodeAt(0)&&l-2>=0&&g!=n);s.toString()==n||160==s.toString().charCodeAt(0)?(i(c,l),o(c,u),l+=1):0===s.startOffset?(i(c,0),o(c,u)):(i(c,l),o(c,u)),f=s.toString(),"."==f.charAt(f.length-1)&&o(c,u-1),f=s.toString(),p=f.match(a),p&&("www."==p[1]?p[1]="http://www.":/@$/.test(p[1])&&!/^mailto:/.test(p[1])&&(p[1]="mailto:"+p[1]),d=e.selection.getBookmark(),e.selection.setRng(s),e.execCommand("createlink",!1,p[1]+p[2]),e.settings.default_link_target&&e.dom.setAttrib(e.selection.getNode(),"target",e.settings.default_link_target),e.selection.moveToBookmark(d),e.nodeChanged())}}var o,a=/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i;return e.settings.autolink_pattern&&(a=e.settings.autolink_pattern),e.on("keydown",function(t){if(13==t.keyCode)return r(e)}),tinymce.Env.ie?void e.on("focus",function(){if(!o){o=!0;try{e.execCommand("AutoUrlDetect",!1,!0)}catch(e){}}}):(e.on("keypress",function(n){if(41==n.keyCode)return t(e)}),void e.on("keyup",function(t){if(32==t.keyCode)return n(e)}))}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/autoresize/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "autoresize" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/autoresize') 5 | // ES2015: 6 | // import 'tinymce/plugins/autoresize' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/autoresize/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("autoresize",function(e){function t(){return e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()}function n(r){var a,s,l,u,c,d,f,p,h,m,g,v,y=tinymce.DOM;if(s=e.getDoc()){if(l=s.body,u=s.documentElement,c=i.autoresize_min_height,!l||r&&"setcontent"===r.type&&r.initial||t())return void(l&&u&&(l.style.overflowY="auto",u.style.overflowY="auto"));f=e.dom.getStyle(l,"margin-top",!0),p=e.dom.getStyle(l,"margin-bottom",!0),h=e.dom.getStyle(l,"padding-top",!0),m=e.dom.getStyle(l,"padding-bottom",!0),g=e.dom.getStyle(l,"border-top-width",!0),v=e.dom.getStyle(l,"border-bottom-width",!0),d=l.offsetHeight+parseInt(f,10)+parseInt(p,10)+parseInt(h,10)+parseInt(m,10)+parseInt(g,10)+parseInt(v,10),(isNaN(d)||d<=0)&&(d=tinymce.Env.ie?l.scrollHeight:tinymce.Env.webkit&&0===l.clientHeight?0:l.offsetHeight),d>i.autoresize_min_height&&(c=d),i.autoresize_max_height&&d>i.autoresize_max_height?(c=i.autoresize_max_height,l.style.overflowY="auto",u.style.overflowY="auto"):(l.style.overflowY="hidden",u.style.overflowY="hidden",l.scrollTop=0),c!==o&&(a=c-o,y.setStyle(e.iframeElement,"height",c+"px"),o=c,tinymce.isWebKit&&a<0&&n(r))}}function r(t,i,o){tinymce.util.Delay.setEditorTimeout(e,function(){n({}),t--?r(t,i,o):o&&o()},i)}var i=e.settings,o=0;e.settings.inline||(i.autoresize_min_height=parseInt(e.getParam("autoresize_min_height",e.getElement().offsetHeight),10),i.autoresize_max_height=parseInt(e.getParam("autoresize_max_height",0),10),e.on("init",function(){var t,n;t=e.getParam("autoresize_overflow_padding",1),n=e.getParam("autoresize_bottom_margin",50),t!==!1&&e.dom.setStyles(e.getBody(),{paddingLeft:t,paddingRight:t}),n!==!1&&e.dom.setStyles(e.getBody(),{paddingBottom:n})}),e.on("nodechange setcontent keyup FullscreenStateChanged",n),e.getParam("autoresize_on_init",!0)&&e.on("init",function(){r(20,100,function(){r(5,1e3)})}),e.addCommand("mceAutoResize",n))}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/autosave/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "autosave" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/autosave') 5 | // ES2015: 6 | // import 'tinymce/plugins/autosave' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/autosave/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce._beforeUnloadHandler=function(){var e;return tinymce.each(tinymce.editors,function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e},tinymce.PluginManager.add("autosave",function(e){function t(e,t){var n={s:1e3,m:6e4};return e=/^(\d+)([ms]?)$/.exec(""+(e||t)),(e[2]?n[e[2]]:1)*parseInt(e,10)}function n(){var e=parseInt(p.getItem(c+"time"),10)||0;return!((new Date).getTime()-e>f.autosave_retention)||(r(!1),!1)}function r(t){p.removeItem(c+"draft"),p.removeItem(c+"time"),t!==!1&&e.fire("RemoveDraft")}function i(){!u()&&e.isDirty()&&(p.setItem(c+"draft",e.getContent({format:"raw",no_events:!0})),p.setItem(c+"time",(new Date).getTime()),e.fire("StoreDraft"))}function o(){n()&&(e.setContent(p.getItem(c+"draft"),{format:"raw"}),e.fire("RestoreDraft"))}function a(){d||(setInterval(function(){e.removed||i()},f.autosave_interval),d=!0)}function s(){var t=this;t.disabled(!n()),e.on("StoreDraft RestoreDraft RemoveDraft",function(){t.disabled(!n())}),a()}function l(){e.undoManager.beforeChange(),o(),r(),e.undoManager.add()}function u(t){var n=e.settings.forced_root_block;return t=tinymce.trim("undefined"==typeof t?e.getBody().innerHTML:t),""===t||new RegExp("^<"+n+"[^>]*>((\xa0| |[ \t]|]*>)+?|)|
$","i").test(t)}var c,d,f=e.settings,p=tinymce.util.LocalStorage;c=f.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",c=c.replace(/\{path\}/g,document.location.pathname),c=c.replace(/\{query\}/g,document.location.search),c=c.replace(/\{id\}/g,e.id),f.autosave_interval=t(f.autosave_interval,"30s"),f.autosave_retention=t(f.autosave_retention,"20m"),e.addButton("restoredraft",{title:"Restore last draft",onclick:l,onPostRender:s}),e.addMenuItem("restoredraft",{text:"Restore last draft",onclick:l,onPostRender:s,context:"file"}),e.settings.autosave_restore_when_empty!==!1&&(e.on("init",function(){n()&&u()&&o()}),e.on("saveContent",function(){r()})),window.onbeforeunload=tinymce._beforeUnloadHandler,this.hasDraft=n,this.storeDraft=i,this.restoreDraft=o,this.removeDraft=r,this.isEmpty=u}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/bbcode/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "bbcode" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/bbcode') 5 | // ES2015: 6 | // import 'tinymce/plugins/bbcode' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/bbcode/plugin.min.js: -------------------------------------------------------------------------------- 1 | !function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(e){var t=this,n=e.getParam("bbcode_dialect","punbb").toLowerCase();e.on("beforeSetContent",function(e){e.content=t["_"+n+"_bbcode2html"](e.content)}),e.on("postProcess",function(e){e.set&&(e.content=t["_"+n+"_bbcode2html"](e.content)),e.get&&(e.content=t["_"+n+"_html2bbcode"](e.content))})},getInfo:function(){return{longname:"BBCode Plugin",author:"Ephox Corp",authorurl:"http://www.tinymce.com",infourl:"http://www.tinymce.com/wiki.php/Plugin:bbcode"}},_punbb_html2bbcode:function(e){function t(t,n){e=e.replace(t,n)}return e=tinymce.trim(e),t(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"),t(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),t(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),t(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),t(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),t(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),t(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),t(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),t(/(.*?)<\/font>/gi,"$1"),t(//gi,"[img]$1[/img]"),t(/(.*?)<\/span>/gi,"[code]$1[/code]"),t(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),t(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),t(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),t(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),t(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),t(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),t(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),t(/<\/(strong|b)>/gi,"[/b]"),t(/<(strong|b)>/gi,"[b]"),t(/<\/(em|i)>/gi,"[/i]"),t(/<(em|i)>/gi,"[i]"),t(/<\/u>/gi,"[/u]"),t(/(.*?)<\/span>/gi,"[u]$1[/u]"),t(//gi,"[u]"),t(/]*>/gi,"[quote]"),t(/<\/blockquote>/gi,"[/quote]"),t(/
/gi,"\n"),t(//gi,"\n"),t(/
/gi,"\n"),t(/

/gi,""),t(/<\/p>/gi,"\n"),t(/ |\u00a0/gi," "),t(/"/gi,'"'),t(/</gi,"<"),t(/>/gi,">"),t(/&/gi,"&"),e},_punbb_bbcode2html:function(e){function t(t,n){e=e.replace(t,n)}return e=tinymce.trim(e),t(/\n/gi,"
"),t(/\[b\]/gi,""),t(/\[\/b\]/gi,""),t(/\[i\]/gi,""),t(/\[\/i\]/gi,""),t(/\[u\]/gi,""),t(/\[\/u\]/gi,""),t(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),t(/\[url\](.*?)\[\/url\]/gi,'$1'),t(/\[img\](.*?)\[\/img\]/gi,''),t(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),t(/\[code\](.*?)\[\/code\]/gi,'$1 '),t(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),e}}),tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)}(); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/charmap/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "charmap" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/charmap') 5 | // ES2015: 6 | // import 'tinymce/plugins/charmap' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/code/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "code" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/code') 5 | // ES2015: 6 | // import 'tinymce/plugins/code' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/code/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('code', function(editor) { 14 | function showDialog() { 15 | var win = editor.windowManager.open({ 16 | title: "Source code", 17 | body: { 18 | type: 'textbox', 19 | name: 'code', 20 | multiline: true, 21 | minWidth: editor.getParam("code_dialog_width", 600), 22 | minHeight: editor.getParam("code_dialog_height", Math.min(tinymce.DOM.getViewPort().h - 200, 500)), 23 | spellcheck: false, 24 | style: 'direction: ltr; text-align: left' 25 | }, 26 | onSubmit: function(e) { 27 | // We get a lovely "Wrong document" error in IE 11 if we 28 | // don't move the focus to the editor before creating an undo 29 | // transation since it tries to make a bookmark for the current selection 30 | editor.focus(); 31 | 32 | editor.undoManager.transact(function() { 33 | editor.setContent(e.data.code); 34 | }); 35 | 36 | editor.selection.setCursorLocation(); 37 | editor.nodeChanged(); 38 | } 39 | }); 40 | 41 | // Gecko has a major performance issue with textarea 42 | // contents so we need to set it when all reflows are done 43 | win.find('#code').value(editor.getContent({source_view: true})); 44 | } 45 | 46 | editor.addCommand("mceCodeEditor", showDialog); 47 | 48 | editor.addButton('code', { 49 | icon: 'code', 50 | tooltip: 'Source code', 51 | onclick: showDialog 52 | }); 53 | 54 | editor.addMenuItem('code', { 55 | icon: 'code', 56 | text: 'Source code', 57 | context: 'tools', 58 | onclick: showDialog 59 | }); 60 | }); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/code/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("code",function(e){function t(){var t=e.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:e.getParam("code_dialog_width",600),minHeight:e.getParam("code_dialog_height",Math.min(tinymce.DOM.getViewPort().h-200,500)),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(t){e.focus(),e.undoManager.transact(function(){e.setContent(t.data.code)}),e.selection.setCursorLocation(),e.nodeChanged()}});t.find("#code").value(e.getContent({source_view:!0}))}e.addCommand("mceCodeEditor",t),e.addButton("code",{icon:"code",tooltip:"Source code",onclick:t}),e.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:t})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/codesample/css/prism.css: -------------------------------------------------------------------------------- 1 | /* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */ 2 | /** 3 | * prism.js default theme for JavaScript, CSS and HTML 4 | * Based on dabblet (http://dabblet.com) 5 | * @author Lea Verou 6 | */ 7 | 8 | code[class*="language-"], 9 | pre[class*="language-"] { 10 | color: black; 11 | text-shadow: 0 1px white; 12 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 13 | direction: ltr; 14 | text-align: left; 15 | white-space: pre; 16 | word-spacing: normal; 17 | word-break: normal; 18 | word-wrap: normal; 19 | line-height: 1.5; 20 | 21 | -moz-tab-size: 4; 22 | -o-tab-size: 4; 23 | tab-size: 4; 24 | 25 | -webkit-hyphens: none; 26 | -moz-hyphens: none; 27 | -ms-hyphens: none; 28 | hyphens: none; 29 | } 30 | 31 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 32 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 33 | text-shadow: none; 34 | background: #b3d4fc; 35 | } 36 | 37 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 38 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 39 | text-shadow: none; 40 | background: #b3d4fc; 41 | } 42 | 43 | @media print { 44 | code[class*="language-"], 45 | pre[class*="language-"] { 46 | text-shadow: none; 47 | } 48 | } 49 | 50 | /* Code blocks */ 51 | pre[class*="language-"] { 52 | padding: 1em; 53 | margin: .5em 0; 54 | overflow: auto; 55 | } 56 | 57 | :not(pre) > code[class*="language-"], 58 | pre[class*="language-"] { 59 | background: #f5f2f0; 60 | } 61 | 62 | /* Inline code */ 63 | :not(pre) > code[class*="language-"] { 64 | padding: .1em; 65 | border-radius: .3em; 66 | } 67 | 68 | .token.comment, 69 | .token.prolog, 70 | .token.doctype, 71 | .token.cdata { 72 | color: slategray; 73 | } 74 | 75 | .token.punctuation { 76 | color: #999; 77 | } 78 | 79 | .namespace { 80 | opacity: .7; 81 | } 82 | 83 | .token.property, 84 | .token.tag, 85 | .token.boolean, 86 | .token.number, 87 | .token.constant, 88 | .token.symbol, 89 | .token.deleted { 90 | color: #905; 91 | } 92 | 93 | .token.selector, 94 | .token.attr-name, 95 | .token.string, 96 | .token.char, 97 | .token.builtin, 98 | .token.inserted { 99 | color: #690; 100 | } 101 | 102 | .token.operator, 103 | .token.entity, 104 | .token.url, 105 | .language-css .token.string, 106 | .style .token.string { 107 | color: #a67f59; 108 | background: hsla(0, 0%, 100%, .5); 109 | } 110 | 111 | .token.atrule, 112 | .token.attr-value, 113 | .token.keyword { 114 | color: #07a; 115 | } 116 | 117 | .token.function { 118 | color: #DD4A68; 119 | } 120 | 121 | .token.regex, 122 | .token.important, 123 | .token.variable { 124 | color: #e90; 125 | } 126 | 127 | .token.important, 128 | .token.bold { 129 | font-weight: bold; 130 | } 131 | .token.italic { 132 | font-style: italic; 133 | } 134 | 135 | .token.entity { 136 | cursor: help; 137 | } 138 | 139 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/codesample/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "codesample" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/codesample') 5 | // ES2015: 6 | // import 'tinymce/plugins/codesample' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/colorpicker/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "colorpicker" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/colorpicker') 5 | // ES2015: 6 | // import 'tinymce/plugins/colorpicker' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/colorpicker/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('colorpicker', function(editor) { 14 | function colorPickerCallback(callback, value) { 15 | function setColor(value) { 16 | var color = new tinymce.util.Color(value), rgb = color.toRgb(); 17 | 18 | win.fromJSON({ 19 | r: rgb.r, 20 | g: rgb.g, 21 | b: rgb.b, 22 | hex: color.toHex().substr(1) 23 | }); 24 | 25 | showPreview(color.toHex()); 26 | } 27 | 28 | function showPreview(hexColor) { 29 | win.find('#preview')[0].getEl().style.background = hexColor; 30 | } 31 | 32 | var win = editor.windowManager.open({ 33 | title: 'Color', 34 | items: { 35 | type: 'container', 36 | layout: 'flex', 37 | direction: 'row', 38 | align: 'stretch', 39 | padding: 5, 40 | spacing: 10, 41 | items: [ 42 | { 43 | type: 'colorpicker', 44 | value: value, 45 | onchange: function() { 46 | var rgb = this.rgb(); 47 | 48 | if (win) { 49 | win.find('#r').value(rgb.r); 50 | win.find('#g').value(rgb.g); 51 | win.find('#b').value(rgb.b); 52 | win.find('#hex').value(this.value().substr(1)); 53 | showPreview(this.value()); 54 | } 55 | } 56 | }, 57 | { 58 | type: 'form', 59 | padding: 0, 60 | labelGap: 5, 61 | defaults: { 62 | type: 'textbox', 63 | size: 7, 64 | value: '0', 65 | flex: 1, 66 | spellcheck: false, 67 | onchange: function() { 68 | var colorPickerCtrl = win.find('colorpicker')[0]; 69 | var name, value; 70 | 71 | name = this.name(); 72 | value = this.value(); 73 | 74 | if (name == "hex") { 75 | value = '#' + value; 76 | setColor(value); 77 | colorPickerCtrl.value(value); 78 | return; 79 | } 80 | 81 | value = { 82 | r: win.find('#r').value(), 83 | g: win.find('#g').value(), 84 | b: win.find('#b').value() 85 | }; 86 | 87 | colorPickerCtrl.value(value); 88 | setColor(value); 89 | } 90 | }, 91 | items: [ 92 | {name: 'r', label: 'R', autofocus: 1}, 93 | {name: 'g', label: 'G'}, 94 | {name: 'b', label: 'B'}, 95 | {name: 'hex', label: '#', value: '000000'}, 96 | {name: 'preview', type: 'container', border: 1} 97 | ] 98 | } 99 | ] 100 | }, 101 | onSubmit: function() { 102 | callback('#' + this.toJSON().hex); 103 | } 104 | }); 105 | 106 | setColor(value); 107 | } 108 | 109 | if (!editor.settings.color_picker_callback) { 110 | editor.settings.color_picker_callback = colorPickerCallback; 111 | } 112 | }); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/colorpicker/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("colorpicker",function(e){function t(t,n){function r(e){var t=new tinymce.util.Color(e),n=t.toRgb();o.fromJSON({r:n.r,g:n.g,b:n.b,hex:t.toHex().substr(1)}),i(t.toHex())}function i(e){o.find("#preview")[0].getEl().style.background=e}var o=e.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:n,onchange:function(){var e=this.rgb();o&&(o.find("#r").value(e.r),o.find("#g").value(e.g),o.find("#b").value(e.b),o.find("#hex").value(this.value().substr(1)),i(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var e,t,n=o.find("colorpicker")[0];return e=this.name(),t=this.value(),"hex"==e?(t="#"+t,r(t),void n.value(t)):(t={r:o.find("#r").value(),g:o.find("#g").value(),b:o.find("#b").value()},n.value(t),void r(t))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){t("#"+this.toJSON().hex)}});r(n)}e.settings.color_picker_callback||(e.settings.color_picker_callback=t)}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/contextmenu/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "contextmenu" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/contextmenu') 5 | // ES2015: 6 | // import 'tinymce/plugins/contextmenu' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/contextmenu/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('contextmenu', function(editor) { 14 | var menu, visibleState, contextmenuNeverUseNative = editor.settings.contextmenu_never_use_native; 15 | 16 | var isNativeOverrideKeyEvent = function (e) { 17 | return e.ctrlKey && !contextmenuNeverUseNative; 18 | }; 19 | 20 | var isMacWebKit = function () { 21 | return tinymce.Env.mac && tinymce.Env.webkit; 22 | }; 23 | 24 | var isContextMenuVisible = function () { 25 | return visibleState === true; 26 | }; 27 | 28 | /** 29 | * This takes care of a os x native issue where it expands the selection 30 | * to the word at the caret position to do "lookups". Since we are overriding 31 | * the context menu we also need to override this expanding so the behavior becomes 32 | * normalized. Firefox on os x doesn't expand to the word when using the context menu. 33 | */ 34 | editor.on('mousedown', function (e) { 35 | if (isMacWebKit() && e.button === 2 && !isNativeOverrideKeyEvent(e)) { 36 | if (editor.selection.isCollapsed()) { 37 | editor.once('contextmenu', function (e) { 38 | editor.selection.placeCaretAt(e.clientX, e.clientY); 39 | }); 40 | } 41 | } 42 | }); 43 | 44 | editor.on('contextmenu', function(e) { 45 | var contextmenu; 46 | 47 | if (isNativeOverrideKeyEvent(e)) { 48 | return; 49 | } 50 | 51 | e.preventDefault(); 52 | contextmenu = editor.settings.contextmenu || 'link openlink image inserttable | cell row column deletetable'; 53 | 54 | // Render menu 55 | if (!menu) { 56 | var items = []; 57 | 58 | tinymce.each(contextmenu.split(/[ ,]/), function(name) { 59 | var item = editor.menuItems[name]; 60 | 61 | if (name == '|') { 62 | item = {text: name}; 63 | } 64 | 65 | if (item) { 66 | item.shortcut = ''; // Hide shortcuts 67 | items.push(item); 68 | } 69 | }); 70 | 71 | for (var i = 0; i < items.length; i++) { 72 | if (items[i].text == '|') { 73 | if (i === 0 || i == items.length - 1) { 74 | items.splice(i, 1); 75 | } 76 | } 77 | } 78 | 79 | menu = new tinymce.ui.Menu({ 80 | items: items, 81 | context: 'contextmenu', 82 | classes: 'contextmenu' 83 | }).renderTo(); 84 | 85 | menu.on('hide', function (e) { 86 | if (e.control === this) { 87 | visibleState = false; 88 | } 89 | }); 90 | 91 | editor.on('remove', function() { 92 | menu.remove(); 93 | menu = null; 94 | }); 95 | 96 | } else { 97 | menu.show(); 98 | } 99 | 100 | // Position menu 101 | var pos = {x: e.pageX, y: e.pageY}; 102 | 103 | if (!editor.inline) { 104 | pos = tinymce.DOM.getPos(editor.getContentAreaContainer()); 105 | pos.x += e.clientX; 106 | pos.y += e.clientY; 107 | } 108 | 109 | menu.moveTo(pos.x, pos.y); 110 | visibleState = true; 111 | }); 112 | 113 | return { 114 | isContextMenuVisible: isContextMenuVisible 115 | }; 116 | }); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/contextmenu/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("contextmenu",function(e){var t,n,r=e.settings.contextmenu_never_use_native,i=function(e){return e.ctrlKey&&!r},o=function(){return tinymce.Env.mac&&tinymce.Env.webkit},a=function(){return n===!0};return e.on("mousedown",function(t){o()&&2===t.button&&!i(t)&&e.selection.isCollapsed()&&e.once("contextmenu",function(t){e.selection.placeCaretAt(t.clientX,t.clientY)})}),e.on("contextmenu",function(r){var o;if(!i(r)){if(r.preventDefault(),o=e.settings.contextmenu||"link openlink image inserttable | cell row column deletetable",t)t.show();else{var a=[];tinymce.each(o.split(/[ ,]/),function(t){var n=e.menuItems[t];"|"==t&&(n={text:t}),n&&(n.shortcut="",a.push(n))});for(var s=0;s'; 35 | }); 36 | 37 | emoticonsHtml += ''; 38 | }); 39 | 40 | emoticonsHtml += ''; 41 | 42 | return emoticonsHtml; 43 | } 44 | 45 | editor.addButton('emoticons', { 46 | type: 'panelbutton', 47 | panel: { 48 | role: 'application', 49 | autohide: true, 50 | html: getHtml, 51 | onclick: function(e) { 52 | var linkElm = editor.dom.getParent(e.target, 'a'); 53 | 54 | if (linkElm) { 55 | editor.insertContent( 56 | '' + linkElm.getAttribute('data-mce-alt') + '' 57 | ); 58 | 59 | this.hide(); 60 | } 61 | } 62 | }, 63 | tooltip: 'Emoticons' 64 | }); 65 | }); 66 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/emoticons/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("emoticons",function(e,t){function n(){var e;return e='',tinymce.each(r,function(n){e+="",tinymce.each(n,function(n){var r=t+"/img/smiley-"+n+".gif";e+=''}),e+=""}),e+="
"}var r=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];e.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:n,onclick:function(t){var n=e.dom.getParent(t.target,"a");n&&(e.insertContent(''+n.getAttribute('),this.hide())}},tooltip:"Emoticons"})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/fullpage/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "fullpage" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/fullpage') 5 | // ES2015: 6 | // import 'tinymce/plugins/fullpage' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/fullscreen/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "fullscreen" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/fullscreen') 5 | // ES2015: 6 | // import 'tinymce/plugins/fullscreen' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/fullscreen/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,r=document,i=r.body;return i.offsetWidth&&(e=i.offsetWidth,t=i.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){var e=tinymce.DOM.getViewPort();return{x:e.x,y:e.y}}function r(e){scrollTo(e.x,e.y)}function i(){function i(){f.setStyle(m,"height",t().h-(h.clientHeight-m.clientHeight))}var p,h,m,g,v=document.body,y=document.documentElement;d=!d,h=e.getContainer(),p=h.style,m=e.getContentAreaContainer().firstChild,g=m.style,d?(c=n(),o=g.width,a=g.height,g.width=g.height="100%",l=p.width,u=p.height,p.width=p.height="",f.addClass(v,"mce-fullscreen"),f.addClass(y,"mce-fullscreen"),f.addClass(h,"mce-fullscreen"),f.bind(window,"resize",i),i(),s=i):(g.width=o,g.height=a,l&&(p.width=l),u&&(p.height=u),f.removeClass(v,"mce-fullscreen"),f.removeClass(y,"mce-fullscreen"),f.removeClass(h,"mce-fullscreen"),f.unbind(window,"resize",s),r(c)),e.fire("FullscreenStateChanged",{state:d})}var o,a,s,l,u,c,d=!1,f=tinymce.DOM;if(!e.settings.inline)return e.on("init",function(){e.addShortcut("Ctrl+Shift+F","",i)}),e.on("remove",function(){s&&f.unbind(window,"resize",s)}),e.addCommand("mceFullScreen",i),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Shift+F",selectable:!0,onClick:function(){i(),e.focus()},onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Shift+F",onClick:i,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return d}}}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/hr/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "hr" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/hr') 5 | // ES2015: 6 | // import 'tinymce/plugins/hr' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/hr/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('hr', function(editor) { 14 | editor.addCommand('InsertHorizontalRule', function() { 15 | editor.execCommand('mceInsertContent', false, '


'); 16 | }); 17 | 18 | editor.addButton('hr', { 19 | icon: 'hr', 20 | tooltip: 'Horizontal line', 21 | cmd: 'InsertHorizontalRule' 22 | }); 23 | 24 | editor.addMenuItem('hr', { 25 | icon: 'hr', 26 | text: 'Horizontal line', 27 | cmd: 'InsertHorizontalRule', 28 | context: 'insert' 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("hr",function(e){e.addCommand("InsertHorizontalRule",function(){e.execCommand("mceInsertContent",!1,"
")}),e.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),e.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/image/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "image" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/image') 5 | // ES2015: 6 | // import 'tinymce/plugins/image' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/imagetools/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "imagetools" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/imagetools') 5 | // ES2015: 6 | // import 'tinymce/plugins/imagetools' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/importcss/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "importcss" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/importcss') 5 | // ES2015: 6 | // import 'tinymce/plugins/importcss' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/importcss/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("importcss",function(e){function t(e){var t=tinymce.Env.cacheSuffix;return"string"==typeof e&&(e=e.replace("?"+t,"").replace("&"+t,"")),e}function n(t){var n=e.settings,r=n.skin!==!1&&(n.skin||"lightgray");if(r){var i=n.skin_url;return i=i?e.documentBaseURI.toAbsolute(i):tinymce.baseURL+"/skins/"+r,t===i+"/content"+(e.inline?".inline":"")+".min.css"}return!1}function r(e){return"string"==typeof e?function(t){return t.indexOf(e)!==-1}:e instanceof RegExp?function(t){return e.test(t)}:e}function i(r,i){function o(e,r){var s,l=e.href;if(l=t(l),l&&i(l,r)&&!n(l)){p(e.imports,function(e){o(e,!0)});try{s=e.cssRules||e.rules}catch(e){}p(s,function(e){e.styleSheet?o(e.styleSheet,!0):e.selectorText&&p(e.selectorText.split(","),function(e){a.push(tinymce.trim(e))})})}}var a=[],s={};p(e.contentCSS,function(e){s[e]=!0}),i||(i=function(e,t){return t||s[e]});try{p(r.styleSheets,function(e){o(e)})}finally{}return a}function o(t){var n,r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(t);if(r){var i=r[1],o=r[2].substr(1).split(".").join(" "),a=tinymce.makeMap("a,img");return r[1]?(n={title:t},e.schema.getTextBlockElements()[i]?n.block=i:e.schema.getBlockElements()[i]||a[i.toLowerCase()]?n.selector=i:n.inline=i):r[2]&&(n={inline:"span",title:t.substr(1),classes:o}),e.settings.importcss_merge_classes!==!1?n.classes=o:n.attributes={"class":o},n}}function a(e,t){return tinymce.util.Tools.grep(e,function(e){return!e.filter||e.filter(t)})}function s(e){return tinymce.util.Tools.map(e,function(e){return tinymce.util.Tools.extend({},e,{original:e,selectors:{},filter:r(e.filter),item:{text:e.title,menu:[]}})})}function l(e,t){return null===t||e.settings.importcss_exclusive!==!1}function u(t,n,r){return!(l(e,n)?t in r:t in n.selectors)}function c(t,n,r){l(e,n)?r[t]=!0:n.selectors[t]=!0}function d(t,n,r){var i,a=e.settings;return i=r&&r.selector_converter?r.selector_converter:a.importcss_selector_converter?a.importcss_selector_converter:o,i.call(t,n,r)}var f=this,p=tinymce.each;e.on("renderFormatsMenu",function(t){var n=e.settings,o={},l=r(n.importcss_selector_filter),h=t.control,m=s(n.importcss_groups),g=function(t,n){if(u(t,n,o)){c(t,n,o);var r=d(f,t,n);if(r){var i=r.name||tinymce.DOM.uniqueId();return e.formatter.register(i,r),tinymce.extend({},h.settings.itemDefaults,{text:r.title,format:i})}}return null};e.settings.importcss_append||h.items().remove(),p(i(t.doc||e.getDoc(),r(n.importcss_file_filter)),function(e){if(e.indexOf(".mce-")===-1&&(!l||l(e))){var t=a(m,e);if(t.length>0)tinymce.util.Tools.each(t,function(t){var n=g(e,t);n&&t.item.menu.push(n)});else{var n=g(e,null);n&&h.add(n)}}}),p(m,function(e){e.item.menu.length>0&&h.add(e.item)}),t.control.renderNew()}),f.convertSelectorToFormat=o}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/insertdatetime/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "insertdatetime" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/insertdatetime') 5 | // ES2015: 6 | // import 'tinymce/plugins/insertdatetime' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/insertdatetime/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("insertdatetime",function(e){function t(t,n){function r(e,t){if(e=""+e,e.length'+r+"";var o=e.dom.getParent(e.selection.getStart(),"time");if(o)return void e.dom.setOuterHTML(o,r)}e.insertContent(r)}var r,i,o="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),a="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),s="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),l="January February March April May June July August September October November December".split(" "),u=[];e.addCommand("mceInsertDate",function(){n(e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),e.addCommand("mceInsertTime",function(){n(e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S")))}),e.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",onclick:function(){n(r||i)},menu:u}),tinymce.each(e.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(e){i||(i=e),u.push({text:t(e),onclick:function(){r=e,n(e)}})}),e.addMenuItem("insertdatetime",{icon:"date",text:"Date/time",menu:u,context:"insert"})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/layer/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "layer" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/layer') 5 | // ES2015: 6 | // import 'tinymce/plugins/layer' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/layer/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("layer",function(a){function b(a){do if(a.className&&a.className.indexOf("mceItemLayer")!=-1)return a;while(a=a.parentNode)}function c(b){var c=a.dom;tinymce.each(c.select("div,p",b),function(a){/^(absolute|relative|fixed)$/i.test(a.style.position)&&(a.hasVisual?c.addClass(a,"mceItemVisualAid"):c.removeClass(a,"mceItemVisualAid"),c.addClass(a,"mceItemLayer"))})}function d(c){var d,e,f=[],g=b(a.selection.getNode()),h=-1,i=-1;for(e=[],tinymce.walk(a.getBody(),function(a){1==a.nodeType&&/^(absolute|relative|static)$/i.test(a.style.position)&&e.push(a)},"childNodes"),d=0;d-1?(e[h].style.zIndex=f[i],e[i].style.zIndex=f[h]):f[h]>0&&(e[h].style.zIndex=f[h]-1)}else{for(d=0;df[h]){i=d;break}i>-1?(e[h].style.zIndex=f[i],e[i].style.zIndex=f[h]):e[h].style.zIndex=f[h]+1}a.execCommand("mceRepaint")}function e(){var b=a.dom,c=b.getPos(b.getParent(a.selection.getNode(),"*")),d=a.getBody();a.dom.add(d,"div",{style:{position:"absolute",left:c.x,top:c.y>20?c.y:20,width:100,height:100},class:"mceItemVisualAid mceItemLayer"},a.selection.getContent()||a.getLang("layer.content")),tinymce.Env.ie&&b.setHTML(d,d.innerHTML)}function f(){var c=b(a.selection.getNode());c||(c=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")),c&&("absolute"==c.style.position.toLowerCase()?(a.dom.setStyles(c,{position:"",left:"",top:"",width:"",height:""}),a.dom.removeClass(c,"mceItemVisualAid"),a.dom.removeClass(c,"mceItemLayer")):(c.style.left||(c.style.left="20px"),c.style.top||(c.style.top="20px"),c.style.width||(c.style.width=c.width?c.width+"px":"100px"),c.style.height||(c.style.height=c.height?c.height+"px":"100px"),c.style.position="absolute",a.dom.setAttrib(c,"data-mce-style",""),a.addVisual(a.getBody())),a.execCommand("mceRepaint"),a.nodeChanged())}a.addCommand("mceInsertLayer",e),a.addCommand("mceMoveForward",function(){d(1)}),a.addCommand("mceMoveBackward",function(){d(-1)}),a.addCommand("mceMakeAbsolute",function(){f()}),a.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"}),a.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"}),a.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"}),a.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"}),a.on("init",function(){tinymce.Env.ie&&a.getDoc().execCommand("2D-Position",!1,!0)}),a.on("mouseup",function(c){var d=b(c.target);d&&a.dom.setAttrib(d,"data-mce-style","")}),a.on("mousedown",function(c){var d,e=c.target,f=a.getDoc();tinymce.Env.gecko&&(b(e)?"on"!==f.designMode&&(f.designMode="on",e=f.body,d=e.parentNode,d.removeChild(e),d.appendChild(e)):"on"==f.designMode&&(f.designMode="off"))}),a.on("NodeChange",c)}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/legacyoutput/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "legacyoutput" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/legacyoutput') 5 | // ES2015: 6 | // import 'tinymce/plugins/legacyoutput' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/legacyoutput/plugin.min.js: -------------------------------------------------------------------------------- 1 | !function(e){e.PluginManager.add("legacyoutput",function(t,n,r){t.settings.inline_styles=!1,t.on("init",function(){var n="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",r=e.explode(t.settings.font_size_style_values),i=t.schema;t.formatter.register({alignleft:{selector:n,attributes:{align:"left"}},aligncenter:{selector:n,attributes:{align:"center"}},alignright:{selector:n,attributes:{align:"right"}},alignjustify:{selector:n,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(t){return e.inArray(r,t.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),e.each("b,i,u,strike".split(","),function(e){i.addValidElements(e+"[*]")}),i.getElementRule("font")||i.addValidElements("font[face|size|color|style]"),e.each(n.split(","),function(e){var t=i.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})}),t.addButton("fontsizeselect",function(){var e=[],n="8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7",r=t.settings.fontsize_formats||n;return t.$.each(r.split(" "),function(t,n){var r=n,i=n,o=n.split("=");o.length>1&&(r=o[0],i=o[1]),e.push({text:r,value:i})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:e,fixedWidth:!0,onPostRender:function(){var e=this;t.on("NodeChange",function(){var n;n=t.dom.getParent(t.selection.getNode(),"font"),n?e.value(n.size):e.value("")})},onclick:function(e){e.control.settings.value&&t.execCommand("FontSize",!1,e.control.settings.value)}}}),t.addButton("fontselect",function(){function e(e){e=e.replace(/;$/,"").split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}var n="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",i=[],o=e(t.settings.font_formats||n);return r.each(o,function(e,t){i.push({text:{raw:t[0]},value:t[1],textStyle:t[1].indexOf("dings")==-1?"font-family:"+t[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:i,fixedWidth:!0,onPostRender:function(){var e=this;t.on("NodeChange",function(){var n;n=t.dom.getParent(t.selection.getNode(),"font"),n?e.value(n.face):e.value("")})},onselect:function(e){e.control.settings.value&&t.execCommand("FontName",!1,e.control.settings.value)}}})})}(tinymce); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/link/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "link" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/link') 5 | // ES2015: 6 | // import 'tinymce/plugins/link' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/lists/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "lists" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/lists') 5 | // ES2015: 6 | // import 'tinymce/plugins/lists' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/media/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "media" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/media') 5 | // ES2015: 6 | // import 'tinymce/plugins/media' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/nonbreaking/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "nonbreaking" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/nonbreaking') 5 | // ES2015: 6 | // import 'tinymce/plugins/nonbreaking' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/nonbreaking/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('nonbreaking', function(editor) { 14 | var setting = editor.getParam('nonbreaking_force_tab'); 15 | 16 | editor.addCommand('mceNonBreaking', function() { 17 | editor.insertContent( 18 | (editor.plugins.visualchars && editor.plugins.visualchars.state) ? 19 | ' ' : ' ' 20 | ); 21 | 22 | editor.dom.setAttrib(editor.dom.select('span.mce-nbsp'), 'data-mce-bogus', '1'); 23 | }); 24 | 25 | editor.addButton('nonbreaking', { 26 | title: 'Nonbreaking space', 27 | cmd: 'mceNonBreaking' 28 | }); 29 | 30 | editor.addMenuItem('nonbreaking', { 31 | text: 'Nonbreaking space', 32 | cmd: 'mceNonBreaking', 33 | context: 'insert' 34 | }); 35 | 36 | if (setting) { 37 | var spaces = +setting > 1 ? +setting : 3; // defaults to 3 spaces if setting is true (or 1) 38 | 39 | editor.on('keydown', function(e) { 40 | if (e.keyCode == 9) { 41 | 42 | if (e.shiftKey) { 43 | return; 44 | } 45 | 46 | e.preventDefault(); 47 | for (var i = 0; i < spaces; i++) { 48 | editor.execCommand('mceNonBreaking'); 49 | } 50 | } 51 | }); 52 | } 53 | }); 54 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("nonbreaking",function(e){var t=e.getParam("nonbreaking_force_tab");if(e.addCommand("mceNonBreaking",function(){e.insertContent(e.plugins.visualchars&&e.plugins.visualchars.state?' ':" "),e.dom.setAttrib(e.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),e.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),e.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),t){var n=+t>1?+t:3;e.on("keydown",function(t){if(9==t.keyCode){if(t.shiftKey)return;t.preventDefault();for(var r=0;r0?a.charAt(r-1):"";if('"'===i)return t;if(">"===i){var o=a.lastIndexOf("<",r);if(o!==-1){var l=a.substring(o,r);if(l.indexOf('contenteditable="false"')!==-1)return t}}return''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""}var r=o.length,a=t.content,s=tinymce.trim(i);if("raw"!=t.format){for(;r--;)a=a.replace(o[r],n);t.content=a}}var r,i,o,a="contenteditable";r=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",i=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";var s=t(r),l=t(i);o=e.getParam("noneditable_regexp"),o&&!o.length&&(o=[o]),e.on("PreInit",function(){o&&e.on("BeforeSetContent",n),e.parser.addAttributeFilter("class",function(e){for(var t,n=e.length;n--;)t=e[n],s(t)?t.attr(a,"true"):l(t)&&t.attr(a,"false")}),e.serializer.addAttributeFilter(a,function(e){for(var t,n=e.length;n--;)t=e[n],(s(t)||l(t))&&(o&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):t.attr(a,null))})})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/pagebreak/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "pagebreak" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/pagebreak') 5 | // ES2015: 6 | // import 'tinymce/plugins/pagebreak' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/pagebreak/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('pagebreak', function(editor) { 14 | var pageBreakClass = 'mce-pagebreak', separatorHtml = editor.getParam('pagebreak_separator', ''); 15 | 16 | var pageBreakSeparatorRegExp = new RegExp(separatorHtml.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) { 17 | return '\\' + a; 18 | }), 'gi'); 19 | 20 | var pageBreakPlaceHolderHtml = ''; 22 | 23 | // Register commands 24 | editor.addCommand('mcePageBreak', function() { 25 | if (editor.settings.pagebreak_split_block) { 26 | editor.insertContent('

' + pageBreakPlaceHolderHtml + '

'); 27 | } else { 28 | editor.insertContent(pageBreakPlaceHolderHtml); 29 | } 30 | }); 31 | 32 | // Register buttons 33 | editor.addButton('pagebreak', { 34 | title: 'Page break', 35 | cmd: 'mcePageBreak' 36 | }); 37 | 38 | editor.addMenuItem('pagebreak', { 39 | text: 'Page break', 40 | icon: 'pagebreak', 41 | cmd: 'mcePageBreak', 42 | context: 'insert' 43 | }); 44 | 45 | editor.on('ResolveName', function(e) { 46 | if (e.target.nodeName == 'IMG' && editor.dom.hasClass(e.target, pageBreakClass)) { 47 | e.name = 'pagebreak'; 48 | } 49 | }); 50 | 51 | editor.on('click', function(e) { 52 | e = e.target; 53 | 54 | if (e.nodeName === 'IMG' && editor.dom.hasClass(e, pageBreakClass)) { 55 | editor.selection.select(e); 56 | } 57 | }); 58 | 59 | editor.on('BeforeSetContent', function(e) { 60 | e.content = e.content.replace(pageBreakSeparatorRegExp, pageBreakPlaceHolderHtml); 61 | }); 62 | 63 | editor.on('PreInit', function() { 64 | editor.serializer.addNodeFilter('img', function(nodes) { 65 | var i = nodes.length, node, className; 66 | 67 | while (i--) { 68 | node = nodes[i]; 69 | className = node.attr('class'); 70 | if (className && className.indexOf('mce-pagebreak') !== -1) { 71 | // Replace parent block node if pagebreak_split_block is enabled 72 | var parentNode = node.parent; 73 | if (editor.schema.getBlockElements()[parentNode.name] && editor.settings.pagebreak_split_block) { 74 | parentNode.type = 3; 75 | parentNode.value = separatorHtml; 76 | parentNode.raw = true; 77 | node.remove(); 78 | continue; 79 | } 80 | 81 | node.type = 3; 82 | node.value = separatorHtml; 83 | node.raw = true; 84 | } 85 | } 86 | }); 87 | }); 88 | }); 89 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/pagebreak/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("pagebreak",function(e){var t="mce-pagebreak",n=e.getParam("pagebreak_separator",""),r=new RegExp(n.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),i='';e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("

"+i+"

"):e.insertContent(i)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(n){"IMG"==n.target.nodeName&&e.dom.hasClass(n.target,t)&&(n.name="pagebreak")}),e.on("click",function(n){n=n.target,"IMG"===n.nodeName&&e.dom.hasClass(n,t)&&e.selection.select(n)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(r,i)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(t){for(var r,i,o=t.length;o--;)if(r=t[o],i=r.attr("class"),i&&i.indexOf("mce-pagebreak")!==-1){var a=r.parent;if(e.schema.getBlockElements()[a.name]&&e.settings.pagebreak_split_block){a.type=3,a.value=n,a.raw=!0,r.remove();continue}r.type=3,r.value=n,r.raw=!0}})})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/paste/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "paste" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/paste') 5 | // ES2015: 6 | // import 'tinymce/plugins/paste' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/preview/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "preview" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/preview') 5 | // ES2015: 6 | // import 'tinymce/plugins/preview' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/preview/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('preview', function(editor) { 14 | var settings = editor.settings, sandbox = !tinymce.Env.ie; 15 | 16 | editor.addCommand('mcePreview', function() { 17 | editor.windowManager.open({ 18 | title: 'Preview', 19 | width: parseInt(editor.getParam("plugin_preview_width", "650"), 10), 20 | height: parseInt(editor.getParam("plugin_preview_height", "500"), 10), 21 | html: '', 22 | buttons: { 23 | text: 'Close', 24 | onclick: function() { 25 | this.parent().parent().close(); 26 | } 27 | }, 28 | onPostRender: function() { 29 | var previewHtml, headHtml = ''; 30 | 31 | headHtml += ''; 32 | 33 | tinymce.each(editor.contentCSS, function(url) { 34 | headHtml += ''; 35 | }); 36 | 37 | var bodyId = settings.body_id || 'tinymce'; 38 | if (bodyId.indexOf('=') != -1) { 39 | bodyId = editor.getParam('body_id', '', 'hash'); 40 | bodyId = bodyId[editor.id] || bodyId; 41 | } 42 | 43 | var bodyClass = settings.body_class || ''; 44 | if (bodyClass.indexOf('=') != -1) { 45 | bodyClass = editor.getParam('body_class', '', 'hash'); 46 | bodyClass = bodyClass[editor.id] || ''; 47 | } 48 | 49 | var preventClicksOnLinksScript = ( 50 | ' ' 59 | ); 60 | 61 | var dirAttr = editor.settings.directionality ? ' dir="' + editor.settings.directionality + '"' : ''; 62 | 63 | previewHtml = ( 64 | '' + 65 | '' + 66 | '' + 67 | headHtml + 68 | '' + 69 | '' + 70 | editor.getContent() + 71 | preventClicksOnLinksScript + 72 | '' + 73 | '' 74 | ); 75 | 76 | if (!sandbox) { 77 | // IE 6-11 doesn't support data uris on iframes 78 | // so I guess they will have to be less secure since we can't sandbox on those 79 | // TODO: Use sandbox if future versions of IE supports iframes with data: uris. 80 | var doc = this.getEl('body').firstChild.contentWindow.document; 81 | doc.open(); 82 | doc.write(previewHtml); 83 | doc.close(); 84 | } else { 85 | this.getEl('body').firstChild.src = 'data:text/html;charset=utf-8,' + encodeURIComponent(previewHtml); 86 | } 87 | } 88 | }); 89 | }); 90 | 91 | editor.addButton('preview', { 92 | title: 'Preview', 93 | cmd: 'mcePreview' 94 | }); 95 | 96 | editor.addMenuItem('preview', { 97 | text: 'Preview', 98 | cmd: 'mcePreview', 99 | context: 'view' 100 | }); 101 | }); 102 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/preview/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("preview",function(e){var t=e.settings,n=!tinymce.Env.ie;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var r,i="";i+='',tinymce.each(e.contentCSS,function(t){i+=''});var o=t.body_id||"tinymce";o.indexOf("=")!=-1&&(o=e.getParam("body_id","","hash"),o=o[e.id]||o);var a=t.body_class||"";a.indexOf("=")!=-1&&(a=e.getParam("body_class","","hash"),a=a[e.id]||"");var s=' ',l=e.settings.directionality?' dir="'+e.settings.directionality+'"':"";if(r=""+i+'"+e.getContent()+s+"",n)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(r);else{var u=this.getEl("body").firstChild.contentWindow.document;u.open(),u.write(r),u.close()}}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/print/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "print" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/print') 5 | // ES2015: 6 | // import 'tinymce/plugins/print' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/print/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('print', function(editor) { 14 | editor.addCommand('mcePrint', function() { 15 | editor.getWin().print(); 16 | }); 17 | 18 | editor.addButton('print', { 19 | title: 'Print', 20 | cmd: 'mcePrint' 21 | }); 22 | 23 | editor.addShortcut('Meta+P', '', 'mcePrint'); 24 | 25 | editor.addMenuItem('print', { 26 | text: 'Print', 27 | cmd: 'mcePrint', 28 | icon: 'print', 29 | shortcut: 'Meta+P', 30 | context: 'file' 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/print/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("print",function(e){e.addCommand("mcePrint",function(){e.getWin().print()}),e.addButton("print",{title:"Print",cmd:"mcePrint"}),e.addShortcut("Meta+P","","mcePrint"),e.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Meta+P",context:"file"})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/save/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "save" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/save') 5 | // ES2015: 6 | // import 'tinymce/plugins/save' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/save/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('save', function(editor) { 14 | function save() { 15 | var formObj; 16 | 17 | formObj = tinymce.DOM.getParent(editor.id, 'form'); 18 | 19 | if (editor.getParam("save_enablewhendirty", true) && !editor.isDirty()) { 20 | return; 21 | } 22 | 23 | tinymce.triggerSave(); 24 | 25 | // Use callback instead 26 | if (editor.getParam("save_onsavecallback")) { 27 | editor.execCallback('save_onsavecallback', editor); 28 | editor.nodeChanged(); 29 | return; 30 | } 31 | 32 | if (formObj) { 33 | editor.setDirty(false); 34 | 35 | if (!formObj.onsubmit || formObj.onsubmit()) { 36 | if (typeof formObj.submit == "function") { 37 | formObj.submit(); 38 | } else { 39 | displayErrorMessage(editor.translate("Error: Form submit field collision.")); 40 | } 41 | } 42 | 43 | editor.nodeChanged(); 44 | } else { 45 | displayErrorMessage(editor.translate("Error: No form element found.")); 46 | } 47 | } 48 | 49 | function displayErrorMessage(message) { 50 | editor.notificationManager.open({ 51 | text: message, 52 | type: 'error' 53 | }); 54 | } 55 | 56 | function cancel() { 57 | var h = tinymce.trim(editor.startContent); 58 | 59 | // Use callback instead 60 | if (editor.getParam("save_oncancelcallback")) { 61 | editor.execCallback('save_oncancelcallback', editor); 62 | return; 63 | } 64 | 65 | editor.setContent(h); 66 | editor.undoManager.clear(); 67 | editor.nodeChanged(); 68 | } 69 | 70 | function stateToggle() { 71 | var self = this; 72 | 73 | editor.on('nodeChange dirty', function() { 74 | self.disabled(editor.getParam("save_enablewhendirty", true) && !editor.isDirty()); 75 | }); 76 | } 77 | 78 | editor.addCommand('mceSave', save); 79 | editor.addCommand('mceCancel', cancel); 80 | 81 | editor.addButton('save', { 82 | icon: 'save', 83 | text: 'Save', 84 | cmd: 'mceSave', 85 | disabled: true, 86 | onPostRender: stateToggle 87 | }); 88 | 89 | editor.addButton('cancel', { 90 | text: 'Cancel', 91 | icon: false, 92 | cmd: 'mceCancel', 93 | disabled: true, 94 | onPostRender: stateToggle 95 | }); 96 | 97 | editor.addShortcut('Meta+S', '', 'mceSave'); 98 | }); 99 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/save/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("save",function(e){function t(){var t;if(t=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty())return tinymce.triggerSave(),e.getParam("save_onsavecallback")?(e.execCallback("save_onsavecallback",e),void e.nodeChanged()):void(t?(e.setDirty(!1),t.onsubmit&&!t.onsubmit()||("function"==typeof t.submit?t.submit():n(e.translate("Error: Form submit field collision."))),e.nodeChanged()):n(e.translate("Error: No form element found.")))}function n(t){e.notificationManager.open({text:t,type:"error"})}function r(){var t=tinymce.trim(e.startContent);return e.getParam("save_oncancelcallback")?void e.execCallback("save_oncancelcallback",e):(e.setContent(t),e.undoManager.clear(),void e.nodeChanged())}function i(){var t=this;e.on("nodeChange dirty",function(){t.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",t),e.addCommand("mceCancel",r),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:i}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:i}),e.addShortcut("Meta+S","","mceSave")}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/searchreplace/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "searchreplace" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/searchreplace') 5 | // ES2015: 6 | // import 'tinymce/plugins/searchreplace' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/spellchecker/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "spellchecker" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/spellchecker') 5 | // ES2015: 6 | // import 'tinymce/plugins/spellchecker' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/tabfocus/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "tabfocus" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/tabfocus') 5 | // ES2015: 6 | // import 'tinymce/plugins/tabfocus' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/tabfocus/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('tabfocus', function(editor) { 14 | var DOM = tinymce.DOM, each = tinymce.each, explode = tinymce.explode; 15 | 16 | function tabCancel(e) { 17 | if (e.keyCode === 9 && !e.ctrlKey && !e.altKey && !e.metaKey) { 18 | e.preventDefault(); 19 | } 20 | } 21 | 22 | function tabHandler(e) { 23 | var x, el, v, i; 24 | 25 | if (e.keyCode !== 9 || e.ctrlKey || e.altKey || e.metaKey || e.isDefaultPrevented()) { 26 | return; 27 | } 28 | 29 | function find(direction) { 30 | el = DOM.select(':input:enabled,*[tabindex]:not(iframe)'); 31 | 32 | function canSelectRecursive(e) { 33 | return e.nodeName === "BODY" || (e.type != 'hidden' && 34 | e.style.display != "none" && 35 | e.style.visibility != "hidden" && canSelectRecursive(e.parentNode)); 36 | } 37 | 38 | function canSelect(el) { 39 | return /INPUT|TEXTAREA|BUTTON/.test(el.tagName) && tinymce.get(e.id) && el.tabIndex != -1 && canSelectRecursive(el); 40 | } 41 | 42 | each(el, function(e, i) { 43 | if (e.id == editor.id) { 44 | x = i; 45 | return false; 46 | } 47 | }); 48 | if (direction > 0) { 49 | for (i = x + 1; i < el.length; i++) { 50 | if (canSelect(el[i])) { 51 | return el[i]; 52 | } 53 | } 54 | } else { 55 | for (i = x - 1; i >= 0; i--) { 56 | if (canSelect(el[i])) { 57 | return el[i]; 58 | } 59 | } 60 | } 61 | 62 | return null; 63 | } 64 | 65 | v = explode(editor.getParam('tab_focus', editor.getParam('tabfocus_elements', ':prev,:next'))); 66 | 67 | if (v.length == 1) { 68 | v[1] = v[0]; 69 | v[0] = ':prev'; 70 | } 71 | 72 | // Find element to focus 73 | if (e.shiftKey) { 74 | if (v[0] == ':prev') { 75 | el = find(-1); 76 | } else { 77 | el = DOM.get(v[0]); 78 | } 79 | } else { 80 | if (v[1] == ':next') { 81 | el = find(1); 82 | } else { 83 | el = DOM.get(v[1]); 84 | } 85 | } 86 | 87 | if (el) { 88 | var focusEditor = tinymce.get(el.id || el.name); 89 | 90 | if (el.id && focusEditor) { 91 | focusEditor.focus(); 92 | } else { 93 | tinymce.util.Delay.setTimeout(function() { 94 | if (!tinymce.Env.webkit) { 95 | window.focus(); 96 | } 97 | 98 | el.focus(); 99 | }, 10); 100 | } 101 | 102 | e.preventDefault(); 103 | } 104 | } 105 | 106 | editor.on('init', function() { 107 | if (editor.inline) { 108 | // Remove default tabIndex in inline mode 109 | tinymce.DOM.setAttrib(editor.getBody(), 'tabIndex', null); 110 | } 111 | 112 | editor.on('keyup', tabCancel); 113 | 114 | if (tinymce.Env.gecko) { 115 | editor.on('keypress keydown', tabHandler); 116 | } else { 117 | editor.on('keydown', tabHandler); 118 | } 119 | }); 120 | }); 121 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/tabfocus/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("tabfocus",function(e){function t(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function n(t){function n(n){function o(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&o(e.parentNode)}function l(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&tinymce.get(t.id)&&e.tabIndex!=-1&&o(e)}if(s=r.select(":input:enabled,*[tabindex]:not(iframe)"),i(s,function(t,n){if(t.id==e.id)return a=n,!1}),n>0){for(u=a+1;u=0;u--)if(l(s[u]))return s[u];return null}var a,s,l,u;if(!(9!==t.keyCode||t.ctrlKey||t.altKey||t.metaKey||t.isDefaultPrevented())&&(l=o(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==l.length&&(l[1]=l[0],l[0]=":prev"),s=t.shiftKey?":prev"==l[0]?n(-1):r.get(l[0]):":next"==l[1]?n(1):r.get(l[1]))){var c=tinymce.get(s.id||s.name);s.id&&c?c.focus():tinymce.util.Delay.setTimeout(function(){tinymce.Env.webkit||window.focus(),s.focus()},10),t.preventDefault()}}var r=tinymce.DOM,i=tinymce.each,o=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null),e.on("keyup",t),tinymce.Env.gecko?e.on("keypress keydown",n):e.on("keydown",n)})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/table/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "table" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/table') 5 | // ES2015: 6 | // import 'tinymce/plugins/table' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/template/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "template" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/template') 5 | // ES2015: 6 | // import 'tinymce/plugins/template' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/textcolor/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "textcolor" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/textcolor') 5 | // ES2015: 6 | // import 'tinymce/plugins/textcolor' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/textpattern/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "textpattern" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/textpattern') 5 | // ES2015: 6 | // import 'tinymce/plugins/textpattern' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/textpattern/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("textpattern",function(e){function t(){return u&&(l.sort(function(e,t){return e.start.length>t.start.length?-1:e.start.length',i="";return r+e.dom.encode(n)+i}function u(e){var t=c(e);return'
'+t+"
"}function c(e){var t,n,r,i,o="",u=a(e),c=s(u)-1;if(!u.length)return"";for(o+=l(e.headerTag,tinymce.translate("Table of Contents")),t=0;t";else for(n=c;n
  • ";if(o+=''+r.title+"",i!==r.level&&i)for(n=r.level;n>i;n--)o+="
  • ";else o+="
  • ",i||(o+="");c=r.level}return o}var d,f=e.$,p={depth:3,headerTag:"h2",className:"mce-toc"},h=function(e){var t=0;return function(){var n=(new Date).getTime().toString(32);return e+n+(t++).toString(32)}},m=h("mcetoc_");e.on("PreInit",function(){var n=e.settings,r=parseInt(n.toc_depth,10)||0;d={depth:r>=1&&r<=9?r:p.depth,headerTag:t(n.toc_header)?n.toc_header:p.headerTag,className:n.toc_class?e.dom.encode(n.toc_class):p.className}}),e.on("PreProcess",function(e){var t=f("."+d.className,e.node);t.length&&(t.removeAttr("contentEditable"),t.find("[contenteditable]").removeAttr("contentEditable"))}),e.on("SetContent",function(){var e=f("."+d.className);e.length&&(e.attr("contentEditable",!1),e.children(":first-child").attr("contentEditable",!0))});var g=function(t){return!t.length||e.dom.getParents(t[0],".mce-offscreen-selection").length>0};e.addCommand("mceInsertToc",function(){var t=f("."+d.className);g(t)?e.insertContent(u(d)):e.execCommand("mceUpdateToc")}),e.addCommand("mceUpdateToc",function(){var t=f("."+d.className);t.length&&e.undoManager.transact(function(){t.html(c(d))})}),e.addButton("toc",{tooltip:"Table of Contents",cmd:"mceInsertToc",icon:"toc",onPostRender:r}),e.addButton("tocupdate",{tooltip:"Update",cmd:"mceUpdateToc",icon:"reload"}),e.addContextToolbar(n,"tocupdate"),e.addMenuItem("toc",{text:"Table of Contents",context:"insert",cmd:"mceInsertToc",onPostRender:r})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/visualblocks/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "visualblocks" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/visualblocks') 5 | // ES2015: 6 | // import 'tinymce/plugins/visualblocks' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/visualblocks/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('visualblocks', function(editor, url) { 14 | var cssId, visualBlocksMenuItem, enabled; 15 | 16 | // We don't support older browsers like IE6/7 and they don't provide prototypes for DOM objects 17 | if (!window.NodeList) { 18 | return; 19 | } 20 | 21 | function toggleActiveState() { 22 | var self = this; 23 | 24 | self.active(enabled); 25 | 26 | editor.on('VisualBlocks', function() { 27 | self.active(editor.dom.hasClass(editor.getBody(), 'mce-visualblocks')); 28 | }); 29 | } 30 | 31 | editor.addCommand('mceVisualBlocks', function() { 32 | var dom = editor.dom, linkElm; 33 | 34 | if (!cssId) { 35 | cssId = dom.uniqueId(); 36 | linkElm = dom.create('link', { 37 | id: cssId, 38 | rel: 'stylesheet', 39 | href: url + '/css/visualblocks.css' 40 | }); 41 | 42 | editor.getDoc().getElementsByTagName('head')[0].appendChild(linkElm); 43 | } 44 | 45 | // Toggle on/off visual blocks while computing previews 46 | editor.on("PreviewFormats AfterPreviewFormats", function(e) { 47 | if (enabled) { 48 | dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type == "afterpreviewformats"); 49 | } 50 | }); 51 | 52 | dom.toggleClass(editor.getBody(), 'mce-visualblocks'); 53 | enabled = editor.dom.hasClass(editor.getBody(), 'mce-visualblocks'); 54 | 55 | if (visualBlocksMenuItem) { 56 | visualBlocksMenuItem.active(dom.hasClass(editor.getBody(), 'mce-visualblocks')); 57 | } 58 | 59 | editor.fire('VisualBlocks'); 60 | }); 61 | 62 | editor.addButton('visualblocks', { 63 | title: 'Show blocks', 64 | cmd: 'mceVisualBlocks', 65 | onPostRender: toggleActiveState 66 | }); 67 | 68 | editor.addMenuItem('visualblocks', { 69 | text: 'Show blocks', 70 | cmd: 'mceVisualBlocks', 71 | onPostRender: toggleActiveState, 72 | selectable: true, 73 | context: 'view', 74 | prependToContext: true 75 | }); 76 | 77 | editor.on('init', function() { 78 | if (editor.settings.visualblocks_default_state) { 79 | editor.execCommand('mceVisualBlocks', false, null, {skip_focus: true}); 80 | } 81 | }); 82 | 83 | editor.on('remove', function() { 84 | editor.dom.removeClass(editor.getBody(), 'mce-visualblocks'); 85 | }); 86 | }); 87 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/visualblocks/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("visualblocks",function(e,t){function n(){var t=this;t.active(o),e.on("VisualBlocks",function(){t.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var r,i,o;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var n,a=e.dom;r||(r=a.uniqueId(),n=a.create("link",{id:r,rel:"stylesheet",href:t+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(n)),e.on("PreviewFormats AfterPreviewFormats",function(t){o&&a.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==t.type)}),a.toggleClass(e.getBody(),"mce-visualblocks"),o=e.dom.hasClass(e.getBody(),"mce-visualblocks"),i&&i.active(a.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/visualchars/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "visualchars" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/visualchars') 5 | // ES2015: 6 | // import 'tinymce/plugins/visualchars' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/visualchars/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * plugin.js 3 | * 4 | * Released under LGPL License. 5 | * Copyright (c) 1999-2015 Ephox Corp. All rights reserved 6 | * 7 | * License: http://www.tinymce.com/license 8 | * Contributing: http://www.tinymce.com/contributing 9 | */ 10 | 11 | /*global tinymce:true */ 12 | 13 | tinymce.PluginManager.add('visualchars', function(editor) { 14 | var self = this, state; 15 | 16 | function toggleVisualChars(addBookmark) { 17 | var node, nodeList, i, body = editor.getBody(), nodeValue, selection = editor.selection, div, bookmark; 18 | var charMap, visualCharsRegExp; 19 | 20 | charMap = { 21 | '\u00a0': 'nbsp', 22 | '\u00ad': 'shy' 23 | }; 24 | 25 | function wrapCharWithSpan(value) { 26 | return '' + value + ''; 27 | } 28 | 29 | function compileCharMapToRegExp() { 30 | var key, regExp = ''; 31 | 32 | for (key in charMap) { 33 | regExp += key; 34 | } 35 | 36 | return new RegExp('[' + regExp + ']', 'g'); 37 | } 38 | 39 | function compileCharMapToCssSelector() { 40 | var key, selector = ''; 41 | 42 | for (key in charMap) { 43 | if (selector) { 44 | selector += ','; 45 | } 46 | 47 | selector += 'span.mce-' + charMap[key]; 48 | } 49 | 50 | return selector; 51 | } 52 | 53 | state = !state; 54 | self.state = state; 55 | editor.fire('VisualChars', {state: state}); 56 | visualCharsRegExp = compileCharMapToRegExp(); 57 | 58 | if (addBookmark) { 59 | bookmark = selection.getBookmark(); 60 | } 61 | 62 | if (state) { 63 | nodeList = []; 64 | tinymce.walk(body, function(n) { 65 | if (n.nodeType == 3 && n.nodeValue && visualCharsRegExp.test(n.nodeValue)) { 66 | nodeList.push(n); 67 | } 68 | }, 'childNodes'); 69 | 70 | for (i = 0; i < nodeList.length; i++) { 71 | nodeValue = nodeList[i].nodeValue; 72 | nodeValue = nodeValue.replace(visualCharsRegExp, wrapCharWithSpan); 73 | 74 | div = editor.dom.create('div', null, nodeValue); 75 | while ((node = div.lastChild)) { 76 | editor.dom.insertAfter(node, nodeList[i]); 77 | } 78 | 79 | editor.dom.remove(nodeList[i]); 80 | } 81 | } else { 82 | nodeList = editor.dom.select(compileCharMapToCssSelector(), body); 83 | 84 | for (i = nodeList.length - 1; i >= 0; i--) { 85 | editor.dom.remove(nodeList[i], 1); 86 | } 87 | } 88 | 89 | selection.moveToBookmark(bookmark); 90 | } 91 | 92 | function toggleActiveState() { 93 | var self = this; 94 | 95 | editor.on('VisualChars', function(e) { 96 | self.active(e.state); 97 | }); 98 | } 99 | 100 | editor.addCommand('mceVisualChars', toggleVisualChars); 101 | 102 | editor.addButton('visualchars', { 103 | title: 'Show invisible characters', 104 | cmd: 'mceVisualChars', 105 | onPostRender: toggleActiveState 106 | }); 107 | 108 | editor.addMenuItem('visualchars', { 109 | text: 'Show invisible characters', 110 | cmd: 'mceVisualChars', 111 | onPostRender: toggleActiveState, 112 | selectable: true, 113 | context: 'view', 114 | prependToContext: true 115 | }); 116 | }); 117 | -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/visualchars/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("visualchars",function(e){function t(t){function n(e){return''+e+""}function o(){var e,t="";for(e in p)t+=e;return new RegExp("["+t+"]","g")}function a(){var e,t="";for(e in p)t&&(t+=","),t+="span.mce-"+p[e];return t}var s,l,u,c,d,f,p,h,m=e.getBody(),g=e.selection;if(p={"\xa0":"nbsp","\xad":"shy"},r=!r,i.state=r,e.fire("VisualChars",{state:r}),h=o(),t&&(f=g.getBookmark()),r)for(l=[],tinymce.walk(m,function(e){3==e.nodeType&&e.nodeValue&&h.test(e.nodeValue)&&l.push(e)},"childNodes"),u=0;u=0;u--)e.dom.remove(l[u],1);g.moveToBookmark(f)}function n(){var t=this;e.on("VisualChars",function(e){t.active(e.state)})}var r,i=this;e.addCommand("mceVisualChars",t),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n,selectable:!0,context:"view",prependToContext:!0})}); -------------------------------------------------------------------------------- /views/shared/js/mirador/plugins/wordcount/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "wordcount" plugin for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/plugins/wordcount') 5 | // ES2015: 6 | // import 'tinymce/plugins/wordcount' 7 | require('./plugin.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/content.inline.min.css: -------------------------------------------------------------------------------- 1 | .mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/content.min.css: -------------------------------------------------------------------------------- 1 | body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/fonts/tinymce-small.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/fonts/tinymce-small.eot -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/fonts/tinymce-small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/fonts/tinymce-small.ttf -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/fonts/tinymce-small.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/fonts/tinymce-small.woff -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/fonts/tinymce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/fonts/tinymce.eot -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/fonts/tinymce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/fonts/tinymce.ttf -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/fonts/tinymce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/fonts/tinymce.woff -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/img/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/img/anchor.gif -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/img/loader.gif -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/img/object.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/img/object.gif -------------------------------------------------------------------------------- /views/shared/js/mirador/skins/lightgray/img/trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/utlib/IiifItems/fb7f13a3fba6f96ab436c2bf464b6a12d3caa59c/views/shared/js/mirador/skins/lightgray/img/trans.gif -------------------------------------------------------------------------------- /views/shared/js/mirador/themes/inlite/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "inlite" theme for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/themes/inlite') 5 | // ES2015: 6 | // import 'tinymce/themes/inlite' 7 | require('./theme.js'); -------------------------------------------------------------------------------- /views/shared/js/mirador/themes/modern/index.js: -------------------------------------------------------------------------------- 1 | // Exports the "modern" theme for usage with module loaders 2 | // Usage: 3 | // CommonJS: 4 | // require('tinymce/themes/modern') 5 | // ES2015: 6 | // import 'tinymce/themes/modern' 7 | require('./theme.js'); --------------------------------------------------------------------------------