primo commit
This commit is contained in:
28
media/com_languages/css/overrider.css
Normal file
28
media/com_languages/css/overrider.css
Normal file
@ -0,0 +1,28 @@
|
||||
@charset "UTF-8";
|
||||
#overrider-spinner, #overrider-spinner-btn, #refresh-status, #more-results, #language-results, #results-container {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#overrider-spinner.show, #more-results.show, #results-container.show, #language-results.show {
|
||||
display: grid;
|
||||
}
|
||||
|
||||
#refresh-status.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#overrider-spinner-btn.show {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#refresh-status {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
|
||||
.result-key {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.result-string {
|
||||
padding-inline-start: 20px;
|
||||
}
|
||||
1
media/com_languages/css/overrider.min.css
vendored
Normal file
1
media/com_languages/css/overrider.min.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
@charset "UTF-8";#overrider-spinner,#overrider-spinner-btn,#refresh-status,#more-results,#language-results,#results-container{display:none}#overrider-spinner.show,#more-results.show,#results-container.show,#language-results.show{display:grid}#refresh-status.show{display:block}#overrider-spinner-btn.show{display:inline-block}#refresh-status{flex-basis:100%}.result-key{color:#666}.result-string{padding-inline-start:20px}
|
||||
BIN
media/com_languages/css/overrider.min.css.gz
Normal file
BIN
media/com_languages/css/overrider.min.css.gz
Normal file
Binary file not shown.
59
media/com_languages/joomla.asset.json
Normal file
59
media/com_languages/joomla.asset.json
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"$schema": "https://developer.joomla.org/schemas/json-schema/web_assets.json",
|
||||
"name": "com_languages",
|
||||
"version": "4.0.0",
|
||||
"description": "Joomla CMS",
|
||||
"license": "GPL-2.0-or-later",
|
||||
"assets": [
|
||||
{
|
||||
"name": "com_languages.overrider",
|
||||
"type": "preset",
|
||||
"dependencies": [
|
||||
"com_languages.overrider#style",
|
||||
"com_languages.overrider#script"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "com_languages.admin-override-edit-refresh-searchstring",
|
||||
"type": "script",
|
||||
"uri": "com_languages/admin-override-edit-refresh-searchstring.min.js",
|
||||
"dependencies": [
|
||||
"core"
|
||||
],
|
||||
"attributes": {
|
||||
"type": "module"
|
||||
},
|
||||
"version": "a1febd"
|
||||
},
|
||||
{
|
||||
"name": "com_languages.admin-language-edit-change-flag",
|
||||
"type": "script",
|
||||
"uri": "com_languages/admin-language-edit-change-flag.min.js",
|
||||
"dependencies": [
|
||||
"core"
|
||||
],
|
||||
"attributes": {
|
||||
"type": "module"
|
||||
},
|
||||
"version": "2e2c65"
|
||||
},
|
||||
{
|
||||
"name": "com_languages.overrider",
|
||||
"type": "style",
|
||||
"uri": "com_languages/overrider.min.css",
|
||||
"version": "d91526"
|
||||
},
|
||||
{
|
||||
"name": "com_languages.overrider",
|
||||
"type": "script",
|
||||
"uri": "com_languages/overrider.min.js",
|
||||
"dependencies": [
|
||||
"core"
|
||||
],
|
||||
"attributes": {
|
||||
"type": "module"
|
||||
},
|
||||
"version": "30ce08"
|
||||
}
|
||||
]
|
||||
}
|
||||
19
media/com_languages/js/admin-language-edit-change-flag.js
Normal file
19
media/com_languages/js/admin-language-edit-change-flag.js
Normal file
@ -0,0 +1,19 @@
|
||||
/**
|
||||
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
document.getElementById('jform_image').addEventListener('change', ({
|
||||
currentTarget
|
||||
}) => {
|
||||
const flagSelectedValue = currentTarget.value;
|
||||
const flagimage = document.getElementById('flag').querySelector('img');
|
||||
if (flagSelectedValue) {
|
||||
flagimage.setAttribute('src', `${Joomla.getOptions('system.paths').rootFull}/media/mod_languages/images/${flagSelectedValue}.gif`);
|
||||
flagimage.setAttribute('alt', flagSelectedValue);
|
||||
} else {
|
||||
flagimage.removeAttribute('src');
|
||||
flagimage.setAttribute('alt', '');
|
||||
}
|
||||
}, false);
|
||||
});
|
||||
4
media/com_languages/js/admin-language-edit-change-flag.min.js
vendored
Normal file
4
media/com_languages/js/admin-language-edit-change-flag.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
/**
|
||||
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/document.addEventListener("DOMContentLoaded",()=>{document.getElementById("jform_image").addEventListener("change",({currentTarget:a})=>{const t=a.value,e=document.getElementById("flag").querySelector("img");t?(e.setAttribute("src",`${Joomla.getOptions("system.paths").rootFull}/media/mod_languages/images/${t}.gif`),e.setAttribute("alt",t)):(e.removeAttribute("src"),e.setAttribute("alt",""))},!1)});
|
||||
BIN
media/com_languages/js/admin-language-edit-change-flag.min.js.gz
Normal file
BIN
media/com_languages/js/admin-language-edit-change-flag.min.js.gz
Normal file
Binary file not shown.
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
document.getElementById('jform_searchstring').addEventListener('focus', ({
|
||||
srcElement
|
||||
}) => {
|
||||
if (!Joomla.overrider.states.refreshed) {
|
||||
const expired = document.getElementById('overrider-spinner').getAttribute('data-search-string-expired');
|
||||
if (expired) {
|
||||
Joomla.overrider.refreshCache();
|
||||
Joomla.overrider.states.refreshed = true;
|
||||
}
|
||||
}
|
||||
srcElement.classList.remove('invalid');
|
||||
}, false);
|
||||
document.getElementById('more-results-button').addEventListener('click', () => {
|
||||
Joomla.overrider.searchStrings(Joomla.overrider.states.more);
|
||||
}, false);
|
||||
});
|
||||
4
media/com_languages/js/admin-override-edit-refresh-searchstring.min.js
vendored
Normal file
4
media/com_languages/js/admin-override-edit-refresh-searchstring.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
/**
|
||||
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/document.addEventListener("DOMContentLoaded",()=>{document.getElementById("jform_searchstring").addEventListener("focus",({srcElement:e})=>{Joomla.overrider.states.refreshed||document.getElementById("overrider-spinner").getAttribute("data-search-string-expired")&&(Joomla.overrider.refreshCache(),Joomla.overrider.states.refreshed=!0),e.classList.remove("invalid")},!1),document.getElementById("more-results-button").addEventListener("click",()=>{Joomla.overrider.searchStrings(Joomla.overrider.states.more)},!1)});
|
||||
Binary file not shown.
205
media/com_languages/js/overrider.js
Normal file
205
media/com_languages/js/overrider.js
Normal file
@ -0,0 +1,205 @@
|
||||
/**
|
||||
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
((Joomla, document) => {
|
||||
class Overrider {
|
||||
constructor() {
|
||||
this.states = {
|
||||
refreshing: false,
|
||||
refreshed: false,
|
||||
counter: 0,
|
||||
searchString: '',
|
||||
searchType: 'value'
|
||||
};
|
||||
this.spinner = document.getElementById('overrider-spinner');
|
||||
this.spinnerBtn = document.getElementById('overrider-spinner-btn');
|
||||
this.moreResults = document.getElementById('more-results');
|
||||
this.moreResultsButton = document.getElementById('more-results-button');
|
||||
this.resultsContainer = document.getElementById('results-container');
|
||||
this.refreshStatus = document.getElementById('refresh-status');
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for refreshing the database cache of known language strings via Ajax
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 2.5
|
||||
*/
|
||||
refreshCache() {
|
||||
this.states.refreshing = true;
|
||||
this.refreshStatus.classList.add('show');
|
||||
Joomla.request({
|
||||
url: 'index.php?option=com_languages&task=strings.refresh&format=json',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
onSuccess: response => {
|
||||
if (response.error && response.message) {
|
||||
alert(response.message);
|
||||
}
|
||||
if (response.messages) {
|
||||
Joomla.renderMessages(response.messages);
|
||||
}
|
||||
this.refreshStatus.classList.remove('show');
|
||||
this.states.refreshing = false;
|
||||
},
|
||||
onError: () => {
|
||||
alert(Joomla.Text._('COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR'));
|
||||
this.refreshStatus.classList.remove('show');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for searching known language strings via Ajax
|
||||
*
|
||||
* @param more Determines the limit start of the results
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 2.5
|
||||
*/
|
||||
searchStrings(more) {
|
||||
// Prevent searching if the cache is refreshed at the moment
|
||||
if (this.states.refreshing) {
|
||||
return;
|
||||
}
|
||||
const formSearchString = document.getElementById('jform_searchstring');
|
||||
const formSearchType = document.getElementById('jform_searchtype');
|
||||
|
||||
// Only update the used searchstring and searchtype if the search button
|
||||
// was used to start the search (that will be the case if 'more' is null)
|
||||
if (!more) {
|
||||
this.states.searchString = formSearchString.value;
|
||||
this.states.searchType = formSearchType.value || 'value';
|
||||
|
||||
// Remove the old results
|
||||
document.querySelectorAll('.language-results').forEach(result => result.parentNode.removeChild(result));
|
||||
}
|
||||
if (!this.states.searchString) {
|
||||
formSearchString.classList.add('invalid');
|
||||
return;
|
||||
}
|
||||
if (more) {
|
||||
// If 'more' is greater than 0 we have already displayed some results for
|
||||
// the current searchstring, so display the spinner at the more link
|
||||
this.spinnerBtn.classList.add('show');
|
||||
} else {
|
||||
// Otherwise it is a new searchstring and we have to remove all previous results first
|
||||
this.moreResults.classList.remove('show');
|
||||
document.querySelectorAll('#results-container div.language-results').forEach(child => child.parentNode.removeChild(child));
|
||||
this.resultsContainer.classList.add('show');
|
||||
this.spinner.classList.add('show');
|
||||
}
|
||||
Joomla.request({
|
||||
url: `index.php?option=com_languages&task=strings.search&format=json&searchstring=${this.states.searchString}&searchtype=${this.states.searchType}&more=${more}`,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
onSuccess: resp => {
|
||||
const response = JSON.parse(resp);
|
||||
if (response.error && response.message) {
|
||||
alert(response.message);
|
||||
}
|
||||
if (response.messages) {
|
||||
Joomla.renderMessages(response.messages);
|
||||
}
|
||||
if (response.data) {
|
||||
if (response.data.results) {
|
||||
Joomla.overrider.insertResults(response.data.results);
|
||||
}
|
||||
if (response.data.more) {
|
||||
// If there are more results than the sent ones
|
||||
// display the more link
|
||||
this.states.more = response.data.more;
|
||||
this.moreResultsButton.disabled = false;
|
||||
this.moreResults.classList.add('show');
|
||||
} else {
|
||||
this.moreResultsButton.disabled = true;
|
||||
this.moreResults.classList.remove('show');
|
||||
}
|
||||
}
|
||||
this.spinnerBtn.classList.remove('show');
|
||||
this.spinner.classList.remove('show');
|
||||
},
|
||||
onError: () => {
|
||||
alert(Joomla.Text._('COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR'));
|
||||
this.moreResultsButton.disabled = true;
|
||||
this.moreResults.classList.remove('show');
|
||||
this.resultsContainer.classList.remove('show');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Method inserting the received results into the results container
|
||||
*
|
||||
* @param results An array of search result objects
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 2.5
|
||||
*/
|
||||
insertResults(results) {
|
||||
// For creating an individual ID for each result we use a counter
|
||||
this.states.counter += 1;
|
||||
|
||||
// Create a container into which all the results will be inserted
|
||||
const resultsDiv = document.createElement('div');
|
||||
resultsDiv.setAttribute('id', `language-results${this.states.counter}`);
|
||||
resultsDiv.classList.add('language-results', 'list-group', 'mb-2', 'show');
|
||||
|
||||
// Create some elements for each result and insert it into the container
|
||||
results.forEach((item, index) => {
|
||||
const a = document.createElement('a');
|
||||
a.setAttribute('onclick', `Joomla.overrider.selectString(${this.states.counter}${index});`);
|
||||
a.setAttribute('href', '#');
|
||||
a.classList.add('list-group-item', 'list-group-item-action', 'flex-column', 'align-items-start');
|
||||
const key = document.createElement('div');
|
||||
key.setAttribute('id', `override_key${this.states.counter}${index}`);
|
||||
key.setAttribute('title', item.file);
|
||||
key.classList.add('result-key');
|
||||
key.innerHTML = Joomla.sanitizeHtml(item.constant);
|
||||
const string = document.createElement('div');
|
||||
string.setAttribute('id', `override_string${this.states.counter}${index}`);
|
||||
string.classList.add('result-string');
|
||||
string.innerHTML = Joomla.sanitizeHtml(item.string);
|
||||
a.appendChild(key);
|
||||
a.appendChild(string);
|
||||
resultsDiv.appendChild(a);
|
||||
});
|
||||
|
||||
// If there aren't any results display an appropriate message
|
||||
if (!results.length) {
|
||||
const noresult = document.createElement('div');
|
||||
noresult.innerText = Joomla.Text._('COM_LANGUAGES_VIEW_OVERRIDE_NO_RESULTS');
|
||||
resultsDiv.appendChild(noresult);
|
||||
}
|
||||
if (this.moreResults) {
|
||||
this.moreResults.parentNode.insertBefore(resultsDiv, this.moreResults);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts a specific constant/value pair into the form and scrolls the page back to the top
|
||||
*
|
||||
* @param id The ID of the element which was selected for insertion
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 2.5
|
||||
*/
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
selectString(id) {
|
||||
document.getElementById('jform_key').value = document.getElementById(`override_key${id}`).innerHTML;
|
||||
document.getElementById('jform_override').value = document.getElementById(`override_string${id}`).innerHTML;
|
||||
}
|
||||
}
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
Joomla.overrider = new Overrider();
|
||||
});
|
||||
})(Joomla, document);
|
||||
4
media/com_languages/js/overrider.min.js
vendored
Normal file
4
media/com_languages/js/overrider.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
/**
|
||||
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/((r,e)=>{class o{constructor(){this.states={refreshing:!1,refreshed:!1,counter:0,searchString:"",searchType:"value"},this.spinner=e.getElementById("overrider-spinner"),this.spinnerBtn=e.getElementById("overrider-spinner-btn"),this.moreResults=e.getElementById("more-results"),this.moreResultsButton=e.getElementById("more-results-button"),this.resultsContainer=e.getElementById("results-container"),this.refreshStatus=e.getElementById("refresh-status")}refreshCache(){this.states.refreshing=!0,this.refreshStatus.classList.add("show"),r.request({url:"index.php?option=com_languages&task=strings.refresh&format=json",method:"POST",headers:{"Content-Type":"application/json"},onSuccess:t=>{t.error&&t.message&&alert(t.message),t.messages&&r.renderMessages(t.messages),this.refreshStatus.classList.remove("show"),this.states.refreshing=!1},onError:()=>{alert(r.Text._("COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR")),this.refreshStatus.classList.remove("show")}})}searchStrings(t){if(this.states.refreshing)return;const a=e.getElementById("jform_searchstring"),n=e.getElementById("jform_searchtype");if(t||(this.states.searchString=a.value,this.states.searchType=n.value||"value",e.querySelectorAll(".language-results").forEach(i=>i.parentNode.removeChild(i))),!this.states.searchString){a.classList.add("invalid");return}t?this.spinnerBtn.classList.add("show"):(this.moreResults.classList.remove("show"),e.querySelectorAll("#results-container div.language-results").forEach(i=>i.parentNode.removeChild(i)),this.resultsContainer.classList.add("show"),this.spinner.classList.add("show")),r.request({url:`index.php?option=com_languages&task=strings.search&format=json&searchstring=${this.states.searchString}&searchtype=${this.states.searchType}&more=${t}`,method:"POST",headers:{"Content-Type":"application/json"},onSuccess:i=>{const s=JSON.parse(i);s.error&&s.message&&alert(s.message),s.messages&&r.renderMessages(s.messages),s.data&&(s.data.results&&r.overrider.insertResults(s.data.results),s.data.more?(this.states.more=s.data.more,this.moreResultsButton.disabled=!1,this.moreResults.classList.add("show")):(this.moreResultsButton.disabled=!0,this.moreResults.classList.remove("show"))),this.spinnerBtn.classList.remove("show"),this.spinner.classList.remove("show")},onError:()=>{alert(r.Text._("COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR")),this.moreResultsButton.disabled=!0,this.moreResults.classList.remove("show"),this.resultsContainer.classList.remove("show")}})}insertResults(t){this.states.counter+=1;const a=e.createElement("div");if(a.setAttribute("id",`language-results${this.states.counter}`),a.classList.add("language-results","list-group","mb-2","show"),t.forEach((n,i)=>{const s=e.createElement("a");s.setAttribute("onclick",`Joomla.overrider.selectString(${this.states.counter}${i});`),s.setAttribute("href","#"),s.classList.add("list-group-item","list-group-item-action","flex-column","align-items-start");const l=e.createElement("div");l.setAttribute("id",`override_key${this.states.counter}${i}`),l.setAttribute("title",n.file),l.classList.add("result-key"),l.innerHTML=r.sanitizeHtml(n.constant);const h=e.createElement("div");h.setAttribute("id",`override_string${this.states.counter}${i}`),h.classList.add("result-string"),h.innerHTML=r.sanitizeHtml(n.string),s.appendChild(l),s.appendChild(h),a.appendChild(s)}),!t.length){const n=e.createElement("div");n.innerText=r.Text._("COM_LANGUAGES_VIEW_OVERRIDE_NO_RESULTS"),a.appendChild(n)}this.moreResults&&this.moreResults.parentNode.insertBefore(a,this.moreResults)}selectString(t){e.getElementById("jform_key").value=e.getElementById(`override_key${t}`).innerHTML,e.getElementById("jform_override").value=e.getElementById(`override_string${t}`).innerHTML}}e.addEventListener("DOMContentLoaded",()=>{r.overrider=new o})})(Joomla,document);
|
||||
BIN
media/com_languages/js/overrider.min.js.gz
Normal file
BIN
media/com_languages/js/overrider.min.js.gz
Normal file
Binary file not shown.
Reference in New Issue
Block a user