Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d4da5e7e5 | ||
|
|
c861f9942c | ||
|
|
dbd1107d24 | ||
|
|
fffc00e37f | ||
|
|
d885396886 | ||
|
|
b3a4c2bb7b | ||
|
|
3549a967c7 | ||
|
|
c597d921c6 | ||
|
|
9b11c2dbe1 | ||
|
|
39aa2bd743 | ||
|
|
01a537c7bd | ||
|
|
5cf0b92a66 | ||
|
|
848d16c5e9 | ||
|
|
188b95be99 | ||
|
|
77687c2af3 |
11
CHANGELOG.md
Normal file
@@ -0,0 +1,11 @@
|
||||
## version 1.2
|
||||
1. Add Suite builder.
|
||||
2. Change code styles
|
||||
3. Add multiple language option.
|
||||
4. Some minor improvements.
|
||||
|
||||
## version 1.1
|
||||
1. Add batch download.
|
||||
|
||||
## version 1.0
|
||||
Convert and modified from https://github.com/Drovosek01/adobe-packager
|
||||
@@ -31,7 +31,7 @@ Arguments:
|
||||
1. Extract the whole branch to a working folder and pick one Set-up.exe version and extract it to the same folder. (v4 setup not support win10)
|
||||
2. Download desire product using ccdl-win.py (creates "products" folder inside the working folder)
|
||||
3. Download ACC packages for the installer using build_installer.py (creates "packages" folder inside the working folder)
|
||||
4. Rename \products\\*prefix*-Driver.xml to Driver.xml (For multiple products, rename ONE product prefix to Driver.xml to install it) ~~until I figure out how to merge driver.xml files, it's called suiteinfo.xml~~
|
||||
4. Rename \products\\*prefix*-Driver.xml to Driver.xml (For multiple products, rename ONE product prefix to Driver.xml to install it)
|
||||
5. Along the "packages" folder, a new "acc_sources" folder will be created as well (this contains the zip files of the ACC packages which were extracted before)
|
||||
6. Optional - Delete downloaded zip files in "acc_sources" directory to reduce installer size (Not necessary because omitting the folder if the whole installation is packed is valid and if kept, used for other products)
|
||||
7. Run Set-up.exe to install the product.
|
||||
@@ -47,3 +47,9 @@ https://drive.google.com/file/d/1Quc2YgR85VO9_aTMo3HfvcsOXnlwSFid/view?usp=shari
|
||||
```
|
||||
python ccdl-win.py -u 6 -l en_US -p win64 -s phsp,idsn,ilst -x
|
||||
```
|
||||
3. You can create suite like installer by using gen-suite.py (from suite_installer directory)
|
||||
4. You can now add two or more languages to download.
|
||||
```
|
||||
python ccdl-win.py -u 6 -l en_US,fr_FR -p win64 -s phsp,idsn,ilst -x
|
||||
```
|
||||
5. Working on filtering Speech to Text Language Pack modules for AME (v26x). (Current script will download all available modules!!)
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
"""
|
||||
This is the downloader for required packages for Adobe Setup.
|
||||
|
||||
v 1.2.0
|
||||
Change download type
|
||||
|
||||
v 1.1.0
|
||||
Add support for Adobe CC 6.2.0.x
|
||||
|
||||
@@ -9,14 +12,8 @@ Download packages only!
|
||||
|
||||
import os
|
||||
import sys
|
||||
import platform
|
||||
import subprocess
|
||||
import string
|
||||
import json
|
||||
import random
|
||||
import argparse
|
||||
import zipfile
|
||||
import time
|
||||
from xml.etree import ElementTree as ET
|
||||
|
||||
try:
|
||||
import requests
|
||||
@@ -36,297 +33,138 @@ except ImportError:
|
||||
or run: pip3 install tqdm."""
|
||||
)
|
||||
|
||||
VERSION_STR = "1.1.0"
|
||||
try:
|
||||
import pefile
|
||||
except ImportError:
|
||||
sys.exit(
|
||||
"""You need pefile module!
|
||||
install it from https://pypi.org/project/pefile/
|
||||
or run: pip3 install pefile."""
|
||||
)
|
||||
|
||||
ACC_URL = "https://cdn-ffc.oobesaas.adobe.com/core/v1/applications?name=CreativeCloud&name=CCLBS&osVersion={osVersion}&platform={osPlatform}&version={appVersion}"
|
||||
|
||||
ADOBE_REQ_HEADERS = {
|
||||
"X-Adobe-App-Id": "accc-apps-panel-desktop",
|
||||
"User-Agent": "Adobe Application Manager 2.0",
|
||||
"X-Api-Key": "CC_HD_ESD_1_0",
|
||||
"Cookie": "fg="
|
||||
+ "".join(random.choice(string.ascii_uppercase + string.digits) for _ in range(26))
|
||||
+ "======",
|
||||
}
|
||||
SCRIPT_NAME = "Adobe Creative Cloud package downloader"
|
||||
VERSION_STR = "1.2.0"
|
||||
|
||||
ADOBE_DL_HEADERS = {"User-Agent": "Creative Cloud"}
|
||||
|
||||
CURR_PATH = os.path.dirname(os.path.abspath(__file__))
|
||||
ACC_URL = "https://ccmdls.adobe.com/AdobeProducts/StandaloneBuilds/ACCC/ESD/{mainVer}/{buildVer}/{platform}/{fileName}"
|
||||
|
||||
CURR_PATH = os.path.dirname(os.path.realpath(__name__))
|
||||
|
||||
ADOBE_SETUP_BIN = os.path.join(CURR_PATH, "Set-up.exe")
|
||||
|
||||
session = requests.sessions.Session()
|
||||
|
||||
|
||||
def setup_version():
|
||||
try:
|
||||
jsonFromPowerShell = json.loads(subprocess.run(
|
||||
[
|
||||
"powershell.exe",
|
||||
"(Get-Item '"
|
||||
+ ADOBE_SETUP_BIN
|
||||
+ "').VersionInfo.FileVersion | ConvertTo-Json",
|
||||
],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
shell=True,
|
||||
).stdout)
|
||||
return jsonFromPowerShell
|
||||
except Exception as e:
|
||||
sys.stderr.write("Set-up.exe not found! Please extract Set-up.exe from one of the archives, and place it in this directory.")
|
||||
sys.exit(1)
|
||||
def show_info(name: str, version: str, pad: int, bdr: str) -> None:
|
||||
"""Show script information"""
|
||||
tl = len(name) + (pad * 2)
|
||||
print(bdr * tl)
|
||||
print(bdr + name.center(tl - 2) + bdr)
|
||||
print(version.center(tl, bdr))
|
||||
|
||||
|
||||
|
||||
def os_data():
|
||||
osVersionData = sys.getwindowsversion()
|
||||
osFullVer = "{}.{}.0.{}".format(
|
||||
osVersionData.major, osVersionData.minor, osVersionData.build
|
||||
)
|
||||
osVer = "{}.{}.0".format(osVersionData.major, osVersionData.minor)
|
||||
|
||||
osPlatform = "win32"
|
||||
if platform.machine().endswith("64") == True:
|
||||
osPlatform = "win64"
|
||||
|
||||
return osFullVer, osVer, osPlatform
|
||||
|
||||
|
||||
def get_xml_data(url):
|
||||
response = session.get(url, stream=True, headers=ADOBE_REQ_HEADERS)
|
||||
response.encoding = "utf-8"
|
||||
return ET.fromstring(response.content)
|
||||
|
||||
|
||||
def extract_zip(zip, dest):
|
||||
def extract_zip(zip):
|
||||
zipName = os.path.basename(zip)
|
||||
print(f"Extracting {zipName} contents")
|
||||
|
||||
dir_name = os.path.basename(dest)
|
||||
|
||||
with zipfile.ZipFile(zip, "r") as cp:
|
||||
for f in cp.infolist():
|
||||
filename = f.filename
|
||||
|
||||
# exclude for folder
|
||||
if filename.endswith('/'):
|
||||
continue
|
||||
|
||||
basename = os.path.basename(filename)
|
||||
if dir_name in filename and not filename.endswith('/'):
|
||||
# for < v6.2
|
||||
dest_file = os.path.join(dest, basename)
|
||||
with open(dest_file, "wb") as w:
|
||||
w.write(cp.read(filename))
|
||||
filename = basename
|
||||
else:
|
||||
cp.extract(f, dest)
|
||||
|
||||
# retain file creation date
|
||||
name = os.path.join(dest, filename)
|
||||
date_time = time.mktime(f.date_time + (0, 0, -1))
|
||||
os.utime(name, (date_time, date_time))
|
||||
|
||||
|
||||
def file_download(url, source_dir, dest_dir):
|
||||
response = session.get(url, stream=True, headers=ADOBE_REQ_HEADERS)
|
||||
total_size_in_bytes = int(response.headers.get("content-length", 0))
|
||||
def get_version():
|
||||
version = args.setupVersion
|
||||
|
||||
if total_size_in_bytes > 0:
|
||||
name = os.path.basename(url)
|
||||
source_zip = os.path.join(source_dir, name)
|
||||
if version is None:
|
||||
if not os.path.exists(ADOBE_SETUP_BIN):
|
||||
sys.exit("File not found")
|
||||
|
||||
try:
|
||||
pe = pefile.PE(ADOBE_SETUP_BIN)
|
||||
if hasattr(pe, 'VS_FIXEDFILEINFO'):
|
||||
info = pe.VS_FIXEDFILEINFO[0]
|
||||
# Extracting version info
|
||||
major = info.FileVersionMS >> 16
|
||||
minor = info.FileVersionMS & 0xFFFF
|
||||
patch = info.FileVersionLS >> 16
|
||||
build = info.FileVersionLS & 0xFFFF
|
||||
version = f"{major}.{minor}.{patch}.{build}"
|
||||
|
||||
except pefile.PEFormatError:
|
||||
sys.exit("Not a valid PE file (likely not a Windows executable)")
|
||||
except Exception as e:
|
||||
sys.exit(f"An error occurred: {e}")
|
||||
|
||||
return version
|
||||
|
||||
|
||||
def do_download(dFile, url):
|
||||
try:
|
||||
# get file size
|
||||
response = session.head(url, stream=False, headers=ADOBE_DL_HEADERS)
|
||||
lengthInBytes = int(response.headers.get("content-length", 0))
|
||||
|
||||
if lengthInBytes < 2048:
|
||||
sys.exit(
|
||||
f"\nFound nothing for this version. Please try another version.")
|
||||
|
||||
if (
|
||||
os.path.isfile(source_zip)
|
||||
and os.path.getsize(source_zip) == total_size_in_bytes
|
||||
os.path.isfile(dFile)
|
||||
and os.path.getsize(dFile) == lengthInBytes
|
||||
):
|
||||
print("Downloaded file is OK. Skipping ...")
|
||||
extract_zip(source_zip, dest_dir)
|
||||
print(f"\nDownloaded file seems OK, skipping...")
|
||||
return
|
||||
|
||||
block_size = 1024 # 1 Kibibyte
|
||||
progress_bar = tqdm(total=total_size_in_bytes, unit="iB", unit_scale=True)
|
||||
with open(source_zip, "wb") as file:
|
||||
for data in response.iter_content(block_size):
|
||||
progress_bar.update(len(data))
|
||||
file.write(data)
|
||||
progress_bar.close()
|
||||
if total_size_in_bytes != 0 and progress_bar.n != total_size_in_bytes:
|
||||
print("ERROR, something went wrong")
|
||||
# download file
|
||||
response = session.get(url, stream=True, headers=ADOBE_DL_HEADERS)
|
||||
|
||||
extract_zip(source_zip, dest_dir)
|
||||
blockSize = 1024 # 1 Kilobyte
|
||||
with tqdm(total=lengthInBytes, unit="iB", unit_scale=True) as pBar:
|
||||
with open(dFile, "wb") as file:
|
||||
for data in response.iter_content(blockSize):
|
||||
pBar.update(len(data))
|
||||
file.write(data)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
sys.exit("\nCannot download file!")
|
||||
|
||||
|
||||
def get_packages():
|
||||
setupVersion = setup_version()
|
||||
def accc_download():
|
||||
'''Download Adobe Creative Cloud package'''
|
||||
version = get_version()
|
||||
print(f"\nDownloading ACCC version: {version}")
|
||||
v = version.split(".")
|
||||
mainVer = ".".join([v[0], v[1], v[2]])
|
||||
buildVer = str(v[3])
|
||||
|
||||
print("\nGet Required packages for Adobe Installer v-{}".format(setupVersion))
|
||||
|
||||
winFullVer, winVer, winPlatform = os_data()
|
||||
acc_xml_url = ACC_URL.format(
|
||||
osVersion=winFullVer, osPlatform=winPlatform, appVersion=setupVersion
|
||||
platform = args.platform or "win64"
|
||||
fileName = f"ACCCx{'_'.join(v)}.zip"
|
||||
url = ACC_URL.format(
|
||||
mainVer=mainVer, buildVer=buildVer, platform=platform, fileName=fileName
|
||||
)
|
||||
|
||||
xml_data = get_xml_data(acc_xml_url)
|
||||
tmpDir = os.path.join(CURR_PATH, "acc_tmp")
|
||||
os.makedirs(tmpDir, exist_ok=True)
|
||||
|
||||
accVersion = xml_data.find(".//application/version").text
|
||||
zipFile = os.path.join(tmpDir, fileName)
|
||||
|
||||
if accVersion != setupVersion:
|
||||
print(
|
||||
"\nYour installer will not work! Please try Adobe Installer version 5x or 6x\n"
|
||||
)
|
||||
exit(1)
|
||||
do_download(zipFile, url)
|
||||
|
||||
package_cdn = xml_data.find(".//cdn/secure").text
|
||||
packageSets = xml_data.findall(".//packageSets/packageSet")
|
||||
with zipfile.ZipFile(zipFile, 'r') as zr:
|
||||
for f in zr.infolist():
|
||||
if f.filename.startswith("packages") or f.filename.startswith("resources/AdobePIM.dll"):
|
||||
zr.extract(f, CURR_PATH)
|
||||
|
||||
# sort by packageSet name
|
||||
packageSets[:] = sorted(
|
||||
packageSets, key=lambda packageSets: packageSets.findtext("sequenceNumber")
|
||||
)
|
||||
|
||||
# appinfo data
|
||||
xml_root = ET.Element("application")
|
||||
|
||||
for key, val in dict(
|
||||
{
|
||||
"name": xml_data.find(".//application/name").text,
|
||||
"platform": xml_data.find(".//application/platform").text,
|
||||
"lbsurl": "http://ccmdl.adobe.com/AdobeProducts/KCCC/1/win32/CreativeCloudSet-Up.exe",
|
||||
}
|
||||
).items():
|
||||
child = ET.Element(key)
|
||||
child.text = str(val)
|
||||
xml_root.append(child)
|
||||
|
||||
xml_packagesets = ET.SubElement(xml_root, "packageSets")
|
||||
|
||||
# create dir for sources files
|
||||
zip_dir = os.path.join(CURR_PATH, "acc_sources")
|
||||
os.makedirs(zip_dir, exist_ok=True)
|
||||
|
||||
# create packages dir
|
||||
packages_dir = os.path.join(CURR_PATH, "packages")
|
||||
os.makedirs(packages_dir, exist_ok=True)
|
||||
|
||||
for set in packageSets:
|
||||
setName = set.find("name").text
|
||||
|
||||
installPath = set.find("installPath").text
|
||||
if installPath == "[NOT-USED]":
|
||||
continue
|
||||
|
||||
xml_packageSet = ET.SubElement(xml_packagesets, "packageSet")
|
||||
for key, val in dict(
|
||||
{
|
||||
"name": setName,
|
||||
"installPath": installPath,
|
||||
"sequenceNumber": set.find("sequenceNumber").text,
|
||||
}
|
||||
).items():
|
||||
child = ET.Element(key)
|
||||
child.text = str(val)
|
||||
xml_packageSet.append(child)
|
||||
|
||||
# create package
|
||||
pkg_dir = os.path.join(packages_dir, setName)
|
||||
os.makedirs(pkg_dir, exist_ok=True)
|
||||
packages = set.findall(".//packages/package")
|
||||
|
||||
# sort by packageSet name
|
||||
packages[:] = sorted(
|
||||
packages, key=lambda packages: int(packages.findtext("sequenceNumber"))
|
||||
)
|
||||
|
||||
xml_packages = ET.SubElement(xml_packageSet, "packages")
|
||||
for pk in packages:
|
||||
packageName = pk.find("name").text
|
||||
manifestUrl = pk.find("manifestUrl").text
|
||||
manifestXml = get_xml_data(package_cdn + manifestUrl)
|
||||
|
||||
# download sub package
|
||||
sub_pkg_dir = os.path.join(pkg_dir, packageName)
|
||||
os.makedirs(sub_pkg_dir, exist_ok=True)
|
||||
assets = manifestXml.find(".//asset_list/asset/asset_path").text
|
||||
print("\nDownloading package: " + packageName)
|
||||
file_download(assets, zip_dir, sub_pkg_dir)
|
||||
|
||||
xml_package = ET.SubElement(xml_packages, "package")
|
||||
for key, val in dict(
|
||||
{
|
||||
"name": packageName,
|
||||
"sequenceNumber": pk.find("sequenceNumber").text,
|
||||
"optional": pk.find("optional").text,
|
||||
"pimxPath": "\\"
|
||||
+ "\\".join([setName, packageName, packageName + ".pimx"]),
|
||||
}
|
||||
).items():
|
||||
child = ET.Element(key)
|
||||
child.text = str(val)
|
||||
xml_package.append(child)
|
||||
|
||||
if pk.find("additionalInfo") is not None:
|
||||
adInfo = pk.find("additionalInfo")
|
||||
xml_pkg_adn = ET.SubElement(xml_package, "additionalInfo")
|
||||
for elem in adInfo:
|
||||
xml_pkg_adn.append(elem)
|
||||
|
||||
xml_filters = ET.SubElement(xml_packageSet, "filters")
|
||||
xml_filter = ET.SubElement(xml_filters, "filter")
|
||||
xml_filter.set("type", "operatingSystem")
|
||||
xml_filter_config = ET.SubElement(xml_filter, "config")
|
||||
xml_filter_config.text = winVer
|
||||
|
||||
if set.find("additionalInfo") is not None:
|
||||
adInfo = set.find("additionalInfo")
|
||||
xml_pkgSet_adn = ET.SubElement(xml_packageSet, "additionalInfo")
|
||||
for elem in adInfo:
|
||||
xml_pkgSet_adn.append(elem)
|
||||
|
||||
pkg_version = ET.SubElement(xml_root, "version")
|
||||
pkg_version.text = xml_data.find(".//application/version").text
|
||||
|
||||
print("\nCreating ApplicationInfo.xml")
|
||||
tree = ET.ElementTree(xml_root)
|
||||
ET.indent(tree, space=" ", level=0)
|
||||
xml_file = os.path.join(packages_dir, "ApplicationInfo.xml")
|
||||
tree.write(xml_file, encoding="utf-8", xml_declaration=True)
|
||||
|
||||
if get_pim_dll(packages_dir):
|
||||
print("\nSuccessfully downloaded installer files\n")
|
||||
|
||||
|
||||
def get_pim_dll(packages_dir):
|
||||
print("\nGetting AdobePIM.dll")
|
||||
|
||||
# create resources dir
|
||||
res_dir = os.path.join(CURR_PATH, "resources")
|
||||
os.makedirs(res_dir, exist_ok=True)
|
||||
|
||||
core_dir = os.path.join(packages_dir, "ADC", "Core")
|
||||
dll_file = os.path.join(core_dir, "AdobePIM.dll")
|
||||
pima_file = os.path.join(core_dir, "Core.pima")
|
||||
|
||||
if os.path.isfile(dll_file):
|
||||
os.popen("copy " + dll_file + " " + res_dir)
|
||||
elif os.path.isfile(pima_file):
|
||||
with zipfile.ZipFile(pima_file) as pima:
|
||||
for pim in pima.namelist():
|
||||
if pim.endswith("AdobePIM.dll"):
|
||||
pima.extract(pim, res_dir)
|
||||
else:
|
||||
print("Cannot found AdobePIM.dll! Please search manually or installer won't work")
|
||||
return False
|
||||
|
||||
return True
|
||||
print("\nSuccessfully downloaded and extracted accc package data")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
ye = int((32 - len(VERSION_STR)) / 2)
|
||||
print("=================================")
|
||||
print("= Build Adobe Installer =")
|
||||
print(
|
||||
"{} {} {}\n".format("=" * ye, VERSION_STR, "=" * (31 - len(VERSION_STR) - ye))
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"-v", "--setupVersion", help="Version for Set-up.exe", action="store"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-p", "--platform", help="ACCC platform", action="store"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
get_packages()
|
||||
show_info(SCRIPT_NAME, VERSION_STR, 6, '=')
|
||||
|
||||
accc_download()
|
||||
|
||||
1573
ccdl-win.py
78
suite_installer/APRO.xml
Normal file
@@ -0,0 +1,78 @@
|
||||
<ProductInfo>
|
||||
<Name>Adobe Acrobat Pro DC</Name>
|
||||
<InstallerType>ThirdParty</InstallerType>
|
||||
<HideProductLaunch>true</HideProductLaunch>
|
||||
<Icons>
|
||||
<Size20x19>
|
||||
<path>./resources/icons/apro20x19.png</path>
|
||||
</Size20x19>
|
||||
<Size32x32>
|
||||
<path>./resources/icons/apro32x32.png</path>
|
||||
</Size32x32>
|
||||
<Size44x42>
|
||||
<path>./resources/icons/apro44x42.png</path>
|
||||
</Size44x42>
|
||||
<Size64x64>
|
||||
<path>./resources/icons/apro64x64.png</path>
|
||||
</Size64x64>
|
||||
<Size88x84>
|
||||
<path>./resources/icons/apro88x84.png</path>
|
||||
</Size88x84>
|
||||
<Size176x168>
|
||||
<path>./resources/icons/apro176x168.png</path>
|
||||
</Size176x168>
|
||||
</Icons>
|
||||
<ConflictingProcesses>
|
||||
<ConflictingProcess>
|
||||
<RegularExpression>^[Aa][Cc][Rr][Oo][Bb][Aa][Tt].[Ee][Xx][Ee]$</RegularExpression>
|
||||
<ProcessDisplayName>Adobe Acrobat</ProcessDisplayName>
|
||||
</ConflictingProcess>
|
||||
<ConflictingProcess>
|
||||
<RegularExpression>^[Aa][Cc][Aa][Dd].[Ee][Xx][Ee]$</RegularExpression>
|
||||
<ProcessDisplayName>AutoCAD Application</ProcessDisplayName>
|
||||
</ConflictingProcess>
|
||||
<ConflictingProcess>
|
||||
<RegularExpression>^[Ee][Xx][Cc][Ee][Ll]\.[Ee][Xx][Ee]$</RegularExpression>
|
||||
<ProcessDisplayName>Microsoft Excel</ProcessDisplayName>
|
||||
</ConflictingProcess>
|
||||
<ConflictingProcess>
|
||||
<RegularExpression>^[Oo][Uu][Tt][Ll][Oo][Oo][Kk]\.[Ee][Xx][Ee]$</RegularExpression>
|
||||
<ProcessDisplayName>Microsoft Outlook</ProcessDisplayName>
|
||||
</ConflictingProcess>
|
||||
<ConflictingProcess>
|
||||
<RegularExpression>^[Pp][Oo][Ww][Ee][Rr][Pp][Nn][Tt]\.[Ee][Xx][Ee]$</RegularExpression>
|
||||
<ProcessDisplayName>Microsoft PowerPoint</ProcessDisplayName>
|
||||
</ConflictingProcess>
|
||||
<ConflictingProcess>
|
||||
<RegularExpression>^[Vv][Ii][Ss][Ii][Oo]\.[Ee][Xx][Ee]$</RegularExpression>
|
||||
<ProcessDisplayName>Microsoft Visio</ProcessDisplayName>
|
||||
</ConflictingProcess>
|
||||
<ConflictingProcess>
|
||||
<RegularExpression>^[Vv][Ii][Ss][Ii][Oo]32\.[Ee][Xx][Ee]$</RegularExpression>
|
||||
<ProcessDisplayName>Microsoft Visio</ProcessDisplayName>
|
||||
</ConflictingProcess>
|
||||
<ConflictingProcess>
|
||||
<RegularExpression>^[Ww][Ii][Nn][Ww][Oo][Rr][Dd]\.[Ee][Xx][Ee]$</RegularExpression>
|
||||
<ProcessDisplayName>Microsoft Word</ProcessDisplayName>
|
||||
</ConflictingProcess>
|
||||
</ConflictingProcesses>
|
||||
<InstallData>
|
||||
<ThirdPartyData>
|
||||
<CodexVersion>22.3</CodexVersion>
|
||||
<Platform>win64</Platform>
|
||||
<EsdDirectory>./products/APRO</EsdDirectory>
|
||||
<InstallSize>1636827136</InstallSize>
|
||||
<DefaultInstallDir>[AdobeProgramFiles]</DefaultInstallDir>
|
||||
<InstallCommand>
|
||||
<Path>Setup.exe</Path>
|
||||
<Arguments>
|
||||
<Argument>/sAll</Argument>
|
||||
<Argument>/msi INSTALLDIR="[InstallDir]\Acrobat DC" LANG_LIST=[InstallLanguage] EULA_ACCEPT=YES SUITEMODE=1 OWNERSHIP_STATE=1 IGNOREAAM=1</Argument>
|
||||
</Arguments>
|
||||
<SuccessExitCodes>
|
||||
<ExitCode>0</ExitCode>
|
||||
</SuccessExitCodes>
|
||||
</InstallCommand>
|
||||
</ThirdPartyData>
|
||||
</InstallData>
|
||||
</ProductInfo>
|
||||
22
suite_installer/Readme.md
Normal file
@@ -0,0 +1,22 @@
|
||||
## Folder structure:
|
||||
```
|
||||
.\packages
|
||||
.\products
|
||||
.\resources
|
||||
.\Set-up.exe
|
||||
```
|
||||
|
||||
## How to
|
||||
1. Download desired products.
|
||||
2. Move all packages folders to products (No need to move __prefix__Driver.xml files)
|
||||
3. Copy Set-up.exe and packages files to current folder
|
||||
4. Copy AdobePIM.dll to resources folder
|
||||
5. Run gen-suite.py
|
||||
```
|
||||
python gen-suite.py
|
||||
python gen-suite.py -d "./../products"
|
||||
````
|
||||
6. SuiteInfo.xml can be found in products directory. (You can manually edit too)
|
||||
|
||||
### Note
|
||||
1. Acrobat Pro DC is not HD installer type. You can manually edit SuiteInfo.xml (use APRO.xml file) and add acrobat installer files to products folder.
|
||||
188
suite_installer/gen-suite.py
Normal file
@@ -0,0 +1,188 @@
|
||||
import os
|
||||
import io
|
||||
import sys
|
||||
import json
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
prodsDir = "./products"
|
||||
|
||||
SCRIPT_NAME = "Suite Info xml generator"
|
||||
VERSION_STR = "1.0.00"
|
||||
|
||||
|
||||
def show_info(name: str, version: str, pad: int, bdr: str) -> None:
|
||||
"""Show script information"""
|
||||
tl = len(name) + (pad * 2)
|
||||
print(bdr * tl)
|
||||
print(bdr + name.center(tl - 2) + bdr)
|
||||
print(version.center(tl, bdr))
|
||||
|
||||
|
||||
def icon_list(elem, sap):
|
||||
sap = sap.lower()
|
||||
icons = ET.SubElement(elem, "Icons")
|
||||
list = ["20x19", "32x32", "44x42", "64x64", "88x84", "176x168"]
|
||||
for ic in list:
|
||||
ico = ET.SubElement(icons, f"Size{ic}")
|
||||
path = ET.SubElement(ico, "path")
|
||||
path.text = f"./resources/icons/{sap}{ic}.png"
|
||||
|
||||
def calc_sizes(data):
|
||||
pkgs = data["Packages"]["Package"]
|
||||
size = 0
|
||||
for tmp in pkgs:
|
||||
size += int(tmp.get("ExtractSize"))
|
||||
|
||||
return str(size)
|
||||
|
||||
|
||||
def add_product(elem):
|
||||
pDir = Path(prodsDir)
|
||||
paths = [str(item) for item in pDir.rglob('*/') if item.is_dir()]
|
||||
if len(paths) < 1:
|
||||
print("\nNo products found in products directory")
|
||||
sys.exit("\nBye")
|
||||
|
||||
print("\nGenerating ...")
|
||||
langs = []
|
||||
for p in paths:
|
||||
file = os.path.join(".", p, "Application.json")
|
||||
if Path(file).is_file() == False:
|
||||
continue
|
||||
|
||||
with open(file, "r", encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
if data.get("AddRemoveInfo") and data.get("IsSTI") is False:
|
||||
sapCode = data.get("SAPCode")
|
||||
prod = ET.SubElement(elem, "ProductInfo")
|
||||
name = ET.SubElement(prod, "Name")
|
||||
name.text = data["AddRemoveInfo"]["DisplayName"]["Language"][0]["value"]
|
||||
|
||||
type = ET.SubElement(prod, "InstallerType")
|
||||
type.text = "HD"
|
||||
|
||||
hide = ET.SubElement(prod, "HideProductLaunch")
|
||||
hide.text = "true"
|
||||
|
||||
icon_list(prod, sapCode)
|
||||
|
||||
insData = ET.SubElement(prod, "InstallData")
|
||||
hdData = ET.SubElement(insData, "HDData")
|
||||
for k, v in dict({
|
||||
"SAPCode": sapCode,
|
||||
"CodexVersion" : data.get("CodexVersion"),
|
||||
"BaseVersion": data.get("BaseVersion"),
|
||||
"Platform": data.get("Platform"),
|
||||
"EsdDirectory": f"{prodsDir}/{sapCode}",
|
||||
"InstallSize": calc_sizes(data),
|
||||
}).items():
|
||||
x = ET.SubElement(hdData, k)
|
||||
x.text = v
|
||||
|
||||
supLangs = data["SupportedLanguages"]["Language"]
|
||||
for k in supLangs:
|
||||
if k["locale"] not in langs:
|
||||
langs.append(k["locale"])
|
||||
|
||||
if data.get("Dependencies"):
|
||||
deps = ET.SubElement(hdData, "Dependencies")
|
||||
|
||||
depList = data["Dependencies"]["Dependency"]
|
||||
for d in depList:
|
||||
esdDir = f"{prodsDir}/{d.get("SAPCode")}"
|
||||
depJson = os.path.join(Path(esdDir), "Application.json")
|
||||
with open(depJson, "r", encoding='utf-8') as f:
|
||||
depData = json.load(f)
|
||||
size = calc_sizes(depData)
|
||||
dPkg = ET.SubElement(deps, "Dependency")
|
||||
for k, v in dict({
|
||||
"SAPCode": d.get("SAPCode"),
|
||||
"BaseVersion": d.get("BaseVersion"),
|
||||
"EsdDirectory": esdDir,
|
||||
"InstallSize": size or "0",
|
||||
}).items():
|
||||
x = ET.SubElement(dPkg, k)
|
||||
x.text = v
|
||||
|
||||
if sapCode == "LTRM":
|
||||
requestInfo = ET.SubElement(insData, "RequestInfo")
|
||||
reqSub = ET.SubElement(requestInfo, "IsEnterpriseDeployment")
|
||||
reqSub.text = "true"
|
||||
return langs
|
||||
|
||||
|
||||
def gen_suiteinfo():
|
||||
'''
|
||||
Generate SuiteInfo.xml for suite like installer
|
||||
'''
|
||||
suiteInfo = ET.Element("SuiteInfo")
|
||||
|
||||
tmp = ET.SubElement(suiteInfo, "SuiteName")
|
||||
tmp.text = suiteName
|
||||
|
||||
tmp = ET.SubElement(suiteInfo, "CodexVersion")
|
||||
tmp.text = suiteVer
|
||||
|
||||
supLangs = ET.SubElement(suiteInfo, "SupportedLanguages")
|
||||
|
||||
infoList = ["IsNonCCSuite", "IsAAMRequired", "IsCCDRequired"]
|
||||
for inf in infoList:
|
||||
tmp = ET.SubElement(suiteInfo, inf)
|
||||
tmp.text = "false"
|
||||
|
||||
icon_list(suiteInfo, "cloud")
|
||||
|
||||
products = ET.SubElement(suiteInfo, "ProductInfos")
|
||||
langs = add_product(products)
|
||||
|
||||
for sl in langs:
|
||||
# remove mul from locale list
|
||||
if sl == "mul":
|
||||
continue
|
||||
|
||||
tmp = ET.SubElement(supLangs, "Locale")
|
||||
tmp.text = sl
|
||||
|
||||
|
||||
tree = ET.ElementTree(suiteInfo)
|
||||
ET.indent(tree, space=" ", level=0)
|
||||
xml_file = os.path.join(prodsDir, "SuiteInfo.xml")
|
||||
xml_declaration = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n'
|
||||
|
||||
with io.open(xml_file, "wb") as f:
|
||||
f.write(xml_declaration.encode("utf-8"))
|
||||
tree.write(f, encoding="utf-8", xml_declaration=False)
|
||||
print(f"\nSuccessfully generated: {os.path.realpath(xml_file)}\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
"""Get command-line parameters"""
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"-d", "--prodsDir", help="Products directory", action="store"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-n", "--suiteName", help="Name for suite", action="store"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-v", "--suiteVer", help="Suite version number", action="store"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
show_info(SCRIPT_NAME, VERSION_STR, 10, "=")
|
||||
|
||||
suiteName = args.suiteName
|
||||
|
||||
while suiteName is None:
|
||||
suiteName = (input("\nPlease enter a name for suite: ").strip() or "Adobe Creative Cloud")
|
||||
|
||||
suiteVer = args.suiteVer
|
||||
while suiteVer is None:
|
||||
suiteVer = (input("\nPlease enter suite version: ").strip() or "1.0")
|
||||
|
||||
prodsDir = args.prodsDir or prodsDir
|
||||
print(f"\nSuiteInfo.xml file will be save in {os.path.realpath(prodsDir)}")
|
||||
|
||||
gen_suiteinfo()
|
||||
1
suite_installer/resources/Config.xml
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Config><UIConfig><HideVersion>false</HideVersion><SkipLaunch>true</SkipLaunch><HidePIIScreen>false</HidePIIScreen><showMainScreen>true</showMainScreen><showDownloadOptionScreen>true</showDownloadOptionScreen><ShowInstallOptions>true</ShowInstallOptions><SkipAccLaunch>true</SkipAccLaunch></UIConfig></Config>
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Výukové lekce k aplikaci Photoshop 2021",
|
||||
"SubTitle": "Začněte, naučte se základy a nechte se inspirovat.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64bitová verze) (minimální požadavek)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (minimální požadavek)",
|
||||
"Memory": "Instalace aplikace vyžaduje alespoň 8 GB paměti RAM",
|
||||
"TextSlide1": "Plná náruč kreativity"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Photoshop 2021 – Tutorials",
|
||||
"SubTitle": "Erste Schritte, Grundlagen, Inspirationen.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64-Bit) (mindestens erforderlich)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (mindestens erforderlich)",
|
||||
"Memory": "Sie benötigen mindestens 8 GB RAM, um die Anwendung zu installieren",
|
||||
"TextSlide1": "Kreativität für alle."
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Photoshop 2021 tutorials",
|
||||
"SubTitle": "Get started, get the essentials, get inspired.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64-bit) (Minimum required)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (Minimum required)",
|
||||
"Memory": "You need minimum 8Gb RAM to install the application",
|
||||
"TextSlide1": "Creativity for all."
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Tutoriales de Photoshop 2021",
|
||||
"SubTitle": "Empiece, descubra los fundamentos y encuentre inspiración.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64 bits) (mínimo requerido)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (mínimo requerido)",
|
||||
"Memory": "Se necesita un mínimo de 8 GB de RAM para instalar la aplicación",
|
||||
"TextSlide1": "Creatividad para todos"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Tutoriels Photoshop 2021",
|
||||
"SubTitle": "Lancez-vous, saisissez l'essentiel, soyez inspiré.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (minimum requis)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (minimum requis)",
|
||||
"Memory": "Vous avez besoin de 8 Go de mémoire vive minimum pour installer l'application.",
|
||||
"TextSlide1": "La créativité pour tous.",
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"Name": "Esercitazioni di Photoshop 2021",
|
||||
"SubTitle": "Iniziate, raccogliete tutto ciò che vi serve e lasciatevi ispirare.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64 bit) (versione minima richiesta)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (versione minima richiesta)",
|
||||
"Memory": "Sono necessari almeno 8 Gb di RAM per installare l'applicazione",
|
||||
"TextSlide1": "Colora consente di ricolorare le fotografie in bianco e nero.",
|
||||
"TextSlide2": "Creatività per tutti."
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Photoshop 2021 チュートリアル",
|
||||
"SubTitle": "はじめに、基本事項を学び、ヒントを得てください。",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64-bit) (以上)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (以上)",
|
||||
"Memory": "アプリケーションをインストールするには、最低 8GB の RAM が必要です。",
|
||||
"TextSlide1": "すべての人に「つくる力」を"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Photoshop 2021 자습서",
|
||||
"SubTitle": "시작하여 필수 기능을 이용해 보십시오.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64비트)(최소 요구 사양)",
|
||||
"OperatingSystemMac": "Mac OS 10.14(최소 요구 사양)",
|
||||
"Memory": "애플리케이션을 설치하려면 최소 8GB의 RAM이 필요합니다.",
|
||||
"TextSlide1": "모두를 위한 크리에이티브"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Zelfstudies voor Photoshop 2021",
|
||||
"SubTitle": "Ga aan de slag met handige tools en laat u inspireren.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64-bits) (minimaal vereist)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (minimaal vereist)",
|
||||
"Memory": "U hebt minimaal 8 GB RAM nodig om de toepassing te installeren",
|
||||
"TextSlide1": "Creativiteit voor iedereen."
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Samouczki programu Photoshop 2021",
|
||||
"SubTitle": "Rozpocznij, poznaj wszystkie podstawy, zainspiruj się.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64-bitowy) (minimalna wymagana wersja)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (minimalna wymagana wersja)",
|
||||
"Memory": "Do instalacji aplikacji wymagane są co najmniej 8 GB pamięci RAM.",
|
||||
"TextSlide1": "Kreatywność dla wszystkich"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Руководства по Photoshop 2021",
|
||||
"SubTitle": "Создавайте работы, узнавайте новое, получайте вдохновение.",
|
||||
"Operating1xWin": "Windows 10 версия 1809 (64-разрядная) (минимально допустимая версия)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (минимально допустимая версия)",
|
||||
"Memory": "Для установки приложения требуется минимум 8 ГБ ОЗУ",
|
||||
"TextSlide1": "Проявить себя в творчестве может каждый!"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Självstudiekurser för Photoshop 2021",
|
||||
"SubTitle": "Kom igång, lär dig det grundläggande och bli inspirerad.",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64-bitars) krävs",
|
||||
"OperatingSystemMac": "macOS 10.14 krävs",
|
||||
"Memory": "Om du vill installera programmet måste du ha minst 8 GB med RAM-minne",
|
||||
"TextSlide1": "Kreativitet för alla."
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Photoshop 2021 教程",
|
||||
"SubTitle": "快速入门,获得必备工具,获得灵感。",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64 位)(最低要求)",
|
||||
"OperatingSystemMac": "Mac OS 10.14(最低要求)",
|
||||
"Memory": "您至少需要 8GB RAM 才能安装此应用程序",
|
||||
"TextSlide1": "人人都能發揮創意"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Name": "Photoshop 2021 教學課程",
|
||||
"SubTitle": "開始使用、瞭解基本知識、取得靈感。",
|
||||
"Operating1xWin": "Windows 10 version 1809 (64 位元) (最低需求)",
|
||||
"OperatingSystemMac": "Mac OS 10.14 (最低需求)",
|
||||
"Memory": "您需要至少 8 GB 的 RAM 才能安裝應用程式",
|
||||
"TextSlide1": "人人都能發揮創意"
|
||||
}
|
||||
72
suite_installer/resources/carousel/carousel.js
Normal file
@@ -0,0 +1,72 @@
|
||||
$(document).ready(function () {
|
||||
cecInit();
|
||||
})
|
||||
|
||||
function cecInit() {
|
||||
var jsonData;
|
||||
var locale = getParameterByName('locale');
|
||||
var isHighDpi = getParameterByName('isHighDpi');
|
||||
cecGetLocaleJson(locale);
|
||||
}
|
||||
|
||||
function resizeWin() {
|
||||
myWindow.resizeTo(455, 239);
|
||||
|
||||
}
|
||||
var slideIndex = 0;
|
||||
showSlides();
|
||||
|
||||
function showSlides() {
|
||||
var i;
|
||||
var slides = document.getElementsByClassName("mySlides");
|
||||
for (i = 0; i < slides.length; i++) {
|
||||
console.log(slides[i]);
|
||||
slides[i].style.opacity = "0";
|
||||
slides[i].style.visibility = "hidden";
|
||||
}
|
||||
slideIndex++;
|
||||
if (slideIndex > slides.length) {slideIndex = 1}
|
||||
|
||||
slides[slideIndex-1].style.opacity = "1";
|
||||
slides[slideIndex-1].style.visibility = "visible";
|
||||
|
||||
var x = document.getElementsByTagName('video');
|
||||
if (slideIndex == 1) {
|
||||
x[0].currentTime = 0;
|
||||
}
|
||||
setTimeout(showSlides, 17500); // Change image every 17.50 seconds
|
||||
}
|
||||
|
||||
function getParameterByName(name) {
|
||||
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
||||
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
|
||||
results = regex.exec(location.search);
|
||||
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
|
||||
}
|
||||
|
||||
function cecGetLocaleJson(locale)
|
||||
{
|
||||
console.log("cecGetLocaleJson");
|
||||
var jsonLocation = "Dictionary/" + locale + "/locale.json";
|
||||
|
||||
$.getJSON(jsonLocation, function (data) {
|
||||
cecDisplayContent(data, locale);
|
||||
})
|
||||
.fail(function () {
|
||||
if(locale == "en_US") {
|
||||
return;
|
||||
}
|
||||
cecGetLocaleJson("en_US");
|
||||
})
|
||||
}
|
||||
|
||||
function cecDisplayContent(data, locale)
|
||||
{
|
||||
var lcl = locale.slice(3,5);
|
||||
var url = "http://www.adobe.com/"+lcl.toLowerCase()+"/creativecloud.html";
|
||||
if(locale == "en_us" || locale == "en_US") {
|
||||
url = "http://www.adobe.com/creativecloud.html";
|
||||
}
|
||||
document.getElementById("slideContainer").onclick =function() { parent.cecExternalLink(url) };
|
||||
document.getElementById("slideText1").innerHTML = data["TextSlide1"];
|
||||
}
|
||||
7
suite_installer/resources/carousel/css/styles.css
Normal file
@@ -0,0 +1,7 @@
|
||||
@charset "utf-8";
|
||||
@font-face {
|
||||
font-family: 'AdobeClean';
|
||||
src: url('fonts/adobeclean/adobeclean-regular-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
91
suite_installer/resources/carousel/index.html
Normal file
@@ -0,0 +1,91 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>PHSP installer slideshow</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="css/styles.css">
|
||||
<style>
|
||||
html {
|
||||
background-color: #fff;
|
||||
}
|
||||
* {box-sizing: border-box;}
|
||||
body {
|
||||
margin:0px;}
|
||||
.mySlides {opacity: 0; position: absolute; transition: all 1s;}
|
||||
img {vertical-align: middle;}
|
||||
|
||||
/* Slideshow container */
|
||||
.slideshow-container {
|
||||
max-width: 445px;
|
||||
position: relative;
|
||||
margin: auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* Caption text */
|
||||
.text {
|
||||
font-family: 'AdobeClean', Helvetica, Arial, sans-serif;
|
||||
color: #000;
|
||||
font-weight: 450;
|
||||
font-size: 15px;
|
||||
letter-spacing: .3;
|
||||
padding-left: 30px;
|
||||
position: absolute;
|
||||
bottom: 95px;
|
||||
width: 35%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Number text (1/3 etc) */
|
||||
.numbertext {
|
||||
font-family: 'AdobeClean', Helvetica, Arial, sans-serif;
|
||||
color: #f2f2f2;
|
||||
font-size: 12px;
|
||||
padding: 8px 12px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.active {
|
||||
background-color: #717171;
|
||||
}
|
||||
|
||||
/* Fading animation */
|
||||
.fade {
|
||||
-webkit-animation-name: fade;
|
||||
-webkit-animation-duration: 1s;
|
||||
animation-name: fade;
|
||||
animation-duration: 1s;
|
||||
}
|
||||
|
||||
@-webkit-keyframes fade {
|
||||
from {opacity: .7}
|
||||
to {opacity: 1}
|
||||
}
|
||||
|
||||
@keyframes fade {
|
||||
from {opacity: .1}
|
||||
to {opacity: 1}
|
||||
}
|
||||
|
||||
/* On smaller screens, decrease text size */
|
||||
@media only screen and (max-width: 300px) {
|
||||
.text {font-size: 11px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="slideshow-container" id="slideContainer" href="#">
|
||||
|
||||
<div class="mySlides fade" style="opacity: 0; visibility: hidden;">
|
||||
<video class="videos" autoplay loop muted style="width: 445px; height: 239px;"><source src="images/01_creativity_for_all_445x239.mp4" style="width: 445px; height: 239px;"></video>
|
||||
<div class="text" id="slideText1">Creativity for all.</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="lib/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="carousel.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
2
suite_installer/resources/carousel/lib/jquery.min.js
vendored
Normal file
BIN
suite_installer/resources/icons/aeft176x168.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
suite_installer/resources/icons/aeft20x19.png
Normal file
|
After Width: | Height: | Size: 480 B |
BIN
suite_installer/resources/icons/aeft32x32.png
Normal file
|
After Width: | Height: | Size: 933 B |
BIN
suite_installer/resources/icons/aeft44x42.png
Normal file
|
After Width: | Height: | Size: 915 B |
BIN
suite_installer/resources/icons/aeft64x64.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
suite_installer/resources/icons/aeft88x84.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
suite_installer/resources/icons/aeftbeta176x168.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
suite_installer/resources/icons/aeftbeta20x19.png
Normal file
|
After Width: | Height: | Size: 571 B |
BIN
suite_installer/resources/icons/aeftbeta32x32.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
suite_installer/resources/icons/aeftbeta44x42.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
suite_installer/resources/icons/aeftbeta64x64.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
suite_installer/resources/icons/aeftbeta88x84.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
suite_installer/resources/icons/aicy176x168.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
suite_installer/resources/icons/aicy20x19.png
Normal file
|
After Width: | Height: | Size: 368 B |
BIN
suite_installer/resources/icons/aicy32x32.png
Normal file
|
After Width: | Height: | Size: 769 B |
BIN
suite_installer/resources/icons/aicy44x42.png
Normal file
|
After Width: | Height: | Size: 640 B |
BIN
suite_installer/resources/icons/aicy64x64.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
suite_installer/resources/icons/aicy88x84.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
suite_installer/resources/icons/ame176x168.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
suite_installer/resources/icons/ame20x19.png
Normal file
|
After Width: | Height: | Size: 448 B |
BIN
suite_installer/resources/icons/ame32x32.png
Normal file
|
After Width: | Height: | Size: 893 B |
BIN
suite_installer/resources/icons/ame44x42.png
Normal file
|
After Width: | Height: | Size: 910 B |
BIN
suite_installer/resources/icons/ame64x64.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
suite_installer/resources/icons/ame88x84.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
suite_installer/resources/icons/amebeta176x168.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
suite_installer/resources/icons/amebeta20x19.png
Normal file
|
After Width: | Height: | Size: 579 B |
BIN
suite_installer/resources/icons/amebeta32x32.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
suite_installer/resources/icons/amebeta44x42.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
suite_installer/resources/icons/amebeta64x64.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
suite_installer/resources/icons/amebeta88x84.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
suite_installer/resources/icons/apro192.x192.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
suite_installer/resources/icons/apro20x19.png
Normal file
|
After Width: | Height: | Size: 430 B |
BIN
suite_installer/resources/icons/apro32x32.png
Normal file
|
After Width: | Height: | Size: 876 B |
BIN
suite_installer/resources/icons/apro44x42.png
Normal file
|
After Width: | Height: | Size: 900 B |
BIN
suite_installer/resources/icons/apro64x64.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
suite_installer/resources/icons/apro88x84.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
suite_installer/resources/icons/audt176x168.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
suite_installer/resources/icons/audt20x19.png
Normal file
|
After Width: | Height: | Size: 399 B |
BIN
suite_installer/resources/icons/audt32x32.png
Normal file
|
After Width: | Height: | Size: 847 B |
BIN
suite_installer/resources/icons/audt44x42.png
Normal file
|
After Width: | Height: | Size: 789 B |
BIN
suite_installer/resources/icons/audt64x64.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
suite_installer/resources/icons/audt88x84.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
suite_installer/resources/icons/audtbeta176x168.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
suite_installer/resources/icons/audtbeta20x19.png
Normal file
|
After Width: | Height: | Size: 514 B |
BIN
suite_installer/resources/icons/audtbeta32x32.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
suite_installer/resources/icons/audtbeta44x42.png
Normal file
|
After Width: | Height: | Size: 933 B |
BIN
suite_installer/resources/icons/audtbeta64x64.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
suite_installer/resources/icons/audtbeta88x84.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
suite_installer/resources/icons/char176x168.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
suite_installer/resources/icons/char20x19.png
Normal file
|
After Width: | Height: | Size: 411 B |
BIN
suite_installer/resources/icons/char32x32.png
Normal file
|
After Width: | Height: | Size: 842 B |
BIN
suite_installer/resources/icons/char44x42.png
Normal file
|
After Width: | Height: | Size: 737 B |
BIN
suite_installer/resources/icons/char64x64.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
suite_installer/resources/icons/char88x84.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
suite_installer/resources/icons/charbeta176x168.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
suite_installer/resources/icons/charbeta20x19.png
Normal file
|
After Width: | Height: | Size: 474 B |
BIN
suite_installer/resources/icons/charbeta32x32.png
Normal file
|
After Width: | Height: | Size: 986 B |
BIN
suite_installer/resources/icons/charbeta44x42.png
Normal file
|
After Width: | Height: | Size: 862 B |
BIN
suite_installer/resources/icons/charbeta64x64.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
suite_installer/resources/icons/charbeta88x84.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
suite_installer/resources/icons/cloud176x168.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
suite_installer/resources/icons/cloud20x19.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
suite_installer/resources/icons/cloud32x32.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
suite_installer/resources/icons/cloud44x42.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
suite_installer/resources/icons/cloud64x64.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
suite_installer/resources/icons/cloud88x84.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
suite_installer/resources/icons/drwv176x168.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
suite_installer/resources/icons/drwv20x19.png
Normal file
|
After Width: | Height: | Size: 467 B |
BIN
suite_installer/resources/icons/drwv32x32.png
Normal file
|
After Width: | Height: | Size: 957 B |
BIN
suite_installer/resources/icons/drwv44x42.png
Normal file
|
After Width: | Height: | Size: 880 B |
BIN
suite_installer/resources/icons/drwv64x64.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
suite_installer/resources/icons/drwv88x84.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |