diff --git a/media/css/main.css b/media/css/main.css index a27ab0d..0eb6e06 100644 --- a/media/css/main.css +++ b/media/css/main.css @@ -1526,3 +1526,14 @@ table.sponsor-table tbody tr td:nth-child(3) { font-size: 1.5rem; } } + +/* Script copy buttons */ +.pg-script-container { + position: relative; +} + +.pg-script-copy-btn { + position: absolute; + top: 8px; + right: 8px; +} \ No newline at end of file diff --git a/media/js/main.js b/media/js/main.js index 0b37fee..aa939f1 100644 --- a/media/js/main.js +++ b/media/js/main.js @@ -18,12 +18,58 @@ if (location.hash) shiftWindow(); window.addEventListener("hashchange", shiftWindow); -/* - * Debian/Ubuntu download dropdowns +/* Copy a script from an HTML element to the clipboard, + * removing comments and blank lines. + * Arguments: + * trigger: The button calling the function, whose label will be updated + * elem: The element containing the script to copy */ -$(function() { - $('select#debseries').change(function() { - var deb = document.getElementById('series-deb'); - deb.innerHTML = $(this).val(); - }); -}); + +function copyScript(trigger, elem) { + var raw = document.getElementById(elem).innerHTML; + + // Create a scratch div to copy from + var scratch = document.createElement("div"); + document.body.appendChild(scratch); + + // Copy the contents of the script box into the scratch div, removing + // comments and blank lines + var lines = raw.split("\n"); + var output = ''; + for (var l = 0; l < lines.length; l++) { + if (lines[l][0] != '#' && lines[l].trim() != '') + output += lines[l] + '
'; + } + scratch.innerHTML = output.trim(); + + // Perform the copy + if(document.body.createTextRange) { + // IE 11 + var range = document.body.createTextRange(); + range.moveToElementText(scratch); + range.select(); + document.execCommand("Copy"); + document.getSelection().removeAllRanges() + } + else if(window.getSelection) { + // Sane browsers + var selection = window.getSelection(); + var range = document.createRange(); + range.selectNodeContents(scratch); + selection.removeAllRanges(); + selection.addRange(range); + document.execCommand("Copy"); + selection.removeAllRanges(); + } + + // Remove the scratch div + scratch.parentNode.removeChild(scratch); + + // Indicate to the user that the script was copied + var label = trigger.innerHTML; + trigger.innerHTML = 'Copied!'; + + setTimeout(function() { + trigger.innerHTML = label; + }, 3000); +} diff --git a/templates/downloads/js/yum.js b/templates/downloads/js/yum.js index 74b5702..ed6a493 100644 --- a/templates/downloads/js/yum.js +++ b/templates/downloads/js/yum.js @@ -119,13 +119,11 @@ function archChanged() { var ver = document.getElementById('version').value; var plat = document.getElementById('platform').value; var arch = document.getElementById('arch').value; + var scriptBox = document.getElementById('script-box') if (!plat || plat == -1) { - document.getElementById('reporpm').innerHTML = 'Select version and platform above'; - document.getElementById('clientpackage').innerHTML = 'Select version and platform above'; - document.getElementById('serverpackage').innerHTML = 'Select version and platform above'; - document.getElementById('initdb').innerHTML = 'Select version and platform above'; - document.getElementById('dnfmodule').style.display = 'none'; + document.getElementById('copy-btn').style.display = 'none'; + scriptBox.innerHTML = 'Select version and platform above'; return; } @@ -135,21 +133,31 @@ function archChanged() { var url = 'https://download.postgresql.org/pub/repos/yum/reporpms/' + plat + '-' + arch + '/pgdg-' + get_rpm_prefix(plat) +'-repo-latest.noarch.rpm'; var installer = get_installer(plat); - document.getElementById('reporpm').innerHTML = installer + ' install ' + url; - document.getElementById('clientpackage').innerHTML = installer + ' install postgresql' + shortver; - document.getElementById('serverpackage').innerHTML = installer + ' install postgresql' + shortver + '-server'; + scriptBox.innerHTML = '# Install the repository RPM:\n'; + scriptBox.innerHTML += installer + ' install ' + url + '\n\n'; - document.getElementById('dnfmodule').style.display = disable_module_on(plat) ? 'list-item' : 'none'; + scriptBox.innerHTML += '# Install client tools:\n'; + scriptBox.innerHTML += installer + ' install postgresql' + shortver + '\n\n'; + scriptBox.innerHTML += '# Optionally install the database server:\n'; + scriptBox.innerHTML += installer + ' install postgresql' + shortver + '-server\n\n'; + + if (disable_module_on(plat)) { + scriptBox.innerHTML += '# Disable the built-in PostgreSQL module:\n'; + scriptBox.innerHTML += 'dnf -qy module disable postgresql\n\n'; + } + + scriptBox.innerHTML += '# Optionally initialize the database and enable automatic start:\n'; if (uses_systemd(plat)) { var setupcmd = 'postgresql-' + shortver + '-setup'; if (ver < 10) { - setupcmd = 'postgresql' + shortver + '-setup'; + setupcmd = 'postgresql' + shortver + '-setup'; } - - document.getElementById('initdb').innerHTML = '/usr/pgsql-' + ver + '/bin/' + setupcmd + ' initdb
systemctl enable postgresql-' + ver + '
systemctl start postgresql-' + ver; + scriptBox.innerHTML += '/usr/pgsql-' + ver + '/bin/' + setupcmd + ' initdb\nsystemctl enable postgresql-' + ver + '\nsystemctl start postgresql-' + ver; } else { - document.getElementById('initdb').innerHTML = 'service postgresql-' + ver + ' initdb
chkconfig postgresql-' + ver + ' on
service postgresql-' + ver + ' start'; + scriptBox.innerHTML += 'service postgresql-' + ver + ' initdb\nchkconfig postgresql-' + ver + ' on\nservice postgresql-' + ver + ' start'; } + + document.getElementById('copy-btn').style.display = 'block'; } diff --git a/templates/pages/download/linux/debian.html b/templates/pages/download/linux/debian.html index 0944edb..236f36c 100644 --- a/templates/pages/download/linux/debian.html +++ b/templates/pages/download/linux/debian.html @@ -41,30 +41,23 @@ versions of Debian:

To use the apt repository, follow these steps:

-
    -
  1. - -
  2. -
  3. - Create the file /etc/apt/sources.list.d/pgdg.list, and add a line - for the repository: -
    -     deb http://apt.postgresql.org/pub/repos/apt/ YOUR_DEBIAN_VERSION_HERE-pgdg main
    -
  4. -
  5. - Import the repository signing key, and update the package lists: -
    -     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    -     sudo apt-get update
    -
  6. -
+ +
+
# Create the file repository configuration:
+sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
+
+# Import the repository signing key:
+wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
+
+# Update the package lists:
+sudo apt-get update
+
+# Install the latest version of PostgreSQL.
+# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
+apt-get install postgresql
+ +
+

For more information about the apt repository, including answers to frequent questions, please see the apt page on diff --git a/templates/pages/download/linux/redhat.html b/templates/pages/download/linux/redhat.html index bc309d6..29161dd 100644 --- a/templates/pages/download/linux/redhat.html +++ b/templates/pages/download/linux/redhat.html @@ -59,20 +59,11 @@ To use the PostgreSQL Yum Repository, follow these steps:

  • Select version:
  • Select platform:
  • Select architecture:
  • -
  • Install the repository RPM: -
    
    -  
  • -
  • Disable the built-in PostgreSQL module -
    dnf -qy module disable postgresql
    -
  • -
  • Install the client packages: -
    
    -  
  • -
  • Optionally install the server packages: -
    
    -  
  • -
  • Optionally initialize the database and enable automatic start: -
    
    +  
  • Copy, paste and run the relevant parts of the setup script: +
    +
    
    +        
    +    
  • diff --git a/templates/pages/download/linux/ubuntu.html b/templates/pages/download/linux/ubuntu.html index 5675e81..2ea7d73 100644 --- a/templates/pages/download/linux/ubuntu.html +++ b/templates/pages/download/linux/ubuntu.html @@ -40,25 +40,23 @@ by using the closest LTS version available.

    To use the apt repository, follow these steps:

    - + +
    +
    # Create the file repository configuration:
    +sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
    +
    +# Import the repository signing key:
    +wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    +
    +# Update the package lists:
    +sudo apt-get update
    +
    +# Install the latest version of PostgreSQL.
    +# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
    +apt-get install postgresql
    + +
    +

    For more information about the apt repository, including answers to frequent questions, please see the PostgreSQL Apt Repository page on