first commit

This commit is contained in:
2025-06-17 11:53:18 +02:00
commit 9f0f7ba12b
8804 changed files with 1369176 additions and 0 deletions

View File

@ -0,0 +1,41 @@
/**
* @package Joomla.Administrator
* @subpackage com_languages
* @copyright (C) 2011 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
#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;
}

View File

@ -0,0 +1 @@
#language-results,#more-results,#overrider-spinner,#overrider-spinner-btn,#refresh-status,#results-container{display:none}#language-results.show,#more-results.show,#overrider-spinner.show,#results-container.show{display:grid}#refresh-status.show{display:block}#overrider-spinner-btn.show{display:inline-block}#refresh-status{-ms-flex-preferred-size:100%;flex-basis:100%}.result-key{color:#666}.result-string{-webkit-padding-start:20px;padding-inline-start:20px}

Binary file not shown.

View 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-language-edit-change-flag",
"type": "script",
"uri": "com_languages/admin-language-edit-change-flag.min.js",
"dependencies": [
"core"
],
"attributes": {
"type": "module"
},
"version": "a7c4de"
},
{
"name": "com_languages.overrider",
"type": "style",
"uri": "com_languages/overrider.min.css",
"version": "b30773"
},
{
"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": "03af43"
},
{
"name": "com_languages.overrider",
"type": "script",
"uri": "com_languages/overrider.min.js",
"dependencies": [
"core"
],
"attributes": {
"type": "module"
},
"version": "5eed9a"
}
]
}

View File

@ -0,0 +1,20 @@
/**
* @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');
const src = `${Joomla.getOptions('system.paths').rootFull}/media/mod_languages/images/${flagSelectedValue}.gif`;
if (flagSelectedValue) {
flagimage.setAttribute('src', src);
flagimage.setAttribute('alt', flagSelectedValue);
} else {
flagimage.removeAttribute('src');
flagimage.setAttribute('alt', '');
}
}, false);
});

View File

@ -0,0 +1 @@
document.addEventListener("DOMContentLoaded",(()=>{document.getElementById("jform_image").addEventListener("change",(({currentTarget:e})=>{const t=e.value,a=document.getElementById("flag").querySelector("img"),n=`${Joomla.getOptions("system.paths").rootFull}/media/mod_languages/images/${t}.gif`;t?(a.setAttribute("src",n),a.setAttribute("alt",t)):(a.removeAttribute("src"),a.setAttribute("alt",""))}),!1)}));

View File

@ -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);
});

View File

@ -0,0 +1 @@
document.addEventListener("DOMContentLoaded",(()=>{document.getElementById("jform_searchstring").addEventListener("focus",(({srcElement:e})=>{if(!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)}));

View File

@ -0,0 +1,217 @@
/**
* @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
const oldResults = [].slice.call(document.querySelectorAll('.language-results'));
oldResults.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');
const childs = [].slice.call(document.querySelectorAll('#results-container div.language-results'));
childs.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');
resultsDiv.classList.add('list-group');
resultsDiv.classList.add('mb-2');
resultsDiv.classList.add('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');
a.classList.add('list-group-item-action');
a.classList.add('flex-column');
a.classList.add('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);

View File

@ -0,0 +1 @@
((e,s)=>{class t{constructor(){this.states={refreshing:!1,refreshed:!1,counter:0,searchString:"",searchType:"value"},this.spinner=s.getElementById("overrider-spinner"),this.spinnerBtn=s.getElementById("overrider-spinner-btn"),this.moreResults=s.getElementById("more-results"),this.moreResultsButton=s.getElementById("more-results-button"),this.resultsContainer=s.getElementById("results-container"),this.refreshStatus=s.getElementById("refresh-status")}refreshCache(){this.states.refreshing=!0,this.refreshStatus.classList.add("show"),e.request({url:"index.php?option=com_languages&task=strings.refresh&format=json",method:"POST",headers:{"Content-Type":"application/json"},onSuccess:s=>{s.error&&s.message&&alert(s.message),s.messages&&e.renderMessages(s.messages),this.refreshStatus.classList.remove("show"),this.states.refreshing=!1},onError:()=>{alert(e.Text._("COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR")),this.refreshStatus.classList.remove("show")}})}searchStrings(t){if(this.states.refreshing)return;const r=s.getElementById("jform_searchstring"),i=s.getElementById("jform_searchtype");if(!t){this.states.searchString=r.value,this.states.searchType=i.value||"value";[].slice.call(s.querySelectorAll(".language-results")).forEach((e=>{e.parentNode.removeChild(e)}))}if(this.states.searchString){if(t)this.spinnerBtn.classList.add("show");else{this.moreResults.classList.remove("show");[].slice.call(s.querySelectorAll("#results-container div.language-results")).forEach((e=>{e.parentNode.removeChild(e)})),this.resultsContainer.classList.add("show"),this.spinner.classList.add("show")}e.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:s=>{const t=JSON.parse(s);t.error&&t.message&&alert(t.message),t.messages&&e.renderMessages(t.messages),t.data&&(t.data.results&&e.overrider.insertResults(t.data.results),t.data.more?(this.states.more=t.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(e.Text._("COM_LANGUAGES_VIEW_OVERRIDE_REQUEST_ERROR")),this.moreResultsButton.disabled=!0,this.moreResults.classList.remove("show"),this.resultsContainer.classList.remove("show")}})}else r.classList.add("invalid")}insertResults(t){this.states.counter+=1;const r=s.createElement("div");if(r.setAttribute("id",`language-results${this.states.counter}`),r.classList.add("language-results"),r.classList.add("list-group"),r.classList.add("mb-2"),r.classList.add("show"),t.forEach(((t,i)=>{const a=s.createElement("a");a.setAttribute("onclick",`Joomla.overrider.selectString(${this.states.counter}${i});`),a.setAttribute("href","#"),a.classList.add("list-group-item"),a.classList.add("list-group-item-action"),a.classList.add("flex-column"),a.classList.add("align-items-start");const n=s.createElement("div");n.setAttribute("id",`override_key${this.states.counter}${i}`),n.setAttribute("title",t.file),n.classList.add("result-key"),n.innerHTML=e.sanitizeHtml(t.constant);const l=s.createElement("div");l.setAttribute("id",`override_string${this.states.counter}${i}`),l.classList.add("result-string"),l.innerHTML=e.sanitizeHtml(t.string),a.appendChild(n),a.appendChild(l),r.appendChild(a)})),!t.length){const t=s.createElement("div");t.innerText=e.Text._("COM_LANGUAGES_VIEW_OVERRIDE_NO_RESULTS"),r.appendChild(t)}this.moreResults&&this.moreResults.parentNode.insertBefore(r,this.moreResults)}selectString(e){s.getElementById("jform_key").value=s.getElementById(`override_key${e}`).innerHTML,s.getElementById("jform_override").value=s.getElementById(`override_string${e}`).innerHTML}}s.addEventListener("DOMContentLoaded",(()=>{e.overrider=new t}))})(Joomla,document);

Binary file not shown.