diff --git a/application/nicewebpage.class.inc.php b/application/nicewebpage.class.inc.php index 405089057..bee24fac4 100644 --- a/application/nicewebpage.class.inc.php +++ b/application/nicewebpage.class.inc.php @@ -75,6 +75,8 @@ class NiceWebPage extends WebPage $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/search/search_form_criteria_date_abstract.js'); $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/search/search_form_criteria_date.js'); $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/search/search_form_criteria_date_time.js'); + $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/clipboard.min.js'); + $this->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/clipboardwidget.js'); $this->add_dict_entries('UI:Combo'); diff --git a/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php index 127428b4f..6cb4d4fd8 100644 --- a/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php @@ -133,6 +133,9 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Uloženo', 'Brick:Portal:Object:Search:Regular:Title' => 'Vybrat %1$s (%2$s)', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Vybrat %1$s (%2$s)', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/da.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/da.dict.itop-portal-base.php index 3d85da984..50b69e598 100644 --- a/datamodels/2.x/itop-portal-base/da.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/da.dict.itop-portal-base.php @@ -130,6 +130,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~', 'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php index c45c8c023..0299e68bd 100644 --- a/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php @@ -130,6 +130,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Saved', 'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php index 0c873368e..bbf90ef2b 100644 --- a/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php @@ -126,11 +126,14 @@ Dict::Add('EN US', 'English', 'English', array( 'Brick:Portal:Object:Name' => 'Object', 'Brick:Portal:Object:Form:Create:Title' => 'New %1$s', 'Brick:Portal:Object:Form:Edit:Title' => 'Updating %2$s (%1$s)', - 'Brick:Portal:Object:Form:View:Title' => '%1$s : %2$s', + 'Brick:Portal:Object:Form:View:Title' => '%1$s: %2$s', 'Brick:Portal:Object:Form:Stimulus:Title' => 'Please, complete the following information:', 'Brick:Portal:Object:Form:Message:Saved' => 'Saved', 'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php index 792d93c7e..972443949 100644 --- a/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php @@ -129,6 +129,9 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Guardado', 'Brick:Portal:Object:Search:Regular:Title' => 'Selección %1$s (%2$s)', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Selección %1$s (%2$s)', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php index 6a306580f..eece26d89 100644 --- a/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php @@ -129,6 +129,9 @@ Dict::Add('FR FR', 'French', 'Français', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Enregistré', 'Brick:Portal:Object:Search:Regular:Title' => 'Sélection de %1$s (%2$s)', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Sélection de %1$s (%2$s)', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copier l\'url de l\'objet', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copié' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/hu.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/hu.dict.itop-portal-base.php index 42411c69a..611d2ee52 100644 --- a/datamodels/2.x/itop-portal-base/hu.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/hu.dict.itop-portal-base.php @@ -130,6 +130,9 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~', 'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/it.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/it.dict.itop-portal-base.php index 84dd3e150..655d54bf7 100644 --- a/datamodels/2.x/itop-portal-base/it.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/it.dict.itop-portal-base.php @@ -130,6 +130,9 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~', 'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/ja.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/ja.dict.itop-portal-base.php index 480fa3c1c..4af075286 100644 --- a/datamodels/2.x/itop-portal-base/ja.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/ja.dict.itop-portal-base.php @@ -130,6 +130,9 @@ Dict::Add('JA JP', 'Japanese', '日本語', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~', 'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/nl.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/nl.dict.itop-portal-base.php index e9144a326..85086b600 100644 --- a/datamodels/2.x/itop-portal-base/nl.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/nl.dict.itop-portal-base.php @@ -130,6 +130,9 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Opgeslagen', 'Brick:Portal:Object:Search:Regular:Title' => 'Geselecteerd %1$s (%2$s)', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Selecteer %1$s (%2$s)', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/portal/public/css/portal.css b/datamodels/2.x/itop-portal-base/portal/public/css/portal.css index d80e302ba..4075fd873 100644 --- a/datamodels/2.x/itop-portal-base/portal/public/css/portal.css +++ b/datamodels/2.x/itop-portal-base/portal/public/css/portal.css @@ -278,6 +278,21 @@ footer { margin: 7em 0em; text-align: center; } +/*******************/ +/* Clipboard icons */ +/*******************/ +.url-to-clipboard.url-to-clipboard-icon { + opacity: 0.5; + cursor: pointer; + transition: opacity 0.2s linear; +} +.url-to-clipboard.url-to-clipboard-icon:hover { + opacity: 1; +} +.url-to-clipboard-tooltip-copied { + color: green; + margin-right: 3px; +} /**************************/ /* MagnificPopup settings */ /**************************/ @@ -292,7 +307,7 @@ footer { cursor: zoom-out; } /********************/ -/* Typeahed setting */ +/* Typeahead setting */ /********************/ .twitter-typeahead .tt-menu { max-height: 200px; diff --git a/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss b/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss index f59d600b7..cacb0b20c 100644 --- a/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss +++ b/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss @@ -293,6 +293,25 @@ footer{ text-align: center; } +/*******************/ +/* Clipboard icons */ +/*******************/ +.url-to-clipboard{ + &.url-to-clipboard-icon { + opacity: 0.5; + cursor: pointer; + transition: opacity 0.2s linear; + &:hover { + opacity: 1; + } + } +} +// Used for clipboard's tooltip, which is not part of .url-to-clipboard element +.url-to-clipboard-tooltip-copied { + color: green; + margin-right: 3px; +} + /**************************/ /* MagnificPopup settings */ /**************************/ @@ -308,7 +327,7 @@ footer{ } /********************/ -/* Typeahed setting */ +/* Typeahead setting */ /********************/ .twitter-typeahead .tt-menu{ max-height: 200px; diff --git a/datamodels/2.x/itop-portal-base/portal/public/js/portal-clipboard.js b/datamodels/2.x/itop-portal-base/portal/public/js/portal-clipboard.js new file mode 100644 index 000000000..2cb2c4508 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/public/js/portal-clipboard.js @@ -0,0 +1,38 @@ +/* + * + * * Copyright (C) 2013-2019 Combodo SARL + * * + * * This file is part of iTop. + * * + * * iTop is free software; you can redistribute it and/or modify + * * it under the terms of the GNU Affero General Public License as published by + * * the Free Software Foundation, either version 3 of the License, or + * * (at your option) any later version. + * * + * * iTop is distributed in the hope that it will be useful, + * * but WITHOUT ANY WARRANTY; without even the implied warranty of + * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * * GNU Affero General Public License for more details. + * * + * * You should have received a copy of the GNU Affero General Public License + * + */ + +/* + * Initialize every modal DOM objects with class url-to-clipboard with itop.clipboard widget + */ +$(document).ready(function() +{ + // Bootstrap modal: initialize .url-to-clipboard and set the widget container to the modal + $('body').on('loaded.bs.modal', function (oEvent) { + var oModalsElem = $(this).find('.modal.in'); + oModalsElem.each(function() + { + var oModalElem = $(this); + oModalElem.find('.url-to-clipboard').each(function() + { + $(this).clipboard({'container': oModalElem[0]}); + }); + }); + }); +}); \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php index 424a4f2ce..a604ffa53 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php @@ -23,6 +23,7 @@ namespace Combodo\iTop\Portal\Helper; +use ApplicationContext; use Combodo\iTop\Portal\Form\ObjectFormManager; use Combodo\iTop\Portal\Twig\AppExtension; use Combodo\iTop\Renderer\Bootstrap\BsFormRenderer; @@ -363,7 +364,16 @@ class ObjectFormHandlerHelper $aFormData['object_state'] = $oFormManager->GetObject()->GetState(); $aFormData['fieldset'] = $aFieldSetData; $aFormData['display_mode'] = (isset($aFormProperties['properties'])) ? $aFormProperties['properties']['display_mode'] : ApplicationHelper::FORM_DEFAULT_DISPLAY_MODE; - + // - Set a text to be copied on title if the object is not in creation + if($sMode !== static::ENUM_MODE_CREATE) + { + $aFormData['title_clipboard_text'] = Dict::Format( + 'Brick:Portal:Object:Copy:TextToCopy', + $aFormData['object_name'], + ApplicationContext::MakeObjectUrl($sObjectClass, $sObjectId) + ); + } + return $aFormData; } diff --git a/datamodels/2.x/itop-portal-base/portal/templates/bricks/object/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/bricks/object/layout.html.twig index c9123d57a..5a207c201 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/bricks/object/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/bricks/object/layout.html.twig @@ -7,7 +7,18 @@ {% block pMainHeader %}
{% if form.title is defined %} -

{{ form.title|raw }}

+

+ {% if form.title_clipboard_text is defined %} + + + {% endif %} + {{ form.title|raw }} +

{% endif %}
{% endblock %} diff --git a/datamodels/2.x/itop-portal-base/portal/templates/bricks/object/modal.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/bricks/object/modal.html.twig index 5a2d41729..de8a31c30 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/bricks/object/modal.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/bricks/object/modal.html.twig @@ -3,6 +3,15 @@ {% extends 'itop-portal-base/portal/templates/modal/layout.html.twig' %} {% block pModalTitle %} + {% if form.title_clipboard_text is defined %} + + + {% endif %} {% if form.title is defined %} {{ form.title|raw }} {% endif %} diff --git a/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig index 0f250bd56..004f04a02 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig @@ -136,8 +136,13 @@ - {# UI Extensions JS, in an undefined order #} - {% if app['combodo.portal.instance.conf'].ui_extensions.js_files is defined %} + {# Clipboard helper #} + + + + + {# UI Extensions JS, in an undefined order #} + {% if app['combodo.portal.instance.conf'].ui_extensions.js_files is defined %} {% for js_file in app['combodo.portal.instance.conf'].ui_extensions.js_files %} {% endfor %} diff --git a/datamodels/2.x/itop-portal-base/pt_br.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/pt_br.dict.itop-portal-base.php index a563bd995..1afd25094 100644 --- a/datamodels/2.x/itop-portal-base/pt_br.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/pt_br.dict.itop-portal-base.php @@ -129,6 +129,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Salvo', 'Brick:Portal:Object:Search:Regular:Title' => 'Selecionar %1$s (%2$s)', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Selecinar %1$s (%2$s)', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/ru.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/ru.dict.itop-portal-base.php index 09972bdf2..12cde67c9 100755 --- a/datamodels/2.x/itop-portal-base/ru.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/ru.dict.itop-portal-base.php @@ -118,6 +118,9 @@ Dict::Add('RU RU', 'Russian', 'Русский', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Сохранено', 'Brick:Portal:Object:Search:Regular:Title' => 'Выбрать %1$s (%2$s)', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Выбрать %1$s (%2$s)', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/sk.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/sk.dict.itop-portal-base.php index cbfc2a0f5..92e16ac60 100644 --- a/datamodels/2.x/itop-portal-base/sk.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/sk.dict.itop-portal-base.php @@ -130,6 +130,9 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~', 'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/tr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/tr.dict.itop-portal-base.php index c64d1c930..a8c5b421e 100644 --- a/datamodels/2.x/itop-portal-base/tr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/tr.dict.itop-portal-base.php @@ -130,6 +130,9 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array( 'Brick:Portal:Object:Form:Message:Saved' => 'Saved~~', 'Brick:Portal:Object:Search:Regular:Title' => 'Select %1$s (%2$s)~~', 'Brick:Portal:Object:Search:Hierarchy:Title' => 'Select %1$s (%2$s)~~', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/datamodels/2.x/itop-portal-base/zh_cn.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/zh_cn.dict.itop-portal-base.php index 952b7fbd8..447e64db7 100644 --- a/datamodels/2.x/itop-portal-base/zh_cn.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/zh_cn.dict.itop-portal-base.php @@ -130,6 +130,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array( 'Brick:Portal:Object:Form:Message:Saved' => '已保存', 'Brick:Portal:Object:Search:Regular:Title' => '选择 %1$s (%2$s)', 'Brick:Portal:Object:Search:Hierarchy:Title' => '选择 %1$s (%2$s)', + 'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~', + 'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~', + 'Brick:Portal:Object:Copy:CopiedTooltip' => 'Copied~~' )); // CreateBrick brick diff --git a/js/clipboard.min.js b/js/clipboard.min.js new file mode 100644 index 000000000..02c549e35 --- /dev/null +++ b/js/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n' : '') + me.options.copied_title; + $(this).attr('data-original-title', sOriginalTitle).tooltip('show'); + }); + this.element.on('mouseout',function(){ + var sOriginalTitle = (me.options.standard_icon !== '' ? '' : '') + me.options.standard_title; + $(this).attr('data-original-title', sOriginalTitle); + $(this).removeClass('url-to-clipboard-copied'); + }); + this.element.tooltip({'html': true}); + } + } + ); +}); + +/* + * Initialize every DOM objects on page ready with class url-to-clipboard with itop.clipboard widget + */ +$(document).ready(function() +{ + //Initialize every corresponding DOM element with clipboard.js widget + $('.url-to-clipboard').clipboard(); +});