diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fd20fdd --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +*.pyc diff --git a/GPIOEXPI2Ccontrol.py b/GPIOEXPI2Ccontrol.py index 7e0f2a9..f0d4178 100644 --- a/GPIOEXPI2Ccontrol.py +++ b/GPIOEXPI2Ccontrol.py @@ -230,14 +230,13 @@ def CheckRealHWpin(PIN=""): return False, 0 return False, 0 - def GPIO_output(address , PINstr, level ): isRealPIN,PIN=CheckRealHWpin(PINstr) if isRealPIN: if address in MCPDEVICES: mcp=MCPDEVICES[address] else: - msg= "Address =" +address+ " not available for this Hardware" + msg= "Address =" + address + " not available for this Hardware" logger.error(msg) print(msg) return False @@ -246,19 +245,17 @@ def GPIO_output(address , PINstr, level ): mcp.output(PIN, mcp.LOW) else: mcp.output(PIN, mcp.HIGH) - statusdataDBmod.write_status_data(GPIO_data,address+PINstr,"level",level) + statusdataDBmod.write_status_data(GPIO_data, address + PINstr, "level", level) logger.info("Set PIN=%s to State=%s", PINstr, str(level)) return True else: - msg= "PIN=" +PINstr+ " not Valid for this Hardware" - logger.error(msg) - print(msg) + if PINstr != "N/A": + msg= "PIN=" + PINstr + " not Valid for this Hardware (" + address + ")" + logger.error(msg) + print(msg) return False - - - def GPIO_setup(address, PINstr, state, pull_up_down=""): isRealPIN,PIN=CheckRealHWpin(PINstr) if isRealPIN: diff --git a/HWcontrol.py b/HWcontrol.py index c54edee..1e5a0c3 100755 --- a/HWcontrol.py +++ b/HWcontrol.py @@ -1142,9 +1142,11 @@ def GPIO_output(PINstr, level): #print PINstr , " ***********************************************" , level return True else: - msg= "PIN=" +PINstr+ " not Valid for this Hardware" - logger.error(msg) - print(msg) + if PINstr != "N/A": + msg= "PIN=" +PINstr+ " not Valid for this Hardware" + logger.error(msg) + print(msg) + return False def GPIO_output_nostatus(PINstr, level): diff --git a/HWcontrol.pyc b/HWcontrol.pyc deleted file mode 100644 index 445766d..0000000 Binary files a/HWcontrol.pyc and /dev/null differ diff --git a/Prepare for Release/Release checklist b/Prepare for Release/Release checklist index bd89df3..e68a4af 100644 --- a/Prepare for Release/Release checklist +++ b/Prepare for Release/Release checklist @@ -16,7 +16,7 @@ HYDROSYSTEM SW LEVEL: 4c) remove all files in database /logfiles/ 4d) remove all files in database /static/downlaod/ remove all pictures -> go to 'images' and push deleteall or go to static/hydropicture/ -5) bash, ensure the latest bash file is install_hydreosys4.sh +5) bash, ensure the latest bash file is install_hydrosys4.sh START THE PROGRAM IN UBUNTU: diff --git a/README.md b/README.md index 14d4b9a..475a79d 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,42 @@ # Hydrosystem -The hydrosys4 project aim to create a platform for the raspbery pi 3 which let you easily controls and record sensors data, use actuators through the GPIO and play with analog by using external ADC the supported hardware and wiring can be found in the Documentation folder. The platform is developed in python and is based on web server interface. The system can control the WiFi interface and work either in Access point mode than connected to wifi network. The webserver interface can be adjusted to support several purposes, the current development is a small irrigation system, GIU is made to support planning and conditional irrigation based on temperature and humidity, relays control the valve and pumps, the system also support email notifications, cameras and video. Latest upgrade include possibility to mount camera over servo. -The SW platform is based on a web interface where the webserver is running locally on the raspberry. The SW is designed to be used with smartphone and to be reachable from internet without need of external servers or dynamic DNS. -The basic concept is to develop a platoform for the internet of things which is not centralized, then to avoid extra fees, Static IP fees, Dynamic DNS fees. Every time the IP address is updated the system will send an email with relevant link to itself. -NOTE: The mainstream IoT products relies on central server architecture which binds user to annual fees, the server is also a single point of failure and a poses high security problems. -For the designed applications the supporting hardware platform and sensors are choosen to be inexpensive. +The hydrosys4 project aims to create a platform for the raspberry pi which lets you easily control and record sensors data. -More details can be found on my webpage https://hydrosysblog.wordpress.com/ +Use actuators through the GPIO and play with analog by using external ADC the supported hardware and wiring can be found in the Documentation folder. + +The platform is developed in python and is based on web server interface. The system can control the WiFi interface and works in Access point mode where to user can connect to. + +The webserver interface can be adjusted to support several purposes, the current development is used as automatic irrigation system. The GUI is made to support planning and conditional irrigation based on temperature and humidity, relays control the valve and pumps, the system also supports email notifications, cameras and video stream. Latest upgrade include possibility to mount camera over servo. + +The software platform is based on a web interface where the webserver is running locally on the raspberry pi. The software is designed to be used with smartphone and to be reachable from internet without need of external servers or dynamic DNS. Every time the IP address is updated the system will send an email with relevant link as configured. + +More details can be found on the webpage https://hydrosysblog.wordpress.com/ + +![image](https://github.com/user-attachments/assets/481f820f-82e2-4f30-bfb0-a897d2679e94) # Installation -For installation please follow the installation guide in the website: +For installation please follow the installation guide from here: https://hydrosysblog.wordpress.com/configuration/ two installation methods are possible: -1) For easy installation it is possible to directly download the SD image. +1) For easy installation it is possible to directly download the SD image from current relase 2) For a more traditional installation it is possible to download a bash installer +``` +wget https://raw.githubusercontent.com/Hydrosys4/Master/master/bash/install_hydrosys4.sh + +sudo chmod u+x install_hydrosys4.sh + +sudo ./install_hydrosys4.sh +``` # Access to the System -The systems run on the RPI3 which will act as access point, wait few seconds after the system is restarted, you will se a new wifi network. +The system runs on a raspberry pi, which will act as access point per default. Wait a few seconds after the system is restarted, you will see a new wifi network. Once connected to the wifi network, open the webbrowser and type the address indicated in the guide. https://hydrosysblog.wordpress.com/configuration/ @@ -36,5 +49,3 @@ Username: admin Password: default it is strongly suggested to modify the password. - - diff --git a/SchedulerMod.pyc b/SchedulerMod.pyc deleted file mode 100644 index 86b6901..0000000 Binary files a/SchedulerMod.pyc and /dev/null differ diff --git a/__pycache__/ActuatorControllermod.cpython-37.pyc b/__pycache__/ActuatorControllermod.cpython-37.pyc deleted file mode 100644 index 1e7022f..0000000 Binary files a/__pycache__/ActuatorControllermod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/GPIOEXPI2Ccontrol.cpython-37.pyc b/__pycache__/GPIOEXPI2Ccontrol.cpython-37.pyc deleted file mode 100644 index 778dbaa..0000000 Binary files a/__pycache__/GPIOEXPI2Ccontrol.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/HASScompMatrix.cpython-37.pyc b/__pycache__/HASScompMatrix.cpython-37.pyc deleted file mode 100644 index 164165f..0000000 Binary files a/__pycache__/HASScompMatrix.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/HASSintegrMQTT.cpython-37.pyc b/__pycache__/HASSintegrMQTT.cpython-37.pyc deleted file mode 100644 index fd8cded..0000000 Binary files a/__pycache__/HASSintegrMQTT.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/HC12control.cpython-37.pyc b/__pycache__/HC12control.cpython-37.pyc deleted file mode 100644 index d99e543..0000000 Binary files a/__pycache__/HC12control.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/HC12mod.cpython-37.pyc b/__pycache__/HC12mod.cpython-37.pyc deleted file mode 100644 index 0c04a54..0000000 Binary files a/__pycache__/HC12mod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/HWcontrol.cpython-37.pyc b/__pycache__/HWcontrol.cpython-37.pyc deleted file mode 100644 index 48eb906..0000000 Binary files a/__pycache__/HWcontrol.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/Hygro24_I2C.cpython-37.pyc b/__pycache__/Hygro24_I2C.cpython-37.pyc deleted file mode 100644 index e0fc620..0000000 Binary files a/__pycache__/Hygro24_I2C.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/MQTTcontrol.cpython-37.pyc b/__pycache__/MQTTcontrol.cpython-37.pyc deleted file mode 100644 index 4e522b9..0000000 Binary files a/__pycache__/MQTTcontrol.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/REGandDBmod.cpython-37.pyc b/__pycache__/REGandDBmod.cpython-37.pyc deleted file mode 100644 index 53644a1..0000000 Binary files a/__pycache__/REGandDBmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/SchedulerMod.cpython-37.pyc b/__pycache__/SchedulerMod.cpython-37.pyc deleted file mode 100644 index f436bf6..0000000 Binary files a/__pycache__/SchedulerMod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/SlowWire.cpython-37.pyc b/__pycache__/SlowWire.cpython-37.pyc deleted file mode 100644 index 994cb78..0000000 Binary files a/__pycache__/SlowWire.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/actuatordbmod.cpython-37.pyc b/__pycache__/actuatordbmod.cpython-37.pyc deleted file mode 100644 index 47f9205..0000000 Binary files a/__pycache__/actuatordbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/advancedmod.cpython-37.pyc b/__pycache__/advancedmod.cpython-37.pyc deleted file mode 100644 index acda6ce..0000000 Binary files a/__pycache__/advancedmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/autofertilizerdbmod.cpython-37.pyc b/__pycache__/autofertilizerdbmod.cpython-37.pyc deleted file mode 100644 index dab1d0f..0000000 Binary files a/__pycache__/autofertilizerdbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/autofertilizermod.cpython-37.pyc b/__pycache__/autofertilizermod.cpython-37.pyc deleted file mode 100644 index 8d2b8c8..0000000 Binary files a/__pycache__/autofertilizermod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/automationdbmod.cpython-37.pyc b/__pycache__/automationdbmod.cpython-37.pyc deleted file mode 100644 index 5b1b387..0000000 Binary files a/__pycache__/automationdbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/automationmod.cpython-37.pyc b/__pycache__/automationmod.cpython-37.pyc deleted file mode 100644 index e69559d..0000000 Binary files a/__pycache__/automationmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/autowateringdbmod.cpython-37.pyc b/__pycache__/autowateringdbmod.cpython-37.pyc deleted file mode 100644 index c312509..0000000 Binary files a/__pycache__/autowateringdbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/autowateringmod.cpython-37.pyc b/__pycache__/autowateringmod.cpython-37.pyc deleted file mode 100644 index c794e1d..0000000 Binary files a/__pycache__/autowateringmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/basicSetting.cpython-37.pyc b/__pycache__/basicSetting.cpython-37.pyc deleted file mode 100644 index 8c2a1bc..0000000 Binary files a/__pycache__/basicSetting.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/camera_pi.cpython-37.pyc b/__pycache__/camera_pi.cpython-37.pyc deleted file mode 100644 index dc30d51..0000000 Binary files a/__pycache__/camera_pi.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/cameradbmod.cpython-37.pyc b/__pycache__/cameradbmod.cpython-37.pyc deleted file mode 100644 index 1ccf797..0000000 Binary files a/__pycache__/cameradbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/clockdbmod.cpython-37.pyc b/__pycache__/clockdbmod.cpython-37.pyc deleted file mode 100644 index f6ecd67..0000000 Binary files a/__pycache__/clockdbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/clockmod.cpython-37.pyc b/__pycache__/clockmod.cpython-37.pyc deleted file mode 100644 index 2be6987..0000000 Binary files a/__pycache__/clockmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/countryinfo.cpython-37.pyc b/__pycache__/countryinfo.cpython-37.pyc deleted file mode 100644 index 7548b2b..0000000 Binary files a/__pycache__/countryinfo.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/databasemod.cpython-37.pyc b/__pycache__/databasemod.cpython-37.pyc deleted file mode 100644 index 895a88b..0000000 Binary files a/__pycache__/databasemod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/debuggingmod.cpython-37.pyc b/__pycache__/debuggingmod.cpython-37.pyc deleted file mode 100644 index c5e154b..0000000 Binary files a/__pycache__/debuggingmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/emaildbmod.cpython-37.pyc b/__pycache__/emaildbmod.cpython-37.pyc deleted file mode 100644 index 5f1120b..0000000 Binary files a/__pycache__/emaildbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/emailmod.cpython-37.pyc b/__pycache__/emailmod.cpython-37.pyc deleted file mode 100644 index a48ed27..0000000 Binary files a/__pycache__/emailmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/fertilizerdbmod.cpython-37.pyc b/__pycache__/fertilizerdbmod.cpython-37.pyc deleted file mode 100644 index 5d5902a..0000000 Binary files a/__pycache__/fertilizerdbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/filemanagementmod.cpython-37.pyc b/__pycache__/filemanagementmod.cpython-37.pyc deleted file mode 100644 index 8d1f9d0..0000000 Binary files a/__pycache__/filemanagementmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/filestoragemod.cpython-37.pyc b/__pycache__/filestoragemod.cpython-37.pyc deleted file mode 100644 index 1dc683b..0000000 Binary files a/__pycache__/filestoragemod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/flasksettings.cpython-37.pyc b/__pycache__/flasksettings.cpython-37.pyc deleted file mode 100644 index bff4d1b..0000000 Binary files a/__pycache__/flasksettings.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/hardwaremod.cpython-37.pyc b/__pycache__/hardwaremod.cpython-37.pyc deleted file mode 100644 index 723f1f8..0000000 Binary files a/__pycache__/hardwaremod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/hx711_AV.cpython-37.pyc b/__pycache__/hx711_AV.cpython-37.pyc deleted file mode 100644 index 2f1b9ba..0000000 Binary files a/__pycache__/hx711_AV.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/interruptdbmod.cpython-37.pyc b/__pycache__/interruptdbmod.cpython-37.pyc deleted file mode 100644 index eea6c1e..0000000 Binary files a/__pycache__/interruptdbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/interruptmod.cpython-37.pyc b/__pycache__/interruptmod.cpython-37.pyc deleted file mode 100644 index 511744e..0000000 Binary files a/__pycache__/interruptmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/jsonFormUtils.cpython-37.pyc b/__pycache__/jsonFormUtils.cpython-37.pyc deleted file mode 100644 index 908ec0d..0000000 Binary files a/__pycache__/jsonFormUtils.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/loggerconfig.cpython-37.pyc b/__pycache__/loggerconfig.cpython-37.pyc deleted file mode 100644 index b782661..0000000 Binary files a/__pycache__/loggerconfig.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/logindbmod.cpython-37.pyc b/__pycache__/logindbmod.cpython-37.pyc deleted file mode 100644 index 02f5e01..0000000 Binary files a/__pycache__/logindbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/messageboxmod.cpython-37.pyc b/__pycache__/messageboxmod.cpython-37.pyc deleted file mode 100644 index 15dc91e..0000000 Binary files a/__pycache__/messageboxmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/networkdbmod.cpython-37.pyc b/__pycache__/networkdbmod.cpython-37.pyc deleted file mode 100644 index 63551aa..0000000 Binary files a/__pycache__/networkdbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/networkmod.cpython-37.pyc b/__pycache__/networkmod.cpython-37.pyc deleted file mode 100644 index 0d3ad0a..0000000 Binary files a/__pycache__/networkmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/photomod.cpython-37.pyc b/__pycache__/photomod.cpython-37.pyc deleted file mode 100644 index d342d66..0000000 Binary files a/__pycache__/photomod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/selectedplanmod.cpython-37.pyc b/__pycache__/selectedplanmod.cpython-37.pyc deleted file mode 100644 index 9bb05b2..0000000 Binary files a/__pycache__/selectedplanmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/sensordbmod.cpython-37.pyc b/__pycache__/sensordbmod.cpython-37.pyc deleted file mode 100644 index ab49103..0000000 Binary files a/__pycache__/sensordbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/start.cpython-37.pyc b/__pycache__/start.cpython-37.pyc deleted file mode 100644 index ef81f0c..0000000 Binary files a/__pycache__/start.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/statusdataDBmod.cpython-37.pyc b/__pycache__/statusdataDBmod.cpython-37.pyc deleted file mode 100644 index 9d4f510..0000000 Binary files a/__pycache__/statusdataDBmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/sysconfigfilemod.cpython-37.pyc b/__pycache__/sysconfigfilemod.cpython-37.pyc deleted file mode 100644 index 383e59d..0000000 Binary files a/__pycache__/sysconfigfilemod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/systemtimeMod.cpython-37.pyc b/__pycache__/systemtimeMod.cpython-37.pyc deleted file mode 100644 index 06a1498..0000000 Binary files a/__pycache__/systemtimeMod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/videocontrolmod.cpython-37.pyc b/__pycache__/videocontrolmod.cpython-37.pyc deleted file mode 100644 index 54ab071..0000000 Binary files a/__pycache__/videocontrolmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/videomod.cpython-37.pyc b/__pycache__/videomod.cpython-37.pyc deleted file mode 100644 index ee8d3c0..0000000 Binary files a/__pycache__/videomod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/wateringdbmod.cpython-37.pyc b/__pycache__/wateringdbmod.cpython-37.pyc deleted file mode 100644 index a8e801d..0000000 Binary files a/__pycache__/wateringdbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/wateringplansensordbmod.cpython-37.pyc b/__pycache__/wateringplansensordbmod.cpython-37.pyc deleted file mode 100644 index bb0c49d..0000000 Binary files a/__pycache__/wateringplansensordbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/weatherAPIdbmod.cpython-37.pyc b/__pycache__/weatherAPIdbmod.cpython-37.pyc deleted file mode 100644 index 4ae256e..0000000 Binary files a/__pycache__/weatherAPIdbmod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/weatherAPImod.cpython-37.pyc b/__pycache__/weatherAPImod.cpython-37.pyc deleted file mode 100644 index 1a67fb8..0000000 Binary files a/__pycache__/weatherAPImod.cpython-37.pyc and /dev/null differ diff --git a/__pycache__/wpa_cli_mod.cpython-37.pyc b/__pycache__/wpa_cli_mod.cpython-37.pyc deleted file mode 100644 index 72180b7..0000000 Binary files a/__pycache__/wpa_cli_mod.cpython-37.pyc and /dev/null differ diff --git a/actuatordbmod.pyc b/actuatordbmod.pyc deleted file mode 100644 index 3be384d..0000000 Binary files a/actuatordbmod.pyc and /dev/null differ diff --git a/advancedmod.pyc b/advancedmod.pyc deleted file mode 100644 index d331680..0000000 Binary files a/advancedmod.pyc and /dev/null differ diff --git a/autofertilizermod.py b/autofertilizermod.py index 9330950..369f60c 100755 --- a/autofertilizermod.py +++ b/autofertilizermod.py @@ -24,17 +24,12 @@ # triggerdate, datetime when the doser have been triggered to start # tobeactivated, doser need to be activated in the next opportunity - -def isschedulermode(element): +def getworkmode(element): recordkey="element" recordvalue=element keytosearch="workmode" workmode=autofertilizerdbmod.searchdata(recordkey,recordvalue,keytosearch) - if workmode=="SceduledTime": - return True - else: - return False - + return workmode def checkactivate(elementwater,durationwater): # requires integer input elementlist=fertilizerdbmod.getelementlist() @@ -47,7 +42,8 @@ def checkactivate(elementwater,durationwater): # requires integer input break if waterok: # there is a corresponding doser element minwaterduration=hardwaremod.toint(autofertilizerdbmod.searchdata("element",element,"minactivationsec"),0) - if not isschedulermode(element): #setup is not for scheduled time + workmode = getworkmode(element) + if workmode == "BeforeWatering": #setup is not for scheduled time print(" Fertilizer " ,element ," set to autowater") print(" Check Water duration ", durationwater ,">", minwaterduration) if durationwater>minwaterduration: # watering time above the set threshold @@ -59,9 +55,9 @@ def checkactivate(elementwater,durationwater): # requires integer input time.sleep(durationfer) #this blocks the system (and watering activation) for n seconds ... not best practice else: print(" No pending request to activate ", element) - + def activatedoser(element, duration): - print(element, " ",duration, " " , datetime.now()) + print(element, " ",duration, " " , datetime.now()) logger.info('Doser Pulse, pulse time for ms = %s', duration) msg, pulseok = ActuatorControllermod.activateactuator(element,duration) # msg , pulseok=hardwaremod.makepulse(element,duration) @@ -85,13 +81,17 @@ def checkworkmode(element): return autofertilizerdbmod.searchdata("element",element,"workmode") def timelist(element): - if isschedulermode(element): + workmode = getworkmode(element) + if workmode == "ScheduledTime": fertime=autofertilizerdbmod.searchdata("element",element,"time") print("fertime " , fertime) timelist=hardwaremod.separatetimestringint(fertime) - else: + elif workmode == "BeforeWatering": print("non scheduler mode ") timelist=hardwaremod.separatetimestringint("00:20:00") # get up 0 minutes and check for doseractivation + else: + print("Fertilizer is disabled") + return timelist if __name__ == '__main__': diff --git a/autowatering/autowateringmod.py b/autowatering/autowateringmod.py index ef5cf18..e22d9da 100755 --- a/autowatering/autowateringmod.py +++ b/autowatering/autowateringmod.py @@ -97,7 +97,7 @@ def message(msg, status: StatusManager, console=True, log=True, logseverity = " if mail: Messaging.writemail(msg, status, mailtype) if note: - dictitem={'title': "System Message (Alert) - Autowatering", 'content': msg } + dictitem={'title': "System Message (Alert) - Autowatering", 'content': msg, 'color': "blue" } messageboxmod.SaveMessage(dictitem) diff --git a/bash/guide~ b/bash/guide~ deleted file mode 100644 index 8bf3504..0000000 --- a/bash/guide~ +++ /dev/null @@ -1,6 +0,0 @@ -use the following command to download the installation file: - -wget https://github.com/Hydrosys4/Master/blob/master/bash/install_hydrosys4.sh - -sudo chmod u+x install_hydrosys4.sh -sudo ./install_hydrosys4.sh diff --git a/bash/install_hydrosys4.sh b/bash/install_hydrosys4.sh index c1eeadd..2b90d69 100755 --- a/bash/install_hydrosys4.sh +++ b/bash/install_hydrosys4.sh @@ -563,6 +563,11 @@ server { proxy_buffering off; } + location /static/download/configdownload/logincred.txt { + return 302 https://$server_name$request_uri; + } + + location /favicon.ico { alias /home/pi/env/autonom/static/favicon.ico; } diff --git a/basicSetting.pyc b/basicSetting.pyc deleted file mode 100644 index f50ecd5..0000000 Binary files a/basicSetting.pyc and /dev/null differ diff --git a/camera_pi.pyc b/camera_pi.pyc deleted file mode 100644 index 9498091..0000000 Binary files a/camera_pi.pyc and /dev/null differ diff --git a/cameradbmod.pyc b/cameradbmod.pyc deleted file mode 100644 index 292b49a..0000000 Binary files a/cameradbmod.pyc and /dev/null differ diff --git a/changelog/change b/changelog/change index f5172dd..e12eed6 100755 --- a/changelog/change +++ b/changelog/change @@ -1044,4 +1044,12 @@ This means that after the MQTT discovery configuration has been push to home ass 2022-10-05 -> release 343d -- Modify the Notification function to properly delete messages \ No newline at end of file +- Modify the Notification function to properly delete messages + +2024-10-07 -> release 344 + +- Security fix with hashed passwords and removed logincred.txt from webserver +- Improved LAN mode +- Fix video stream resolutions +- Fix photo quality +- Add Create Image and modal dialogues in images diff --git a/changelog/change~ b/changelog/change~ deleted file mode 100644 index e1da0c3..0000000 --- a/changelog/change~ +++ /dev/null @@ -1,32 +0,0 @@ - -Change 49-> 50 - -upgrade to latest jessie lite - -the network interfaces are not editable in the file /etc/network/interfaces - -now it is required to use wpa_supplicant file starting from Weezy jessie. - -The wifi network modules should go and write on wpa_supplicant file - -introduced wpa_cli_mod - -Change 50->51 - -introducing the APscheduler 3.0 - -2016-09-20 -> release 51.01 - -fix the power pin enable/disable to support multithread - -fix the "hydropicture" folder issue in case folder is not present (Hardwaremod.py) - -introduced the bash file to autoinstall dependencies and program on jessie lite OS. (install_hydrosys4.sh) - - -2016-11-5 -> release 52 - -Introduce video function using the mjpeg-sreamer - - - diff --git a/clockdbmod.py b/clockdbmod.py index 155ab79..02933f3 100755 --- a/clockdbmod.py +++ b/clockdbmod.py @@ -2,7 +2,7 @@ """ fertilizer UI setting storage utilities """ -from __future__ import print_function +from __future__ import print_function #import logging import os @@ -46,7 +46,7 @@ def changesavesetting(FTparameter,FTvalue): searchvalue="clock" isok=filestoragemod.savechange(DATAFILENAME,searchfield,searchvalue,FTparameter,FTvalue) if not isok: - print("problem saving paramete") + print("problem saving parameter") return isok def restoredefault(): diff --git a/clockdbmod.pyc b/clockdbmod.pyc deleted file mode 100644 index 1f1c48e..0000000 Binary files a/clockdbmod.pyc and /dev/null differ diff --git a/clockmod.pyc b/clockmod.pyc deleted file mode 100644 index 9bf9ec1..0000000 Binary files a/clockmod.pyc and /dev/null differ diff --git a/countryinfo.pyc b/countryinfo.pyc deleted file mode 100644 index 31ee4dc..0000000 Binary files a/countryinfo.pyc and /dev/null differ diff --git a/database/default/defaddata.txt~ b/database/default/defaddata.txt~ deleted file mode 100644 index ddd50b0..0000000 --- a/database/default/defaddata.txt~ +++ /dev/null @@ -1,8 +0,0 @@ -{"1": "P1", "2": "P2", "3": "P3", "4": "P4", "4": "P5", "name": "listelements"} -{"1": "Monday", "2": "Tuesday", "3": "Wednesday", "4": "Thursday", "5": "Friday", "6": "Saturday", "7": "Sunday", "name": "listparam"} -{"1": "Time", "2": "Seconds", "3": "Temperature", "4": "Humidity", "name": "tableheaders"} -{"Friday": [["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Monday": [["14:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Saturday": [["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Sunday": [["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Thursday": [["14:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Tuesday": [["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Wednesday": [["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "name": "P1"} -{"Friday": [["15:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Monday": [["15:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Saturday": [["15:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Sunday": [["15:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Thursday": [["15:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Tuesday": [["15:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Wednesday": [["15:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "name": "P2"} -{"Friday": [["06:00", "30", "", ""], ["16:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Monday": [["06:00", "30", "", ""], ["16:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Saturday": [["06:00", "30", "", ""], ["16:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Sunday": [["06:00", "30", "", ""], ["16:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Thursday": [["06:00", "30", "", ""], ["16:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Tuesday": [["06:00", "30", "", ""], ["16:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "Wednesday": [["06:00", "30", "", ""], ["16:00", "30", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""], ["00:00", "0", "", ""]], "name": "P3"} -{"Friday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "", "1"], ["22:00", "30", "", "1"]], "Monday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "27", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Saturday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Sunday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Thursday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Tuesday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Wednesday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "name": "P4"} -{"Friday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "", "1"], ["22:00", "30", "", "1"]], "Monday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "27", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Saturday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Sunday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Thursday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Tuesday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "Wednesday": [["08:00", "30", "", "1"], ["12:00", "10", "", "1"], ["14:00", "10", "", "1"], ["18:00", "10", "27", "1"], ["22:00", "30", "27", "1"]], "name": "P5"} diff --git a/database/default/defhwdata.txt~ b/database/default/defhwdata.txt~ deleted file mode 100644 index c07f2d5..0000000 --- a/database/default/defhwdata.txt~ +++ /dev/null @@ -1,17 +0,0 @@ -{"IOtype": "input" ,"name": "tempsensor1", "unit" : "C", "measure":"Temperature", "controllercmd": "tempsensor", "pin": "4" , "usedfor" : "temperaturecontrol", "schedulingtype":"periodic", "time":"00:15:05"} -{"IOtype": "input" ,"name": "humidsensor", "unit" : "%", "measure":"Humidity", "controllercmd": "humidsensor", "pin": "4" , "usedfor" : "humiditycontrol", "schedulingtype":"periodic", "time":"00:15:03"} -{"IOtype": "input" ,"name": "pressuresensor", "unit" : "hPa", "measure":"Pressure", "controllercmd": "pressuresensor", "pin": "I2C" , "usedfor" : "Pressurecontrol", "schedulingtype":"periodic", "time":"00:15:01"} -{"IOtype": "input" ,"name": "hygropass", "unit" : "Volt", "measure":"Moisture", "controllercmd": "analogdigital", "pin": "SPI" , "usedfor" : "Moisturecontrol", "schedulingtype":"periodic", "time":"00:15:01" , "ADCchannel":"0" , "ADCpowerpin":"12" } -{"IOtype": "input" ,"name": "hygroampl", "unit" : "Volt", "measure":"Moisture", "controllercmd": "analogdigital", "pin": "SPI" , "usedfor" : "Moisturecontrol", "schedulingtype":"periodic", "time":"00:15:01" , "ADCchannel":"7" , "ADCpowerpin":"25" } -{"IOtype": "input" ,"name": "lightsensor", "unit" : "Lum", "measure":"Light", "controllercmd": "lightsensor", "pin": "I2C" , "usedfor" : "lightcontrol", "schedulingtype":"periodic", "time":"00:15:01"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water1", "pin": "5", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water2", "pin": "6", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "light1", "pin": "13", "time": "17:30" , "usefor": "lightcontrol", "measure": "Time", "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "doser1", "pin": "19", "usefor": "fertilizercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "doser2", "pin": "26", "usefor": "fertilizercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "empty1", "pin": "21", "usefor": "N/A", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "empty2", "pin": "20", "usefor": "N/A", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "empty3", "pin": "16", "usefor": "N/A", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" ,"usefor": "mailcontrol", "mailaddress": "", "controllercmd": "mail+info+link","name": "mail1", "time": "10:00", "mailtitle": "Hydrosys today report", "measure" : "Mail" , "unit" : "pcs" , "schedulingtype":"oneshot"} -{"IOtype": "output" ,"usefor": "mailcontrol", "mailaddress": "", "controllercmd": "mail+info","name": "mail2", "time": "10:00", "mailtitle": "Hydrosys today report", "measure" : "Mail" , "unit" : "pcs" , "schedulingtype":"oneshot"} -{"IOtype": "output" ,"usefor": "photocontrol", "controllercmd": "photo", "name": "photo", "time": "09:30", "measure" : "Photo" , "unit" : "pcs", "schedulingtype":"oneshot"} diff --git a/database/default/defwtdata.txt~ b/database/default/defwtdata.txt~ deleted file mode 100644 index cfd3f88..0000000 --- a/database/default/defwtdata.txt~ +++ /dev/null @@ -1,2 +0,0 @@ -{"name": "listparam", "1":"jan","2":"feb","3":"mar","4":"apr","5":"may","6":"jun","7":"jul","8":"aug","9":"sep","10":"oct","11":"nov","12":"dec"} -{"element": "1", "jan": [1,0],"feb": [1,0],"mar": [1,1],"apr": [1,1],"may": [1,3],"jun": [1,3],"jul": [1,4],"aug": [1,2],"sep": [1,1],"oct": [1,0],"nov": [1,0],"dec": [1,0]} diff --git a/database/default/msgschema.sql b/database/default/msgschema.sql index 7f355da..3f0937e 100644 --- a/database/default/msgschema.sql +++ b/database/default/msgschema.sql @@ -4,5 +4,6 @@ CREATE TABLE posts ( id INTEGER PRIMARY KEY AUTOINCREMENT, created TEXT NOT NULL, title TEXT NOT NULL, - content TEXT NOT NULL + content TEXT NOT NULL, + color TEXT ); diff --git a/databasemod.pyc b/databasemod.pyc deleted file mode 100644 index 4587c41..0000000 Binary files a/databasemod.pyc and /dev/null differ diff --git a/emaildbmod.py b/emaildbmod.py index f3e3b70..273d5fe 100755 --- a/emaildbmod.py +++ b/emaildbmod.py @@ -2,7 +2,7 @@ """ fertilizer UI setting storage utilities """ -from __future__ import print_function +from __future__ import print_function import logging import os @@ -26,13 +26,11 @@ # if file does not exist create file data=[] if not filestoragemod.readfiledata(DATAFILENAME,data): #read setting file - filedata=[{'name':'email', 'address':'','password':'' }] - filestoragemod.savefiledata(DATAFILENAME,filedata) + restoredefault() def savedata(filedata): filestoragemod.savefiledata(DATAFILENAME,filedata) - def getelementlist(): recordkey=hardwaremod.HW_FUNC_USEDFOR recordvalue="mailcontrol" @@ -41,8 +39,6 @@ def getelementlist(): #print "elementlist= ",datalist return datalist - - def getaddress(): recordkey="name" recordvalue="email" @@ -57,6 +53,25 @@ def getpassword(): dataitem=filestoragemod.searchdata(DATAFILENAME,recordkey,recordvalue,keytosearch) return dataitem +def getserver(): + recordkey="name" + recordvalue="email" + keytosearch="server" + dataitem=filestoragemod.searchdata(DATAFILENAME,recordkey,recordvalue,keytosearch) + # set default + if dataitem == "": + dataitem = "smtp.gmail.com" + return dataitem + +def getport(): + recordkey="name" + recordvalue="email" + keytosearch="port" + dataitem=filestoragemod.searchdata(DATAFILENAME,recordkey,recordvalue,keytosearch) + # set default + if dataitem == "": + dataitem = "587" + return dataitem def changesavesetting(FTparameter,FTvalue): searchfield="name" @@ -68,7 +83,7 @@ def changesavesetting(FTparameter,FTvalue): def restoredefault(): filestoragemod.deletefile(DATAFILENAME) - filedata=[{'name':'email', 'address':'','password':'' }] + filedata=[{'name':'email', 'address':'','password':'', 'server': 'smtp.gmail.com', 'port': '587'}] filestoragemod.savefiledata(DATAFILENAME,filedata) def get_path(): @@ -92,10 +107,13 @@ def get_path(): # comment address="hello@mail.com" password="haha" - changesavesetting("address",address) - changesavesetting("password",password) - print(getaddress()) - print(getpassword()) - - - + server="smtp.gmail.com" + port="587" + #changesavesetting("address",address) + #changesavesetting("password",password) + #changesavesetting("server",server) + #changesavesetting("port",port) + #print(getaddress()) + #print(getpassword()) + print(getserver()) + print(getport()) diff --git a/emaildbmod.pyc b/emaildbmod.pyc deleted file mode 100644 index ae1ba39..0000000 Binary files a/emaildbmod.pyc and /dev/null differ diff --git a/emailmod.py b/emailmod.py index b981b59..f803f08 100755 --- a/emailmod.py +++ b/emailmod.py @@ -43,7 +43,7 @@ def send_email(user, pwd, recipient, subject, body): message = """\From: %s\nTo: %s\nSubject: %s\n\n%s """ % (FROM, ", ".join(TO), SUBJECT, TEXT) try: - server = smtplib.SMTP("smtp.gmail.com", 587) + server = smtplib.SMTP(emaildbmod.getserver(), emaildbmod.getport()) server.ehlo() server.starttls() server.login(gmail_user, gmail_pwd) @@ -53,7 +53,6 @@ def send_email(user, pwd, recipient, subject, body): except: print("failed to send mail") - def create_htmlopen(): html = """\ @@ -74,37 +73,33 @@ def create_htmlclose(): return html def create_htmlintro(intromessage): - html = """\

""" + intromessage + """

- + """ return html def create_htmlbody(bodytextlist): # the input should be a list html = """\ -

+

""" for textrow in bodytextlist: html = html + """\

""" + textrow + """

- + """ return html - def create_htmladdresses(descriptionlist, addresslist, port): - html = """\

Below the links for System connection:

- + """ - + for inde in range(len(addresslist)): - addressport=addresslist[inde]+":"+port html = html + """\ @@ -115,10 +110,7 @@ def create_htmladdresses(descriptionlist, addresslist, port): """ return html - def create_htmlmatrix(matrixinfo): - - htmlopen = """""" @@ -139,9 +131,8 @@ def create_htmlmatrix(matrixinfo): html=htmlopen+htmlheader+htmltable+htmlclose return html - -def send_email_html(user, pwd, recipient, subject, html, showpicture): +def send_email_html(user, pwd, recipient, subject, html, showpicture): # me == my email address # you == recipient's email address gmail_user = user @@ -164,14 +155,13 @@ def send_email_html(user, pwd, recipient, subject, html, showpicture): # Record the MIME t part1 = MIMEText(html, 'html') msg.attach(part1) - + if showpicture: #retrieve last picture ------------------------------------ global MYPATH - - + photolist=hardwaremod.photolist(MYPATH,3) - imgfiles=[] + imgfiles=[] if photolist: referencestr=photolist[0][0].split(",")[0] for items in photolist: @@ -180,7 +170,6 @@ def send_email_html(user, pwd, recipient, subject, html, showpicture): folderpath=os.path.join(folderpath, items[0]) imgfiles.append(folderpath) - for filename in imgfiles: # Open the files in binary mode. Let the MIMEImage class automatically # guess the specific image type. @@ -207,10 +196,7 @@ def send_email_html(user, pwd, recipient, subject, html, showpicture): print("failed to send mail") return False - - def send_email_main(address,title,cmd,mailtype,intromessage,bodytextlist=[]): - # mailtype option # "report" # "alert" @@ -231,8 +217,7 @@ def send_email_main(address,title,cmd,mailtype,intromessage,bodytextlist=[]): showtable=False showpicture=False showlink=True - - + currentdate=datetime.datetime.now().strftime("%y-%m-%d,%H:%M") # got credentials here ! user=emaildbmod.getaddress() @@ -240,23 +225,23 @@ def send_email_main(address,title,cmd,mailtype,intromessage,bodytextlist=[]): recipient=address # check IP address - iplocal=networkmod.get_local_ip() + iplocal=networkmod.get_local_ip() ipext=networkmod.EXTERNALIPADDR if ipext=="": logger.info('Stored external IP address is empty, try to get it from network') ipext=networkmod.get_external_ip() - - print("Try to send mail") + + print("Try to send mail") # subject of the mail subject=starttitle +" " + title + " " + currentdate htmlbody=create_htmlopen() htmlbody=htmlbody+create_htmlintro(intromessage)+create_htmlbody(bodytextlist) - + if showlink: if ipext=="": print("No external IP address available") - logger.error('Unable to get external IP address') - else: + logger.error('Unable to get external IP address') + else: port=str(networkmod.PUBLICPORT) if cmd=="mail+info+link": addresslist=[] @@ -266,14 +251,12 @@ def send_email_main(address,title,cmd,mailtype,intromessage,bodytextlist=[]): addresslist.append(ipext) descriptionlist.append("Link for Remote Access") customURL=networkmod.getCUSTOMURL() - if not customURL=="": - addresslist.append(customURL) + if not customURL=="": + addresslist.append(customURL) descriptionlist.append("your Link") print("Mail url list ",addresslist) htmlbody=htmlbody+create_htmladdresses(descriptionlist,addresslist, port) - - if showtable: # table with information matrixinfo=sensordbmod.sensorsysinfomatrix() @@ -286,45 +269,36 @@ def send_email_main(address,title,cmd,mailtype,intromessage,bodytextlist=[]): global IPEXTERNALSENT IPEXTERNALSENT=ipext return issent - - def sendallmail(mailtype,intromessage,bodytextlist=[],localmessage=True): - # archive the message in messagebox if mailtype=="alert": if localmessage: - dictitem={'title': "System Message (Alert)", 'content': intromessage } + dictitem={'title': "System Message (Alert)", 'content': intromessage, 'color': "olive" } messageboxmod.SaveMessage(dictitem) usedfor="mailcontrol" hwnamelist=hardwaremod.searchdatalist(hardwaremod.HW_FUNC_USEDFOR,usedfor,hardwaremod.HW_INFO_NAME) for hwname in hwnamelist: sendmail(hwname,mailtype,intromessage,bodytextlist) - -def sendmail(hwname,mailtype,intromessage,bodytextlist=[]): - address=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,hwname,hardwaremod.HW_CTRL_ADDR) - - if not address=="": + +def sendmail(hwname, mailtype, intromessage, bodytextlist=[]): + address=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME, hwname, hardwaremod.HW_CTRL_ADDR) + + if not address == "": print("mail recipient ", address) - title=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,hwname,hardwaremod.HW_CTRL_TITLE) - print("mail title " , title) - cmd=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,hwname,hardwaremod.HW_CTRL_CMD) - print("mail type " , cmd) - issent=send_email_main(address,title,cmd,mailtype,intromessage,bodytextlist) + title=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME, hwname, hardwaremod.HW_CTRL_TITLE) + print("mail title ", title) + cmd=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME, hwname, hardwaremod.HW_CTRL_CMD) + print("mail type ", cmd) + issent=send_email_main(address, title, cmd, mailtype, intromessage, bodytextlist) return issent else: - print("No address specified") - logger.warning('No address specified') + print("No address specified for ", str(hwname)) + logger.warning('No address specified for %s', str(hwname)) return False - - - if __name__ == '__main__': - """ prova email """ - - diff --git a/emailmod.pyc b/emailmod.pyc deleted file mode 100644 index 337d194..0000000 Binary files a/emailmod.pyc and /dev/null differ diff --git a/fertilizerdbmod.pyc b/fertilizerdbmod.pyc deleted file mode 100644 index ae553ac..0000000 Binary files a/fertilizerdbmod.pyc and /dev/null differ diff --git a/filemanagementmod.py b/filemanagementmod.py index 9deedcf..a607993 100755 --- a/filemanagementmod.py +++ b/filemanagementmod.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from __future__ import print_function +from __future__ import print_function import shutil import logging import re @@ -117,16 +117,28 @@ def configfilezip(): basefolder=get_path() relativedstfolder=os.path.join("static", CONFIGDOWNLOADPATH) relativezipfolder=os.path.join("static", ZIPCONFIGDOWNLOADPATH) + #delete files in download folder, or create it if not existing deletefilesinfolder(basefolder, relativedstfolder) + #get config files list relativeconfigfolder=DATABASEPATH filedatalist=folderfilelist(basefolder, relativeconfigfolder , ".txt") + #copy config files in the folder copyfiles(basefolder, filedatalist, relativedstfolder) + + # remove logincred + logincredpath = os.path.join(basefolder, relativedstfolder, "logincred.txt") + os.unlink(logincredpath) + # make zip file and get link zipfilename="allconfigfiles" zipfilenamepath=zipfolder(basefolder, relativedstfolder, zipfilename , relativezipfolder) + + #cleanup + deletefilesinfolder(basefolder, relativedstfolder) + # check file exist if os.path.isfile(zipfilenamepath): filelink=ZIPCONFIGDOWNLOADPATH+"/"+zipfilename+".zip" # relative path vithout static diff --git a/filestoragemod.pyc b/filestoragemod.pyc deleted file mode 100644 index 3432a2d..0000000 Binary files a/filestoragemod.pyc and /dev/null differ diff --git a/flasksettings.py b/flasksettings.py index 655c69e..d15c1b8 100644 --- a/flasksettings.py +++ b/flasksettings.py @@ -1,4 +1,7 @@ +import secrets + # configuration -SECRET_KEY = 'thisisnotsafe' +#SECRET_KEY = 'thisisnotsafe' +SECRET_KEY = secrets.token_hex(16) UPLOAD_FOLDER = "static/upload" MAX_CONTENT_LENGTH = 1048576 diff --git a/flasksettings.pyc b/flasksettings.pyc deleted file mode 100644 index d69e7e3..0000000 Binary files a/flasksettings.pyc and /dev/null differ diff --git a/hardwaremod.py b/hardwaremod.py index 0980985..a57357f 100755 --- a/hardwaremod.py +++ b/hardwaremod.py @@ -27,6 +27,7 @@ import struct import imghdr import copy +import messageboxmod import statusdataDBmod @@ -407,18 +408,28 @@ def getsensordata(sensorname,attemptnumber): #needed if len(recdata)>3: statusmessage=recdata[3] else: - print("Problem with sensor reading ", sensorname) - logger.error("Problem with sensor reading: %s", sensorname) + message = "Problem with sensor reading " + sensorname + dictitem={'title': "Sensor Message (Warning)", 'content': message, 'color': "yellow" } + messageboxmod.SaveMessage(dictitem) + print(message) + logger.error(message) statusmessage=recdata[1] else: - print("Problem with response consistency ", sensorname , " cmd " , cmd) - logger.error("Problem with response consistency : %s", sensorname) + message = "Problem with response consistency " + sensorname + " cmd " + cmd + dictitem={'title': "Sensor Message (Warning)", 'content': message, 'color': "yellow" } + messageboxmod.SaveMessage(dictitem) + print(message) + logger.error(message) else: - print("no answer from Hardware control module", sensorname) - logger.error("no answer from Hardware control module: %s", sensorname) + message = "no answer from Hardware control module" + sensorname + dictitem={'title': "Sensor Message (Warning)", 'content': message, 'color': "yellow" } + messageboxmod.SaveMessage(dictitem) + print(message) + logger.error(message) else: print("sensor name not found in list of sensors ", sensorname) logger.error("sensor name not found in list of sensors : %s", sensorname) + return isok, Thereading, statusmessage def makepulse(target,duration,addtime=True, priority=0): # pulse in seconds , addtime=True extend the pulse time with new time , addtime=False let the current pulse finish , @@ -1972,7 +1983,6 @@ def HWpresetlist(apprunningpath): def removephotodataperiod(removebeforedays, maxphototoremove=20): - todaydate=datetime.now() num = removebeforedays tdelta=timedelta(days=num) @@ -1981,7 +1991,7 @@ def removephotodataperiod(removebeforedays, maxphototoremove=20): num = pastdays tdelta=timedelta(days=num) startdate=enddate-tdelta - print(" stratdate " ,startdate) + print(" startdate " ,startdate) print(" enddate ", enddate) photodata=photolist(get_path()) @@ -2003,17 +2013,12 @@ def removephotodataperiod(removebeforedays, maxphototoremove=20): else: print("datetime format incorrect") thumbconsistency(get_path()) - - - - def videodevlist(): return photomod.videodevlist() def thumbconsistency(apprunningpath): return photomod.thumbconsistency(apprunningpath) - def shotit(video,istest,resolution,positionvalue,vdirection): shottaken=False @@ -2056,7 +2061,7 @@ def takephoto(Activateanyway=False): positionlist=position.split(",") if (positionlist)and(servo!="none"): for positionvalue in positionlist: - # move servo + # move servo first servoangle(servo,positionvalue,2) isok , ret_data=shotit(video,False,resolution,positionvalue,vdirection) diff --git a/hardwaremod.pyc b/hardwaremod.pyc deleted file mode 100644 index 927e470..0000000 Binary files a/hardwaremod.pyc and /dev/null differ diff --git a/interruptdbmod.py b/interruptdbmod.py index 2906b94..185c945 100755 --- a/interruptdbmod.py +++ b/interruptdbmod.py @@ -2,7 +2,7 @@ """ Auto watering UI setting storage utilities """ -from __future__ import print_function +from __future__ import print_function import logging import os @@ -177,6 +177,20 @@ def gethygrosensorfromactuator(actuatorname): +def getparamlist(): + recordkey="name" + recordvalue="listparam" + datalist=[] + for ln in WTdata: + if recordkey in ln: + if ln[recordkey]==recordvalue: + ind=0 + for rw in ln: + if rw!=recordkey: + ind=ind+1 + datalist.append(ln[str(ind)]) + + return datalist def getrowdata(recordvalue,paramlist,index): #for parameters with array of integers recordkey="element" diff --git a/interruptmod.py b/interruptmod.py index 4385e1f..2fb49f9 100755 --- a/interruptmod.py +++ b/interruptmod.py @@ -11,6 +11,7 @@ import emailmod import interruptdbmod import sensordbmod +import messageboxmod import actuatordbmod import autofertilizermod import statusdataDBmod @@ -250,20 +251,18 @@ def cycleresetall(): def interruptcheck(refsensor,mode, PIN): #logger.info('Starting Interrupt Evaluation, Sensor: %s' , refsensor) # iterate among the actuators - elementlist= interruptdbmod.getelementlist() + elementlist= interruptdbmod.getelementlist() #print elementlist - for element in elementlist: + for element in elementlist: sensor=interruptdbmod.searchdata("element",element,"sensor") #print sensor if sensor==refsensor: - sensormode=interruptdbmod.searchdata("element",element,"sensor_mode") + sensormode=interruptdbmod.searchdata("element",element,"sensor_mode") #print "mode ", mode , "sensormode ", sensormode if (mode in sensormode) or ("both" in sensormode): interruptexecute(refsensor,element) - - - return - + + return def ReadInterruptFrequency(PIN): sensorinterruptcount=statusdataDBmod.read_status_data(SENSOR_data,PIN,"InterruptCount") @@ -280,8 +279,7 @@ def ReadInterruptFrequency(PIN): return Frequency def interruptexecute(refsensor,element): - - sensor=refsensor + sensor=refsensor #logger.info('interrupt Pairing OK ---> Actuator: %s , Sensor: %s', element, sensor) workmode=checkworkmode(element) @@ -309,39 +307,36 @@ def interruptexecute(refsensor,element): # evaluate variables for operational period check starttime = datetime.strptime(interruptdbmod.searchdata("element",element,"allowedperiod")[0], '%H:%M').time() endtime = datetime.strptime(interruptdbmod.searchdata("element",element,"allowedperiod")[1], '%H:%M').time() - - + # get other parameters seonsormode=interruptdbmod.searchdata("element",element,"sensor_mode") - triggermode=interruptdbmod.searchdata("element",element,"trigger_mode") - + triggermode=interruptdbmod.searchdata("element",element,"trigger_mode") + preemptiontime=hardwaremod.toint(interruptdbmod.searchdata("element",element,"preemptive_period"),0) - - + mailtype=interruptdbmod.searchdata("element",element,"mailalerttype") - + actionmodeafterfirst=interruptdbmod.searchdata("element",element,"actionmode_afterfirst") - + # time check - + # ------------------------ interrupt alghoritm - + if workmode=="Pre-emptive Blocking": # check if inside the allowed time period #print "Pre-emptive Blocking Mode" - #logger.info('Pre-emptive Blocking mode --> %s', element) + #logger.info('Pre-emptive Blocking mode --> %s', element) timeok=isNowInTimePeriod(starttime, endtime, datetime.now().time()) # don't use UTC here! #print "inside allowed time ", timeok , " starttime ", starttime , " endtime ", endtime if timeok: CheckActivateNotify(element,sensor,preemptiontime,actuatoroutput,actionmodeafterfirst,mailtype,interrupt_triggernumber,interrupt_validinterval,triggermode) - else: logger.info('out of allowed operational time') - # implment Critical alert message in case the sensor value is one interval more than Max_threshold + # TODO: implement critical alert message in case the sensor value is one interval more than Max_threshold return @@ -433,22 +428,22 @@ def CheckActivateNotify(element,sensor,preemptiontime,actuatoroutput,actionmodea global AUTO_data # check if in blocking state lasteventtime=statusdataDBmod.read_status_data(AUTO_data,element,"lasteventtime") - blockingstate=statusdataDBmod.read_status_data(AUTO_data,element,"blockingstate") + blockingstate=statusdataDBmod.read_status_data(AUTO_data,element,"blockingstate") #print ' Previous event: ' , lasteventtime , ' Now: ', datetime.utcnow() #timedifference=sensordbmod.timediffinminutes(lasteventtime,datetime.utcnow()) #print 'Time interval between actions', timedifference ,'. threshold', preemptiontime - #logger.info('Time interval between Actions %d threshold %d', timedifference,preemptiontime) - + #logger.info('Time interval between Actions %d threshold %d', timedifference,preemptiontime) + # count the interrupt that are fast enough to stay in the valid interrupt period - + #print "autodata" ,AUTO_data[element] lastinterrupttime=statusdataDBmod.read_status_data(AUTO_data,element,"lastinterrupttime") nowtime=datetime.utcnow() - + # ------------ Frequency - if triggermode=="Frequency": # triggermode=="Frequency": + if triggermode=="Frequency": # triggermode=="Frequency": NOWTIMELIST.append(nowtime) - validinterruptcount=statusdataDBmod.read_status_data(AUTO_data,element,"validinterruptcount") + validinterruptcount=statusdataDBmod.read_status_data(AUTO_data,element,"validinterruptcount") diffseconds=(nowtime-NOWTIMELIST[0]).total_seconds() @@ -459,85 +454,79 @@ def CheckActivateNotify(element,sensor,preemptiontime,actuatoroutput,actionmodea validinterruptcount=validinterruptcount-1 diffseconds=(nowtime-NOWTIMELIST.pop(0)).total_seconds() validinterruptcount=len(NOWTIMELIST) - - statusdataDBmod.write_status_data(AUTO_data,element,"validinterruptcount",validinterruptcount) - - + + statusdataDBmod.write_status_data(AUTO_data,element,"validinterruptcount",validinterruptcount) + #-------------Counter - else: # triggermode=="Counter": - - #print ' Previous interrupt: ' , lastinterrupttime , ' Now: ', nowtime - diffseconds=(nowtime-lastinterrupttime).total_seconds() + else: # triggermode=="Counter": - + #print ' Previous interrupt: ' , lastinterrupttime , ' Now: ', nowtime + diffseconds=(nowtime-lastinterrupttime).total_seconds() - statusdataDBmod.write_status_data(AUTO_data,element,"lastinterrupttime",nowtime) - validinterruptcount=statusdataDBmod.read_status_data(AUTO_data,element,"validinterruptcount") + statusdataDBmod.write_status_data(AUTO_data,element,"lastinterrupttime",nowtime) + validinterruptcount=statusdataDBmod.read_status_data(AUTO_data,element,"validinterruptcount") - if diffseconds<=interrupt_validinterval: #valid interval between interrupt, increase counter validinterruptcount=validinterruptcount+1 else: # time between interrupt too long, restart counter - # save on database + # save on database #x = threading.Thread(target=savedata, args=(sensor,validinterruptcount)) - #x.start() + #x.start() #reset counter and events validinterruptcount=1 - - statusdataDBmod.write_status_data(AUTO_data,element,"validinterruptcount",validinterruptcount) - - #print(" validinterruptcount --------------------->", validinterruptcount) + statusdataDBmod.write_status_data(AUTO_data,element,"validinterruptcount",validinterruptcount) + + #print(" validinterruptcount --------------------->", validinterruptcount) - #print "********" ,validinterruptcount , "******" + #print "********" ,validinterruptcount , "******" if validinterruptcount>=interrupt_triggernumber: # set the validinterruptcount to zero statusdataDBmod.write_status_data(AUTO_data,element,"validinterruptcount",0) - + if not blockingstate: # outside the preemption period , first activation #print " outside the preemption period " - #logger.info('outside the preemption period') + #logger.info('outside the preemption period') # before action, evaluate if trigger number is reached - - + + print("Implement Actuator Value ", value) - logger.info('Procedure to start actuator %s, for value = %s', element, value) + logger.info('Procedure to start actuator %s, for value = %s', element, value) msg , isok=activateactuator(element, value) - + if isok: statusdataDBmod.write_status_data(AUTO_data,element,"lasteventtime",datetime.utcnow()) statusdataDBmod.write_status_data(AUTO_data,element,"lastactiontime",datetime.utcnow()) statusdataDBmod.write_status_data(AUTO_data,element,"actionvalue",value) - - + # invia mail, considered as info, not as alert if mailtype!="none": if mailtype!="warningonly": textmessage="INFO: " + sensor + " event , activating:" + element + " with Value " + str(value) #send mail using thread to avoid blocking x = threading.Thread(target=emailmod.sendallmail, args=("alert", textmessage)) - x.start() - #emailmod.sendallmail("alert", textmessage) + x.start() - - # start the blocking state print("Start blocking state") startblockingstate(element,preemptiontime) - - + # Send notification + notifymsg = element + " was blocked cause of " + sensor + dictitem={'title': "Interrupt Message (Alert)", 'content': notifymsg, 'color': "red" } + messageboxmod.SaveMessage(dictitem) + logger.info("Save Interrupt notification %s/%s", element, sensor) else: - # inside blocking state, when the event is activated + # inside blocking state, when the event is activated #print " inside the preemption period, starting followup actions: " , actionmodeafterfirst #logger.info('inside the preemption period, check followup actions %s :', actionmodeafterfirst) - + if actionmodeafterfirst=="None": return - + # Extend blocking state if actionmodeafterfirst=="Extend blocking state" or actionmodeafterfirst=="Extend and Follow-up": # extend only the pre-emption blocking period, no action print("Extend blocking state") @@ -547,8 +536,8 @@ def CheckActivateNotify(element,sensor,preemptiontime,actuatoroutput,actionmodea if actionmodeafterfirst=="Remove blocking state" or actionmodeafterfirst=="Remove and Follow-up": # remove the pre-emption blocking period, no action print("Remove blocking state") endblocking(element) - - # section below is the follow-up + + # section below is the follow-up isok=CheckandFollowup(element) # invia mail, considered as info, not as alert if isok: @@ -557,11 +546,9 @@ def CheckActivateNotify(element,sensor,preemptiontime,actuatoroutput,actionmodea textmessage="INFO: " + sensor + " event , activating:" + element + " with Value " + str(value) x = threading.Thread(target=emailmod.sendallmail, args=("alert", textmessage)) x.start() - #emailmod.sendallmail("alert", textmessage) - - + return isok - + def CheckandFollowup(element): global AUTO_data actionmodeafterfirst=interruptdbmod.searchdata("element",element,"actionmode_afterfirst") @@ -590,7 +577,7 @@ def CheckandFollowup(element): def startblockingstate(element,periodsecond,saveend=True): #logger.warning("StartBOLCKINGSTATE Started ---> Period %d", periodsecond) global BLOCKING_data - sensor=interruptdbmod.searchdata("element",element,"sensor") + sensor=interruptdbmod.searchdata("element",element,"sensor") #save data print("first save in database") if saveend: diff --git a/loggerconfig.pyc b/loggerconfig.pyc deleted file mode 100644 index 7113a72..0000000 Binary files a/loggerconfig.pyc and /dev/null differ diff --git a/logindbmod.py b/logindbmod.py index 6626dea..e109b9e 100755 --- a/logindbmod.py +++ b/logindbmod.py @@ -2,7 +2,7 @@ """ fertilizer UI setting storage utilities """ -from __future__ import print_function +from __future__ import print_function import logging import os @@ -11,6 +11,7 @@ import string from datetime import datetime,date,timedelta import time +import hashlib import filestoragemod import hardwaremod @@ -26,22 +27,20 @@ # if file does not exist create file data=[] if not filestoragemod.readfiledata(DATAFILENAME,data): #read setting file - filedata=[{'name':'login', 'username':'admin','password':'default' }] - filestoragemod.savefiledata(DATAFILENAME,filedata) - - + restoredefault() def restoredefault(): filestoragemod.deletefile(DATAFILENAME) - filedata=[{'name':'login', 'username':'admin','password':'default' }] + m = hashlib.sha256() + m.update(b"default") + hashedpw = m.hexdigest() + filedata=[{'name':'login', 'username':'admin', 'password':hashedpw }] + #iledata=[{'name':'login', 'username':'admin','password':'default' }] filestoragemod.savefiledata(DATAFILENAME,filedata) - - def savedata(filedata): filestoragemod.savefiledata(DATAFILENAME,filedata) - def getusername(): recordkey="name" recordvalue="login" @@ -56,7 +55,6 @@ def getpassword(): dataitem=filestoragemod.searchdata(DATAFILENAME,recordkey,recordvalue,keytosearch) return dataitem - def changesavesetting(FTparameter,FTvalue): searchfield="name" searchvalue="login" @@ -64,8 +62,6 @@ def changesavesetting(FTparameter,FTvalue): if not isok: print("problem saving parameter") return isok - - def get_path(): '''Get the path to this script no matter how it's run.''' @@ -83,7 +79,6 @@ def get_path(): #--end --------//////////////////////////////////////////////////////////////////////////////////// - if __name__ == '__main__': # comment print("Hello there ") diff --git a/logindbmod.pyc b/logindbmod.pyc deleted file mode 100644 index a76b735..0000000 Binary files a/logindbmod.pyc and /dev/null differ diff --git a/messageboxmod.py b/messageboxmod.py index 05f1f7a..ce4ff64 100644 --- a/messageboxmod.py +++ b/messageboxmod.py @@ -2,6 +2,7 @@ import os from datetime import datetime import basicSetting # for the database path +import filestoragemod # database class ----------- @@ -9,22 +10,22 @@ class _DataBase: - + def __init__(self,databasetable): databasepath=basicSetting.data["DATABASEPATH"] databaseschemapath=basicSetting.data["SCHEMAFILEPATH"] dbfilename="msgdb.db" descfilename="msgschema.sql" - self.dbpathfile=os.path.join(databasepath, dbfilename) + self.dbpathfile=os.path.join(databasepath, dbfilename) self.dbscpathfile=os.path.join(databasepath,databaseschemapath, descfilename) self.init_db(self.dbpathfile, self.dbscpathfile) # initialize db in case the file does not exist self.databasetable=databasetable - + def init_db(self, dbpathfile, dbscpathfile): if not os.path.isfile(dbpathfile): #file is there - print("create empty database") + print("create empty database") conn = sqlite3.connect(dbpathfile) print('Creating schema from file ' ,dbscpathfile) if os.path.isfile(dbscpathfile): @@ -47,14 +48,14 @@ def get_row(self,post_id): dictitem = conn.execute('SELECT * FROM "' + self.databasetable + '" WHERE id = ?',(post_id,)).fetchone() conn.close() return dictitem - + def get_allrows(self): conn = self.get_db_connection() dictlist = conn.execute('SELECT * FROM "' + self.databasetable + '"').fetchall() conn.close() return dictlist - - def add_row(self,dictlist): + + def add_row(self,dictlist): conn = self.get_db_connection() if conn: rowvalue=list(dictlist.values()) @@ -64,20 +65,26 @@ def add_row(self,dictlist): questionmarks=', '.join('?' * len(rowvalue)) var_string = ', '.join(listfield) query_string = "INSERT INTO '{}' ({}) VALUES ({});" .format(self.databasetable, var_string, questionmarks) - conn.execute(query_string, rowvalue) - #conn.execute('INSERT INTO posts (title, content) VALUES (?, ?)', - # (dictlist['title'], dictlist['content'])) + try: + conn.execute(query_string, rowvalue) + #conn.execute('INSERT INTO posts (title, content) VALUES (?, ?)', + # (dictlist['title'], dictlist['content'])) + except: + # this db is outdated, fix and retry + conn.execute('ALTER TABLE "' + self.databasetable + '" ADD COLUMN color TEXT;') + conn.execute(query_string, rowvalue) + conn.commit() conn.close() - def delete_row(self,index): + def delete_row(self,index): conn = self.get_db_connection() if conn: conn.execute('DELETE FROM "' + self.databasetable + '" WHERE id = ?', (index,)) conn.commit() conn.close() - def delete_last_Nrows(self,number): + def delete_last_Nrows(self,number): conn = self.get_db_connection() if conn: # example --> delete from tb_news where newsid IN (SELECT newsid from tb_news order by newsid desc limit 10) @@ -86,6 +93,12 @@ def delete_last_Nrows(self,number): conn.commit() conn.close() + def delete_all_messages(self): + conn = self.get_db_connection() + if conn: + conn.execute('DELETE FROM "' + self.databasetable + '"') + conn.commit() + conn.close() class _MessageBox: @@ -109,13 +122,16 @@ def GetMessages(self): def SaveMessage(self,dictitem): self.database.add_row(dictitem) self.RemoveExceeding() - return + return def DeleteMessage(self,index): - return self.database.delete_row(index) + return self.database.delete_row(index) def DeleteLastNMessage(self,number): - return self.database.delete_last_Nrows(number) + return self.database.delete_last_Nrows(number) + + def DeleteAllMessages(self): + return self.database.delete_all_messages() @@ -129,16 +145,19 @@ def GetMessages(): return _MessageBoxIst.GetMessages() def SaveMessage(dictitem): - DATEFORMAT="%d/%m/%Y - %H:%M:%S" - dictitem['created']=datetime.now().strftime(DATEFORMAT) + dateformat="%d/%m/%Y - %H:%M:%S" + dictitem['created']=datetime.now().strftime(dateformat) return _MessageBoxIst.SaveMessage(dictitem) - + def DeleteMessage(index): return _MessageBoxIst.DeleteMessage(index) def DeleteLastNMessage(number): return _MessageBoxIst.DeleteLastNMessage(number) +def DeleteAllMessages(): + return _MessageBoxIst.DeleteAllMessages() + def PrintMessages(): messages = _MessageBoxIst.GetMessages() print("number of items ", len(messages)) @@ -148,20 +167,61 @@ def PrintMessages(): rowstr=rowstr+" " +str(item) print (rowstr) -# maintenance Function +# LastSeen functions +def SaveLastSeen(): + dateformat = "%d/%m/%Y - %H:%M:%S" + timestamp = datetime.now().strftime(dateformat) + MsgLastSeen = [{'timestamp':timestamp}] + filestoragemod.savefiledata("msglastseen.txt", MsgLastSeen) + + return MsgLastSeen + +def GetLastSeen(): + global MsgLastSeen + MsgLastSeen=[] + if not filestoragemod.readfiledata("msglastseen.txt", MsgLastSeen): + MsgLastSeen = SaveLastSeen() + return MsgLastSeen + +def GetUnseenCount(): + unseencount = 0 + dateformat = "%d/%m/%Y - %H:%M:%S" + + lastseen = GetLastSeen() + print(lastseen[0]['timestamp']) + + messages = GetMessages() + for message in messages: + msgcreated = datetime.strptime(message['created'], dateformat) + msglastseen = datetime.strptime(lastseen[0]['timestamp'], dateformat) + + if msgcreated > msglastseen: + unseencount+=1 + + if unseencount == 0: + return "" + else: + return unseencount + +# maintenance Function if __name__ == '__main__': - - print(" Add two rows and delete them") - PrintMessages() - dictitem=[] - dictitem.append({'title':"eccolo", 'content': " bla bla bla bla", 'created':" "}) - dictitem.append({'title':"secondo", 'content': " bla bla bla", 'created':" "}) - for item in dictitem: - SaveMessage(item) + + #print(" Add two rows and delete them") PrintMessages() + #dictitem=[] + #dictitem.append({'title':"eccolo", 'content': " bla bla bla bla", 'created':" "}) + #dictitem.append({'title':"secondo", 'content': " bla bla bla", 'created':" "}) + #for item in dictitem: + # SaveMessage(item) + #PrintMessages() #DeleteLastNMessage(1) - #PrintMessages() \ No newline at end of file + #PrintMessages() + + #lastseen=SaveLastSeen() + #lastseen=GetLastSeen() + #print(lastseen) + print(GetUnseenCount()) diff --git a/networkdbmod.pyc b/networkdbmod.pyc deleted file mode 100644 index 13e3cf3..0000000 Binary files a/networkdbmod.pyc and /dev/null differ diff --git a/networkmod.py b/networkmod.py index aa4f132..0b264ec 100755 --- a/networkmod.py +++ b/networkmod.py @@ -509,7 +509,7 @@ def checkGWsubnet(interface): #------------------- logger.warning("STATIC ip address will not be set") message="Warning: Last wifi connection, subnet not matching gateway ip = "+ ipaddr +" static ip =" + IPADDRESS +". Change the static IP address to match the Wifi GW subnet e.g " + newstaticIP networkdbmod.storemessage(message) - dictitem={'title': "System Message (Alert)", 'content': message } + dictitem={'title': "System Message (Alert)", 'content': message, 'color': "purple" } messageboxmod.SaveMessage(dictitem) return False , ipaddr else: diff --git a/networkmod.pyc b/networkmod.pyc deleted file mode 100644 index 7485a60..0000000 Binary files a/networkmod.pyc and /dev/null differ diff --git a/photomod.py b/photomod.py index 462fbf6..bfc2e69 100755 --- a/photomod.py +++ b/photomod.py @@ -4,12 +4,13 @@ import datetime import os import sys -import subprocess +import subprocess +import logging from PIL import Image # to make thumbnail from subprocess import call from shutil import copyfile - +logger = logging.getLogger("hydrosys4."+__name__) def videodevlist(): folderpath="/dev" @@ -17,24 +18,24 @@ def videodevlist(): filelist=os.listdir(folderpath) for filename in filelist: if "video" in filename: - + # following code was necessary starting from raspbian buster, by default there are video10,video11,video12 devices created - #get the video number + #get the video number videonumberstr=get_digits(filename) try: videonumber=int(videonumberstr) except: - videonumber=-1 + videonumber=-1 print("not able to convert the video number") if videonumber>-1: if (videonumber<10): - print("check video " , filename) + print("check video " , filename) # following code was necessary starting from raspbian buster, linux kernel v4l2 was updated, now one single webcam can show more than one videoXX dev if checkvideoformatexist(videonumberstr): - print("OK video " , filename) + print("OK video " , filename) videolist.append(filename) return videolist # item1 (path) item2 (name) item3 (datetime) - + def get_digits(x): return ''.join(ele for ele in x if ele.isdigit()) @@ -42,24 +43,24 @@ def checkvideoformatexist(videonumberstr): # v4l2-ctl -d /dev/video0 -D DeviceType="Video Capture" formats=['YU12','YUYV','RGB3','JPEG','H264','MJPG','YVYU','VYUY','UYVY','NV12','BGR3','YV12','NV21','BGR4'] - + # v4l2-ctl --list-formats -d 1 cmd = ['v4l2-ctl', '--list-formats' , '-d', videonumberstr] try: scanoutput = subprocess.check_output(cmd).decode('utf-8') except: - print("error to execute the command" , cmd) - logger.error("error to execute the command %s",cmd) + print("error execute the command ", cmd) + logger.error("error execute the command %s",cmd) return False - + if not DeviceType in scanoutput: print("not a video capture device =" , videonumberstr) return False - + # check if one of the format is inside the output string for formatitem in formats: if formatitem in scanoutput: - print("At least a format = ", formatitem ," for video capture device =" , videonumberstr) + print("At least a format = ", formatitem ," for video capture device =" , videonumberstr) return True return False @@ -68,17 +69,18 @@ def checkPIcam(device): wordtofind="bm2835" isfound=executeandsearch(cmd,wordtofind) return isfound - + def findPIcam(): + result = "" + devicelist=videodevlist() - # v4l2-ctl -d /dev/video0 -D for device in devicelist: cmd = ['v4l2-ctl', '-d', '/dev/'+device, '-D'] wordtofind="bm2835" isfound=executeandsearch(cmd,wordtofind) if isfound: - return device - return "" + result = device + return result def executeandsearch(cmd,wordtofind): try: @@ -95,22 +97,16 @@ def executeandsearch(cmd,wordtofind): #found return True return False - - - - - - - + def saveshot(filepath, video, realshot, resolution, positionvalue, vdirection): shottaken=False print("take photo") - + if vdirection=="neg": rotdeg="180" else: rotdeg="0" - + currentdate=datetime.datetime.now().strftime("%y-%m-%d,%H:%M") print("Current date and time: " , currentdate) if realshot: @@ -121,33 +117,28 @@ def saveshot(filepath, video, realshot, resolution, positionvalue, vdirection): filenamenopath="testimage.jpg" filenamenopath2=filenamenopath filenamenopath3=filenamenopath - + filename=os.path.join(filepath, filenamenopath) print("Start Photo procedure: ", video , " ************************************************") - print("FILE : ", filename) + print("FILE : ", filename) - cam_list = "/dev/" + video if not (video==""): - + filexist=os.path.isfile(filename) print("file already exist = ", filexist) - + if (filexist)and(not realshot): os.rename(filename, filename + ".bak") - - shottaken=False w=resolution.split("x")[0] - h=resolution.split("x")[1] - - + h=resolution.split("x")[1] filenamebase=filenamenopath.split(".")[0] - extension=filename.split(".")[1] - + extension=filename.split(".")[1] + # capture image using V4l2 # http://www.geeetech.com/wiki/index.php/Raspberry_Pi_Camera_Module # v4l2-ctl --set-fmt-video=width=2592,height=1944,pixelformat=3 @@ -160,61 +151,56 @@ def saveshot(filepath, video, realshot, resolution, positionvalue, vdirection): # sudo v4l2-ctl -d /dev/video0 --set-ctrl=auto_exposure=1 # (auto exposure=0 ->auto; exposure=1 ->manual, each camera has its own name of the parameter, auto_exposure, exposure_auto) # v4l2-ctl --set-ctrl=exposure_absolute=10 - + # raspistill provides way better photo than the fswebcam when using the raspbery camera # raspberry camera is on video0 only # there is no reliable way to detect the raspicam, then just try to get a picture first with raspistill - - + if checkPIcam(video): print("The video device should be PI camera") shottaken=takeshotandsave_raspistill(filepath,filenamenopath3, video, resolution,rotdeg) if not shottaken: # gives it a second chance :) - shottaken=takeshotandsave_fswebcam(filepath,filenamenopath2, video, resolution,rotdeg) + shottaken=takeshotandsave_fswebcam(filepath,filenamenopath2, video, resolution,rotdeg) else: print(" The video device should be USB camera") - shottaken=takeshotandsave_fswebcam(filepath,filenamenopath2, video, resolution,rotdeg) - - #shottaken=takeshotandsave_mjpg_streamer(filepath,filenamenopath, video, resolution) - + shottaken=takeshotandsave_fswebcam(filepath,filenamenopath2, video, resolution,rotdeg) + + #shottaken=takeshotandsave_mjpg_streamer(filepath,filenamenopath, video, resolution) + if (not shottaken)and(not realshot): if filexist: os.rename(filename + ".bak", filename) - + print("Picture acknowledge return = " ,shottaken) - - else: - print("camera not connected") + print("camera not connected") return shottaken - - def takeshotandsave_raspistill(filepath,filenamenopath, video, resolution, rotdeg): shottaken=False + if rotdeg=="180": vflip="-vf -hf" else: vflip="" + print("flip ", vflip) - - cam_list = "/dev/" + video + cam_list = "/dev/" + video i=0 while (not shottaken)and(i<3): i=i+1 filename=os.path.join(filepath, filenamenopath) - print("FILE : ", filename) + print("FILE : ", filename) shottaken=False w=resolution.split("x")[0] - h=resolution.split("x")[1] + h=resolution.split("x")[1] print("try raspistill") - filenamebase=filenamenopath.split(".")[0] extension=filename.split(".")[1] @@ -229,13 +215,12 @@ def takeshotandsave_raspistill(filepath,filenamenopath, video, resolution, rotde newfilexist=os.path.isfile(filename) print("file was created = ", newfilexist) - if (isok)and(newfilexist): print("raspistill got picture") shottaken=True # make thumbnail - ExistandThumb(filepath,filenamenopath,shottaken) + ExistandThumb(filepath,filenamenopath,shottaken) else: print("raspistill not able to get picture") @@ -243,53 +228,37 @@ def takeshotandsave_raspistill(filepath,filenamenopath, video, resolution, rotde print("RASPISTILL Picture take = " ,shottaken, " Attempt ", i) - return shottaken - - - - - -def takeshotandsave_fswebcam(filepath,filenamenopath, video, resolution, rotdeg): +def takeshotandsave_fswebcam(filepath, filenamenopath, video, resolution, rotdeg): shottaken=False if not (video==""): - cam_list = "/dev/" + video - + cam_list = "/dev/" + video + i=0 while (not shottaken)and(i<3): i=i+1 filename=os.path.join(filepath, filenamenopath) - print("FILE : ", filename) - - + print("FILE : ", filename) shottaken=False w=resolution.split("x")[0] - h=resolution.split("x")[1] + h=resolution.split("x")[1] print("try fswebcam") - filenamebase=filenamenopath.split(".")[0] extension=filename.split(".")[1] - - #fswebcam option - if i==1: - S="15" - else: - S="5" - + # create the picture files - #fswebcam option isok=False try: - myproc = subprocess.check_output("fswebcam -q -d "+ cam_list +" -r "+resolution+" -S "+S+" --rotate "+rotdeg+" -s brightness=50% -s Contrast=50% --jpeg 95 " + filename, shell=True, stderr=subprocess.STDOUT) + myproc = subprocess.check_output("fswebcam -q -d "+ cam_list +" -r "+resolution+" --fps 15 -S 60 --rotate " + rotdeg + " -s brightness=50% -s Contrast=50% --jpeg 95 " + filename, shell=True, stderr=subprocess.STDOUT) isok=True except: - print("problem to execute command") + print("problem to execute fswebcam command") # -R use read() method -- NOT WORKING --- # -D delay before taking frames @@ -303,47 +272,41 @@ def takeshotandsave_fswebcam(filepath,filenamenopath, video, resolution, rotdeg) newfilexist=os.path.isfile(filename) print("file was created = ", newfilexist) - if (isok)and(newfilexist): print("fswebcam got picture") shottaken=True # make thumbnail - ExistandThumb(filepath,filenamenopath,shottaken) - + ExistandThumb(filepath,filenamenopath,shottaken) else: print("fswebcam not able to get picture") shottaken=False - print("FSWEBCAM Picture take = " ,shottaken, " Attempt ", i) - + else: - print("camera not connected") + print("camera not connected") + return shottaken def takeshotandsave_mjpg_streamer(filepath,filenamenopath, video, resolution , rotdeg): shottaken=False - - - filename=os.path.join(filepath, filenamenopath) - print("FILE : ", filename) - + filename=os.path.join(filepath, filenamenopath) + print("FILE : ", filename) if not (video==""): - cam_list = "/dev/" + video + cam_list = "/dev/" + video shottaken=False w=resolution.split("x")[0] - h=resolution.split("x")[1] + h=resolution.split("x")[1] print("try mjpg_streamer") - filenamebase=filenamenopath.split(".")[0] extension=filename.split(".")[1] - + pathmjpg=os.path.join(filepath,"mjpg") if not os.path.exists(pathmjpg): # fi folder do not exist, create it @@ -357,10 +320,10 @@ def takeshotandsave_mjpg_streamer(filepath,filenamenopath, video, resolution , r os.unlink(file_path) except Exception as e: print(e) - + # create the picture files fps="20" - + if (video=="video0")and(int(w)>1024): print("mjpg_streamer using the raspicam") stream="mjpg_streamer -i '/usr/local/lib/mjpg-streamer/input_raspicam.so -d /dev/"+video+" -x "+w+" -y "+h+" -fps "+fps+" -rot "+rotdeg+"' -o '/usr/local/lib/mjpg-streamer/output_file.so -f "+pathmjpg+" -d 100' &" @@ -369,11 +332,10 @@ def takeshotandsave_mjpg_streamer(filepath,filenamenopath, video, resolution , r call ([stream], shell=True) time.sleep(2) call (["sudo pkill mjpg_streamer"], shell=True) - + # take last saved file in the folder folderpath=pathmjpg - filenamelist=[] sortedlist=sorted([f for f in os.listdir(folderpath) if os.path.isfile(os.path.join(folderpath, f))]) sortedlist.reverse() @@ -389,25 +351,19 @@ def takeshotandsave_mjpg_streamer(filepath,filenamenopath, video, resolution , r #copy file to the right folder and right name src=os.path.join(pathmjpg, lastfile) dst=filename - copyfile(src, dst) + copyfile(src, dst) # make thumbnail - ExistandThumb(filepath,filenamenopath,shottaken) + ExistandThumb(filepath,filenamenopath,shottaken) else: print("mjpg_streame not able to get picture") shottaken=False - print("MJPG_STREAMER Picture take = " ,shottaken) - - - else: - print("camera not connected") - return shottaken - - + print("camera not connected") + return shottaken def ExistandThumb(filepath,filenamenopath,shottaken): filename=os.path.join(filepath, filenamenopath) @@ -419,40 +375,39 @@ def ExistandThumb(filepath,filenamenopath,shottaken): os.makedirs(paththumb) try: image = Image.open(filename) - image.thumbnail((300, 300)) + image.thumbnail((450, 450)) thumbname=os.path.join(paththumb,filenamenopath) image.save(thumbname) except: print("not able to make thumbnail") return newfilexist - def thumbconsistency(apprunningpath): - # check if there is a thumbnail without corresponding image - - filepath=os.path.join(apprunningpath, "static") - filepath=os.path.join(filepath, "hydropicture") + """ + Check if there is a thumbnail without corresponding image and delete it. + Recreate missing thumbnails. + """ + # control if the folder hydropicture exist otherwise create it + filepath=os.path.join(apprunningpath, "static", "hydropicture") if not os.path.exists(filepath): os.makedirs(filepath) print("Hydropicture folder has been created") + paththumb=os.path.join(filepath,"thumb") if not os.path.exists(paththumb): os.makedirs(paththumb) print("Hydropicture thumbnail folder has been created") - - filenamelist=os.listdir(filepath) + filenamelist=os.listdir(filepath) thumbnamelist=os.listdir(paththumb) - + for thumbnail in thumbnamelist: if thumbnail not in filenamelist: print("thumbnail has no corresponding image, delete") os.remove(os.path.join(paththumb, thumbnail)) - + # create thumbnail in case picture has no coresponding thumbnail - - for fileimage in filenamelist: if os.path.isfile(os.path.join(filepath, fileimage)): if fileimage not in thumbnamelist: @@ -460,22 +415,15 @@ def thumbconsistency(apprunningpath): #create thumbnail try: image = Image.open(os.path.join(filepath,fileimage)) - image.thumbnail((300, 300)) + image.thumbnail((450, 450)) thumbname=os.path.join(paththumb,os.path.basename(fileimage)) image.save(thumbname) except: - not "able to make thumbnail" - - return True - - - - - + print("Create thumbnail failed") + return True if __name__ == '__main__': - """ prova funzioni di camera """ diff --git a/photomod.pyc b/photomod.pyc deleted file mode 100644 index f1ba494..0000000 Binary files a/photomod.pyc and /dev/null differ diff --git a/selectedplanmod.py b/selectedplanmod.py index 54136b9..9790c66 100755 --- a/selectedplanmod.py +++ b/selectedplanmod.py @@ -71,13 +71,14 @@ def activateandregister(target,activationseconds): # function to activate the ac def pulsenutrient(target,activationseconds): #scheduled doser activity for fertilizer duration=hardwaremod.toint(activationseconds,0) - if autofertilizermod.isschedulermode(target): + workmode = autofertilizermod.getworkmode(target) + if workmode == "ScheduledTime": autofertilizermod.activatedoser(target, duration) - else: - logger.info('Book the %s activation', target) + elif workmode == "BeforeWatering": + logger.info('Book the %s activation', target) autofertilizermod.setActivationDurationDate(target,True,duration,datetime.now()) - return True + return True def dictionarydataforactuator(actuatorname,data1,data2, description): listdict=[] @@ -85,7 +86,7 @@ def dictionarydataforactuator(actuatorname,data1,data2, description): dicttemp["date"]=datetime.now().strftime("%Y-%m-%d %H:%M:%S") dicttemp["actuator"]=actuatorname dicttemp["data1"]= data1 - dicttemp["data2"]= data2 + dicttemp["data2"]= data2 dicttemp["info"]= description listdict.append(dicttemp) return listdict @@ -254,29 +255,28 @@ def CheckNTPandAdjustClockandResetSched(timediffsec=60): print("not able to get network time") logger.warning('Not able to get network time') return False - - - + def heartbeat(): print("start heartbeat check", " " , datetime.now()) logger.info('Start heartbeat routine %s', datetime.now().strftime("%Y-%m-%d %H:%M:%S")) # check wifi connection - connectedssid=networkmod.connectedssid() - connected=False - if len(connectedssid)==0: + connectedssid = networkmod.connectedssid() + connected = False + if len(connectedssid) == 0: - if not networkmod.WIFIENDIS=="Disabled": + if not networkmod.WIFIENDIS == "Disabled": logger.warning('Heartbeat check , no network connected -------------- try to connect') - print('Heartbeat check , no network connected -------------- try to connect') - connected=networkmod.connect_network() + print('Heartbeat check , no network connected -------------- try to connect') + connected = networkmod.connect_network() else: logger.info('Heartbeat check , wifi disabled') + connected = True else: logger.info('Heartbeat check , Connected Wifi Network: %s ', connectedssid[0]) - if connectedssid[0]==networkmod.localwifisystem: + if connectedssid[0] == networkmod.localwifisystem: logger.info('Heartbeat check , Configured as wifi access point, check if possible to connect to wifi network') - connected=networkmod.connect_network() - networkmod.DHCP_COUNTER=0 + connected = networkmod.connect_network() + networkmod.DHCP_COUNTER = 0 else: # Connected to wifi network reachgoogle=networkmod.check_internet_connection(1) @@ -284,128 +284,126 @@ def heartbeat(): logger.warning('Heartbeat check wifi SSID ok, but test ping not able to reach Google') print('Heartbeat check , no IP connection') #connected=networkmod.connect_network() # use this in case you require the system to try connect wifi again in case no internet is reached - #logger.warning('Heartbeat check , DHCP reset counter %s' , str(networkmod.DHCP_COUNTER)) + #logger.warning('Heartbeat check , DHCP reset counter %s' , str(networkmod.DHCP_COUNTER)) # DHCP reset - #if (networkmod.DHCP_COUNTER % 16)==0: # try to reset every 16x15min =4 hours + #if (networkmod.DHCP_COUNTER % 16)==0: # try to reset every 16x15min =4 hours # try to reset DHCP #logger.warning('Heartbeat check , reset DHCP') #print 'Heartbeat check , reset DHCP' #networkmod.resetDHCP() - - #networkmod.DHCP_COUNTER=networkmod.DHCP_COUNTER+1 - - goON, GWipaddr=networkmod.checkGWsubnet("wlan0") - if GWipaddr=="": + + #networkmod.DHCP_COUNTER=networkmod.DHCP_COUNTER+1 + + goON, GWipaddr = networkmod.checkGWsubnet("wlan0") + if GWipaddr == "": logger.info('Gateway IP address NOT found, back to AP mode') # back to AP mode! kind of risky business networkmod.connect_AP() - + else: logger.info('Gateway IP address found %s', GWipaddr) - - - connected=False + + connected = False else: logger.info('Heartbeat check , wifi connection OK') print('Heartbeat check , wifi connection OK') #networkmod.DHCP_COUNTER=0 - connected=True + connected = True if connected: - # Check if remote IP address is changed compared to previous communication and in such case resend the mail - ipext=networkmod.get_external_ip() + # Check if remote IP address is changed compared to previous communication and in such case resend the mail + ipext = networkmod.get_external_ip() logger.info('Heartbeat check , Check IP address change -%s- and previously sent -%s-', ipext , emailmod.IPEXTERNALSENT) - if (ipext!=""): - if (emailmod.IPEXTERNALSENT!=""): - if ipext!=emailmod.IPEXTERNALSENT: + if (ipext != ""): + if (emailmod.IPEXTERNALSENT != ""): + if ipext != emailmod.IPEXTERNALSENT: print("Heartbeat check, IP address change detected. Send email with updated IP address") logger.info('Heartbeat check, IP address change detected. Send email with updated IP address') emailmod.sendallmail("alert","System detected IP address change, below the updated links") else: - logger.info('Heartbeat check, IP address unchanged') + logger.info('Heartbeat check, IP address unchanged') else: # first mail has not been sent succesfully of IPEXTERNALSENT was not available by the time print("System has been reconnected") logger.info("System has been reconnected, IPEXTERNALSENT was empty") - emailmod.sendallmail("alert","System has been reconnected", localmessage=False) + emailmod.sendallmail("alert","System has been reconnected", localmessage=False) else: print("not able to establish an internet connection") - logger.warning("not able to establish an internet connection") - - # check clock with NTP and reset master scheduler in case of clock change + logger.warning("not able to establish an internet connection") + + # check clock with NTP and reset master scheduler in case of clock change if CheckNTPandAdjustClockandResetSched(): return True # check MQTT connection is UP HASScompMatrix.HASSIOintegr.check_loop_and_connect() - - - #check the static IP address - currentipaddr=networkmod.get_local_ip_raw() - logger.info('Target IP address= %s. Current access point IP addresses= %s', networkmod.IPADDRESS,currentipaddr) - if networkmod.IPADDRESS not in currentipaddr: - #set IP address - logger.warning('Local Static IP address not in the list, Set Target IP address') - networkmod.addIP("wlan0") - else: - logger.info('Local Statip IP address OK') - - + + if not networkmod.WIFIENDIS == "Disabled": + #check the static IP address + currentipaddr = networkmod.get_local_ip_raw() + logger.info('Target IP address= %s. Current access point IP addresses= %s', networkmod.IPADDRESS,currentipaddr) + if networkmod.IPADDRESS not in currentipaddr: + #set IP address + logger.warning('Local Static IP address not in the list, Set Target IP address') + networkmod.addIP("wlan0") + else: + logger.info('Local Statip IP address OK') + # check master job has a next run" isok, datenextrun = SchedulerMod.get_next_run_time("master") if isok: - datenow=datetime.utcnow() + datenow = datetime.utcnow() datenextrun = datenextrun.replace(tzinfo=None) print("Master Scheduler Next run " , datenextrun , " Now (UTC) ", datenow) - if datenextrun>datenow: + if datenextrun > datenow: print("Masterschedule next RUN confirmed") logger.info('Heartbeat check , Master Scheduler OK') else: isok=False - + if not isok: print("No next run for master scheduler") logger.warning('Heartbeat check , Master Scheduler Interrupted') #emailmod.sendallmail("alert","Master Scheduler has been interrupted, try to restart scheduler") resetmastercallback() return True - + # check if there have been errors in Syslog if DEBUGMODE: logger.info('Heartbeat check , check errors in Syslog file') - Errortextlist=debuggingmod.searchsyslogkeyword("error") + Errortextlist = debuggingmod.searchsyslogkeyword("error") if Errortextlist: print("found error in syslog") - logger.warning("ERROR: found error in syslog -------------------------") + logger.warning("ERROR: found error in syslog -------------------------") #send notification mail - if debuggingmod.SENTERRORTEXT!=Errortextlist[0]: + if debuggingmod.SENTERRORTEXT != Errortextlist[0]: emailmod.sendallmail("alert","Error found in Syslog",Errortextlist) - debuggingmod.SENTERRORTEXT=Errortextlist[0] + debuggingmod.SENTERRORTEXT = Errortextlist[0] else: print("No error found in syslog") - logger.info('Heartbeat check , SYSLOG ok') - + logger.info('Heartbeat check , SYSLOG ok') + # check if there have been errors in Schedulerlog if DEBUGMODE: logger.info('Heartbeat check , check errors in Sched log file') - filename="logfiles/apscheduler_hydrosystem.log" - MYPATH=hardwaremod.get_path() - filenameandpath=os.path.join(MYPATH, filename) - Errortextlist=debuggingmod.searchLOGkeyword(filenameandpath,"error") + filename = "logfiles/apscheduler_hydrosystem.log" + MYPATH = hardwaremod.get_path() + filenameandpath = os.path.join(MYPATH, filename) + Errortextlist = debuggingmod.searchLOGkeyword(filenameandpath,"error") if Errortextlist: print("found error in LOG ",filename) - logger.warning("ERROR: found error in LOG , %s -------------------------",filename) - #send notification mail - if debuggingmod.SENTERRORTEXT!=Errortextlist[0]: + logger.warning("ERROR: found error in LOG , %s -------------------------",filename) + #send notification mail + if debuggingmod.SENTERRORTEXT != Errortextlist[0]: emailmod.sendallmail("alert","Error found in LOG",Errortextlist) - debuggingmod.SENTERRORTEXT=Errortextlist[0] + debuggingmod.SENTERRORTEXT = Errortextlist[0] else: print("No error found in LOG", filename) - logger.info('Heartbeat check , LOG ok') - + logger.info('Heartbeat check , LOG ok') + return True - + def sendmail(target): logger.info('send Mail %s', datetime.now().strftime("%Y-%m-%d %H:%M:%S")) # save action in database diff --git a/selectedplanmod.pyc b/selectedplanmod.pyc deleted file mode 100644 index 2d17b1e..0000000 Binary files a/selectedplanmod.pyc and /dev/null differ diff --git a/sensordbmod.pyc b/sensordbmod.pyc deleted file mode 100644 index 584b066..0000000 Binary files a/sensordbmod.pyc and /dev/null differ diff --git a/start.py b/start.py index e32a01b..756ad87 100755 --- a/start.py +++ b/start.py @@ -3,7 +3,7 @@ from builtins import str from builtins import range -Release="3.43d" +Release="3.44" #--------------------- from loggerconfig import LOG_SETTINGS @@ -20,15 +20,12 @@ filename='logfiles/apscheduler_hydrosystem.log', filemode='w') - # dedicated logging for the standard operation logging.config.dictConfig(LOG_SETTINGS) logger = logging.getLogger('hydrosys4') exc_logger = logging.getLogger('exception') - - from flask import Flask, request, session, g, redirect, url_for, abort, \ render_template, flash, _app_ctx_stack, jsonify , Response @@ -36,13 +33,14 @@ from datetime import datetime,date,timedelta import systemtimeMod -import time +import time import os import shutil import sys import string import random import json +import hashlib import hardwaremod import videomod import sensordbmod @@ -58,7 +56,6 @@ import interruptdbmod import interruptmod - import autofertilizerdbmod import autofertilizermod import fertilizerdbmod @@ -83,7 +80,6 @@ from camera_pi import Camera # Raspberry Pi camera module (requires picamera package) import REGandDBmod - # ///////////////// -- GLOBAL VARIABLES AND INIZIALIZATION --- ////////////////////////////////////////// application = Flask(__name__) application.config.from_object('flasksettings') #read the configuration variables from a separate module (.py) file, this file is mandatory for Flask operations @@ -107,11 +103,6 @@ print("starting new log session", datetime.now().strftime("%Y-%m-%d %H:%M:%S")) logger.info('Start logging -------------------------------------------- %s Version Release: %s' , datetime.now().strftime("%Y-%m-%d %H:%M:%S"),Release) -logger.debug('This is a sample DEBUG message') -logger.info('This is a sample INFO message') -logger.warning('This is a sample WARNING message') -logger.error('This is a sample ERROR message') - # finish logging init @@ -130,6 +121,7 @@ def runallconsistencycheck(): hardwaremod.initHC12() hardwaremod.UpdateCMDcontrol() HASScompMatrix.HASSIOintegr.remove_and_update_config() + hardwaremod.thumbconsistency(hardwaremod.get_path()) return True def runallreadfile(): @@ -140,13 +132,12 @@ def runallreadfile(): interruptdbmod.readfromfile() fertilizerdbmod.readfromfile() autofertilizerdbmod.readfromfile() - advancedmod.readfromfile() + advancedmod.readfromfile() return True - # Setup mode of operation------------------------------ selectedplanmod.FASTSCHEDULER=False - + # set minimum time in case the clock is gone, in future might be improved ------------------ #important for Arch linux OS @@ -161,7 +152,6 @@ def initallGPIOpins(): print("Finish interrupt initialization") - # GET path --------------------------------------------- print("path ",hardwaremod.get_path()) MYPATH=hardwaremod.get_path() @@ -178,22 +168,22 @@ def initallGPIOpins(): isconnecting=False networkmod.stopNTP() networkmod.disableNTP() -networkmod.CheckandUnlockWlan() -try: - print("start networking") - isconnecting=networkmod.init_network() # this includes also the clock check and scheduler setup -except: - print("No WiFi available") - + +if not networkmod.WIFIENDIS=="Disabled": + networkmod.CheckandUnlockWlan() + + try: + print("start networking") + isconnecting=networkmod.init_network() # this includes also the clock check and scheduler setup + except: + print("No WiFi available") + #scheduler setup--------------------- if not isconnecting: logger.info('No connection condition available. Reset mastercallback') if not selectedplanmod.CheckNTPandAdjustClockandResetSched(): selectedplanmod.waitandsetmastercallback(20,0) - - - #prove varie qui --------------------------------------------------- #selectedplanmod.startpump("1","10","25","10") #selectedplanmod.setlight("","") @@ -205,11 +195,6 @@ def initallGPIOpins(): # ///////////////// --- END init - - - - - @application.teardown_appcontext def close_db_connection(exception): """Closes the database again at the end of the request.""" @@ -217,34 +202,33 @@ def close_db_connection(exception): if hasattr(top, 'sqlite_db'): top.sqlite_db.close() - @application.route('/') def show_entries(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) print("preparing home page") currentday=date.today() - + #Picture panel------------------------------------ #folderpath=os.path.join(MYPATH, "static") #folderpath=os.path.join(folderpath, "hydropicture") #sortedlist=sorted(os.listdir(folderpath)) #sortedlist.reverse() photolist=hardwaremod.photolist(MYPATH) - photopanellist=[] + photopanellist=[] if photolist: referencestr=photolist[0][0].split(",")[0] for items in photolist: if referencestr in items[0]: photopanel={} - photopanel["type"]="photo" + photopanel["type"]="photo" photopanel["active"]="yes" photopanel["title"]="" photopanel["subtitle"]="" photopanel["file"]=items[0] - photopanel["thumb"]=items[3] + photopanel["thumb"]=items[3] photopanel["link"]=url_for('imageshow') - photopanel["linktitle"]="Go to Gallery" + photopanel["linktitle"]="Go to Gallery" #print photopanel photopanellist.append(photopanel) @@ -253,18 +237,18 @@ def show_entries(): partialnamelistinput=[] # used to put the remaining inputs in one unique panel at the end (other) panelinfolist=[] # all the info relevant to a type of panel - + # temperature panels -------------------------------------------- (new version) - MeasureType="Temperature" + MeasureType="Temperature" namelist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_MEASURE,MeasureType,hardwaremod.HW_INFO_NAME) - partialnamelistinput.extend(namelist) + partialnamelistinput.extend(namelist) #print "------------------------- namelist " , namelist if namelist: - paneldict={} + paneldict={} paneldict["icon"]="icons/temperature-transp.png" - paneldict["color"]="green" - paneldict["type"]="sensor" + paneldict["color"]="green" + paneldict["type"]="sensor" paneldict["link"]=url_for('show_sensordata' , elementtype="", period="Day", actionbtn="sensor") paneldict["linktitle"]="Go to Sensordata" paneldict["title"]=MeasureType @@ -272,26 +256,24 @@ def show_entries(): paneldict["active"]="yes" paneldata=[] endtime=datetime.now() - for name in namelist: - paneldatarow={} + for name in namelist: + paneldatarow={} paneldatarow["name"]=name paneldata.append(paneldatarow) - paneldict["data"]=paneldata + paneldict["data"]=paneldata panelinfolist.append(paneldict) - - # humidity panel -------------------------------------------- - MeasureType="Humidity" + MeasureType="Humidity" namelist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_MEASURE,MeasureType,hardwaremod.HW_INFO_NAME) - partialnamelistinput.extend(namelist) + partialnamelistinput.extend(namelist) #print "------------------------- namelist " , namelist - + if namelist: - paneldict={} + paneldict={} paneldict["icon"]="icons/humidity-transp.png" - paneldict["color"]="primary" - paneldict["type"]="sensor" + paneldict["color"]="primary" + paneldict["type"]="sensor" paneldict["link"]=url_for('show_sensordata' , elementtype="", period="Day", actionbtn="sensor") paneldict["linktitle"]="Go to Sensordata" paneldict["title"]=MeasureType @@ -299,26 +281,24 @@ def show_entries(): paneldict["active"]="yes" paneldata=[] endtime=datetime.now() - for name in namelist: - paneldatarow={} + for name in namelist: + paneldatarow={} paneldatarow["name"]=name paneldata.append(paneldatarow) - paneldict["data"]=paneldata + paneldict["data"]=paneldata panelinfolist.append(paneldict) - - # pressure panel -------------------------------------------- - MeasureType="Pressure" + MeasureType="Pressure" namelist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_MEASURE,MeasureType,hardwaremod.HW_INFO_NAME) - partialnamelistinput.extend(namelist) + partialnamelistinput.extend(namelist) #print "------------------------- namelist " , namelist - + if namelist: - paneldict={} - paneldict["icon"]="icons/pressure-transp.png" - paneldict["color"]="yellow" - paneldict["type"]="sensor" + paneldict={} + paneldict["icon"]="icons/pressure-transp.png" + paneldict["color"]="yellow" + paneldict["type"]="sensor" paneldict["link"]=url_for('show_sensordata' , elementtype="", period="Day", actionbtn="sensor") paneldict["linktitle"]="Go to Sensordata" paneldict["title"]=MeasureType @@ -326,27 +306,23 @@ def show_entries(): paneldict["active"]="yes" paneldata=[] endtime=datetime.now() - for name in namelist: - - paneldatarow={} + for name in namelist: + paneldatarow={} paneldatarow["name"]=name paneldata.append(paneldatarow) - paneldict["data"]=paneldata + paneldict["data"]=paneldata panelinfolist.append(paneldict) - - - # light panel -------------------------------------------- - MeasureType="Light" + MeasureType="Light" namelist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_MEASURE,MeasureType,hardwaremod.HW_INFO_NAME) - partialnamelistinput.extend(namelist) + partialnamelistinput.extend(namelist) #print "------------------------- namelist " , namelist if namelist: - paneldict={} - paneldict["icon"]="icons/light-transp.png" - paneldict["color"]="red" - paneldict["type"]="sensor" + paneldict={} + paneldict["icon"]="icons/light-transp.png" + paneldict["color"]="red" + paneldict["type"]="sensor" paneldict["link"]=url_for('show_sensordata' , elementtype="", period="Day", actionbtn="sensor") paneldict["linktitle"]="Go to Sensordata" paneldict["title"]=MeasureType @@ -354,26 +330,24 @@ def show_entries(): paneldict["active"]="yes" paneldata=[] endtime=datetime.now() - for name in namelist: - paneldatarow={} + for name in namelist: + paneldatarow={} paneldatarow["name"]=name paneldata.append(paneldatarow) - paneldict["data"]=paneldata - panelinfolist.append(paneldict) - - - + paneldict["data"]=paneldata + panelinfolist.append(paneldict) + # Hygrometer panel -------------------------------------------- - MeasureType="Moisture" + MeasureType="Moisture" namelist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_MEASURE,MeasureType,hardwaremod.HW_INFO_NAME) - partialnamelistinput.extend(namelist) + partialnamelistinput.extend(namelist) #print "------------------------- namelist " , namelist if namelist: - paneldict={} - paneldict["icon"]="icons/moisture-transp.png" - paneldict["color"]="primary" - paneldict["type"]="sensor" + paneldict={} + paneldict["icon"]="icons/moisture-transp.png" + paneldict["color"]="primary" + paneldict["type"]="sensor" paneldict["link"]=url_for('show_sensordata' , elementtype="", period="Day", actionbtn="sensor") paneldict["linktitle"]="Go to Sensordata" paneldict["title"]=MeasureType @@ -381,22 +355,16 @@ def show_entries(): paneldict["active"]="yes" paneldata=[] endtime=datetime.now() - for name in namelist: + for name in namelist: paneldatarow={} paneldatarow["name"]=name paneldata.append(paneldatarow) - paneldict["data"]=paneldata - panelinfolist.append(paneldict) - - - - - + paneldict["data"]=paneldata + panelinfolist.append(paneldict) - # INPUTS OTHERS panel (all remaining inputs) -------------------------------------------- - iotype="input" - namelist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_IOTYPE,iotype,hardwaremod.HW_INFO_NAME) + iotype="input" + namelist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_IOTYPE,iotype,hardwaremod.HW_INFO_NAME) #remove the nemas already in partialnamelist for item in partialnamelistinput: if item in namelist: @@ -404,10 +372,10 @@ def show_entries(): #print "------------------------- namelist " , namelist if namelist: - paneldict={} - paneldict["icon"]="icons/cables-white-sm.png" - paneldict["color"]="teal" - paneldict["type"]="sensor" + paneldict={} + paneldict["icon"]="icons/cables-white-sm.png" + paneldict["color"]="teal" + paneldict["type"]="sensor" paneldict["link"]=url_for('show_sensordata' , elementtype="", period="Day", actionbtn="sensor") paneldict["linktitle"]="Go to Sensordata" paneldict["title"]="Other Input" @@ -415,20 +383,15 @@ def show_entries(): paneldict["active"]="yes" paneldata=[] endtime=datetime.now() - for name in namelist: + for name in namelist: paneldatarow={} paneldatarow["name"]=name paneldata.append(paneldatarow) - paneldict["data"]=paneldata - panelinfolist.append(paneldict) - - + paneldict["data"]=paneldata + panelinfolist.append(paneldict) + # available panel colors in CSS custom: #aqua: #00c0ef; blue: #0073b7; teal: #39CCCC; olive: #3D9970; lime: #01FF70; orange: #FF851B; purple: #605ca8; maroon: #D81B60; gray: #d2d6de; - - - - # OUTPUT panels below partialnamelist=[] @@ -438,84 +401,77 @@ def show_entries(): namelist=hardwaremod.searchdatalist2keys(hardwaremod.HW_FUNC_USEDFOR,usedfor,hardwaremod.HW_INFO_IOTYPE,iotype,hardwaremod.HW_INFO_NAME) partialnamelist.extend(namelist) #print "------------------------- namelist " , namelist - + if namelist: - paneldict={} - paneldict["icon"]="icons/watertap-transp.png" - paneldict["color"]="primary" - paneldict["type"]="actuator" + paneldict={} + paneldict["icon"]="icons/watertap-transp.png" + paneldict["color"]="primary" + paneldict["type"]="actuator" paneldict["link"]=url_for('wateringplan' , selectedelement=namelist[0]) paneldict["linktitle"]="Go to WateringPlan" paneldict["title"]="Water" paneldict["active"]="yes" paneldata=[] endtime=datetime.now() - for name in namelist: + for name in namelist: paneldatarow={} paneldatarow["name"]=name - paneldata.append(paneldatarow) - paneldict["data"]=paneldata - panelinfolist.append(paneldict) - + paneldata.append(paneldatarow) + paneldict["data"]=paneldata + panelinfolist.append(paneldict) # fertilizer panel -------------------------------------------- - usedfor="fertilizercontrol" + usedfor="fertilizercontrol" iotype="output" namelist=hardwaremod.searchdatalist2keys(hardwaremod.HW_FUNC_USEDFOR,usedfor,hardwaremod.HW_INFO_IOTYPE,iotype,hardwaremod.HW_INFO_NAME) partialnamelist.extend(namelist) #print "------------------------- namelist " , namelist if namelist: - paneldict={} - paneldict["icon"]="icons/fertilizer-transp.png" - paneldict["color"]="green" - paneldict["type"]="actuator" + paneldict={} + paneldict["icon"]="icons/fertilizer-transp.png" + paneldict["color"]="green" + paneldict["type"]="actuator" paneldict["link"]=url_for('fertilizerplan' , selectedelement=namelist[0]) paneldict["linktitle"]="Go to FertilizerPlan" paneldict["title"]="Fertilizer" paneldict["active"]="yes" paneldata=[] - endtime=datetime.now() - for name in namelist: + endtime=datetime.now() + for name in namelist: paneldatarow={} paneldatarow["name"]=name - paneldata.append(paneldatarow) - paneldict["data"]=paneldata - panelinfolist.append(paneldict) - + paneldata.append(paneldatarow) + paneldict["data"]=paneldata + panelinfolist.append(paneldict) # Light actuator panel -------------------------------------------- - usedfor="lightcontrol" + usedfor="lightcontrol" iotype="output" namelist=hardwaremod.searchdatalist2keys(hardwaremod.HW_FUNC_USEDFOR,usedfor,hardwaremod.HW_INFO_IOTYPE,iotype,hardwaremod.HW_INFO_NAME) partialnamelist.extend(namelist) #print "------------------------- namelist " , namelist if namelist: - paneldict={} - paneldict["icon"]="icons/bulb1.png" - paneldict["color"]="orange" - paneldict["type"]="actuator" + paneldict={} + paneldict["icon"]="icons/bulb1.png" + paneldict["color"]="orange" + paneldict["type"]="actuator" paneldict["link"]=url_for('show_Calibration') paneldict["linktitle"]="Go to Setting" paneldict["title"]="Light Control" paneldict["active"]="yes" paneldata=[] - endtime=datetime.now() - for name in namelist: - + endtime=datetime.now() + for name in namelist: paneldatarow={} paneldatarow["name"]=name - - paneldata.append(paneldatarow) - paneldict["data"]=paneldata - panelinfolist.append(paneldict) - - - - + paneldata.append(paneldatarow) + paneldict["data"]=paneldata + panelinfolist.append(paneldict) + # OTHERS panel (all outputs) -------------------------------------------- - iotype="output" + iotype="output" namelist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_IOTYPE,iotype,hardwaremod.HW_INFO_NAME) #remove the nemas already in partialnamelist for item in partialnamelist: @@ -524,37 +480,34 @@ def show_entries(): #print "------------------------- namelist " , namelist if namelist: - paneldict={} - paneldict["icon"]="icons/tools3-sm.png" - paneldict["color"]="olive" - paneldict["type"]="actuator" + paneldict={} + paneldict["icon"]="icons/tools3-sm.png" + paneldict["color"]="olive" + paneldict["type"]="actuator" paneldict["link"]=url_for('show_Calibration') paneldict["linktitle"]="Go to setting" paneldict["title"]="Other Outputs" paneldict["active"]="yes" paneldata=[] - endtime=datetime.now() - for name in namelist: + endtime=datetime.now() + for name in namelist: paneldatarow={} paneldatarow["name"]=name - - paneldata.append(paneldatarow) - paneldict["data"]=paneldata - panelinfolist.append(paneldict) - - + paneldata.append(paneldatarow) + paneldict["data"]=paneldata + panelinfolist.append(paneldict) + # available panel colors in CSS custom: #aqua: #00c0ef; blue: #0073b7; teal: #39CCCC; olive: #3D9970; lime: #01FF70; orange: #FF851B; purple: #605ca8; maroon: #D81B60; gray: #d2d6de; - - + nameslist=[] for panelinfo in panelinfolist: if panelinfo["active"]=="yes": for paneldata in panelinfo["data"]: nameslist.append(paneldata["name"]) - + #print nameslist - + # system tabs networklink=url_for('network') @@ -568,12 +521,12 @@ def show_entries(): def network(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) + wifilist=[] - savedssid=[] + savedssid=[] filenamelist="wifi networks" - - print("visualizzazione menu network:") + print("visualizzazione menu network:") iplocal=networkmod.get_local_ip() iplocallist=networkmod.get_local_ip_list() @@ -586,8 +539,7 @@ def network(): connectedssid=connectedssidlist[0] else: connectedssid="" - - + localwifisystem=networkmod.localwifisystem #print " localwifisystem = ", localwifisystem , " connectedssid ", connectedssid message=networkmod.networkdbmod.getstoredmessage() @@ -610,31 +562,31 @@ def wificonfig(): if request.form['buttonsub'] == "Save": password=request.form['password'] #networkmod.savewifi(ssid, password) - networkmod.waitandsavewifiandconnect(7,ssid,password) - #redirect to login + networkmod.waitandsavewifiandconnect(7,ssid,password) + #redirect to login session.pop('logged_in', None) return redirect(url_for('login', message="Please wait until the WiFi disconnect and reconnect")) - + elif request.form['buttonsub'] == "Forget": - print("forget") + print("forget") networkmod.waitandremovewifi(7,ssid) print("remove network ", ssid) print("Try to connect AP") networkmod.waitandconnect_AP(9) session.pop('logged_in', None) return redirect(url_for('login', message="Please wait until the WiFi disconnect and reconnect")) - + else: print("cancel") return redirect(url_for('network')) return render_template('wificonfig.html', ssid=ssid) - @application.route('/Imageshow/', methods=['GET', 'POST']) def imageshow(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) + monthdict= {1: "jan", 10: "oct", 11: "nov", 12: "dec", 2: "feb", 3: "mar", 4: "apr", 5: "may", 6: "jun", 7: "jul", 8: "aug", 9: "sep"} monthlist=[] for i in range(12): @@ -643,22 +595,23 @@ def imageshow(): todaydate = date.today() currentmonth = todaydate.month monthtoshow=currentmonth - + if request.method == 'POST': actiontype=request.form['actionbtn'] if actiontype=="DeleteAll": # delete all files in the folder - deletedfilenumber=hardwaremod.deleteallpictures(MYPATH) print(" picture files deleted " , deletedfilenumber) - logger.info(' all image files deleted ') - + logger.info(' all image files deleted ') + deletedfilenumber=hardwaremod.deleteallpictures(MYPATH) + elif actiontype=="CreateImage": + print("Create image manually") + logger.info('Create image manually') + hardwaremod.takephoto() else: monthtoshow=monthlist.index(actiontype)+1 - - sortedlist=hardwaremod.photolist(MYPATH) - + filenamelist=[] wlist=[] hlist=[] @@ -673,15 +626,12 @@ def imageshow(): (w,h)=hardwaremod.get_image_size(files[0]) wlist.append(w) hlist.append(h) - thumbfilenamelist.append(files[3]) - - #print filenamelist + thumbfilenamelist.append(files[3]) + selectedmothname=monthdict[monthtoshow] - #print selectedmothname - return render_template('showimages.html',filenamelist=filenamelist,titlelist=titlelist,wlist=wlist,hlist=hlist,monthlist=monthlist,selectedmothname=selectedmothname, thumbfilenamelist=thumbfilenamelist) + return render_template('showimages.html',filenamelist=filenamelist,titlelist=titlelist,wlist=wlist,hlist=hlist,monthlist=monthlist,selectedmothname=selectedmothname, thumbfilenamelist=thumbfilenamelist) - @application.route('/echo/', methods=['GET']) def echo(): if not session.get('logged_in'): @@ -690,10 +640,10 @@ def echo(): element=request.args['element'] if element=="all": # take reading for all sensors - ret_data = hardwaremod.readallsensors() + ret_data = hardwaremod.readallsensors() else: isok, reading , errmsg = hardwaremod.getsensordata(element,3) - print("isok " ,isok, "reading " ,reading , "statusmsg ", errmsg) + print("isok " ,isok, "reading " ,reading , "statusmsg ", errmsg) answer={} answer[element]={"isok":isok, "reading":reading , "statusmsg":errmsg} ret_data=answer @@ -710,14 +660,14 @@ def echodatabase(): element=request.args['element'] if element=="all": # take reading for all sensors - ret_data = sensordbmod.readallsensorsdatabase() + ret_data = sensordbmod.readallsensorsdatabase() else: ret_data={} #print ret_data return jsonify(ret_data) - + @application.route('/echoMQTT/', methods=['GET']) def echoMQTT(): print(" ECHO MQTT ************************************") @@ -731,23 +681,23 @@ def echoMQTT(): ret_data = hardwaremod.getSTATfromall() print(" ECHO MQTT ************************************") print(ret_data) - + else: ret_data={} #print ret_data return jsonify(ret_data) - + @application.route('/echohome/', methods=['GET']) -def echohome(): +def echohome(): if not session.get('logged_in'): ret_data = {"answer":"Login needed"} return jsonify(ret_data) ret_data={} name=request.args['element'] action=request.args['action'] - + if action=="getdata": #actuatorlist=actuatordbmod.gettablelist() sensorlist=sensordbmod.gettablelist() @@ -755,17 +705,17 @@ def echohome(): # name is the input endtime=datetime.now() - starttime= endtime - timedelta(days=1) + starttime= endtime - timedelta(days=1) if name in sensorlist: - sensordata=[] + sensordata=[] sensordbmod.getsensordbdatadaysV2(name,sensordata,starttime,endtime) isok, evaluateddata=sensordbmod.EvaluateDataPeriod(sensordata,starttime,endtime) - paneldatarow={} + paneldatarow={} paneldatarow["name"]=name paneldatarow["average"]=str('%.1f' % evaluateddata["average"]) paneldatarow["min"]=str('%.1f' % evaluateddata["min"]) paneldatarow["max"]=str('%.1f' % evaluateddata["max"]) - paneldatarow["unit"]=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,name,hardwaremod.HW_INFO_MEASUREUNIT) + paneldatarow["unit"]=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,name,hardwaremod.HW_INFO_MEASUREUNIT) paneldatarow["enabled"]="none" else: data=[] @@ -782,18 +732,15 @@ def echohome(): paneldatarow["enabled"]=hardwaremod.ReadActuatorEnabled(name) else: paneldatarow["enabled"]="none" - - #set date interval for average + #set date interval for average ret_data=paneldatarow #print "Single item Data " , ret_data - + elif action=="enable": - hardwaremod.WriteActuatorEnabled(name, "enable") - paneldatarow={} paneldatarow["name"]=name paneldatarow["actiondone"]="enable" @@ -802,7 +749,6 @@ def echohome(): #print "Single item Data " , ret_data elif action=="disable": - hardwaremod.stoppulse(name) # stop before disable hardwaremod.WriteActuatorEnabled(name, "disable") paneldatarow={} @@ -810,16 +756,11 @@ def echohome(): paneldatarow["actiondone"]="disable" # stop pulse - ret_data=paneldatarow - #print "Single item Data " , ret_data - - return jsonify(ret_data) - - - + #print "Single item Data " , ret_data + return jsonify(ret_data) @application.route('/echowifi/', methods=['GET']) def echowifi(): @@ -828,7 +769,7 @@ def echowifi(): return jsonify(ret_data) ret_data={} element=request.args['element'] - if element=="all": + if element=="all" and not networkmod.WIFIENDIS=="Disabled": # get wifi list wifilist=[] wifilist=networkmod.wifilist_ssid(2) @@ -837,10 +778,10 @@ def echowifi(): connectedssid=connectedssidlist[0] else: connectedssid="" - + savedssid=networkmod.savedwifilist_ssid() #print "Saved SSIDs ", savedssid - + for ssid in wifilist: connected="0" if ssid==connectedssid: @@ -848,13 +789,12 @@ def echowifi(): idstatus="Unknown" if ssid in savedssid: idstatus="Saved" - + ret_data[ssid]=[idstatus , connected] - + #print "Wifi Data " , ret_data return jsonify(ret_data) - @application.route('/doit/', methods=['GET']) def doit(): #if not session.get('logged_in'): @@ -871,16 +811,15 @@ def doit(): if namelist: name=namelist[0] #print "value passed ", argumentlist - #print "type " , name - - + #print "type " , name + if name=="pulse": idx=1 if idx < len(argumentlist): testpulsetime=argumentlist[idx] else: testpulsetime="20" - element=request.args['element'] + element=request.args['element'] print("starting pulse test " , testpulsetime) answer=selectedplanmod.activateandregister(element,testpulsetime) @@ -888,13 +827,12 @@ def doit(): elif name=="stoppulse": idx=1 - element=request.args['element'] + element=request.args['element'] print("stop pulse " , element) answer=selectedplanmod.activateandregister(element,"0") ret_data = {"answer": answer} - elif name=="servo2": print("want to test servo") idx=1 @@ -903,10 +841,10 @@ def doit(): idx=2 if idx < len(argumentlist): direction=argumentlist[idx] - - element=request.args['element'] + + element=request.args['element'] position=int(hardwaremod.getservopercentage(element)) - + if direction=="FORWARD": position=position+steps elif direction=="BACKWARD": @@ -914,10 +852,8 @@ def doit(): # move servo delay=0.5 - position , isok=hardwaremod.servoangle(element,position,delay) - ret_data = {"answer": position} - - + position , isok=hardwaremod.servoangle(element,position,delay) + ret_data = {"answer": position} elif name=="stepper": print("want to test stepper") @@ -927,8 +863,8 @@ def doit(): idx=2 if idx < len(argumentlist): direction=argumentlist[idx] - - element=request.args['element'] + + element=request.args['element'] # move stepper position , isok=hardwaremod.GO_stepper(element,steps,direction) ret_data = {"answer": position} @@ -939,8 +875,8 @@ def doit(): idx=1 if idx < len(argumentlist): newposition=argumentlist[idx] - - element=request.args['element'] + + element=request.args['element'] # set stepper position without moving it hardwaremod.setstepperposition(element, newposition) ret_data = {"answer": newposition} @@ -953,8 +889,8 @@ def doit(): idx=2 if idx < len(argumentlist): direction=argumentlist[idx] - - element=request.args['element'] + + element=request.args['element'] # move hbridge zerooffset=0 position , isok=hardwaremod.GO_hbridge(element,steps,zerooffset,direction) @@ -970,8 +906,8 @@ def doit(): idx=2 if idx < len(argumentlist): direction=argumentlist[idx] - - element=request.args['element'] + + element=request.args['element'] # stop hbridge position , isok=hardwaremod.gpio_stop_hbridge(element) if isok: @@ -983,39 +919,36 @@ def doit(): idx=1 if idx < len(argumentlist): newposition=argumentlist[idx] - - element=request.args['element'] + + element=request.args['element'] # set hbridge position without moving it hardwaremod.sethbridgeposition(element, newposition) ret_data = {"answer": newposition} - - - elif name=="photo": - print("want to test photo") + print("Capture photo") idx=1 if idx < len(argumentlist): video=argumentlist[idx] - logger.info('testing photo %s', video) + + logger.info('Capture photo on %s', video) resolution=request.args.getlist('resolution')[0] position=request.args.getlist('position')[0] servo=request.args.getlist('servo')[0] vdirection=request.args.getlist('vflip')[0] - #print "resolution ", resolution , " position ", position positionlist=position.split(",") position="" - if positionlist: - #print "only use the first position for testing " , positionlist[0] + + if positionlist[0] != "": # move servo position=positionlist[0] logger.info('Move servo to position %s', position) - hardwaremod.servoangle(servo,position,1) + hardwaremod.servoangle(servo,position,1) + # take picture - #vdirection=hardwaremod.searchdata(hardwaremod.HW_FUNC_USEDFOR,"photocontrol",hardwaremod.HW_CTRL_LOGIC) isok, ret_data=hardwaremod.shotit(video,True,resolution,position,vdirection) - + elif name=="mail": mailaname=request.args['element'] mailaddress=request.args['address'] @@ -1025,10 +958,9 @@ def doit(): issent=emailmod.send_email_main(mailaddress,mailtitle,cmd,"report","Periodic system report generated automatically") if issent: ret_data = {"answer": "Mail sent"} - else: + else: ret_data = {"answer": "Error mail not sent"} - - + elif name=="clock": element=request.args['element'] datetime=request.args['datetime'] @@ -1061,13 +993,13 @@ def doit(): answer="Something went wrong" try: version=versionByteArray.decode('ascii','ignore') - except: + except: version="not able to read the version" if isOk: answer="ready" else: version="Problem reading version" - version = version + version = version ret_data = {"answer":answer, "value":version} @@ -1111,9 +1043,6 @@ def doit(): ret_data = {"answer": answer} - - - elif name=="timezone": element=request.args['element'] timezone=request.args['timezone'] @@ -1122,7 +1051,7 @@ def doit(): logger.info('Time Zone has been manually changed') answer=clockmod.settimezone(timezone) clockdbmod.changesavesetting("timezone",timezone) - # reset scheduling + # reset scheduling selectedplanmod.resetmastercallback() ret_data = {"answer":"Saved"} @@ -1158,25 +1087,21 @@ def saveit(): networkdbmod.readdata(data) sysconfigfilemod.hostapdsavechangerow_spec(data) - - elif name=="setsensor": print("want to save sensor calibration") - element=request.args['element'] - + element=request.args['element'] + paramnamelist=request.args.getlist('paramname') paramvaluelist=request.args.getlist('paramvalue') #print element #print paramnamelist - #print paramvaluelist + #print paramvaluelist i=0 for paramname in paramnamelist: hardwaremod.changesavecalibartion(element,paramname,paramvaluelist[i]) i=i+1 - elif name=="photo": - # save photo time phototime="" phototime=request.args['time'] @@ -1185,37 +1110,40 @@ def saveit(): hwname=hardwaremod.searchdata(hardwaremod.HW_FUNC_USEDFOR,"photocontrol",hardwaremod.HW_INFO_NAME) hardwaremod.changesavecalibartion(hwname,hardwaremod.HW_FUNC_TIME,phototime) #hardwaremod.changesavecalibartion(hwname,hardwaremod.HW_CTRL_LOGIC,vdirection) - + camname=request.args['element'] resolution=request.args['resolution'] position=request.args['position'] servo=request.args['servo'] active=request.args['active'] vflip=request.args['vflip'] - + #print "save camera name " ,camname , " resolution=" , resolution , " position=" , position , " servo=" , servo ," time=", phototime ," Active=", active, " vflip ", vflip cameradbmod.changecreatesetting("camera",camname,"resolution",resolution) cameradbmod.changecreatesetting("camera",camname,"position",position) cameradbmod.changecreatesetting("camera",camname,"servo",servo) cameradbmod.changecreatesetting("camera",camname,"time",phototime) cameradbmod.changecreatesetting("camera",camname,"active",active) - cameradbmod.changecreatesetting("camera",camname,"vflip",vflip) + cameradbmod.changecreatesetting("camera",camname,"vflip",vflip) cameradbmod.savesetting() - - + elif name=="light1": lighttime="" lighttime=request.args['time'] print("save light setting, time=" , lighttime) hardwaremod.changesavecalibartion(name,hardwaremod.HW_FUNC_TIME,lighttime) - ret_data = {"answer": "saved"} print("The actuator ", ret_data) return jsonify(ret_data) - - - + + +@application.route('/getunseencount/', methods=['GET']) +def getunseencount(): + unseencount = messageboxmod.GetUnseenCount() + ret_data = {"unseencount": unseencount} + return jsonify(unseencount) + @application.route('/downloadit/', methods=['GET']) def downloadit(): if not session.get('logged_in'): @@ -1226,10 +1154,10 @@ def downloadit(): folderpath=os.path.join(folderpath, "download") if not os.path.exists(folderpath): os.makedirs(folderpath) - + recdata=[] ret_data={} - + name=request.args['name'] if name=="downloadlog": dstfilename="log"+datetime.now().strftime("%Y-%m-%d-time:%H:%M")+".log" @@ -1244,17 +1172,17 @@ def downloadit(): except: answer="problem copying file" dstfilenamelist=[] - dstfilenamelist.append("download/"+dstfilename+".txt") - + dstfilenamelist.append("download/"+dstfilename+".txt") + elif name=="downloadprevlog": - filenamestring=LOG_SETTINGS['handlers']['access_file_handler']['filename'] + filenamestring=LOG_SETTINGS['handlers']['access_file_handler']['filename'] logfolder=filenamestring.split('/')[0] filename=filenamestring.split('/')[1] sortedlist=hardwaremod.loglist(MYPATH,logfolder,filename) folderpath=os.path.join(MYPATH, "static") folderpath=os.path.join(folderpath, "download") - + answer="files not available" dstfilenamelist=[] for dstfilename in sortedlist: @@ -1281,8 +1209,7 @@ def downloadit(): except: answer="problem copying file" dstfilenamelist=[] - dstfilenamelist.append("download/"+dstfilename+".txt") - + dstfilenamelist.append("download/"+dstfilename+".txt") elif name=="downloadHW": dstfilename=hardwaremod.HWDATAFILENAME @@ -1297,7 +1224,7 @@ def downloadit(): except: answer="problem copying file" dstfilenamelist=[] - dstfilenamelist.append("download/"+dstfilename) + dstfilenamelist.append("download/"+dstfilename) elif name=="downloadsyslog": dstfilename="syslog"+datetime.now().strftime("%Y-%m-%d-time:%H:%M")+".txt" @@ -1308,22 +1235,22 @@ def downloadit(): # create the file using the tail command isok=debuggingmod.createfiletailsyslog(dst) if not isok: - answer="problem cretating file" + answer="problem creating file" else: answer="ready" dstfilenamelist=[] - dstfilenamelist.append("download/"+dstfilename) - + dstfilenamelist.append("download/"+dstfilename) + elif name=="configzip": dstfilename=filemanagementmod.configfilezip() if dstfilename=="": - answer="problem cretating file" + answer="problem creating file" else: answer="ready" dstfilenamelist=[] - dstfilenamelist.append(dstfilename) - + dstfilenamelist.append(dstfilename) + elif name=="weatherAPIdata": # configuration of the weatherAPI page dstfilename=weatherAPImod.weatherAPIdbmod.DATAFILENAME filename=os.path.join(hardwaremod.DATABASEPATH, dstfilename) @@ -1337,14 +1264,12 @@ def downloadit(): except: answer="problem copying file" dstfilenamelist=[] - dstfilenamelist.append("download/"+dstfilename) - - + dstfilenamelist.append("download/"+dstfilename) ret_data = {"answer": answer, "filename": dstfilenamelist} print("The actuator ", ret_data) return jsonify(ret_data) - + @application.route('/testit/', methods=['GET']) def testit(): if not session.get('logged_in'): @@ -1353,13 +1278,13 @@ def testit(): # this is used for debugging purposes, activate the functiontest from web button recdata=[] ret_data={} - + name=request.args['name'] if name=="testing": answer="done" print("testing") - answer=Generictesting() - + answer=Generictesting() + name=request.args['name'] if name=="testing1": answer="done" @@ -1378,22 +1303,18 @@ def testit(): print("testing2") answer=Autotesting3() - - ret_data = {"answer": answer} print("The actuator ", ret_data) return jsonify(ret_data) - - - + @application.route('/ShowRealTimeData/', methods=['GET', 'POST']) def show_realtimedata(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) - - sensorlist=sensordbmod.gettablelist() + + sensorlist=sensordbmod.gettablelist() selectedsensor=sensorlist[0] - + if request.method == 'POST': selectedsensor=request.form['postsensor'] @@ -1402,13 +1323,13 @@ def show_realtimedata(): unitdict[item]=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,item,hardwaremod.HW_INFO_MEASUREUNIT) #print "unitdict " , unitdict return render_template('ShowRealTimeSensor.html', sensorlist=sensorlist, unitdict=unitdict, selectedsensor=selectedsensor) - + @application.route('/systemmailsetting/', methods=['GET', 'POST']) def systemmailsetting(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) error = None - + if request.method == 'POST': #print " here we are" reqtype = request.form['button'] @@ -1416,18 +1337,24 @@ def systemmailsetting(): print("saving email credentials") address=request.form['address'] password=request.form['password'] + server=request.form['server'] + port=request.form['port'] isok1=emaildbmod.changesavesetting('address',address) isok2=emaildbmod.changesavesetting('password',password) - if isok1 and isok2: - flash('Email credentials Saved') + isok3=emaildbmod.changesavesetting('server',server) + isok4=emaildbmod.changesavesetting('port',port) + if isok1 and isok2 and isok3 and isok4: + flash('Email credentials Saved') return redirect(url_for('show_Calibration')) elif reqtype=="cancel": return redirect(url_for('show_Calibration')) - + password=emaildbmod.getpassword() address=emaildbmod.getaddress() - return render_template('systemmailsetting.html', address=address, password=password) + server=emaildbmod.getserver() + port=emaildbmod.getport() + return render_template('systemmailsetting.html', address=address, password=password, server=server, port=port) @application.route('/HC12setting/', methods=['GET', 'POST']) def HC12setting(): @@ -1446,7 +1373,7 @@ def HC12setting(): #print(itemdata , ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::") if itemdata: datadict[item]=itemdata - + # save hte new setting if datadict: isok = HC12radionet.saveDataFileAndApply(datadict) @@ -1458,9 +1385,7 @@ def HC12setting(): # Apply the new setting to the devide - return render_template('HC12setting.html', jsonschema=jsonschema, ATinfolist=ATinfolist) - - + return render_template('HC12setting.html', jsonschema=jsonschema, ATinfolist=ATinfolist) @application.route('/HASSIOsetting/', methods=['GET', 'POST']) def HASSIOsetting(): @@ -1479,10 +1404,10 @@ def HASSIOsetting(): #print(itemdata , ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::") if itemdata: datadict[item]=itemdata - + # save hte new setting if datadict: - + isok = HASScompMatrix.HASSIOintegr.saveDataFileAndApply(datadict) jsonschema["value"]=datadict @@ -1495,21 +1420,16 @@ def HASSIOsetting(): flash('Error, not able establish connection with the MQTT broker','danger') else: flash('Error, not able to save setting','danger') - - - # Apply the new setting to the devide - - - return render_template('HASSIOsetting.html', jsonschema=jsonschema, itemlist=itemlist) - + # Apply the new setting to the devide + return render_template('HASSIOsetting.html', jsonschema=jsonschema, itemlist=itemlist) @application.route('/dontclick/', methods=['GET', 'POST']) def dontclick(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) - + print(" Why did you click it !") if request.method == 'POST': @@ -1520,19 +1440,18 @@ def dontclick(): if itemdata=="shutdown": os.system("halt") if itemdata=="cancel": - return redirect(url_for('hardwaresetting')) + return redirect(url_for('hardwaresetting')) - return render_template('dontclick.html') - + return render_template('dontclick.html') @application.route('/networksetting/', methods=['GET', 'POST']) def networksetting(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) error = None - + Fake_password="AP-password" - + if request.method == 'POST': print(" here we are at network setting") reqtype = request.form['button'] @@ -1545,8 +1464,7 @@ def networksetting(): WIFIENDIS=request.form['WIFIENDIS'] HOSTNAME=request.form['HOSTNAME'] forceStaticIP=request.form['forceStaticIP'] - - + # Check isok1 , IPADDRESS = networkmod.IPv4fromString(gotADDRESS) isok2=False @@ -1555,30 +1473,24 @@ def networksetting(): isok2=True if len(AP_SSID)>3: isok3=True - - - - - + if isok1 and isok2 and isok3: - + # previous paramenters IPADDRESSold=networkmod.IPADDRESS - AP_SSIDold=networkmod.localwifisystem + AP_SSIDold=networkmod.localwifisystem AP_TIMEold=str(networkmod.WAITTOCONNECT) HOSTNAMEold=networkmod.gethostname() WIFIENDISold=networkmod.WIFIENDIS - - - + print("save in network file in database") networkdbmod.changesavesetting('LocalIPaddress',IPADDRESS) networkdbmod.changesavesetting('LocalAPSSID',AP_SSID) - networkdbmod.changesavesetting('APtime',AP_TIME) + networkdbmod.changesavesetting('APtime',AP_TIME) networkdbmod.changesavesetting('WIFIENDIS',WIFIENDIS) networkdbmod.changesavesetting('forceStaticIP',forceStaticIP) - networkmod.FORCESTATICIP=forceStaticIP - + networkmod.FORCESTATICIP=forceStaticIP + # save and change values in the HOSTAPD config file sysconfigfilemod.hostapdsavechangerow("ssid",AP_SSID) if AP_PASSWORD!=Fake_password: @@ -1587,53 +1499,50 @@ def networksetting(): print("password changed") else: AP_PASSWORD="" - + if IPADDRESSold!=IPADDRESS: # save changes in DHCPCD confign file sysconfigfilemod.modifydhcpcdconfigfile(IPADDRESSold, IPADDRESS) - - # save changes in DNSMASQ confign file - sysconfigfilemod.modifydnsmasqconfigfile(IPADDRESSold, IPADDRESS) - + + # save changes in DNSMASQ confign file + sysconfigfilemod.modifydnsmasqconfigfile(IPADDRESSold, IPADDRESS) + if HOSTNAME!=HOSTNAMEold: networkmod.setnewhostname(HOSTNAME) - - + # proceed with changes networkmod.applyparameterschange(AP_SSID, AP_PASSWORD, IPADDRESS) networkmod.WAITTOCONNECT=AP_TIME networkmod.WIFIENDIS=WIFIENDIS - # Change hostapd file first row with HERE data=[] networkdbmod.readdata(data) - sysconfigfilemod.hostapdsavechangerow_spec(data) - + sysconfigfilemod.hostapdsavechangerow_spec(data) + if WIFIENDISold!=WIFIENDIS: if WIFIENDIS=="Disabled": - networkmod.Disable_WiFi() + networkmod.Disable_WiFi() else: - networkmod.connect_network() + networkmod.connect_network() - flash('Network setting Saved') + flash('Network setting Saved') return redirect(url_for('network')) else: if not isok1: - flash('please input valid IP address','danger') + flash('please input valid IP address','danger') if not isok2: - flash('please input password longer than 7 characters','danger') + flash('please input password longer than 7 characters','danger') if not isok3: - flash('please input SSID longer than 3 characters','danger') + flash('please input SSID longer than 3 characters','danger') elif reqtype=="cancel": return redirect(url_for('network')) - HOSTNAME=networkmod.gethostname() iplocal=networkmod.get_local_ip() IPADDRESS=networkmod.IPADDRESS PORT=networkmod.PUBLICPORT - AP_SSID=networkmod.localwifisystem + AP_SSID=networkmod.localwifisystem AP_TIME=str(networkmod.WAITTOCONNECT) WIFIENDIS=networkmod.WIFIENDIS forceStaticIP=networkmod.FORCESTATICIP @@ -1641,22 +1550,17 @@ def networksetting(): if len(connectedssidlist)>0: connectedssid=connectedssidlist[0] else: - connectedssid="" + connectedssid="" AP_PASSWORD=Fake_password - - return render_template('networksetting.html', IPADDRESS=IPADDRESS, AP_SSID=AP_SSID, AP_PASSWORD=AP_PASSWORD, AP_TIME=AP_TIME , HOSTNAME=HOSTNAME, WIFIENDIS=WIFIENDIS, forceStaticIP=forceStaticIP) - - @application.route('/About/', methods=['GET', 'POST']) def show_about(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) return render_template('About.html',Release=Release) - - + @application.route('/ShowCalibration/', methods=['GET', 'POST']) def show_Calibration(): #on the contrary of the name, this show the setting menu if not session.get('logged_in'): @@ -1683,14 +1587,13 @@ def show_Calibration(): #on the contrary of the name, this show the setting men selectedplanmod.resetmastercallback() #initiate the GPIO OUT pins initallGPIOpins() - + if requesttype=="editnames": - return hardwaresettingeditfield() - + return hardwaresettingeditfield() + if requesttype=="uploadfile": - print("upload") - - + print("upload") + if 'file' not in request.files: flash('No file') else: @@ -1706,35 +1609,31 @@ def show_Calibration(): #on the contrary of the name, this show the setting men if not os.path.exists(fullfolderpath): os.makedirs(fullfolderpath) print(" folder has been created") - - - #f.save(f.filename) + f.save(os.path.join(uploadfolder, f.filename)) filemanagementmod.restoreconfigfilefromzip(fullfolderpath,f.filename) print("Align the data to the new files config") - #align the files and memory + # align the files and memory runallreadfile() # align the data runallconsistencycheck() - #scheduler setup--------------------- + # scheduler setup--------------------- selectedplanmod.resetmastercallback() - #initiate the GPIO OUT pins + # initiate the GPIO OUT pins initallGPIOpins() - + else: flash('Allowed file types is .zip ') - actuatorlist=[] actuatorlist=hardwaremod.searchdatalist(hardwaremod.HW_CTRL_CMD,"pulse*",hardwaremod.HW_INFO_NAME) - #print " actuator list " , actuatorlist photosetting=[] photosetting.append(hardwaremod.searchdata(hardwaremod.HW_FUNC_USEDFOR,"photocontrol",hardwaremod.HW_FUNC_TIME)) photosetting.append(hardwaremod.searchdata(hardwaremod.HW_FUNC_USEDFOR,"photocontrol",hardwaremod.HW_CTRL_LOGIC)) - + mailelements=emaildbmod.getelementlist() mailsettinglist=[] for element in mailelements: @@ -1747,55 +1646,53 @@ def show_Calibration(): #on the contrary of the name, this show the setting men # mail URL to be founf in network data mailsetting.append(networkdbmod.getCUSTOMURL()) mailsettinglist.append(mailsetting) - - # stepper + + # stepper stepperlist=hardwaremod.searchdatalist(hardwaremod.HW_CTRL_CMD,"stepper",hardwaremod.HW_INFO_NAME) stepperstatuslist=[] for stepper in stepperlist: - stepperstatuslist.append(hardwaremod.getstepperposition(stepper)) + stepperstatuslist.append(hardwaremod.getstepperposition(stepper)) # hbridge hbridgelist=hardwaremod.searchdatalist(hardwaremod.HW_CTRL_CMD,"hbridge*",hardwaremod.HW_INFO_NAME) hbridgestatuslist=[] for hbridge in hbridgelist: - hbridgestatuslist.append(hardwaremod.gethbridgeposition(hbridge)) + hbridgestatuslist.append(hardwaremod.gethbridgeposition(hbridge)) # servo servolist=hardwaremod.searchdatalist(hardwaremod.HW_CTRL_CMD,"servo",hardwaremod.HW_INFO_NAME) servostatuslist=[] - for servo in servolist: - servostatuslist.append(hardwaremod.getservopercentage(servo)) + for servo in servolist: + servostatuslist.append(hardwaremod.getservopercentage(servo)) #servolist.insert(0, "none") - #servostatuslist.insert(0, "None") + #servostatuslist.insert(0, "None") videolist=hardwaremod.videodevlist() camerasettinglist=cameradbmod.getcameradata(videolist) #print camerasettinglist - - + sensorlist = [] sensorlist=sensordbmod.gettablelist() - #read the sensors data - #print "read sensor data " + #print "read sensor data " unitdict={} for item in sensorlist: unitdict[item]=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,item,hardwaremod.HW_INFO_MEASUREUNIT) #print "unitdict " , unitdict - + initdatetime=clockmod.readsystemdatetime() - + #timezone countries=countryinfo.countries timezone=clockdbmod.gettimezone() print("Current timezone ->", timezone) - + MQTTclientexist=False if len(hardwaremod.MQTTcontrol.CLIENTSLIST): MQTTclientexist=True - - HC12ok=HC12radionet.mediumconnected - + + HC12ok=HC12radionet.mediumconnected + return render_template('ShowCalibration.html',servolist=servolist,servostatuslist=servostatuslist,stepperlist=stepperlist,stepperstatuslist=stepperstatuslist,hbridgelist=hbridgelist,hbridgestatuslist=hbridgestatuslist,videolist=videolist,actuatorlist=actuatorlist, sensorlist=sensorlist,photosetting=photosetting, camerasettinglist=camerasettinglist ,mailsettinglist=mailsettinglist, unitdict=unitdict, initdatetime=initdatetime, countries=countries, timezone=timezone, MQTTclientexist=MQTTclientexist, HC12ok=HC12ok) @@ -1807,9 +1704,9 @@ def setinputcalibration(): # set the hbridge zero point if request.method == 'POST': requesttype=request.form['buttonsub'] if requesttype=="cancel": - return redirect(url_for('show_Calibration')) + return redirect(url_for('show_Calibration')) - # Sensors data + # Sensors data sensorparameters=[hardwaremod.HW_CTRL_MIN,hardwaremod.HW_CTRL_MAX,hardwaremod.HW_CTRL_SCALE,hardwaremod.HW_CTRL_OFFSET,hardwaremod.HW_CTRL_DIR] sensorlist = [] sensorlist=sensordbmod.gettablelist() @@ -1818,13 +1715,12 @@ def setinputcalibration(): # set the hbridge zero point tempdict={} for item in sensorparameters: tempdict[item]=hardwaremod.searchdata(hardwaremod.HW_INFO_NAME,sensorname,item) - sensorstatuslist.append(tempdict) - + sensorstatuslist.append(tempdict) + selectvalues=hardwaremod.HWdataKEYWORDS[hardwaremod.HW_CTRL_DIR] return render_template('setinputcalibration.html',sensorlist=sensorlist,sensorstatuslist=sensorstatuslist, sensorparameters=sensorparameters, selectvalues=selectvalues) - @application.route('/showdeviceaddresseslist/', methods=['GET', 'POST']) def showdeviceaddresseslist(): # set the hbridge zero point if not session.get('logged_in'): @@ -1833,8 +1729,8 @@ def showdeviceaddresseslist(): # set the hbridge zero point if request.method == 'POST': requesttype=request.form['buttonsub'] if requesttype=="cancel": - return redirect(url_for('show_Calibration')) - + return redirect(url_for('show_Calibration')) + deviceaddresseslist=hardwaremod.get_device_list_address_property() return render_template('showdeviceaddresseslist.html',deviceaddresseslist=deviceaddresseslist) @@ -1847,8 +1743,8 @@ def showmqttdevicelist(): # set the hbridge zero point if request.method == 'POST': requesttype=request.form['buttonsub'] if requesttype=="cancel": - return redirect(url_for('show_Calibration')) - + return redirect(url_for('show_Calibration')) + hardwaremod.SendSTATcmdtoall() MQTTclientdict=hardwaremod.MQTTcontrol.CLIENTSLIST MQTTclientlist=[] @@ -1859,10 +1755,9 @@ def showmqttdevicelist(): # set the hbridge zero point infodict["subtopicstat5"]=clientinfo["subtopicstat5"] infodict["name"]=clientname MQTTclientlist.append(infodict) - + return render_template('showmqttdevicelist.html',MQTTclientlist=MQTTclientlist) - @application.route('/setstepper/', methods=['GET', 'POST']) def setstepper(): # set the stepper zero point if not session.get('logged_in'): @@ -1871,22 +1766,19 @@ def setstepper(): # set the stepper zero point if request.method == 'POST': requesttype=request.form['buttonsub'] if requesttype=="cancel": - return redirect(url_for('show_Calibration')) + return redirect(url_for('show_Calibration')) - # stepper + # stepper stepperlist=hardwaremod.searchdatalist(hardwaremod.HW_CTRL_CMD,"stepper",hardwaremod.HW_INFO_NAME) stepperstatuslist=[] for stepper in stepperlist: tempdict={} tempdict["position"]=hardwaremod.getstepperposition(stepper) - tempdict["busy"]=hardwaremod.get_stepper_busystatus(stepper) - stepperstatuslist.append(tempdict) - - + tempdict["busy"]=hardwaremod.get_stepper_busystatus(stepper) + stepperstatuslist.append(tempdict) return render_template('setstepper.html',stepperlist=stepperlist,stepperstatuslist=stepperstatuslist) - @application.route('/sethbridge/', methods=['GET', 'POST']) def sethbridge(): # set the hbridge zero point if not session.get('logged_in'): @@ -1895,22 +1787,19 @@ def sethbridge(): # set the hbridge zero point if request.method == 'POST': requesttype=request.form['buttonsub'] if requesttype=="cancel": - return redirect(url_for('show_Calibration')) + return redirect(url_for('show_Calibration')) - # hbridge + # hbridge hbridgelist=hardwaremod.searchdatalist(hardwaremod.HW_CTRL_CMD,"hbridge*",hardwaremod.HW_INFO_NAME) hbridgestatuslist=[] for hbridge in hbridgelist: tempdict={} tempdict["position"]=hardwaremod.gethbridgeposition(hbridge) - tempdict["busy"]="" #hardwaremod.get_hbridge_busystatus(hbridge) - hbridgestatuslist.append(tempdict) - - + tempdict["busy"]="" #hardwaremod.get_hbridge_busystatus(hbridge) + hbridgestatuslist.append(tempdict) return render_template('sethbridge.html',hbridgelist=hbridgelist,hbridgestatuslist=hbridgestatuslist) - @application.route('/DATAsetup/', methods=['GET', 'POST']) def DATAsetup(): # set the items to ble visualized by default in the graphs if not session.get('logged_in'): @@ -1925,7 +1814,7 @@ def DATAsetup(): # set the items to ble visualized by default in the graphs if request.method == 'POST': requesttype=request.form['buttonsub'] if requesttype=="cancel": - return redirect(url_for('show_sensordata')) + return redirect(url_for('show_sensordata')) if requesttype=="save": for item in itemslist: #print "selsettingactive_" + item @@ -1933,9 +1822,7 @@ def DATAsetup(): # set the items to ble visualized by default in the graphs #save isactive hardwaremod.WriteVisibleStatus(item,isactive) - return redirect(url_for('show_sensordata')) - - + return redirect(url_for('show_sensordata')) finalitemlist=[] for item in itemslist: @@ -1948,7 +1835,6 @@ def DATAsetup(): # set the items to ble visualized by default in the graphs return render_template('DATAsetup.html', finalitemlist=finalitemlist) - @application.route('/Sensordata/', methods=['GET', 'POST']) def show_sensordata(): if not session.get('logged_in'): @@ -1956,21 +1842,21 @@ def show_sensordata(): #---------------- DATEFORMAT="%d/%m/%Y" periodlist=["Day","Week","Month","Year","Custom"] - perioddaysdict={"Day":1,"Week":7,"Month":31,"Year":365} + perioddaysdict={"Day":1,"Week":7,"Month":31,"Year":365} periodtype=periodlist[0] actiontype="show" - + if request.method == 'POST': - periodtype=request.form['period'] + periodtype=request.form['period'] actiontype=request.form['actionbtn'] startdatestr = request.form['startdate'] enddatestr = request.form['enddate'] - + elif request.method == 'GET': - periodtype = request.args.get('period') - actiontype = request.args.get('actionbtn') - startdatestr = request.args.get('startdate') + periodtype = request.args.get('period') + actiontype = request.args.get('actionbtn') + startdatestr = request.args.get('startdate') enddatestr = request.args.get('enddate') if periodtype==None: actiontype="show" @@ -1979,13 +1865,13 @@ def show_sensordata(): sensordata=[] usedsensorlist=[] usedactuatorlist=[] - actuatordata=[] + actuatordata=[] hygroactuatornumlist=[] hygrosensornumlist=[] hygrosensornumlistwithout=[] actuatornumlistwithout=[] hygrosensornumlistwithoutactive=[] - + if actiontype=="delete": print("delete all records") sensordbmod.deleteallrow() @@ -1993,39 +1879,33 @@ def show_sensordata(): actiontype="show" periodtype=periodlist[0] daysinthepast=perioddaysdict[periodtype] - enddate=datetime.now() - startdate = enddate - timedelta(days=daysinthepast) - + enddate=datetime.now() + startdate = enddate - timedelta(days=daysinthepast) else: - sensorlist=sensordbmod.gettablelist() - - + if periodtype!="Custom": daysinthepast=perioddaysdict[periodtype] - enddate=datetime.now() - startdate = enddate - timedelta(days=daysinthepast) + enddate=datetime.now() + startdate = enddate - timedelta(days=daysinthepast) else: startdate=datetime.strptime(startdatestr, DATEFORMAT) enddate=datetime.strptime(enddatestr, DATEFORMAT) # check days in the future daysinthefuture=(datetime.now()-enddate).days - if daysinthefuture<0: + if daysinthefuture<0: enddate=datetime.now() # check enddate is after the startdate daysinthepast=(enddate-startdate).days if daysinthepast<0: - daysinthepast=1 - startdate = enddate - timedelta(days=daysinthepast) - - daysinthepast=daysinthepast+1 + daysinthepast=1 + startdate = enddate - timedelta(days=daysinthepast) + + daysinthepast=daysinthepast+1 #startdate = startdate.replace(hour=0, minute=1) enddate = enddate.replace(hour=23, minute=59) - - - - sensordatafull, usedsensorlistfull = sensordbmod.getAllSensorsDataPeriodv2(enddate,daysinthepast) + sensordatafull, usedsensorlistfull = sensordbmod.getAllSensorsDataPeriodv2(enddate,daysinthepast) actuatordatafull,usedactuatorlistfull =actuatordbmod.getAllActuatorDataPeriodv2(enddate,daysinthepast) @@ -2038,7 +1918,7 @@ def show_sensordata(): if hardwaremod.ReadVisibleStatus(item)=="True": usedsensorlist.append(item) sensordata.append(sensordatafull[inde]) - + print("SENSOR LIST USED ", usedsensorlist ) usedactuatorlist=[] @@ -2050,7 +1930,6 @@ def show_sensordata(): usedactuatorlist.append(item) actuatordata.append(actuatordatafull[inde]) - actuatorlist=actuatordbmod.gettablelist() # associate same number to coupled actuators and sensors actuatorlisth= autowateringdbmod.getelementlist() @@ -2061,8 +1940,8 @@ def show_sensordata(): if linkedsensor in usedsensorlist: # if the actuator has an associated sensor hygro hygroactuatornumlist.append(inde) # create list with index number of the actuator hygrosensornumlist.append(usedsensorlist.index(linkedsensor)) # create list with index of the matching sensros - - #select hygrometers in usedsensorlist with associated actuator where the actuator is not in the usedactuatorlist + + # select hygrometers in usedsensorlist with associated actuator where the actuator is not in the usedactuatorlist # this sensor would be solid line but not associated because the actuator is not used then not in the graph for inde in range(len(usedsensorlist)): element=usedsensorlist[inde] @@ -2072,7 +1951,7 @@ def show_sensordata(): #print "sensor element active=", element hygrosensornumlistwithoutactive.append(inde) # create list with index number of the actuator - #select hygrometers without associated actuator, + # select hygrometers without associated actuator, #sensorlist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_MEASURE,"Moisture",hardwaremod.HW_INFO_NAME) sensorlist=autowateringdbmod.getsensorlist() for hygro in sensorlist: @@ -2081,146 +1960,133 @@ def show_sensordata(): if not usedsensorlist.index(hygro) in hygrosensornumlistwithoutactive: hygrosensornumlistwithout.append(usedsensorlist.index(hygro)) - #select watercontrol actuator without associated hygrometer - #Usedfor="Moisturecontrol" + # select watercontrol actuator without associated hygrometer + #Usedfor="Moisturecontrol" #hygrosensorlist=hardwaremod.searchdatalist(hardwaremod.HW_FUNC_USEDFOR,Usedfor,hardwaremod.HW_INFO_NAME) - # actuatorlisth is provided by autowatering for actuator in actuatorlisth: if actuator in usedactuatorlist: if not usedactuatorlist.index(actuator) in hygroactuatornumlist: actuatornumlistwithout.append(usedactuatorlist.index(actuator)) - #print "Sensors" #print "hygrosensornumlist " , hygrosensornumlist #print "hygrosensornumlistwithoutactive " , hygrosensornumlistwithoutactive #print "hygrosensornumlistwithout " , hygrosensornumlistwithout - + #print "actuators" - #print "hygroactuatornumlist " , hygroactuatornumlist - #print "actuatornumlistwithout " , actuatornumlistwithout - - + #print "hygroactuatornumlist " , hygroactuatornumlist + #print "actuatornumlistwithout " , actuatornumlistwithout + startdatestr=startdate.strftime(DATEFORMAT) enddatestr=enddate.strftime(DATEFORMAT) - + #print "date periods " , startdatestr , " " , enddatestr , " days ", daysinthepast - - - return render_template('showsensordata.html',actiontype=actiontype,periodtype=periodtype,periodlist=periodlist,startdatestr=startdatestr, enddatestr=enddatestr,usedsensorlist=usedsensorlist,sensordata=json.dumps(sensordata),usedactuatorlist=usedactuatorlist,actuatordata=json.dumps(actuatordata), hygrosensornumlist=hygrosensornumlist, hygroactuatornumlist=hygroactuatornumlist, hygrosensornumlistwithout=hygrosensornumlistwithout , actuatornumlistwithout=actuatornumlistwithout, hygrosensornumlistwithoutactive=hygrosensornumlistwithoutactive) + return render_template('showsensordata.html',actiontype=actiontype,periodtype=periodtype,periodlist=periodlist,startdatestr=startdatestr, enddatestr=enddatestr,usedsensorlist=usedsensorlist,sensordata=json.dumps(sensordata),usedactuatorlist=usedactuatorlist,actuatordata=json.dumps(actuatordata), hygrosensornumlist=hygrosensornumlist, hygroactuatornumlist=hygroactuatornumlist, hygrosensornumlistwithout=hygrosensornumlistwithout , actuatornumlistwithout=actuatornumlistwithout, hygrosensornumlistwithoutactive=hygrosensornumlistwithoutactive) @application.route('/wateringplan/' , methods=['GET', 'POST']) def wateringplan(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) title = "Watering Schedule" - elementlist= wateringdbmod.getelementlist() + elementlist= wateringdbmod.getelementlist() paramlist= wateringdbmod.getparamlist() table=wateringdbmod.gettable(1) # watering time multiplieer table1=wateringdbmod.gettable(0) # watering schema table2=wateringdbmod.gettable(2) # watering time delay - + #advparamlist= advancedmod.getparamlist() schemaementlist= advancedmod.getelementlist() - #print "table --------------------------------------------------- > ", table #print "table1 --------------------------------------------------- > ", table1 #print "table2 --------------------------------------------------- > ", table2 - + selectedelement = request.args.get('selectedelement') if selectedelement==None: if elementlist: - selectedelement=elementlist[0] - + selectedelement=elementlist[0] + print(" watering plan - selectedelement ", selectedelement) - - if request.method == 'POST': + + if request.method == 'POST': actiontype=request.form['actionbtn'] print(actiontype) - + if actiontype == "save": element=request.form['element'] print("save il water form...:" , element) - selectedelement=element - - + selectedelement=element + #add proper formatting dicttemp={} dicttemp["element"]=element for j in range(len(paramlist)): thelist=[] selectedschema=request.form[element+ "_" + str(j) + "_0"] - schemaindex=schemaementlist.index(selectedschema)+1 + schemaindex=schemaementlist.index(selectedschema)+1 thelist.append(schemaindex) thelist.append(request.form[element+ "_" + str(j)]) thelist.append(request.form[element+ "_" + str(j) + "_1"]) #name of the time delay input filed param=paramlist[j] - dicttemp[param]=thelist - - wateringdbmod.replacerow(element,dicttemp) + dicttemp[param]=thelist + + wateringdbmod.replacerow(element,dicttemp) flash('Table has been saved') table=wateringdbmod.gettable(1) # watering time multiplieer table1=wateringdbmod.gettable(0) # watering schema table2=wateringdbmod.gettable(2) # watering schema #print "after",table selectedplanmod.resetmastercallback() - - if actiontype == "advconfig": + + if actiontype == "advconfig": print("open advanced setting") return redirect('/Advanced/') - if actiontype == "changename": + if actiontype == "changename": print("change schema name") return hardwaresettingeditfieldschemaname() - - if actiontype == "sensorselect": + if actiontype == "sensorselect": print("select sensor for wateringplan") return wateringplansensorselect() - - - return render_template("wateringplan.html", title=title,paramlist=paramlist,elementlist=elementlist,schemaementlist=schemaementlist,table=table,table1=table1,table2=table2,selectedelement=selectedelement) - + return render_template("wateringplan.html", title=title,paramlist=paramlist,elementlist=elementlist,schemaementlist=schemaementlist,table=table,table1=table1,table2=table2,selectedelement=selectedelement) @application.route('/autowatering/' , methods=['GET', 'POST']) def autowatering(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) + title = "Auto Watering Setting" - elementlist= autowateringdbmod.getelementlist() + elementlist= autowateringdbmod.getelementlist() selectedelement = request.args.get('selectedelement') if selectedelement==None: - selectedelement=elementlist[0] - + selectedelement=elementlist[0] - #sensorlist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_MEASURE,"Moisture",hardwaremod.HW_INFO_NAME) + #sensorlist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_MEASURE,"Moisture",hardwaremod.HW_INFO_NAME) - sensorlist= autowateringdbmod.getsensorlist() + sensorlist= autowateringdbmod.getsensorlist() #print "sensorlist ",sensorlist - + modelist=["None", "Full Auto" , "under MIN over MAX"] formlist=["workmode", "sensor" , "threshold", "wtstepsec", "maxstepnumber", "pausebetweenwtstepsmin", "allowedperiod" , "maxdaysbetweencycles", "sensorminacceptedvalue", "mailalerttype","samplesminutes" ] alertlist=["infoandwarning", "warningonly","none"] - - if request.method == 'POST': + if request.method == 'POST': actiontype=request.form['actionbtn'] print(actiontype) - + if actiontype == "save": element=request.form['element'] print("save il water form...:" , element) - selectedelement=element - - + selectedelement=element + #add proper formatting dicttemp={} - dicttemp["element"]=element + dicttemp["element"]=element dicttemp["workmode"]=request.form[element+'_1'] dicttemp["sensor"]=request.form[element+'_2'] dicttemp["threshold"]=[request.form[element+'_3'],request.form[element+'_4']] @@ -2233,27 +2099,21 @@ def autowatering(): dicttemp["mailalerttype"]=request.form[element+'_12'] dicttemp["samplesminutes"]=request.form[element+'_13'] - #print "dicttemp ----->",dicttemp - autowateringdbmod.replacerow(element,dicttemp) + #print "dicttemp ----->",dicttemp + autowateringdbmod.replacerow(element,dicttemp) flash('Table has been saved') autowateringmod.configupdate(element) print("Reset the Cycle:" , element) autowateringmod.cyclereset(element) #selectedplanmod.resetmastercallback() - - + if actiontype == "reset": element=request.form['element'] print("Reset the Cycle:" , element) - selectedelement=element + selectedelement=element autowateringmod.cyclereset(element) - - - - - watersettinglist=[] for element in elementlist: watersetting=[] @@ -2262,97 +2122,80 @@ def autowatering(): watersetting.append(autowateringdbmod.searchdata("element",element,item)) watersettinglist.append(watersetting) - - + cyclestatuslist=[] for element in elementlist: cyclestatus=[] LOCtime=clockmod.convertUTCtoLOC_datetime(autowateringmod.getstatus(element,"cyclestartdate")) cyclestatus.append(LOCtime.strftime("%Y-%m-%d %H:%M:%S")) LOCtime=clockmod.convertUTCtoLOC_datetime(autowateringmod.getstatus(element, "lastwateringtime")) - cyclestatus.append(LOCtime.strftime("%Y-%m-%d %H:%M:%S")) + cyclestatus.append(LOCtime.strftime("%Y-%m-%d %H:%M:%S")) cyclestatus.append(autowateringmod.getstatus(element,"cyclestatus")) cyclestatus.append(autowateringmod.getstatus(element,"watercounter")) - cyclestatus.append(autowateringmod.getstatus(element,"alertcounter")) + cyclestatus.append(autowateringmod.getstatus(element,"alertcounter")) #{"cyclestartdate":datetime.utcnow(),"lastwateringtime":datetime.utcnow(),"cyclestatus":"done", "checkcounter":0, "alertcounter":0, "watercounter":0} cyclestatuslist.append(cyclestatus) - - return render_template("autowatering.html", title=title,selectedelement=selectedelement,modelist=modelist,sensorlist=sensorlist,watersettinglist=watersettinglist, cyclestatuslist=cyclestatuslist, alertlist=alertlist) - - - @application.route('/automation/' , methods=['GET', 'POST']) def automation(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) title = "Auto Watering Setting" - elementlist= automationdbmod.getelementlist() + elementlist= automationdbmod.getelementlist() selectedelement = request.args.get('selectedelement') if selectedelement==None: - selectedelement=elementlist[0] - + selectedelement=elementlist[0] - sensorlist=automationdbmod.sensorlist() + sensorlist=automationdbmod.sensorlist() #sensorlist=hardwaremod.searchdatalist(hardwaremod.HW_FUNC_USEDFOR,"Moisturecontrol",hardwaremod.HW_INFO_NAME) #print "sensorlist ",sensorlist timetriggerlist=automationdbmod.sensorlisttriggertime() - - - + modelist=["None", "Full Auto" , "Emergency Activation" , "Alert Only"] formlist=["workmode", "sensor" , "sensor_threshold", "actuator_threshold", "stepnumber", "pausebetweenwtstepsmin", "averagesample", "allowedperiod" , "mailalerttype" ,"mathoperation", "activationdelay" ] alertlist=["infoandwarning", "warningonly","none"] operationlist=["average", "min" , "max" ] - - if request.method == 'POST': + if request.method == 'POST': actiontype=request.form['actionbtn'] print(actiontype) - + if actiontype == "save": element=request.form['element'] print("save il form...:" , element) - selectedelement=element - - + selectedelement=element + #add proper formatting dicttemp={} - dicttemp["element"]=element + dicttemp["element"]=element dicttemp["workmode"]=request.form[element+'_1'] dicttemp["sensor"]=request.form[element+'_2'] dicttemp["sensor_threshold"]=[request.form[element+'_3_1'],request.form[element+'_3_2']] dicttemp["actuator_threshold"]=[request.form[element+'_4_1'],request.form[element+'_4_2']] dicttemp["stepnumber"]=request.form[element+'_5'] dicttemp["pausebetweenwtstepsmin"]=request.form[element+'_6'] - dicttemp["averagesample"]=request.form[element+'_7'] + dicttemp["averagesample"]=request.form[element+'_7'] dicttemp["allowedperiod"]=[request.form[element+'_8_1'],request.form[element+'_8_2']] dicttemp["mailalerttype"]=request.form[element+'_9'] dicttemp["mathoperation"]=request.form[element+'_10'] dicttemp["activationdelay"]=request.form[element+'_11'] - #print "dicttemp ----->",dicttemp - automationdbmod.replacerow(element,dicttemp) + #print "dicttemp ----->",dicttemp + automationdbmod.replacerow(element,dicttemp) flash('Table has been saved') - + print("Reset the Cycle:" , element) - automationmod.cyclereset(element) + automationmod.cyclereset(element) #selectedplanmod.resetmastercallback() - - + if actiontype == "reset": element=request.form['element'] print("Reset the Cycle:" , element) - selectedelement=element + selectedelement=element automationmod.cyclereset(element) - - - - - watersettinglist=[] for element in elementlist: watersetting=[] @@ -2361,43 +2204,36 @@ def automation(): watersetting.append(automationdbmod.searchdata("element",element,item)) watersettinglist.append(watersetting) - - + cyclestatuslist=[] for element in elementlist: if not (element in automationmod.AUTO_data): automationmod.cyclereset(element) - cyclestatus=[] + cyclestatus=[] LOCtime=clockmod.convertUTCtoLOC_datetime(automationmod.AUTO_data[element]["lastactiontime"]) cyclestatus.append(LOCtime.strftime("%Y-%m-%d %H:%M:%S")) cyclestatus.append(automationmod.AUTO_data[element]["status"]) cyclestatus.append(automationmod.AUTO_data[element]["actionvalue"]) - cyclestatus.append(automationmod.AUTO_data[element]["alertcounter"]) + cyclestatus.append(automationmod.AUTO_data[element]["alertcounter"]) #{"cyclestartdate":datetime.utcnow(),"lastwateringtime":datetime.utcnow(),"cyclestatus":"done", "checkcounter":0, "alertcounter":0, "watercounter":0} cyclestatuslist.append(cyclestatus) - - return render_template("automation.html", title=title,selectedelement=selectedelement,modelist=modelist,sensorlist=sensorlist,watersettinglist=watersettinglist, cyclestatuslist=cyclestatuslist, operationlist=operationlist , alertlist=alertlist, timetriggerlist=timetriggerlist) - @application.route('/interrupt/' , methods=['GET', 'POST']) def interrupt(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) title = "Auto Watering Setting" - elementlist= interruptdbmod.getelementlist() + elementlist= interruptdbmod.getelementlist() selectedelement = request.args.get('selectedelement') if selectedelement==None: - selectedelement=elementlist[0] - + selectedelement=elementlist[0] - sensorlist=interruptdbmod.sensorlist() + sensorlist=interruptdbmod.sensorlist() #print "sensorlist ",sensorlist timetriggerlist=interruptdbmod.sensorlisttriggertime() - - - + modelist=["None","Pre-emptive Blocking","Counter Only" ] triggermode=["Counter","Frequency"] sensormodelist=["First Edge" , "First Edge + Level", "Second Edge" , "Second Edge + Level (inv)", "both Edges"] @@ -2405,51 +2241,42 @@ def interrupt(): formlist=["workmode", "sensor" , "sensor_mode", "actuator_output", "preemptive_period", "actionmode_afterfirst", "folloup_output", "allowedperiod" , "mailalerttype" , "interrupt_triggernumber" , "interrupt_validinterval", "trigger_mode"] alertlist=["infoandwarning", "warningonly","none"] - - - if request.method == 'POST': + if request.method == 'POST': actiontype=request.form['actionbtn'] print(actiontype) - + if actiontype == "save": element=request.form['element'] print("save il form...:" , element) - selectedelement=element + selectedelement=element #add proper formatting dicttemp={} - dicttemp["element"]=element + dicttemp["element"]=element dicttemp[formlist[0]]=request.form[element+'_1'] dicttemp[formlist[1]]=request.form[element+'_2'] dicttemp[formlist[2]]=request.form[element+'_3'] dicttemp[formlist[3]]=request.form[element+'_4'] dicttemp[formlist[4]]=request.form[element+'_5'] dicttemp[formlist[5]]=request.form[element+'_6'] - dicttemp[formlist[6]]=request.form[element+'_7'] + dicttemp[formlist[6]]=request.form[element+'_7'] dicttemp[formlist[7]]=[request.form[element+'_8_1'],request.form[element+'_8_2']] dicttemp[formlist[8]]=request.form[element+'_9'] dicttemp[formlist[9]]=request.form[element+'_10'] dicttemp[formlist[10]]=request.form[element+'_11'] dicttemp[formlist[11]]=request.form[element+'_12'] - #print "dicttemp ----->",dicttemp - interruptdbmod.replacerow(element,dicttemp) + interruptdbmod.replacerow(element,dicttemp) flash('Table has been saved') interruptmod.cyclereset(element) - - + if actiontype == "reset": element=request.form['element'] print("Reset the Cycle:" , element) - selectedelement=element + selectedelement=element interruptmod.cyclereset(element) - - - - - watersettinglist=[] for element in elementlist: watersetting=[] @@ -2458,70 +2285,54 @@ def interrupt(): watersetting.append(interruptdbmod.searchdata("element",element,item)) watersettinglist.append(watersetting) - - + cyclestatuslist=[] for element in elementlist: if not (element in interruptmod.AUTO_data): interruptmod.cyclereset(element) - cyclestatus=[] + cyclestatus=[] try: # in case the object is not datetime cyclestatus.append(interruptmod.readstatus(element,"lastactiontime").strftime("%Y-%m-%d %H:%M:%S")) except: cyclestatus.append("") cyclestatus.append(interruptmod.readstatus(element,"status")) cyclestatus.append(interruptmod.readstatus(element,"actionvalue")) - cyclestatus.append(interruptmod.readstatus(element,"alertcounter")) + cyclestatus.append(interruptmod.readstatus(element,"alertcounter")) #{"cyclestartdate":datetime.utcnow(),"lastwateringtime":datetime.utcnow(),"cyclestatus":"done", "checkcounter":0, "alertcounter":0, "watercounter":0} cyclestatuslist.append(cyclestatus) print("ready to go to html") - return render_template("interrupt.html", title=title,selectedelement=selectedelement,modelist=modelist,sensormodelist=sensormodelist,followupactionlist=followupactionlist,sensorlist=sensorlist,watersettinglist=watersettinglist, cyclestatuslist=cyclestatuslist, alertlist=alertlist, timetriggerlist=timetriggerlist, triggermode=triggermode) - - - - - - - @application.route('/fertilizerplan/' , methods=['GET', 'POST']) def fertilizerplan(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) title = "Fertilizer Schedule" - elementlist=fertilizerdbmod.getelementlist() + elementlist=fertilizerdbmod.getelementlist() paramlist= fertilizerdbmod.getparamlist() argumentnumber=2 - table=fertilizerdbmod.gettable(1) + table=fertilizerdbmod.gettable(1) table1=fertilizerdbmod.gettable(0) - + selectedelement = request.args.get('selectedelement') if selectedelement==None: if elementlist: - selectedelement=elementlist[0] - - # Autofertilizer Function START - + selectedelement=elementlist[0] + #sensorlist=hardwaremod.searchdatalist(hardwaremod.HW_INFO_MEASURE,"Moisture",hardwaremod.HW_INFO_NAME) linkemelementlist=hardwaremod.searchdatalist(hardwaremod.HW_FUNC_USEDFOR,"watercontrol",hardwaremod.HW_INFO_NAME) #print "linkemelementlist ",linkemelementlist - - modelist=["SceduledTime","BeforeWatering"] + + modelist=["None","ScheduledTime","BeforeWatering"] formlist=["workmode","waterZone","minactivationsec","time"] #alertlist=["infoandwarning", "warningonly"] - - - - # Autofertilizer function END - - if request.method == 'POST': + if request.method == 'POST': actiontype=request.form['actionbtn'] print(actiontype) - + if actiontype == "save": element=request.form['element'] print("save il fertilizer form...:" , element) @@ -2534,33 +2345,30 @@ def fertilizerplan(): thelist.append(request.form[element+ "_" + str(j) + "_0"]) thelist.append(request.form[element+ "_" + str(j)]) param=paramlist[j] - dicttemp[param]=thelist - - fertilizerdbmod.replacerow(element,dicttemp) - table=fertilizerdbmod.gettable(1) + dicttemp[param]=thelist + + fertilizerdbmod.replacerow(element,dicttemp) + table=fertilizerdbmod.gettable(1) table1=fertilizerdbmod.gettable(0) #print "after",table selectedplanmod.resetmastercallback() - - + #add proper formatting for the Autofertilizer dicttemp={} - dicttemp["element"]=element + dicttemp["element"]=element dicttemp["workmode"]=request.form[element+'_param1'] dicttemp["waterZone"]=request.form[element+'_param2'] dicttemp["minactivationsec"]=request.form[element+'_param3'] dicttemp["time"]=request.form[element+'_param4'] - #print "dicttemp ----->",dicttemp + #print "dicttemp ----->",dicttemp autofertilizerdbmod.replacerow(element,dicttemp) #modify autofertilizer row flash('Table has been saved') - if actiontype == "advconfig": + if actiontype == "advconfig": print("open advanced setting") return redirect('/Advanced/') - - - + fertilizersettinglist=[] for element in elementlist: fertilizersetting=[] @@ -2569,10 +2377,8 @@ def fertilizerplan(): fertilizersetting.append(autofertilizerdbmod.searchdata("element",element,item)) fertilizersettinglist.append(fertilizersetting) - - return render_template("fertilizerplan.html", title=title,paramlist=paramlist,elementlist=elementlist,table=table,table1=table1, selectedelement=selectedelement, formlist=formlist , fertilizersettinglist=fertilizersettinglist , linkemelementlist=linkemelementlist, modelist=modelist) - + return render_template("fertilizerplan.html", title=title,paramlist=paramlist,elementlist=elementlist,table=table,table1=table1, selectedelement=selectedelement, formlist=formlist , fertilizersettinglist=fertilizersettinglist , linkemelementlist=linkemelementlist, modelist=modelist) @application.route('/Advanced/', methods=['GET', 'POST']) def advanced(): @@ -2581,7 +2387,7 @@ def advanced(): title = "Advanced Watering Schedule" paramlist= advancedmod.getparamlist() elementlist= advancedmod.getelementlist() - + table=advancedmod.gettable() tablehead=advancedmod.gettableheaders() @@ -2591,28 +2397,25 @@ def advanced(): selectedelement=elementlist[0] #print "table " ,table - - if request.method == 'POST': + if request.method == 'POST': actiontype=request.form['actionbtn'] print(actiontype) - + if actiontype == "save": elementnum=request.form['element'] # this returns the Actuator in row_i number - element=elementlist[int(elementnum)] + element=elementlist[int(elementnum)] print("save advanced form...:" , element) - - table=advancedmod.gettable() #print "before",table paramlist= advancedmod.getparamlist() elementlist= advancedmod.getelementlist() tablehead=advancedmod.gettableheaders() - - selectedelement=element + + selectedelement=element #add proper formatting dicttemp={} @@ -2634,12 +2437,12 @@ def advanced(): strtemp = request.form[str(elementnum)+paramlist[a]+ "_" + str(b) + str(c)] listcoltemp.append(strtemp) listrowtemp.append(listcoltemp) - + dicttemp[paramlist[a]]= listrowtemp dicttemp["cycleOption"] =request.form[str(elementnum)+"cycleOption"] dicttemp["dayCycle"]=request.form[str(elementnum)+"dayCycle"] dicttemp["startDate"]=datetime.now().strftime("%d/%m/%Y") - + #print( "dicttemp ", dicttemp ) advancedmod.replacerow(element,dicttemp) # reset the scheduler @@ -2647,23 +2450,20 @@ def advanced(): selectedplanmod.resetmastercallback() print("Schedule has been updated") flash('Schedule has been updated') - + table=advancedmod.gettable() #print "after",table title = "Advanced Setting" - - if actiontype == "setdefault": + if actiontype == "setdefault": advancedmod.restoredefault() print("default restored") flash('Default values have been set') - - if actiontype == "goback": + + if actiontype == "goback": print("open watering plan setting") return redirect('/wateringplan/') - - cycleOptionList = ["Weekly Setting","Daily Setting"] dayCycleList = ["1","2","3","4","5","6","7","8","9","10"] @@ -2675,8 +2475,6 @@ def advanced(): return render_template("advanced.html", title=title,cycleOptionList=cycleOptionList,dayCycleList=dayCycleList,selCycleOption=selCycleOption,selDayCycle=selDayCycle,paramlist=paramlist,elementlist=elementlist,table=table,tablehead=tablehead,selectedelement=selectedelement) - - @application.route('/login', methods=['GET', 'POST']) def login(): message="" @@ -2684,50 +2482,72 @@ def login(): change=False username=logindbmod.getusername().lower() #always transform to lowercase password=logindbmod.getpassword() - - if request.method == 'POST': + + # check if password needs to be secured (hashed) + if len(password) != 64: + logindbmod.restoredefault() + password=logindbmod.getpassword() + message = "Insecure password, reset to 'default'!" + change = True + + elif request.method == 'POST': print(" LOGIN " , username) reqtype = request.form['button'] - if reqtype=="login": - usernameform=request.form['username'].lower() - passwordform=request.form['password'] - if (usernameform != username) or (passwordform != password): + if reqtype == "login": + usernameform = request.form['username'].lower() + passwordform = request.form['password'] + + # hash the pw and compare + m = hashlib.sha256() + m.update(passwordform.encode("UTF-8")) + hashedpw = m.hexdigest() + + if (usernameform != username) or (hashedpw != password): error = 'Invalid Credentials' + logger.warning("Invalid Credentials for %s", username) else: session['logged_in'] = True - #flash('You were logged in') + #flash('You were logged in') return redirect(url_for('show_entries')) - elif reqtype=="change": + elif reqtype == "change": print("Display change password interface") - change=True - - elif reqtype=="save": + change = True + + elif reqtype == "save": print("saving new login password") - usernameform=request.form['username'].lower() - passwordform=request.form['password'] - newpassword=request.form['newpassword'] - if (usernameform != username) or (passwordform != password): + usernameform = request.form['username'].lower() + passwordform = request.form['password'] + newpassword = request.form['newpassword'] + + # hash the old pw entered + m = hashlib.sha256() + m.update(passwordform.encode("UTF-8")) + password_hashed=m.hexdigest() + + if (usernameform != username) or (password_hashed != password): error = 'Invalid Credentials' - change=True + change = True else: - isok1=logindbmod.changesavesetting('password',newpassword) + # hash the new pw + m = hashlib.sha256() + m.update(newpassword.encode("UTF-8")) + newpassword_hashed=m.hexdigest() + + isok1 = logindbmod.changesavesetting('password',newpassword_hashed) if isok1: session['logged_in'] = True - flash('New Password Saved') + flash('New Password Saved') return redirect(url_for('show_entries')) - + elif reqtype=="cancel": return redirect(url_for('show_entries')) - + elif request.method == 'GET': message = request.args.get('message') #print "we are in GETTTTTTTTTTTT " , message - return render_template('login.html', error=error, change=change, message=message ) - - - + return render_template('login.html', error=error, change=change, message=message ) @application.route('/logout') def logout(): @@ -2737,11 +2557,11 @@ def logout(): @application.route('/HardwareSetting/', methods=['GET', 'POST']) -def hardwaresetting(): +def hardwaresetting(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) print("visualizzazione menu hardwareSetting:") - + fields=hardwaremod.HWdataKEYWORDS hwdata=hardwaremod.IOdata debugmode=DEBUGMODE @@ -2750,28 +2570,26 @@ def hardwaresetting(): for key, value in fields.items(): tablehead.append(key) #print "tablehead ", tablehead - + HWfilelist=hardwaremod.HWpresetlist(MYPATH) #list of fiels (path , Name) presetfilenamelist=[] listitem={} listitem["title"]="-No Selection-" - listitem["filename"]="-No Selection-" + listitem["filename"]="-No Selection-" presetfilenamelist.append(listitem) for item in HWfilelist: itemstr=item[1] listitem={} listitem["title"]=itemstr[10:len(itemstr)-4] - listitem["filename"]=itemstr - presetfilenamelist.append(listitem) + listitem["filename"]=itemstr + presetfilenamelist.append(listitem) #print "HW file list ---> ", presetfilenamelist - + if request.method == 'POST': requestinfo=request.form['buttonsub'] requesttype=requestinfo.split("_")[0] print("requesttype " , requestinfo , " " , requesttype) - - - + if requesttype=="applyHWpreset": print("Apply HW setting") selectedpath="" @@ -2782,7 +2600,6 @@ def hardwaresetting(): isdone=False if selectedpath!="": - # copy file to the default HWdata filename=os.path.join(MYPATH, selectedpath) folderpath=os.path.join(MYPATH, hardwaremod.DATABASEPATH) @@ -2798,10 +2615,9 @@ def hardwaresetting(): answer="problem copying file" else: - print("No file was selected") + print("No file was selected") answer="No file selected" - - + # apply changes to the system if isdone: hardwaremod.restoredefault() # copy default to normal file and reload HWdata @@ -2810,7 +2626,7 @@ def hardwaresetting(): selectedplanmod.resetmastercallback() #initiate the GPIO OUT pins initallGPIOpins() - flash('New Hardware configuration has been Applied ') + flash('New Hardware configuration has been Applied ') if requesttype=="edit": return hardwaresettingedit() @@ -2820,22 +2636,16 @@ def hardwaresetting(): initallGPIOpins() flash('Hardware configuration has been Reset ') - - return render_template('hardwaresetting.html',fields=fields, hwdata=json.dumps(hwdata), tablehead=tablehead , presetfilenamelist=presetfilenamelist, debugmode=debugmode) - - @application.route('/HardwareSettingedit/', methods=['GET', 'POST']) -def hardwaresettingedit(): +def hardwaresettingedit(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) print("visualizzazione menu hardwareSettingedit:") - fields=hardwaremod.HWdataKEYWORDS - tablehead=[] for key, value in fields.items(): tablehead.append(key) @@ -2855,12 +2665,11 @@ def hardwaresettingedit(): # Alignt the hardwaremod IOdatatemp to IOdata hardwaremod.IOdatatempalign() - if requesttype=="confirm": print("Confirm table") # Copy the hardwaremod IOdatatemp to IOdata and save it - hardwaremod.IOdatafromtemp() - + hardwaremod.IOdatafromtemp() + # apply changes to the system runallconsistencycheck() #scheduler setup--------------------- @@ -2870,12 +2679,12 @@ def hardwaresettingedit(): flash('New Hardware configuration has been Applied ') return redirect(url_for('hardwaresetting')) - if requesttype=="reload": + if requesttype=="reload": hardwaremod.IOdatatempalign() if requesttype=="cancel": return redirect(url_for('hardwaresetting')) - + if requesttype=="delete": strposition=len(requesttype) name=requestinfo[strposition+1:] @@ -2886,8 +2695,7 @@ def hardwaresettingedit(): print(" deleted") else: flash('Errors to delete the row','danger') - - + if requesttype=="addrow": dictrow=hardwaremod.IOdatarow isok, message = hardwaremod.checkdata("",dictrow) @@ -2901,7 +2709,6 @@ def hardwaresettingedit(): flash(message,'danger') ret_data = {"answer":"Error"} - # return render_template('hardwaresettingedit.html',fields=fields, hwdata=json.dumps(hwdata), tablehead=tablehead , HWfilelist=HWfilelist) hwdata=hardwaremod.IOdatatemp @@ -2910,22 +2717,19 @@ def hardwaresettingedit(): return render_template('hardwaresettingedit.html',fields=fields, hwdata=hwdata, tablehead=tablehead , additionalrow=additionalrow) @application.route('/hardwaresettingeditfield/', methods=['GET', 'POST']) -def hardwaresettingeditfield(): +def hardwaresettingeditfield(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) print("visualizzazione menu hardwareSettingedit:") - fields=hardwaremod.HWdataKEYWORDS - tablehead=[] #for key, value in fields.iteritems(): # tablehead.append(key) #print "tablehead ", tablehead tablehead=[hardwaremod.HW_INFO_NAME] - if request.method == 'POST': requestinfo=request.form['buttonsub'] requesttype=requestinfo.split("_")[0] @@ -2933,13 +2737,10 @@ def hardwaresettingeditfield(): #if requestinfo=="editnames": #request coming from previous page, need init table from zero - #print "the teporary Tables have been reset" + #print "the teporary Tables have been reset" # Alignt the hardwaremod IOdatatemp to IOdata #hardwaremod.IOdatatempalign() - - - if requesttype=="confirm": print("Confirm table") # get the diferences in name field @@ -2947,12 +2748,10 @@ def hardwaresettingeditfield(): hardwaremod.getfieldvaluelisttemp("name",newnames) oldnames=[] hardwaremod.getfieldvaluelist("name",oldnames) - #print newnames - #print oldnames - + # Copy the hardwaremod IOdatatemp to IOdata and save it - hardwaremod.IOdatafromtemp() - + hardwaremod.IOdatafromtemp() + # apply changes to the system # basically instead of the consistencycheck procedure it should be simply the rename procedure -- Done @@ -2961,7 +2760,7 @@ def hardwaresettingeditfield(): autofertilizerdbmod.replacewordandsave(oldnames,newnames) fertilizerdbmod.replacewordandsave(oldnames,newnames) automationdbmod.replacewordandsave(oldnames,newnames) - interruptdbmod.replacewordandsave(oldnames,newnames) + interruptdbmod.replacewordandsave(oldnames,newnames) sensordbmod.consistencycheck() actuatordbmod.consistencycheck() #scheduler setup--------------------- @@ -2973,65 +2772,52 @@ def hardwaresettingeditfield(): # Alignt the hardwaremod IOdatatemp to IOdata hardwaremod.IOdatatempalign() - if requesttype=="reload": + if requesttype=="reload": hardwaremod.IOdatatempalign() if requesttype=="cancel": return redirect(url_for('show_Calibration')) - -# return render_template('hardwaresettingedit.html',fields=fields, hwdata=json.dumps(hwdata), tablehead=tablehead , HWfilelist=HWfilelist) - hwdata=hardwaremod.IOdatatemp - - - #print ("--------------------------------------" , fields) - #print ("---------------------------------------" , hwdata) - #print ("---------------------------------------" , tablehead) - + returnfunction="hardwaresettingeditfield" - + ajaxurl="HWsettingEditAjax" return render_template('hardwaresettingeditfield.html',returnfunction=returnfunction, ajaxurl=ajaxurl ,fields=fields, hwdata=hwdata, tablehead=tablehead ) - @application.route('/hardwaresettingeditfieldschemaname/', methods=['GET', 'POST']) -def hardwaresettingeditfieldschemaname(): +def hardwaresettingeditfieldschemaname(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) print("visualizzazione menu hardwareSettingeditschemaname:") - fields={'name':[]} tablehead=['name'] - if request.method == 'POST': print("daje") - + buttonsub = request.form.get('buttonsub', None) requestinfo="" requesttype="" if buttonsub: - requestinfo=request.form['buttonsub'] requesttype=requestinfo.split("_")[0] print("hardwaresettingeditfieldschemaname requesttype POST " , requestinfo , " " , requesttype) - if requesttype=="confirm": print("Confirm table") print(advancedmod.tempelementdict) - + advancedmod.replaceschemanameandsave(advancedmod.tempelementdict) return redirect(url_for('wateringplan')) - #if requesttype=="reload": + #if requesttype=="reload": # hardwaremod.IOdatatempalign() if requesttype=="cancel": @@ -3039,9 +2825,8 @@ def hardwaresettingeditfieldschemaname(): else: print("Not a real POST") - - hwdata=[] + hwdata=[] advancedmod.tempelementdict={} elementlist= advancedmod.getelementlist() @@ -3049,25 +2834,18 @@ def hardwaresettingeditfieldschemaname(): hwdata.append({'name':item}) advancedmod.tempelementdict[item]=item - - returnfunction="hardwaresettingeditfieldschemaname" - + ajaxurl="SchemaNameEditAjax" return render_template('hardwaresettingeditfield.html',returnfunction=returnfunction , ajaxurl=ajaxurl ,fields=fields, hwdata=hwdata, tablehead=tablehead ) - - - @application.route('/HWsettingEditAjax/', methods=['GET','POST']) def HWsettingEditAjax(): if not session.get('logged_in'): ret_data = {"answer":"Login Needed"} return jsonify(ret_data) - - recdata=[] ret_data={} if request.method == 'POST': @@ -3075,37 +2853,30 @@ def HWsettingEditAjax(): pk = request.form['pk'] value = request.form['value'] name = request.form['name'] - #print "request type : " , pk , " " , value , " " , name - + #print "request type : " , pk , " " , value , " " , name + IOname=pk if IOname=="addrow": dictrow=hardwaremod.deepcopydict(hardwaremod.IOdatarow) - else: + else: dictrow=hardwaremod.searchrowtempbyname(IOname) - dictrow[name]=value + dictrow[name]=value fieldtocheck=name - + #print "Dictrow: " ,dictrow #print "IOdatatemp: " , hardwaremod.IOdatatemp isok, message = hardwaremod.checkdata(fieldtocheck,dictrow) - - notok=False if isok: print("data is OK") + #modify the IOdatatemp matrix if IOname=="addrow": hardwaremod.IOdatarow[name]=value - #print "row: " , hardwaremod.IOdatarow else: - isfound=hardwaremod.changeIOdatatemp(IOname,name,value) - - #print "item found " , isfound - #print "IOdatarow: " , hardwaremod.IOdatarow - #print "IOdatatemp: " , hardwaremod.IOdatatemp + isfound=hardwaremod.changeIOdatatemp(IOname,name,value) - ret_data = {"answer": message} return jsonify(ret_data) else: @@ -3122,7 +2893,7 @@ def SchemaNameEditAjax(): isok=True message="ok" - + recdata=[] ret_data={} if request.method == 'POST': @@ -3130,14 +2901,14 @@ def SchemaNameEditAjax(): pk = request.form['pk'] value = request.form['value'] name = request.form['name'] - #print "request type : " , pk , " " , value , " " , name - + #print "request type : " , pk , " " , value , " " , name + print(pk) previousname=pk print(value) newname=value - print(name) - + print(name) + # check if the new name is already present if newname in advancedmod.tempelementdict: message="name already present" @@ -3151,12 +2922,11 @@ def SchemaNameEditAjax(): if newname=="": message="name cannot be empty" print(message) - isok=False - + isok=False if isok: advancedmod.tempelementdict[previousname]=newname - print(advancedmod.tempelementdict) + print(advancedmod.tempelementdict) ret_data = {"answer": message} return jsonify(ret_data) else: @@ -3164,41 +2934,31 @@ def SchemaNameEditAjax(): ret_data = message return ret_data,400 - - - @application.route('/wateringplansensorselect/', methods=['GET', 'POST']) -def wateringplansensorselect(): +def wateringplansensorselect(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) print("visualizzazione menu wateringplansensorselect:") #wateringplansensordbmod - + sensorlist=wateringplansensordbmod.sensorlist() selsensorlist, selsensorlist2=wateringplansensordbmod.getactivesensor() selduration=wateringplansensordbmod.getselduration() selcondition=wateringplansensordbmod.getselcondition() - - if request.method == 'POST': - buttonsub = request.form.get('buttonsub', None) requestinfo="" requesttype="" if buttonsub: - - requestinfo=request.form['buttonsub'] requesttype=requestinfo.split("_")[0] #print "requesttype " , requestinfo , " " , requesttype - - - + if requesttype=="save": - print("save") - + print("save") + # time interval selduration=request.form['durationmin'] print(selduration) @@ -3211,16 +2971,16 @@ def wateringplansensorselect(): selsensorlist=[] sensorlist=wateringplansensordbmod.sensorlist() #provides the list of value of the checked items - selsensorlist = request.form.getlist('list1') + selsensorlist = request.form.getlist('list1') print(selsensorlist) - selsensorlist2 = request.form.getlist('list2') + selsensorlist2 = request.form.getlist('list2') print(selsensorlist2) wateringplansensordbmod.saveselsensors(selsensorlist,selsensorlist2) - + wateringplansensordbmod.savesetting() return redirect(url_for('wateringplan')) - + if requesttype=="cancel": return redirect(url_for('wateringplan')) @@ -3239,44 +2999,39 @@ def wateringplansensorselect(): else: dicttemp["active2"]="False" selsensorlistGUI.append(dicttemp) - + durationlist=["60","120","360","720","1440"] conditionlist=["AND","OR"] return render_template('waterinplansensorselect.html', selcondition=selcondition, conditionlist=conditionlist, selduration=selduration, durationlist=durationlist, selsensorlistGUI=selsensorlistGUI) - - - - @application.route('/weatherAPI/', methods=['GET', 'POST']) -def weatherAPI(): +def weatherAPI(): if not session.get('logged_in'): return render_template('login.html',error=None, change=False) print("visualizzazione menu weatherAPI:") - - + APIfilelist=weatherAPImod.APIpresetlist() #list of fiels (path , Name) presetfilenamelist=[] listitem={} listitem["title"]="-No Selection-" - listitem["filename"]="-No Selection-" + listitem["filename"]="-No Selection-" presetfilenamelist.append(listitem) for item in APIfilelist: itemstr=item[1] listitem={} listitem["title"]=itemstr - listitem["filename"]=itemstr - presetfilenamelist.append(listitem) + listitem["filename"]=itemstr + presetfilenamelist.append(listitem) #print "HW file list ---> ", presetfilenamelist - + GUIitems=weatherAPImod.GetVisibleParam() for i in range(len(GUIitems)): GUIitems[i]["nameID"]=GUIitems[i]["name"]+"_"+str(i) - + #print " GUIitems ******************************** ", GUIitems - + wateringtems= wateringdbmod.getelementlist() activewateringlist=weatherAPImod.getactivewatering() wateringtemsGUI=[] @@ -3288,17 +3043,14 @@ def weatherAPI(): else: dicttemp["active"]="False" wateringtemsGUI.append(dicttemp) - - + #print " wateringtemsGUI ******************************+++++ ", wateringtemsGUI - + if request.method == 'POST': requestinfo=request.form['buttonsub'] requesttype=requestinfo.split("_")[0] #print "requesttype " , requestinfo , " " , requesttype - - - + if requesttype=="applypreset": #print "Apply API setting" selectedpath="" @@ -3309,16 +3061,15 @@ def weatherAPI(): isdone=False isdone=weatherAPImod.CopytoDatabase(selectedpath) - - + # apply changes to the system if isdone: GUIitems=weatherAPImod.GetVisibleParam() for i in range(len(GUIitems)): GUIitems[i]["nameID"]=GUIitems[i]["name"]+"_"+str(i) - + #print " GUIitems ******************************** ", GUIitems - + wateringtems= wateringdbmod.getelementlist() activewateringlist=weatherAPImod.getactivewatering() wateringtemsGUI=[] @@ -3330,22 +3081,21 @@ def weatherAPI(): else: dicttemp["active"]="False" wateringtemsGUI.append(dicttemp) - + flash('New API configuration has been Applied ') else: flash('Problem reading the configuration ','danger') - - + if requesttype=="save": - print("save") - #print "GUIitems --------------------------->",GUIitems + print("save") + #print "GUIitems --------------------------->",GUIitems for formdata in GUIitems: if formdata["GUItype"]=="input": #print " reuest from web " , formdata["nameID"] formdata["value"]=request.form[formdata["nameID"]] #print " ................... FINISH GETTING DATA .............................::::" - weatherAPImod.SetVisibleParam(GUIitems) + weatherAPImod.SetVisibleParam(GUIitems) wateringtemsactivelist=[] wateringtems= wateringdbmod.getelementlist() for item in wateringtems: @@ -3354,10 +3104,10 @@ def weatherAPI(): #print isactive if isactive=="True": wateringtemsactivelist.append(item) - weatherAPImod.SetWateractuators(wateringtemsactivelist) - + weatherAPImod.SetWateractuators(wateringtemsactivelist) + weatherAPImod.SaveSetting() - + activewateringlist=weatherAPImod.getactivewatering() wateringtemsGUI=[] for item in wateringtems: @@ -3368,22 +3118,20 @@ def weatherAPI(): else: dicttemp["active"]="False" wateringtemsGUI.append(dicttemp) - if requesttype=="TestQuery": - weatherAPImod.QueryParse(GUIitems) - + if requesttype=="apply": # create counter newHWsettingRow=hardwaremod.InitRowHWsetting() weatherAPImod.ProvideHWsettingFields(newHWsettingRow) # change relevant fields in dataromw - + #print "Row data" , newHWsettingRow # Copy the hardwaremod IOdatatemp to IOdata and save it - + hardwaremod.AddUpdateRowByName(newHWsettingRow) - + # apply changes to the system runallconsistencycheck() #scheduler setup--------------------- @@ -3391,13 +3139,12 @@ def weatherAPI(): #initiate the GPIO OUT pins #initallGPIOpins() flash('New Hardware configuration has been Applied ') - - # activate multiplier for the watering - + + # activate multiplier for the watering + if requesttype=="uploadfile": - print("import configuration file") - - + print("import configuration file") + if 'file' not in request.files: flash('No file','danger') else: @@ -3412,9 +3159,9 @@ def weatherAPI(): if not os.path.exists(fullfolderpath): os.makedirs(fullfolderpath) print(" folder has been created") - - f = request.files['file'] - #f.save(f.filename) + + f = request.files['file'] + #f.save(f.filename) selectedpath=os.path.join(uploadfolder, f.filename) f.save(selectedpath) # copy file to database folder @@ -3428,9 +3175,9 @@ def weatherAPI(): GUIitems=weatherAPImod.GetVisibleParam() for i in range(len(GUIitems)): GUIitems[i]["nameID"]=GUIitems[i]["name"]+"_"+str(i) - + #print " GUIitems ******************************** ", GUIitems - + wateringtems= wateringdbmod.getelementlist() activewateringlist=weatherAPImod.getactivewatering() wateringtemsGUI=[] @@ -3442,33 +3189,33 @@ def weatherAPI(): else: dicttemp["active"]="False" wateringtemsGUI.append(dicttemp) - + flash('New API configuration has been Applied ') else: flash('Problem reading the configuration ','danger') - else: flash('Allowed file types is .txt ','danger') - return render_template('weatherAPI.html', presetfilenamelist=presetfilenamelist,GUIitems=GUIitems, wateringtemsGUI=wateringtemsGUI) - - - @application.route('/notification/' , methods=['GET','POST']) def messagebox(): if request.method == 'POST': actiontype=request.form['actionbtn'] print(actiontype) - messageboxmod.DeleteMessage(int(actiontype)) + if actiontype == "DeleteAllMessages": + messageboxmod.DeleteAllMessages() + else: + messageboxmod.DeleteMessage(int(actiontype)) posts=messageboxmod.GetMessages() print(posts) - return render_template('messagebox.html', posts=posts) + # remember last seen + messageboxmod.SaveLastSeen() + return render_template('messagebox.html', posts=posts) def currentpath(filename): return os.path.join(MYPATH, filename) @@ -3498,20 +3245,18 @@ def Generictesting(): HASScompMatrix.HASSIOintegr.check_loop_and_connect() print(" testing the HASSIO hartbeat ò@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") - - if Errorcounter>0: - returnstr="Probelms " + errorstring + + if Errorcounter > 0: + returnstr="Errors: " + errorstring else: - returnstr="No error" - - - return returnstr + returnstr="No errors" + return returnstr def Autotesting1(): print("Auto testing Automation HAT") print("Ensure that the right HWsetting is loaded") - + #ActuatorList=["Relay1_2","Relay1_3","Relay1_4","Relay1_5","Relay1_6","Relay1_7","Relay1_8","Relay2_1","Relay2_2","Relay2_3","Relay2_4","Relay2_5","Relay2_6","Relay2_7","Relay2_8"] recordkey=hardwaremod.HW_INFO_IOTYPE recordvalue="output" @@ -3520,21 +3265,18 @@ def Autotesting1(): keytosearch="name" ActuatorList=hardwaremod.searchdatalist2keys(recordkey,recordvalue,recordkey1,recordvalue1,keytosearch) - for target in ActuatorList: hardwaremod.makepulse(target,"10",True, 0) print(" Actuator ", target) time.sleep(0.16) - - GPIOpinlist=["21","25","7","24"] for gpio in GPIOpinlist: # Set the pin as output at level 1 hardwaremod.setPinOutput(gpio,1) - - Sensorlist=[ + + Sensorlist=[ {"name":"pressuresensor1","min":800, "max":1200}, #{"name":"tempsensor1", "min":10, "max":40}, {"name":"Analog0","min":2.4, "max":2.6}, @@ -3554,8 +3296,8 @@ def Autotesting1(): isok, readingstr, errmsg = hardwaremod.getsensordata(sensorname,1) try: reading=float(readingstr) - print(" sensorname " , sensorname , " data " , reading) - + print(" sensorname " , sensorname , " data " , reading) + if (reading>rangemin)and(reading0: - returnstr="Probelms " + errorstring + time.sleep(1) + + if Errorcounter > 0: + returnstr="Errors: " + errorstring else: returnstr="Well DONE ! :)" - - return returnstr + return returnstr def Autotesting1_v10(): print("Auto testing Automation HAT") print("Ensure that the right HWsetting is loaded") - + #ActuatorList=["Relay1_2","Relay1_3","Relay1_4","Relay1_5","Relay1_6","Relay1_7","Relay1_8","Relay2_1","Relay2_2","Relay2_3","Relay2_4","Relay2_5","Relay2_6","Relay2_7","Relay2_8"] recordkey=hardwaremod.HW_INFO_IOTYPE recordvalue="output" @@ -3590,13 +3331,11 @@ def Autotesting1_v10(): keytosearch="name" ActuatorList=hardwaremod.searchdatalist2keys(recordkey,recordvalue,recordkey1,recordvalue1,keytosearch) - for target in ActuatorList: hardwaremod.makepulse(target,"10",True, 0) print(" Actuator ", target) - - Sensorlist=[ + Sensorlist=[ {"name":"pressuresensor1","min":800, "max":1200}, {"name":"tempsensor1", "min":10, "max":40}, {"name":"Analog0","min":2.4, "max":2.6}, @@ -3614,8 +3353,8 @@ def Autotesting1_v10(): isok, readingstr, errmsg = hardwaremod.getsensordata(sensorname,1) try: reading=float(readingstr) - print(" sensorname " , sensorname , " data " , reading) - + print(" sensorname " , sensorname , " data " , reading) + if (reading>rangemin)and(reading0: - returnstr="Probelms " + errorstring + time.sleep(1) + + if Errorcounter > 0: + returnstr="Errors: " + errorstring else: returnstr="Well DONE ! :)" - - return returnstr + return returnstr def Autotesting2(): print("Auto testing Irrigation HAT") print("Ensure that the right HWsetting is loaded") - + #ActuatorList=["Relay1_2","Relay1_3","Relay1_4","Relay1_5","Relay1_6","Relay1_7","Relay1_8","Relay2_1","Relay2_2","Relay2_3","Relay2_4","Relay2_5","Relay2_6","Relay2_7","Relay2_8"] recordkey=hardwaremod.HW_INFO_IOTYPE recordvalue="output" @@ -3654,7 +3392,7 @@ def Autotesting2(): for target in ActuatorList: hardwaremod.makepulse(target,"10",True, 0) print(" Actuator ", target) - + # test PINS of irrigation hat PINlist=["7","8"] for PIN in PINlist: @@ -3662,10 +3400,10 @@ def Autotesting2(): recdata=[] priority=0 sendstring="pulse:"+PIN+":"+"2"+":"+"neg"+":"+"0" - ack=hardwaremod.sendcommand("pulse",sendstring,recdata,target,priority) - time.sleep(1) - - Sensorlist=[ + ack=hardwaremod.sendcommand("pulse",sendstring,recdata,target,priority) + time.sleep(1) + + Sensorlist=[ {"name":"humidsensor1","min":0, "max":100}, {"name":"tempsensor1", "min":10, "max":40}, {"name":"lightsensor1","min":10, "max":5000} @@ -3678,8 +3416,8 @@ def Autotesting2(): isok, readingstr, errmsg = hardwaremod.getsensordata(sensorname,1) try: reading=float(readingstr) - print(" sensorname " , sensorname , " data " , reading) - + print(" sensorname " , sensorname , " data " , reading) + if (reading>rangemin)and(reading0: - returnstr="Probelms " + errorstring + time.sleep(1) + + if Errorcounter > 0: + returnstr = "Errors: " + errorstring else: returnstr="Well DONE ! :)" - - return returnstr - + return returnstr def Autotesting3(): print("Auto testing Super HAT") print("Ensure that the right HWsetting is loaded") - + #ActuatorList=["Relay1_2","Relay1_3","Relay1_4","Relay1_5","Relay1_6","Relay1_7","Relay1_8","Relay2_1","Relay2_2","Relay2_3","Relay2_4","Relay2_5","Relay2_6","Relay2_7","Relay2_8"] recordkey=hardwaremod.HW_INFO_IOTYPE recordvalue="output" @@ -3721,23 +3457,20 @@ def Autotesting3(): time.sleep(0.01) print(" Actuator ", target) - GPIOpinlist=["21","16","5","24","25","26","13","7","27","15","20","6","22","18","4","19","12","23","17","14"] for gpio in GPIOpinlist: # Set the pin as output at level 1 hardwaremod.setPinOutput(gpio,1) - - - Sensorlist=[ + Sensorlist=[ {"name":"Analog1","min":2.4, "max":2.6}, {"name":"Analog2","min":2.4, "max":2.6}, {"name":"Analog3","min":2.4, "max":2.6}, {"name":"Analog4","min":2.4, "max":2.6}, {"name":"Analog5","min":2.4, "max":2.6}, {"name":"Analog6","min":2.4, "max":2.6}, - {"name":"Analog7","min":2.4, "max":2.6}, + {"name":"Analog7","min":2.4, "max":2.6}, {"name":"Analog8_15v","min":4.5, "max":5.5} ] Errorcounter=0 @@ -3750,7 +3483,7 @@ def Autotesting3(): reading=float(readingstr) print(" sensorname " , sensorname , " data " , reading) logger.info('Testing SuperHat: Sensor= %s , Reading %s', sensorname, readingstr) - + if (reading>rangemin)and(reading0: - returnstr="Probelms " + errorstring + time.sleep(1) + + if Errorcounter > 0: + returnstr="Errors: " + errorstring else: returnstr="Well DONE ! :)" - - return returnstr - - - + return returnstr def functiontest(): print(" testing ") - - selectedplanmod.periodicdatarequest("Temp_DS18B20") + selectedplanmod.periodicdatarequest("Temp_DS18B20") #selectedplanmod.heartbeat() #mailname="mail1" #testo=[" riga 1 ", "riga 2 " , " Riga fine"] #emailmod.sendallmail("alert","prova mail", testo) - + #hardwaremod.GO_hbridge_position("Hbridge2",0) #filemanagementmod.configfilezip() - #import statusdataDBmod + #import statusdataDBmod #statusdataDBmod.write_status_data(autofertilizermod.AUTO_data,"doser1","tobeactivated",True) #statusdataDBmod.write_status_data(autofertilizermod.AUTO_data,"doser1","duration",5) #autowateringmod.activatewater("water1", 50) - + #target="doser1" #activationseconds="10" #selectedplanmod.pulsenutrient(target,activationseconds) - + #startdate=datetime.strptime('Sep 7 2018 5:00AM', '%b %d %Y %I:%M%p') #enddate=datetime.strptime('Sep 7 2018 8:00AM', '%b %d %Y %I:%M%p') #slopeOK=autowateringmod.checkinclination("hygroBalcFront",startdate,enddate) #print "got array " , slopeOK - + #selectedplanmod.mastercallback(True) #target="water1" #selectedplanmod.startpump(target,"30","10","5") - + #selectedplanmod.removeallscheduledjobs() #isok=hardwaremod.takephoto(True) #hostname=networkmod.gethostname() - + #refsensor="TimeTrigger" #element="water2" #automationmod.automationexecute(refsensor,element) #automationmod.activateactuator("mail1", 5) - #isok, quantity = automationmod.sensorreading("pressuresensor1",5,"average") #print "isok " , isok , " quantity " , quantity #message = quantity - return "" # video part ---------------------------------- hello ------------------------------- @@ -3866,9 +3592,9 @@ def videocontrol(): if name=="testing": print("testing video stop") - answer="done" + answer="done" answer=videocontrolmod.stream_video() - + if name=="start": idx=1 data="" @@ -3878,13 +3604,12 @@ def videocontrol(): idx=idx+1 data=data[1:] #print data - element=request.args['element'] + element=request.args['element'] #print "element " , element #print "starting Stream " , data vdirection=hardwaremod.searchdata(hardwaremod.HW_FUNC_USEDFOR,"photocontrol",hardwaremod.HW_CTRL_LOGIC) answer=videocontrolmod.stream_video(element,data) + "-" + element time.sleep(0.1) - if name=="close": print("Closing mjpg-streamer server") @@ -3900,31 +3625,16 @@ def videocontrol(): ret_data = {"answer": answer} print("response data ", ret_data) return jsonify(ret_data) - - -#if __name__ == '__main__': -# application.run(host='0.0.0.0', debug=True, threaded=True) - # END ---------------------------------video part --------------------------- - - - - - - if __name__ == '__main__': - - # start web server--------------- ------------------------- - print("start web server") + print("start web server") global PUBLICPORT if PUBLICMODE: application.run(debug=DEBUGMODE,use_reloader=False,host= '0.0.0.0',port=networkmod.LOCALPORT) - #application.run(host='0.0.0.0', debug=True, port=12345, use_reloader=True) else: - application.run(debug=DEBUGMODE,use_reloader=False,port=80) + application.run(debug=DEBUGMODE,use_reloader=False,port=80) print("close") - diff --git a/static/bootstrap533/bootstrap-table-1.23.5/bootstrap-table-locale-all.js b/static/bootstrap533/bootstrap-table-1.23.5/bootstrap-table-locale-all.js new file mode 100644 index 0000000..822dd09 --- /dev/null +++ b/static/bootstrap533/bootstrap-table-1.23.5/bootstrap-table-locale-all.js @@ -0,0 +1,8201 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) : + typeof define === 'function' && define.amd ? define(['jquery'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jQuery)); +})(this, (function ($) { 'use strict'; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + var es_array_concat = {}; + + var globalThis_1; + var hasRequiredGlobalThis; + + function requireGlobalThis () { + if (hasRequiredGlobalThis) return globalThis_1; + hasRequiredGlobalThis = 1; + var check = function (it) { + return it && it.Math === Math && it; + }; + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + globalThis_1 = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof commonjsGlobal == 'object' && commonjsGlobal) || + check(typeof globalThis_1 == 'object' && globalThis_1) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + return globalThis_1; + } + + var objectGetOwnPropertyDescriptor = {}; + + var fails; + var hasRequiredFails; + + function requireFails () { + if (hasRequiredFails) return fails; + hasRequiredFails = 1; + fails = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + return fails; + } + + var descriptors; + var hasRequiredDescriptors; + + function requireDescriptors () { + if (hasRequiredDescriptors) return descriptors; + hasRequiredDescriptors = 1; + var fails = requireFails(); + + // Detect IE8's incomplete defineProperty implementation + descriptors = !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7; + }); + return descriptors; + } + + var functionBindNative; + var hasRequiredFunctionBindNative; + + function requireFunctionBindNative () { + if (hasRequiredFunctionBindNative) return functionBindNative; + hasRequiredFunctionBindNative = 1; + var fails = requireFails(); + + functionBindNative = !fails(function () { + // eslint-disable-next-line es/no-function-prototype-bind -- safe + var test = (function () { /* empty */ }).bind(); + // eslint-disable-next-line no-prototype-builtins -- safe + return typeof test != 'function' || test.hasOwnProperty('prototype'); + }); + return functionBindNative; + } + + var functionCall; + var hasRequiredFunctionCall; + + function requireFunctionCall () { + if (hasRequiredFunctionCall) return functionCall; + hasRequiredFunctionCall = 1; + var NATIVE_BIND = requireFunctionBindNative(); + + var call = Function.prototype.call; + + functionCall = NATIVE_BIND ? call.bind(call) : function () { + return call.apply(call, arguments); + }; + return functionCall; + } + + var objectPropertyIsEnumerable = {}; + + var hasRequiredObjectPropertyIsEnumerable; + + function requireObjectPropertyIsEnumerable () { + if (hasRequiredObjectPropertyIsEnumerable) return objectPropertyIsEnumerable; + hasRequiredObjectPropertyIsEnumerable = 1; + var $propertyIsEnumerable = {}.propertyIsEnumerable; + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // Nashorn ~ JDK8 bug + var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + + // `Object.prototype.propertyIsEnumerable` method implementation + // https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable + objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable; + return objectPropertyIsEnumerable; + } + + var createPropertyDescriptor; + var hasRequiredCreatePropertyDescriptor; + + function requireCreatePropertyDescriptor () { + if (hasRequiredCreatePropertyDescriptor) return createPropertyDescriptor; + hasRequiredCreatePropertyDescriptor = 1; + createPropertyDescriptor = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + return createPropertyDescriptor; + } + + var functionUncurryThis; + var hasRequiredFunctionUncurryThis; + + function requireFunctionUncurryThis () { + if (hasRequiredFunctionUncurryThis) return functionUncurryThis; + hasRequiredFunctionUncurryThis = 1; + var NATIVE_BIND = requireFunctionBindNative(); + + var FunctionPrototype = Function.prototype; + var call = FunctionPrototype.call; + var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + + functionUncurryThis = NATIVE_BIND ? uncurryThisWithBind : function (fn) { + return function () { + return call.apply(fn, arguments); + }; + }; + return functionUncurryThis; + } + + var classofRaw; + var hasRequiredClassofRaw; + + function requireClassofRaw () { + if (hasRequiredClassofRaw) return classofRaw; + hasRequiredClassofRaw = 1; + var uncurryThis = requireFunctionUncurryThis(); + + var toString = uncurryThis({}.toString); + var stringSlice = uncurryThis(''.slice); + + classofRaw = function (it) { + return stringSlice(toString(it), 8, -1); + }; + return classofRaw; + } + + var indexedObject; + var hasRequiredIndexedObject; + + function requireIndexedObject () { + if (hasRequiredIndexedObject) return indexedObject; + hasRequiredIndexedObject = 1; + var uncurryThis = requireFunctionUncurryThis(); + var fails = requireFails(); + var classof = requireClassofRaw(); + + var $Object = Object; + var split = uncurryThis(''.split); + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + indexedObject = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !$Object('z').propertyIsEnumerable(0); + }) ? function (it) { + return classof(it) === 'String' ? split(it, '') : $Object(it); + } : $Object; + return indexedObject; + } + + var isNullOrUndefined; + var hasRequiredIsNullOrUndefined; + + function requireIsNullOrUndefined () { + if (hasRequiredIsNullOrUndefined) return isNullOrUndefined; + hasRequiredIsNullOrUndefined = 1; + // we can't use just `it == null` since of `document.all` special case + // https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec + isNullOrUndefined = function (it) { + return it === null || it === undefined; + }; + return isNullOrUndefined; + } + + var requireObjectCoercible; + var hasRequiredRequireObjectCoercible; + + function requireRequireObjectCoercible () { + if (hasRequiredRequireObjectCoercible) return requireObjectCoercible; + hasRequiredRequireObjectCoercible = 1; + var isNullOrUndefined = requireIsNullOrUndefined(); + + var $TypeError = TypeError; + + // `RequireObjectCoercible` abstract operation + // https://tc39.es/ecma262/#sec-requireobjectcoercible + requireObjectCoercible = function (it) { + if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it); + return it; + }; + return requireObjectCoercible; + } + + var toIndexedObject; + var hasRequiredToIndexedObject; + + function requireToIndexedObject () { + if (hasRequiredToIndexedObject) return toIndexedObject; + hasRequiredToIndexedObject = 1; + // toObject with fallback for non-array-like ES3 strings + var IndexedObject = requireIndexedObject(); + var requireObjectCoercible = requireRequireObjectCoercible(); + + toIndexedObject = function (it) { + return IndexedObject(requireObjectCoercible(it)); + }; + return toIndexedObject; + } + + var isCallable; + var hasRequiredIsCallable; + + function requireIsCallable () { + if (hasRequiredIsCallable) return isCallable; + hasRequiredIsCallable = 1; + // https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot + var documentAll = typeof document == 'object' && document.all; + + // `IsCallable` abstract operation + // https://tc39.es/ecma262/#sec-iscallable + // eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing + isCallable = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) { + return typeof argument == 'function' || argument === documentAll; + } : function (argument) { + return typeof argument == 'function'; + }; + return isCallable; + } + + var isObject; + var hasRequiredIsObject; + + function requireIsObject () { + if (hasRequiredIsObject) return isObject; + hasRequiredIsObject = 1; + var isCallable = requireIsCallable(); + + isObject = function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); + }; + return isObject; + } + + var getBuiltIn; + var hasRequiredGetBuiltIn; + + function requireGetBuiltIn () { + if (hasRequiredGetBuiltIn) return getBuiltIn; + hasRequiredGetBuiltIn = 1; + var globalThis = requireGlobalThis(); + var isCallable = requireIsCallable(); + + var aFunction = function (argument) { + return isCallable(argument) ? argument : undefined; + }; + + getBuiltIn = function (namespace, method) { + return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method]; + }; + return getBuiltIn; + } + + var objectIsPrototypeOf; + var hasRequiredObjectIsPrototypeOf; + + function requireObjectIsPrototypeOf () { + if (hasRequiredObjectIsPrototypeOf) return objectIsPrototypeOf; + hasRequiredObjectIsPrototypeOf = 1; + var uncurryThis = requireFunctionUncurryThis(); + + objectIsPrototypeOf = uncurryThis({}.isPrototypeOf); + return objectIsPrototypeOf; + } + + var environmentUserAgent; + var hasRequiredEnvironmentUserAgent; + + function requireEnvironmentUserAgent () { + if (hasRequiredEnvironmentUserAgent) return environmentUserAgent; + hasRequiredEnvironmentUserAgent = 1; + var globalThis = requireGlobalThis(); + + var navigator = globalThis.navigator; + var userAgent = navigator && navigator.userAgent; + + environmentUserAgent = userAgent ? String(userAgent) : ''; + return environmentUserAgent; + } + + var environmentV8Version; + var hasRequiredEnvironmentV8Version; + + function requireEnvironmentV8Version () { + if (hasRequiredEnvironmentV8Version) return environmentV8Version; + hasRequiredEnvironmentV8Version = 1; + var globalThis = requireGlobalThis(); + var userAgent = requireEnvironmentUserAgent(); + + var process = globalThis.process; + var Deno = globalThis.Deno; + var versions = process && process.versions || Deno && Deno.version; + var v8 = versions && versions.v8; + var match, version; + + if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + + // BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` + // so check `userAgent` even if `.v8` exists, but 0 + if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = +match[1]; + } + } + + environmentV8Version = version; + return environmentV8Version; + } + + var symbolConstructorDetection; + var hasRequiredSymbolConstructorDetection; + + function requireSymbolConstructorDetection () { + if (hasRequiredSymbolConstructorDetection) return symbolConstructorDetection; + hasRequiredSymbolConstructorDetection = 1; + /* eslint-disable es/no-symbol -- required for testing */ + var V8_VERSION = requireEnvironmentV8Version(); + var fails = requireFails(); + var globalThis = requireGlobalThis(); + + var $String = globalThis.String; + + // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing + symbolConstructorDetection = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol('symbol detection'); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will, + // of course, fail. + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; + }); + return symbolConstructorDetection; + } + + var useSymbolAsUid; + var hasRequiredUseSymbolAsUid; + + function requireUseSymbolAsUid () { + if (hasRequiredUseSymbolAsUid) return useSymbolAsUid; + hasRequiredUseSymbolAsUid = 1; + /* eslint-disable es/no-symbol -- required for testing */ + var NATIVE_SYMBOL = requireSymbolConstructorDetection(); + + useSymbolAsUid = NATIVE_SYMBOL + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + return useSymbolAsUid; + } + + var isSymbol; + var hasRequiredIsSymbol; + + function requireIsSymbol () { + if (hasRequiredIsSymbol) return isSymbol; + hasRequiredIsSymbol = 1; + var getBuiltIn = requireGetBuiltIn(); + var isCallable = requireIsCallable(); + var isPrototypeOf = requireObjectIsPrototypeOf(); + var USE_SYMBOL_AS_UID = requireUseSymbolAsUid(); + + var $Object = Object; + + isSymbol = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; + } : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); + }; + return isSymbol; + } + + var tryToString; + var hasRequiredTryToString; + + function requireTryToString () { + if (hasRequiredTryToString) return tryToString; + hasRequiredTryToString = 1; + var $String = String; + + tryToString = function (argument) { + try { + return $String(argument); + } catch (error) { + return 'Object'; + } + }; + return tryToString; + } + + var aCallable; + var hasRequiredACallable; + + function requireACallable () { + if (hasRequiredACallable) return aCallable; + hasRequiredACallable = 1; + var isCallable = requireIsCallable(); + var tryToString = requireTryToString(); + + var $TypeError = TypeError; + + // `Assert: IsCallable(argument) is true` + aCallable = function (argument) { + if (isCallable(argument)) return argument; + throw new $TypeError(tryToString(argument) + ' is not a function'); + }; + return aCallable; + } + + var getMethod; + var hasRequiredGetMethod; + + function requireGetMethod () { + if (hasRequiredGetMethod) return getMethod; + hasRequiredGetMethod = 1; + var aCallable = requireACallable(); + var isNullOrUndefined = requireIsNullOrUndefined(); + + // `GetMethod` abstract operation + // https://tc39.es/ecma262/#sec-getmethod + getMethod = function (V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? undefined : aCallable(func); + }; + return getMethod; + } + + var ordinaryToPrimitive; + var hasRequiredOrdinaryToPrimitive; + + function requireOrdinaryToPrimitive () { + if (hasRequiredOrdinaryToPrimitive) return ordinaryToPrimitive; + hasRequiredOrdinaryToPrimitive = 1; + var call = requireFunctionCall(); + var isCallable = requireIsCallable(); + var isObject = requireIsObject(); + + var $TypeError = TypeError; + + // `OrdinaryToPrimitive` abstract operation + // https://tc39.es/ecma262/#sec-ordinarytoprimitive + ordinaryToPrimitive = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + throw new $TypeError("Can't convert object to primitive value"); + }; + return ordinaryToPrimitive; + } + + var sharedStore = {exports: {}}; + + var isPure; + var hasRequiredIsPure; + + function requireIsPure () { + if (hasRequiredIsPure) return isPure; + hasRequiredIsPure = 1; + isPure = false; + return isPure; + } + + var defineGlobalProperty; + var hasRequiredDefineGlobalProperty; + + function requireDefineGlobalProperty () { + if (hasRequiredDefineGlobalProperty) return defineGlobalProperty; + hasRequiredDefineGlobalProperty = 1; + var globalThis = requireGlobalThis(); + + // eslint-disable-next-line es/no-object-defineproperty -- safe + var defineProperty = Object.defineProperty; + + defineGlobalProperty = function (key, value) { + try { + defineProperty(globalThis, key, { value: value, configurable: true, writable: true }); + } catch (error) { + globalThis[key] = value; + } return value; + }; + return defineGlobalProperty; + } + + var hasRequiredSharedStore; + + function requireSharedStore () { + if (hasRequiredSharedStore) return sharedStore.exports; + hasRequiredSharedStore = 1; + var IS_PURE = requireIsPure(); + var globalThis = requireGlobalThis(); + var defineGlobalProperty = requireDefineGlobalProperty(); + + var SHARED = '__core-js_shared__'; + var store = sharedStore.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {}); + + (store.versions || (store.versions = [])).push({ + version: '3.38.1', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE', + source: 'https://github.com/zloirock/core-js' + }); + return sharedStore.exports; + } + + var shared; + var hasRequiredShared; + + function requireShared () { + if (hasRequiredShared) return shared; + hasRequiredShared = 1; + var store = requireSharedStore(); + + shared = function (key, value) { + return store[key] || (store[key] = value || {}); + }; + return shared; + } + + var toObject; + var hasRequiredToObject; + + function requireToObject () { + if (hasRequiredToObject) return toObject; + hasRequiredToObject = 1; + var requireObjectCoercible = requireRequireObjectCoercible(); + + var $Object = Object; + + // `ToObject` abstract operation + // https://tc39.es/ecma262/#sec-toobject + toObject = function (argument) { + return $Object(requireObjectCoercible(argument)); + }; + return toObject; + } + + var hasOwnProperty_1; + var hasRequiredHasOwnProperty; + + function requireHasOwnProperty () { + if (hasRequiredHasOwnProperty) return hasOwnProperty_1; + hasRequiredHasOwnProperty = 1; + var uncurryThis = requireFunctionUncurryThis(); + var toObject = requireToObject(); + + var hasOwnProperty = uncurryThis({}.hasOwnProperty); + + // `HasOwnProperty` abstract operation + // https://tc39.es/ecma262/#sec-hasownproperty + // eslint-disable-next-line es/no-object-hasown -- safe + hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); + }; + return hasOwnProperty_1; + } + + var uid; + var hasRequiredUid; + + function requireUid () { + if (hasRequiredUid) return uid; + hasRequiredUid = 1; + var uncurryThis = requireFunctionUncurryThis(); + + var id = 0; + var postfix = Math.random(); + var toString = uncurryThis(1.0.toString); + + uid = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36); + }; + return uid; + } + + var wellKnownSymbol; + var hasRequiredWellKnownSymbol; + + function requireWellKnownSymbol () { + if (hasRequiredWellKnownSymbol) return wellKnownSymbol; + hasRequiredWellKnownSymbol = 1; + var globalThis = requireGlobalThis(); + var shared = requireShared(); + var hasOwn = requireHasOwnProperty(); + var uid = requireUid(); + var NATIVE_SYMBOL = requireSymbolConstructorDetection(); + var USE_SYMBOL_AS_UID = requireUseSymbolAsUid(); + + var Symbol = globalThis.Symbol; + var WellKnownSymbolsStore = shared('wks'); + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid; + + wellKnownSymbol = function (name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name) + ? Symbol[name] + : createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; + }; + return wellKnownSymbol; + } + + var toPrimitive; + var hasRequiredToPrimitive; + + function requireToPrimitive () { + if (hasRequiredToPrimitive) return toPrimitive; + hasRequiredToPrimitive = 1; + var call = requireFunctionCall(); + var isObject = requireIsObject(); + var isSymbol = requireIsSymbol(); + var getMethod = requireGetMethod(); + var ordinaryToPrimitive = requireOrdinaryToPrimitive(); + var wellKnownSymbol = requireWellKnownSymbol(); + + var $TypeError = TypeError; + var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + + // `ToPrimitive` abstract operation + // https://tc39.es/ecma262/#sec-toprimitive + toPrimitive = function (input, pref) { + if (!isObject(input) || isSymbol(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); + }; + return toPrimitive; + } + + var toPropertyKey; + var hasRequiredToPropertyKey; + + function requireToPropertyKey () { + if (hasRequiredToPropertyKey) return toPropertyKey; + hasRequiredToPropertyKey = 1; + var toPrimitive = requireToPrimitive(); + var isSymbol = requireIsSymbol(); + + // `ToPropertyKey` abstract operation + // https://tc39.es/ecma262/#sec-topropertykey + toPropertyKey = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; + }; + return toPropertyKey; + } + + var documentCreateElement; + var hasRequiredDocumentCreateElement; + + function requireDocumentCreateElement () { + if (hasRequiredDocumentCreateElement) return documentCreateElement; + hasRequiredDocumentCreateElement = 1; + var globalThis = requireGlobalThis(); + var isObject = requireIsObject(); + + var document = globalThis.document; + // typeof document.createElement is 'object' in old IE + var EXISTS = isObject(document) && isObject(document.createElement); + + documentCreateElement = function (it) { + return EXISTS ? document.createElement(it) : {}; + }; + return documentCreateElement; + } + + var ie8DomDefine; + var hasRequiredIe8DomDefine; + + function requireIe8DomDefine () { + if (hasRequiredIe8DomDefine) return ie8DomDefine; + hasRequiredIe8DomDefine = 1; + var DESCRIPTORS = requireDescriptors(); + var fails = requireFails(); + var createElement = requireDocumentCreateElement(); + + // Thanks to IE8 for its funny defineProperty + ie8DomDefine = !DESCRIPTORS && !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a !== 7; + }); + return ie8DomDefine; + } + + var hasRequiredObjectGetOwnPropertyDescriptor; + + function requireObjectGetOwnPropertyDescriptor () { + if (hasRequiredObjectGetOwnPropertyDescriptor) return objectGetOwnPropertyDescriptor; + hasRequiredObjectGetOwnPropertyDescriptor = 1; + var DESCRIPTORS = requireDescriptors(); + var call = requireFunctionCall(); + var propertyIsEnumerableModule = requireObjectPropertyIsEnumerable(); + var createPropertyDescriptor = requireCreatePropertyDescriptor(); + var toIndexedObject = requireToIndexedObject(); + var toPropertyKey = requireToPropertyKey(); + var hasOwn = requireHasOwnProperty(); + var IE8_DOM_DEFINE = requireIe8DomDefine(); + + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor + objectGetOwnPropertyDescriptor.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); + }; + return objectGetOwnPropertyDescriptor; + } + + var objectDefineProperty = {}; + + var v8PrototypeDefineBug; + var hasRequiredV8PrototypeDefineBug; + + function requireV8PrototypeDefineBug () { + if (hasRequiredV8PrototypeDefineBug) return v8PrototypeDefineBug; + hasRequiredV8PrototypeDefineBug = 1; + var DESCRIPTORS = requireDescriptors(); + var fails = requireFails(); + + // V8 ~ Chrome 36- + // https://bugs.chromium.org/p/v8/issues/detail?id=3334 + v8PrototypeDefineBug = DESCRIPTORS && fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(function () { /* empty */ }, 'prototype', { + value: 42, + writable: false + }).prototype !== 42; + }); + return v8PrototypeDefineBug; + } + + var anObject; + var hasRequiredAnObject; + + function requireAnObject () { + if (hasRequiredAnObject) return anObject; + hasRequiredAnObject = 1; + var isObject = requireIsObject(); + + var $String = String; + var $TypeError = TypeError; + + // `Assert: Type(argument) is Object` + anObject = function (argument) { + if (isObject(argument)) return argument; + throw new $TypeError($String(argument) + ' is not an object'); + }; + return anObject; + } + + var hasRequiredObjectDefineProperty; + + function requireObjectDefineProperty () { + if (hasRequiredObjectDefineProperty) return objectDefineProperty; + hasRequiredObjectDefineProperty = 1; + var DESCRIPTORS = requireDescriptors(); + var IE8_DOM_DEFINE = requireIe8DomDefine(); + var V8_PROTOTYPE_DEFINE_BUG = requireV8PrototypeDefineBug(); + var anObject = requireAnObject(); + var toPropertyKey = requireToPropertyKey(); + + var $TypeError = TypeError; + // eslint-disable-next-line es/no-object-defineproperty -- safe + var $defineProperty = Object.defineProperty; + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = 'enumerable'; + var CONFIGURABLE = 'configurable'; + var WRITABLE = 'writable'; + + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + objectDefineProperty.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; + }; + return objectDefineProperty; + } + + var createNonEnumerableProperty; + var hasRequiredCreateNonEnumerableProperty; + + function requireCreateNonEnumerableProperty () { + if (hasRequiredCreateNonEnumerableProperty) return createNonEnumerableProperty; + hasRequiredCreateNonEnumerableProperty = 1; + var DESCRIPTORS = requireDescriptors(); + var definePropertyModule = requireObjectDefineProperty(); + var createPropertyDescriptor = requireCreatePropertyDescriptor(); + + createNonEnumerableProperty = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + return createNonEnumerableProperty; + } + + var makeBuiltIn = {exports: {}}; + + var functionName; + var hasRequiredFunctionName; + + function requireFunctionName () { + if (hasRequiredFunctionName) return functionName; + hasRequiredFunctionName = 1; + var DESCRIPTORS = requireDescriptors(); + var hasOwn = requireHasOwnProperty(); + + var FunctionPrototype = Function.prototype; + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + + var EXISTS = hasOwn(FunctionPrototype, 'name'); + // additional protection from minified / mangled / dropped function names + var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable)); + + functionName = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + return functionName; + } + + var inspectSource; + var hasRequiredInspectSource; + + function requireInspectSource () { + if (hasRequiredInspectSource) return inspectSource; + hasRequiredInspectSource = 1; + var uncurryThis = requireFunctionUncurryThis(); + var isCallable = requireIsCallable(); + var store = requireSharedStore(); + + var functionToString = uncurryThis(Function.toString); + + // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper + if (!isCallable(store.inspectSource)) { + store.inspectSource = function (it) { + return functionToString(it); + }; + } + + inspectSource = store.inspectSource; + return inspectSource; + } + + var weakMapBasicDetection; + var hasRequiredWeakMapBasicDetection; + + function requireWeakMapBasicDetection () { + if (hasRequiredWeakMapBasicDetection) return weakMapBasicDetection; + hasRequiredWeakMapBasicDetection = 1; + var globalThis = requireGlobalThis(); + var isCallable = requireIsCallable(); + + var WeakMap = globalThis.WeakMap; + + weakMapBasicDetection = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + return weakMapBasicDetection; + } + + var sharedKey; + var hasRequiredSharedKey; + + function requireSharedKey () { + if (hasRequiredSharedKey) return sharedKey; + hasRequiredSharedKey = 1; + var shared = requireShared(); + var uid = requireUid(); + + var keys = shared('keys'); + + sharedKey = function (key) { + return keys[key] || (keys[key] = uid(key)); + }; + return sharedKey; + } + + var hiddenKeys; + var hasRequiredHiddenKeys; + + function requireHiddenKeys () { + if (hasRequiredHiddenKeys) return hiddenKeys; + hasRequiredHiddenKeys = 1; + hiddenKeys = {}; + return hiddenKeys; + } + + var internalState; + var hasRequiredInternalState; + + function requireInternalState () { + if (hasRequiredInternalState) return internalState; + hasRequiredInternalState = 1; + var NATIVE_WEAK_MAP = requireWeakMapBasicDetection(); + var globalThis = requireGlobalThis(); + var isObject = requireIsObject(); + var createNonEnumerableProperty = requireCreateNonEnumerableProperty(); + var hasOwn = requireHasOwnProperty(); + var shared = requireSharedStore(); + var sharedKey = requireSharedKey(); + var hiddenKeys = requireHiddenKeys(); + + var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; + var TypeError = globalThis.TypeError; + var WeakMap = globalThis.WeakMap; + var set, get, has; + + var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); + }; + + var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; + }; + + if (NATIVE_WEAK_MAP || shared.state) { + var store = shared.state || (shared.state = new WeakMap()); + /* eslint-disable no-self-assign -- prototype methods protection */ + store.get = store.get; + store.has = store.has; + store.set = store.set; + /* eslint-enable no-self-assign -- prototype methods protection */ + set = function (it, metadata) { + if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function (it) { + return store.get(it) || {}; + }; + has = function (it) { + return store.has(it); + }; + } else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn(it, STATE); + }; + } + + internalState = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + return internalState; + } + + var hasRequiredMakeBuiltIn; + + function requireMakeBuiltIn () { + if (hasRequiredMakeBuiltIn) return makeBuiltIn.exports; + hasRequiredMakeBuiltIn = 1; + var uncurryThis = requireFunctionUncurryThis(); + var fails = requireFails(); + var isCallable = requireIsCallable(); + var hasOwn = requireHasOwnProperty(); + var DESCRIPTORS = requireDescriptors(); + var CONFIGURABLE_FUNCTION_NAME = requireFunctionName().CONFIGURABLE; + var inspectSource = requireInspectSource(); + var InternalStateModule = requireInternalState(); + + var enforceInternalState = InternalStateModule.enforce; + var getInternalState = InternalStateModule.get; + var $String = String; + // eslint-disable-next-line es/no-object-defineproperty -- safe + var defineProperty = Object.defineProperty; + var stringSlice = uncurryThis(''.slice); + var replace = uncurryThis(''.replace); + var join = uncurryThis([].join); + + var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () { + return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8; + }); + + var TEMPLATE = String(String).split('String'); + + var makeBuiltIn$1 = makeBuiltIn.exports = function (value, name, options) { + if (stringSlice($String(name), 0, 7) === 'Symbol(') { + name = '[' + replace($String(name), /^Symbol\(([^)]*)\).*$/, '$1') + ']'; + } + if (options && options.getter) name = 'get ' + name; + if (options && options.setter) name = 'set ' + name; + if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { + if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true }); + else value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) { + defineProperty(value, 'length', { value: options.arity }); + } + try { + if (options && hasOwn(options, 'constructor') && options.constructor) { + if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false }); + // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable + } else if (value.prototype) value.prototype = undefined; + } catch (error) { /* empty */ } + var state = enforceInternalState(value); + if (!hasOwn(state, 'source')) { + state.source = join(TEMPLATE, typeof name == 'string' ? name : ''); + } return value; + }; + + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + // eslint-disable-next-line no-extend-native -- required + Function.prototype.toString = makeBuiltIn$1(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); + }, 'toString'); + return makeBuiltIn.exports; + } + + var defineBuiltIn; + var hasRequiredDefineBuiltIn; + + function requireDefineBuiltIn () { + if (hasRequiredDefineBuiltIn) return defineBuiltIn; + hasRequiredDefineBuiltIn = 1; + var isCallable = requireIsCallable(); + var definePropertyModule = requireObjectDefineProperty(); + var makeBuiltIn = requireMakeBuiltIn(); + var defineGlobalProperty = requireDefineGlobalProperty(); + + defineBuiltIn = function (O, key, value, options) { + if (!options) options = {}; + var simple = options.enumerable; + var name = options.name !== undefined ? options.name : key; + if (isCallable(value)) makeBuiltIn(value, name, options); + if (options.global) { + if (simple) O[key] = value; + else defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) delete O[key]; + else if (O[key]) simple = true; + } catch (error) { /* empty */ } + if (simple) O[key] = value; + else definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } return O; + }; + return defineBuiltIn; + } + + var objectGetOwnPropertyNames = {}; + + var mathTrunc; + var hasRequiredMathTrunc; + + function requireMathTrunc () { + if (hasRequiredMathTrunc) return mathTrunc; + hasRequiredMathTrunc = 1; + var ceil = Math.ceil; + var floor = Math.floor; + + // `Math.trunc` method + // https://tc39.es/ecma262/#sec-math.trunc + // eslint-disable-next-line es/no-math-trunc -- safe + mathTrunc = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); + }; + return mathTrunc; + } + + var toIntegerOrInfinity; + var hasRequiredToIntegerOrInfinity; + + function requireToIntegerOrInfinity () { + if (hasRequiredToIntegerOrInfinity) return toIntegerOrInfinity; + hasRequiredToIntegerOrInfinity = 1; + var trunc = requireMathTrunc(); + + // `ToIntegerOrInfinity` abstract operation + // https://tc39.es/ecma262/#sec-tointegerorinfinity + toIntegerOrInfinity = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number || number === 0 ? 0 : trunc(number); + }; + return toIntegerOrInfinity; + } + + var toAbsoluteIndex; + var hasRequiredToAbsoluteIndex; + + function requireToAbsoluteIndex () { + if (hasRequiredToAbsoluteIndex) return toAbsoluteIndex; + hasRequiredToAbsoluteIndex = 1; + var toIntegerOrInfinity = requireToIntegerOrInfinity(); + + var max = Math.max; + var min = Math.min; + + // Helper for a popular repeating case of the spec: + // Let integer be ? ToInteger(index). + // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). + toAbsoluteIndex = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + return toAbsoluteIndex; + } + + var toLength; + var hasRequiredToLength; + + function requireToLength () { + if (hasRequiredToLength) return toLength; + hasRequiredToLength = 1; + var toIntegerOrInfinity = requireToIntegerOrInfinity(); + + var min = Math.min; + + // `ToLength` abstract operation + // https://tc39.es/ecma262/#sec-tolength + toLength = function (argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 + }; + return toLength; + } + + var lengthOfArrayLike; + var hasRequiredLengthOfArrayLike; + + function requireLengthOfArrayLike () { + if (hasRequiredLengthOfArrayLike) return lengthOfArrayLike; + hasRequiredLengthOfArrayLike = 1; + var toLength = requireToLength(); + + // `LengthOfArrayLike` abstract operation + // https://tc39.es/ecma262/#sec-lengthofarraylike + lengthOfArrayLike = function (obj) { + return toLength(obj.length); + }; + return lengthOfArrayLike; + } + + var arrayIncludes; + var hasRequiredArrayIncludes; + + function requireArrayIncludes () { + if (hasRequiredArrayIncludes) return arrayIncludes; + hasRequiredArrayIncludes = 1; + var toIndexedObject = requireToIndexedObject(); + var toAbsoluteIndex = requireToAbsoluteIndex(); + var lengthOfArrayLike = requireLengthOfArrayLike(); + + // `Array.prototype.{ indexOf, includes }` methods implementation + var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el !== el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value !== value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; + }; + + arrayIncludes = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + return arrayIncludes; + } + + var objectKeysInternal; + var hasRequiredObjectKeysInternal; + + function requireObjectKeysInternal () { + if (hasRequiredObjectKeysInternal) return objectKeysInternal; + hasRequiredObjectKeysInternal = 1; + var uncurryThis = requireFunctionUncurryThis(); + var hasOwn = requireHasOwnProperty(); + var toIndexedObject = requireToIndexedObject(); + var indexOf = requireArrayIncludes().indexOf; + var hiddenKeys = requireHiddenKeys(); + + var push = uncurryThis([].push); + + objectKeysInternal = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; + }; + return objectKeysInternal; + } + + var enumBugKeys; + var hasRequiredEnumBugKeys; + + function requireEnumBugKeys () { + if (hasRequiredEnumBugKeys) return enumBugKeys; + hasRequiredEnumBugKeys = 1; + // IE8- don't enum bug keys + enumBugKeys = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' + ]; + return enumBugKeys; + } + + var hasRequiredObjectGetOwnPropertyNames; + + function requireObjectGetOwnPropertyNames () { + if (hasRequiredObjectGetOwnPropertyNames) return objectGetOwnPropertyNames; + hasRequiredObjectGetOwnPropertyNames = 1; + var internalObjectKeys = requireObjectKeysInternal(); + var enumBugKeys = requireEnumBugKeys(); + + var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + // eslint-disable-next-line es/no-object-getownpropertynames -- safe + objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + return objectGetOwnPropertyNames; + } + + var objectGetOwnPropertySymbols = {}; + + var hasRequiredObjectGetOwnPropertySymbols; + + function requireObjectGetOwnPropertySymbols () { + if (hasRequiredObjectGetOwnPropertySymbols) return objectGetOwnPropertySymbols; + hasRequiredObjectGetOwnPropertySymbols = 1; + // eslint-disable-next-line es/no-object-getownpropertysymbols -- safe + objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols; + return objectGetOwnPropertySymbols; + } + + var ownKeys; + var hasRequiredOwnKeys; + + function requireOwnKeys () { + if (hasRequiredOwnKeys) return ownKeys; + hasRequiredOwnKeys = 1; + var getBuiltIn = requireGetBuiltIn(); + var uncurryThis = requireFunctionUncurryThis(); + var getOwnPropertyNamesModule = requireObjectGetOwnPropertyNames(); + var getOwnPropertySymbolsModule = requireObjectGetOwnPropertySymbols(); + var anObject = requireAnObject(); + + var concat = uncurryThis([].concat); + + // all object keys, includes non-enumerable and symbols + ownKeys = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; + }; + return ownKeys; + } + + var copyConstructorProperties; + var hasRequiredCopyConstructorProperties; + + function requireCopyConstructorProperties () { + if (hasRequiredCopyConstructorProperties) return copyConstructorProperties; + hasRequiredCopyConstructorProperties = 1; + var hasOwn = requireHasOwnProperty(); + var ownKeys = requireOwnKeys(); + var getOwnPropertyDescriptorModule = requireObjectGetOwnPropertyDescriptor(); + var definePropertyModule = requireObjectDefineProperty(); + + copyConstructorProperties = function (target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + return copyConstructorProperties; + } + + var isForced_1; + var hasRequiredIsForced; + + function requireIsForced () { + if (hasRequiredIsForced) return isForced_1; + hasRequiredIsForced = 1; + var fails = requireFails(); + var isCallable = requireIsCallable(); + + var replacement = /#|\.prototype\./; + + var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true + : value === NATIVE ? false + : isCallable(detection) ? fails(detection) + : !!detection; + }; + + var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); + }; + + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = 'N'; + var POLYFILL = isForced.POLYFILL = 'P'; + + isForced_1 = isForced; + return isForced_1; + } + + var _export; + var hasRequired_export; + + function require_export () { + if (hasRequired_export) return _export; + hasRequired_export = 1; + var globalThis = requireGlobalThis(); + var getOwnPropertyDescriptor = requireObjectGetOwnPropertyDescriptor().f; + var createNonEnumerableProperty = requireCreateNonEnumerableProperty(); + var defineBuiltIn = requireDefineBuiltIn(); + var defineGlobalProperty = requireDefineGlobalProperty(); + var copyConstructorProperties = requireCopyConstructorProperties(); + var isForced = requireIsForced(); + + /* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.dontCallGetSet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key + */ + _export = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = globalThis; + } else if (STATIC) { + target = globalThis[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = globalThis[TARGET] && globalThis[TARGET].prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + defineBuiltIn(target, key, sourceProperty, options); + } + }; + return _export; + } + + var isArray; + var hasRequiredIsArray; + + function requireIsArray () { + if (hasRequiredIsArray) return isArray; + hasRequiredIsArray = 1; + var classof = requireClassofRaw(); + + // `IsArray` abstract operation + // https://tc39.es/ecma262/#sec-isarray + // eslint-disable-next-line es/no-array-isarray -- safe + isArray = Array.isArray || function isArray(argument) { + return classof(argument) === 'Array'; + }; + return isArray; + } + + var doesNotExceedSafeInteger; + var hasRequiredDoesNotExceedSafeInteger; + + function requireDoesNotExceedSafeInteger () { + if (hasRequiredDoesNotExceedSafeInteger) return doesNotExceedSafeInteger; + hasRequiredDoesNotExceedSafeInteger = 1; + var $TypeError = TypeError; + var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991 + + doesNotExceedSafeInteger = function (it) { + if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded'); + return it; + }; + return doesNotExceedSafeInteger; + } + + var createProperty; + var hasRequiredCreateProperty; + + function requireCreateProperty () { + if (hasRequiredCreateProperty) return createProperty; + hasRequiredCreateProperty = 1; + var DESCRIPTORS = requireDescriptors(); + var definePropertyModule = requireObjectDefineProperty(); + var createPropertyDescriptor = requireCreatePropertyDescriptor(); + + createProperty = function (object, key, value) { + if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); + else object[key] = value; + }; + return createProperty; + } + + var toStringTagSupport; + var hasRequiredToStringTagSupport; + + function requireToStringTagSupport () { + if (hasRequiredToStringTagSupport) return toStringTagSupport; + hasRequiredToStringTagSupport = 1; + var wellKnownSymbol = requireWellKnownSymbol(); + + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + var test = {}; + + test[TO_STRING_TAG] = 'z'; + + toStringTagSupport = String(test) === '[object z]'; + return toStringTagSupport; + } + + var classof; + var hasRequiredClassof; + + function requireClassof () { + if (hasRequiredClassof) return classof; + hasRequiredClassof = 1; + var TO_STRING_TAG_SUPPORT = requireToStringTagSupport(); + var isCallable = requireIsCallable(); + var classofRaw = requireClassofRaw(); + var wellKnownSymbol = requireWellKnownSymbol(); + + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + var $Object = Object; + + // ES3 wrong here + var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; + + // fallback for IE11 Script Access Denied error + var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } + }; + + // getting tag from ES6+ `Object.prototype.toString` + classof = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result; + }; + return classof; + } + + var isConstructor; + var hasRequiredIsConstructor; + + function requireIsConstructor () { + if (hasRequiredIsConstructor) return isConstructor; + hasRequiredIsConstructor = 1; + var uncurryThis = requireFunctionUncurryThis(); + var fails = requireFails(); + var isCallable = requireIsCallable(); + var classof = requireClassof(); + var getBuiltIn = requireGetBuiltIn(); + var inspectSource = requireInspectSource(); + + var noop = function () { /* empty */ }; + var construct = getBuiltIn('Reflect', 'construct'); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec = uncurryThis(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + + var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } + }; + + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + } + try { + // we can't check .prototype since constructors produced by .bind haven't it + // `Function#toString` throws on some built-it function in some legacy engines + // (for example, `DOMQuad` and similar in FF41-) + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + + isConstructorLegacy.sham = true; + + // `IsConstructor` abstract operation + // https://tc39.es/ecma262/#sec-isconstructor + isConstructor = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; + }) ? isConstructorLegacy : isConstructorModern; + return isConstructor; + } + + var arraySpeciesConstructor; + var hasRequiredArraySpeciesConstructor; + + function requireArraySpeciesConstructor () { + if (hasRequiredArraySpeciesConstructor) return arraySpeciesConstructor; + hasRequiredArraySpeciesConstructor = 1; + var isArray = requireIsArray(); + var isConstructor = requireIsConstructor(); + var isObject = requireIsObject(); + var wellKnownSymbol = requireWellKnownSymbol(); + + var SPECIES = wellKnownSymbol('species'); + var $Array = Array; + + // a part of `ArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#sec-arrayspeciescreate + arraySpeciesConstructor = function (originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return C === undefined ? $Array : C; + }; + return arraySpeciesConstructor; + } + + var arraySpeciesCreate; + var hasRequiredArraySpeciesCreate; + + function requireArraySpeciesCreate () { + if (hasRequiredArraySpeciesCreate) return arraySpeciesCreate; + hasRequiredArraySpeciesCreate = 1; + var arraySpeciesConstructor = requireArraySpeciesConstructor(); + + // `ArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#sec-arrayspeciescreate + arraySpeciesCreate = function (originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + return arraySpeciesCreate; + } + + var arrayMethodHasSpeciesSupport; + var hasRequiredArrayMethodHasSpeciesSupport; + + function requireArrayMethodHasSpeciesSupport () { + if (hasRequiredArrayMethodHasSpeciesSupport) return arrayMethodHasSpeciesSupport; + hasRequiredArrayMethodHasSpeciesSupport = 1; + var fails = requireFails(); + var wellKnownSymbol = requireWellKnownSymbol(); + var V8_VERSION = requireEnvironmentV8Version(); + + var SPECIES = wellKnownSymbol('species'); + + arrayMethodHasSpeciesSupport = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION >= 51 || !fails(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + return arrayMethodHasSpeciesSupport; + } + + var hasRequiredEs_array_concat; + + function requireEs_array_concat () { + if (hasRequiredEs_array_concat) return es_array_concat; + hasRequiredEs_array_concat = 1; + var $ = require_export(); + var fails = requireFails(); + var isArray = requireIsArray(); + var isObject = requireIsObject(); + var toObject = requireToObject(); + var lengthOfArrayLike = requireLengthOfArrayLike(); + var doesNotExceedSafeInteger = requireDoesNotExceedSafeInteger(); + var createProperty = requireCreateProperty(); + var arraySpeciesCreate = requireArraySpeciesCreate(); + var arrayMethodHasSpeciesSupport = requireArrayMethodHasSpeciesSupport(); + var wellKnownSymbol = requireWellKnownSymbol(); + var V8_VERSION = requireEnvironmentV8Version(); + + var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); + + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/679 + var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; + }); + + var isConcatSpreadable = function (O) { + if (!isObject(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray(O); + }; + + var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat'); + + // `Array.prototype.concat` method + // https://tc39.es/ecma262/#sec-array.prototype.concat + // with adding support of @@isConcatSpreadable and @@species + $({ target: 'Array', proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + concat: function concat(arg) { + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike(E); + doesNotExceedSafeInteger(n + len); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + doesNotExceedSafeInteger(n + 1); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } + }); + return es_array_concat; + } + + requireEs_array_concat(); + + var es_object_assign = {}; + + var objectKeys; + var hasRequiredObjectKeys; + + function requireObjectKeys () { + if (hasRequiredObjectKeys) return objectKeys; + hasRequiredObjectKeys = 1; + var internalObjectKeys = requireObjectKeysInternal(); + var enumBugKeys = requireEnumBugKeys(); + + // `Object.keys` method + // https://tc39.es/ecma262/#sec-object.keys + // eslint-disable-next-line es/no-object-keys -- safe + objectKeys = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + return objectKeys; + } + + var objectAssign; + var hasRequiredObjectAssign; + + function requireObjectAssign () { + if (hasRequiredObjectAssign) return objectAssign; + hasRequiredObjectAssign = 1; + var DESCRIPTORS = requireDescriptors(); + var uncurryThis = requireFunctionUncurryThis(); + var call = requireFunctionCall(); + var fails = requireFails(); + var objectKeys = requireObjectKeys(); + var getOwnPropertySymbolsModule = requireObjectGetOwnPropertySymbols(); + var propertyIsEnumerableModule = requireObjectPropertyIsEnumerable(); + var toObject = requireToObject(); + var IndexedObject = requireIndexedObject(); + + // eslint-disable-next-line es/no-object-assign -- safe + var $assign = Object.assign; + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + var defineProperty = Object.defineProperty; + var concat = uncurryThis([].concat); + + // `Object.assign` method + // https://tc39.es/ecma262/#sec-object.assign + objectAssign = !$assign || fails(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', { + enumerable: true, + get: function () { + defineProperty(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line es/no-symbol -- safe + var symbol = Symbol('assign detection'); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet; + }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + while (argumentsLength > index) { + var S = IndexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } return T; + } : $assign; + return objectAssign; + } + + var hasRequiredEs_object_assign; + + function requireEs_object_assign () { + if (hasRequiredEs_object_assign) return es_object_assign; + hasRequiredEs_object_assign = 1; + var $ = require_export(); + var assign = requireObjectAssign(); + + // `Object.assign` method + // https://tc39.es/ecma262/#sec-object.assign + // eslint-disable-next-line es/no-object-assign -- required for testing + $({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, { + assign: assign + }); + return es_object_assign; + } + + requireEs_object_assign(); + + /** + * Bootstrap Table Afrikaans translation + * Author: Phillip Kruger + */ + + $.fn.bootstrapTable.locales['af-ZA'] = $.fn.bootstrapTable.locales['af'] = { + formatCopyRows: function formatCopyRows() { + return 'Kopieer lyne'; + }, + formatPrint: function formatPrint() { + return 'Druk uit'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Laai tans'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " re\xEBls per bladsy"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Wys ".concat(pageFrom, " tot ").concat(pageTo, " van ").concat(totalRows, " lyne (gefiltreer vanaf ").concat(totalNotFiltered, " lyne)"); + } + return "Wys ".concat(pageFrom, " tot ").concat(pageTo, " van ").concat(totalRows, " lyne"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'vorige bladsy'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "na bladsy ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'volgende bladsy'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "".concat(totalRows, "-re\xEBl vertoon"); + }, + formatClearSearch: function formatClearSearch() { + return 'Duidelike soektog'; + }, + formatSearch: function formatSearch() { + return 'Navorsing'; + }, + formatNoMatches: function formatNoMatches() { + return 'Geen resultate nie'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Versteek/Wys paginasie'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Wys paginasie'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Versteek paginasie'; + }, + formatRefresh: function formatRefresh() { + return 'Verfris'; + }, + formatToggleOn: function formatToggleOn() { + return 'Wys kaartaansig'; + }, + formatToggleOff: function formatToggleOff() { + return 'Versteek kaartaansig'; + }, + formatColumns: function formatColumns() { + return 'Kolomme'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Wys alles'; + }, + formatFullscreen: function formatFullscreen() { + return 'Volskerm'; + }, + formatAllRows: function formatAllRows() { + return 'Alles'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Verfris outomaties'; + }, + formatExport: function formatExport() { + return 'Voer data uit'; + }, + formatJumpTo: function formatJumpTo() { + return 'Gaan na'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Gevorderde soektog'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Maak'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Versteek/Wys kontroles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Versteek kontroles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Wys kontroles'; + }, + formatToggleCustomViewOn: function formatToggleCustomViewOn() { + return 'Wys pasgemaakte aansig'; + }, + formatToggleCustomViewOff: function formatToggleCustomViewOff() { + return 'Versteek pasgemaakte aansig'; + }, + formatClearFilters: function formatClearFilters() { + return 'Verwyder filters'; + }, + formatAddLevel: function formatAddLevel() { + return 'Voeg \'n vlak by'; + }, + formatCancel: function formatCancel() { + return 'Kanselleer'; + }, + formatColumn: function formatColumn() { + return 'Kolom'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Vee \'n vlak uit'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Duplikaatinskrywings is gevind!'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Verwyder of wysig asseblief duplikaatinskrywings'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Multi-sorteer'; + }, + formatOrder: function formatOrder() { + return 'Bestelling'; + }, + formatSort: function formatSort() { + return 'Rangskik'; + }, + formatSortBy: function formatSortBy() { + return 'Sorteer volgens'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Stygende', + desc: 'Dalende' + }; + }, + formatThenBy: function formatThenBy() { + return 'Dan deur'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['af-ZA']); + + /** + * Bootstrap Table Arabic translation + * Author: Othman Ali Modaes + */ + + $.fn.bootstrapTable.locales['ar-SA'] = $.fn.bootstrapTable.locales['ar'] = { + formatCopyRows: function formatCopyRows() { + return 'نسخ الصفوف'; + }, + formatPrint: function formatPrint() { + return 'طباعة'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'جارٍ التحميل، يرجى الانتظار...'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u0635\u0641 \u0644\u0643\u0644 \u0635\u0641\u062D\u0629"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u0627\u0644\u0638\u0627\u0647\u0631 ".concat(pageFrom, " \u0625\u0644\u0649 ").concat(pageTo, " \u0645\u0646 ").concat(totalRows, " \u0633\u062C\u0644 ").concat(totalNotFiltered, " \u0625\u062C\u0645\u0627\u0644\u064A \u0627\u0644\u0635\u0641\u0648\u0641)"); + } + return "\u0627\u0644\u0638\u0627\u0647\u0631 ".concat(pageFrom, " \u0625\u0644\u0649 ").concat(pageTo, " \u0645\u0646 ").concat(totalRows, " \u0633\u062C\u0644"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'الصفحة السابقة'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "\u0625\u0644\u0649 \u0627\u0644\u0635\u0641\u062D\u0629 ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'الصفحة التالية'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "\u0639\u0631\u0636 ".concat(totalRows, " \u0623\u0639\u0645\u062F\u0629"); + }, + formatClearSearch: function formatClearSearch() { + return 'مسح مربع البحث'; + }, + formatSearch: function formatSearch() { + return 'بحث'; + }, + formatNoMatches: function formatNoMatches() { + return 'لا توجد نتائج مطابقة للبحث'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + /* eslint-disable no-useless-escape */ + return 'إخفاء/إظهار ترقيم الصفحات'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'إظهار ترقيم الصفحات'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'إخفاء ترقيم الصفحات'; + }, + formatRefresh: function formatRefresh() { + return 'تحديث'; + }, + formatToggleOn: function formatToggleOn() { + return 'إظهار كبطاقات'; + }, + formatToggleOff: function formatToggleOff() { + return 'إلغاء البطاقات'; + }, + formatColumns: function formatColumns() { + return 'أعمدة'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'تبديل الكل'; + }, + formatFullscreen: function formatFullscreen() { + return 'الشاشة كاملة'; + }, + formatAllRows: function formatAllRows() { + return 'الكل'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'تحديث تلقائي'; + }, + formatExport: function formatExport() { + return 'تصدير البيانات'; + }, + formatJumpTo: function formatJumpTo() { + return 'قفز'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'بحث متقدم'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'إغلاق'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'عرض/إخفاء عناصر التصفية'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'إخفاء عناصر التصفية'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'عرض عناصر التصفية'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ar-SA']); + + /** + * Bootstrap Table danish translation + * Author: Your Name Jan Borup Coyle, github@coyle.dk + */ + + $.fn.bootstrapTable.locales['da-DK'] = $.fn.bootstrapTable.locales['da'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Indlæser, vent venligst'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " poster pr side"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Viser ".concat(pageFrom, " til ").concat(pageTo, " af ").concat(totalRows, " r\xE6kke").concat(totalRows > 1 ? 'r' : '', " (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Viser ".concat(pageFrom, " til ").concat(pageTo, " af ").concat(totalRows, " r\xE6kke").concat(totalRows > 1 ? 'r' : ''); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Viser ".concat(totalRows, " r\xE6kke").concat(totalRows > 1 ? 'r' : ''); + }, + formatClearSearch: function formatClearSearch() { + return 'Ryd filtre'; + }, + formatSearch: function formatSearch() { + return 'Søg'; + }, + formatNoMatches: function formatNoMatches() { + return 'Ingen poster fundet'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Skjul/vis nummerering'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Opdater'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Kolonner'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Alle'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Eksporter'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['da-DK']); + + /** + * Bootstrap Table Bulgarian translation + * Author: Mikhail Kalatchev + */ + + $.fn.bootstrapTable.locales['bg-BG'] = $.fn.bootstrapTable.locales['bg'] = { + formatCopyRows: function formatCopyRows() { + return 'Копиране на редове'; + }, + formatPrint: function formatPrint() { + return 'Печат'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Зареждане, моля изчакайте'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u0440\u0435\u0434\u0430 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u041F\u043E\u043A\u0430\u0437\u0430\u043D\u0438 \u0440\u0435\u0434\u043E\u0432\u0435 \u043E\u0442 ".concat(pageFrom, " \u0434\u043E ").concat(pageTo, " \u043E\u0442 ").concat(totalRows, " (\u0444\u0438\u043B\u0442\u0440\u0438\u0440\u0430\u043D\u0438 \u043E\u0442 \u043E\u0431\u0449\u043E ").concat(totalNotFiltered, ")"); + } + return "\u041F\u043E\u043A\u0430\u0437\u0430\u043D\u0438 \u0440\u0435\u0434\u043E\u0432\u0435 \u043E\u0442 ".concat(pageFrom, " \u0434\u043E ").concat(pageTo, " \u043E\u0442 \u043E\u0431\u0449\u043E ").concat(totalRows); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'предишна страница'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "\u0434\u043E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'следваща страница'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "\u041F\u043E\u043A\u0430\u0437\u0430\u043D\u0438 ".concat(totalRows, " \u0440\u0435\u0434\u0430"); + }, + formatClearSearch: function formatClearSearch() { + return 'Изчистване на търсенето'; + }, + formatSearch: function formatSearch() { + return 'Търсене'; + }, + formatNoMatches: function formatNoMatches() { + return 'Не са намерени съвпадащи записи'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Скриване/Показване на странициране'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Показване на странициране'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Скриване на странициране'; + }, + formatRefresh: function formatRefresh() { + return 'Обновяване'; + }, + formatToggleOn: function formatToggleOn() { + return 'Показване на изглед карта'; + }, + formatToggleOff: function formatToggleOff() { + return 'Скриване на изглед карта'; + }, + formatColumns: function formatColumns() { + return 'Колони'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Превключване на всички'; + }, + formatFullscreen: function formatFullscreen() { + return 'Цял екран'; + }, + formatAllRows: function formatAllRows() { + return 'Всички'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Автоматично обновяване'; + }, + formatExport: function formatExport() { + return 'Експорт на данни'; + }, + formatJumpTo: function formatJumpTo() { + return 'ОТИДИ'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Разширено търсене'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Затваряне'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Скрива/показва контроли'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Скрива контроли'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Показва контроли'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['bg-BG']); + + /** + * Bootstrap Table German translation + * Author: Paul Mohr - Sopamo + */ + + $.fn.bootstrapTable.locales['de-DE'] = $.fn.bootstrapTable.locales['de'] = { + formatCopyRows: function formatCopyRows() { + return 'Zeilen kopieren'; + }, + formatPrint: function formatPrint() { + return 'Drucken'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Lade, bitte warten'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " Zeilen pro Seite."); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Zeige Zeile ".concat(pageFrom, " bis ").concat(pageTo, " von ").concat(totalRows, " Zeile").concat(totalRows > 1 ? 'n' : '', " (Gefiltert von ").concat(totalNotFiltered, " Zeile").concat(totalNotFiltered > 1 ? 'n' : '', ")"); + } + return "Zeige Zeile ".concat(pageFrom, " bis ").concat(pageTo, " von ").concat(totalRows, " Zeile").concat(totalRows > 1 ? 'n' : '', "."); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'Vorherige Seite'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "Zu Seite ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'Nächste Seite'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Zeige ".concat(totalRows, " Zeile").concat(totalRows > 1 ? 'n' : '', "."); + }, + formatClearSearch: function formatClearSearch() { + return 'Lösche Filter'; + }, + formatSearch: function formatSearch() { + return 'Suchen'; + }, + formatNoMatches: function formatNoMatches() { + return 'Keine passenden Ergebnisse gefunden'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Verstecke/Zeige Nummerierung'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Zeige Nummerierung'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Verstecke Nummerierung'; + }, + formatRefresh: function formatRefresh() { + return 'Neu laden'; + }, + formatToggleOn: function formatToggleOn() { + return 'Normale Ansicht'; + }, + formatToggleOff: function formatToggleOff() { + return 'Kartenansicht'; + }, + formatColumns: function formatColumns() { + return 'Spalten'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Alle umschalten'; + }, + formatFullscreen: function formatFullscreen() { + return 'Vollbild'; + }, + formatAllRows: function formatAllRows() { + return 'Alle'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Automatisches Neuladen'; + }, + formatExport: function formatExport() { + return 'Datenexport'; + }, + formatJumpTo: function formatJumpTo() { + return 'Springen'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Erweiterte Suche'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Schließen'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Verstecke/Zeige Filter'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Verstecke Filter'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Zeige Filter'; + }, + formatAddLevel: function formatAddLevel() { + return 'Ebene hinzufügen'; + }, + formatCancel: function formatCancel() { + return 'Abbrechen'; + }, + formatColumn: function formatColumn() { + return 'Spalte'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Ebene entfernen'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Doppelte Einträge gefunden!'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Bitte doppelte Spalten entfenen oder ändern'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Mehrfachsortierung'; + }, + formatOrder: function formatOrder() { + return 'Reihenfolge'; + }, + formatSort: function formatSort() { + return 'Sortieren'; + }, + formatSortBy: function formatSortBy() { + return 'Sortieren nach'; + }, + formatThenBy: function formatThenBy() { + return 'anschließend'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Aufsteigend', + desc: 'Absteigend' + }; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['de-DE']); + + /** + * Bootstrap Table Greek translation + * Author: giannisdallas + */ + + $.fn.bootstrapTable.locales['el-GR'] = $.fn.bootstrapTable.locales['el'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Φορτώνει, παρακαλώ περιμένετε'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03B1\u03BD\u03AC \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD ".concat(pageFrom, " \u03C9\u03C2 \u03C4\u03B7\u03BD ").concat(pageTo, " \u03B1\u03C0\u03CC \u03C3\u03CD\u03BD\u03BF\u03BB\u03BF ").concat(totalRows, " \u03C3\u03B5\u03B9\u03C1\u03CE\u03BD (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "\u0395\u03BC\u03C6\u03B1\u03BD\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD ".concat(pageFrom, " \u03C9\u03C2 \u03C4\u03B7\u03BD ").concat(pageTo, " \u03B1\u03C0\u03CC \u03C3\u03CD\u03BD\u03BF\u03BB\u03BF ").concat(totalRows, " \u03C3\u03B5\u03B9\u03C1\u03CE\u03BD"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Αναζητήστε'; + }, + formatNoMatches: function formatNoMatches() { + return 'Δεν βρέθηκαν αποτελέσματα'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Hide/Show pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Refresh'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Columns'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'All'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['el-GR']); + + /** + * Bootstrap Table Czech translation + * Author: Lukas Kral (monarcha@seznam.cz) + * Author: Jakub Svestka + */ + + $.fn.bootstrapTable.locales['cs-CZ'] = $.fn.bootstrapTable.locales['cs'] = { + formatCopyRows: function formatCopyRows() { + return 'Kopírovat řádky'; + }, + formatPrint: function formatPrint() { + return 'Tisk'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Čekejte, prosím'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " polo\u017Eek na str\xE1nku"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Zobrazena ".concat(pageFrom, ". - ").concat(pageTo, " . polo\u017Eka z celkov\xFDch ").concat(totalRows, " (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Zobrazena ".concat(pageFrom, ". - ").concat(pageTo, " . polo\u017Eka z celkov\xFDch ").concat(totalRows); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'předchozí strana'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "na stranu ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'další strana'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Zobrazuji ".concat(totalRows, " \u0159\xE1dek"); + }, + formatClearSearch: function formatClearSearch() { + return 'Smazat hledání'; + }, + formatSearch: function formatSearch() { + return 'Vyhledávání'; + }, + formatNoMatches: function formatNoMatches() { + return 'Nenalezena žádná vyhovující položka'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Skrýt/Zobrazit stránkování'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Zobrazit stránkování'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Skrýt stránkování'; + }, + formatRefresh: function formatRefresh() { + return 'Aktualizovat'; + }, + formatToggleOn: function formatToggleOn() { + return 'Zobrazit karty'; + }, + formatToggleOff: function formatToggleOff() { + return 'Zobrazit tabulku'; + }, + formatColumns: function formatColumns() { + return 'Sloupce'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Zobrazit/Skrýt vše'; + }, + formatFullscreen: function formatFullscreen() { + return 'Zapnout/Vypnout fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Vše'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Automatické obnovení'; + }, + formatExport: function formatExport() { + return 'Export dat'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Pokročilé hledání'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Zavřít'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Skrýt/Zobrazit ovladače'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Skrýt ovladače'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Zobrazit ovladače'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['cs-CZ']); + + /** + * Bootstrap Table English translation + * Author: Zhixin Wen + */ + + $.fn.bootstrapTable.locales['en-US'] = $.fn.bootstrapTable.locales['en'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Loading, please wait'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " rows per page"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Showing ".concat(pageFrom, " to ").concat(pageTo, " of ").concat(totalRows, " rows (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Showing ".concat(pageFrom, " to ").concat(pageTo, " of ").concat(totalRows, " rows"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Search'; + }, + formatNoMatches: function formatNoMatches() { + return 'No matching records found'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Hide/Show pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Refresh'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Columns'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'All'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['en-US']); + + /** + * Bootstrap Table Spanish (Argentina) translation + * Author: Felix Vera (felix.vera@gmail.com) + * Edited by: DarkThinking (https://github.com/DarkThinking) + */ + + $.fn.bootstrapTable.locales['es-AR'] = { + formatCopyRows: function formatCopyRows() { + return 'Copiar Filas'; + }, + formatPrint: function formatPrint() { + return 'Imprimir'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Cargando, espere por favor'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " registros por p\xE1gina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Mostrando desde ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas (filtrado de ").concat(totalNotFiltered, " columnas totales)"); + } + return "Mostrando desde ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'página anterior'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "a la p\xE1gina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'siguiente página'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Mostrando ".concat(totalRows, " columnas"); + }, + formatClearSearch: function formatClearSearch() { + return 'Limpiar búsqueda'; + }, + formatSearch: function formatSearch() { + return 'Buscar'; + }, + formatNoMatches: function formatNoMatches() { + return 'No se encontraron registros'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Ocultar/Mostrar paginación'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Mostrar paginación'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Ocultar paginación'; + }, + formatRefresh: function formatRefresh() { + return 'Recargar'; + }, + formatToggleOn: function formatToggleOn() { + return 'Mostrar vista de carta'; + }, + formatToggleOff: function formatToggleOff() { + return 'Ocultar vista de carta'; + }, + formatColumns: function formatColumns() { + return 'Columnas'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Cambiar todo'; + }, + formatFullscreen: function formatFullscreen() { + return 'Pantalla completa'; + }, + formatAllRows: function formatAllRows() { + return 'Todo'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Recargar'; + }, + formatExport: function formatExport() { + return 'Exportar datos'; + }, + formatJumpTo: function formatJumpTo() { + return 'Ir'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Búsqueda avanzada'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Cerrar'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Ocultar/Mostrar controles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Ocultar controles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Mostrar controles'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-AR']); + + /** + * Traducción de librería Bootstrap Table a Español (Chile) + * @author Brian Álvarez Azócar + * email brianalvarezazocar@gmail.com + */ + + $.fn.bootstrapTable.locales['es-CL'] = { + formatCopyRows: function formatCopyRows() { + return 'Copiar Filas'; + }, + formatPrint: function formatPrint() { + return 'Imprimir'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Cargando, espere por favor'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " filas por p\xE1gina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas (filtrado de ").concat(totalNotFiltered, " filas totales)"); + } + return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'página anterior'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "a la p\xE1gina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'siguiente página'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Mostrando ".concat(totalRows, " filas"); + }, + formatClearSearch: function formatClearSearch() { + return 'Limpiar búsqueda'; + }, + formatSearch: function formatSearch() { + return 'Buscar'; + }, + formatNoMatches: function formatNoMatches() { + return 'No se encontraron registros'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Ocultar/Mostrar paginación'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Mostrar paginación'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Ocultar paginación'; + }, + formatRefresh: function formatRefresh() { + return 'Refrescar'; + }, + formatToggleOn: function formatToggleOn() { + return 'Mostrar vista de carta'; + }, + formatToggleOff: function formatToggleOff() { + return 'Ocultar vista de carta'; + }, + formatColumns: function formatColumns() { + return 'Columnas'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Cambiar todo'; + }, + formatFullscreen: function formatFullscreen() { + return 'Pantalla completa'; + }, + formatAllRows: function formatAllRows() { + return 'Todo'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Recargar'; + }, + formatExport: function formatExport() { + return 'Exportar datos'; + }, + formatJumpTo: function formatJumpTo() { + return 'IR'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Búsqueda avanzada'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Cerrar'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Ocultar/Mostrar controles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Ocultar controles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Mostrar controles'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-CL']); + + /** + * Bootstrap Table Spanish (Costa Rica) translation + * Author: Dennis Hernández + * Review: Jei (@jeijei4) (20/Oct/2022) + */ + + $.fn.bootstrapTable.locales['es-CR'] = { + formatCopyRows: function formatCopyRows() { + return 'Copiar filas'; + }, + formatPrint: function formatPrint() { + return 'Imprimir'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Cargando, por favor espere'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " filas por p\xE1gina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas (filtrado de un total de ").concat(totalNotFiltered, " filas)"); + } + return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'página anterior'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "ir a la p\xE1gina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'página siguiente'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Mostrando ".concat(totalRows, " filas"); + }, + formatClearSearch: function formatClearSearch() { + return 'Limpiar búsqueda'; + }, + formatSearch: function formatSearch() { + return 'Buscar'; + }, + formatNoMatches: function formatNoMatches() { + return 'No se encontraron resultados'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Mostrar/ocultar paginación'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Mostrar paginación'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Ocultar paginación'; + }, + formatRefresh: function formatRefresh() { + return 'Actualizar'; + }, + formatToggleOn: function formatToggleOn() { + return 'Mostrar vista en tarjetas'; + }, + formatToggleOff: function formatToggleOff() { + return 'Ocultar vista en tarjetas'; + }, + formatColumns: function formatColumns() { + return 'Columnas'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Alternar todo'; + }, + formatFullscreen: function formatFullscreen() { + return 'Pantalla completa'; + }, + formatAllRows: function formatAllRows() { + return 'Todas las filas'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Actualización automática'; + }, + formatExport: function formatExport() { + return 'Exportar'; + }, + formatJumpTo: function formatJumpTo() { + return 'Ver'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Búsqueda avanzada'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Cerrar'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Mostrar/ocultar controles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Ocultar controles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Mostrar controles'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-CR']); + + /** + * Bootstrap Table Spanish Spain translation + * Author: Marc Pina + * Update: @misteregis + */ + + $.fn.bootstrapTable.locales['es-ES'] = $.fn.bootstrapTable.locales['es'] = { + formatCopyRows: function formatCopyRows() { + return 'Copiar filas'; + }, + formatPrint: function formatPrint() { + return 'Imprimir'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Cargando, por favor espere'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " resultados por p\xE1gina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + var plural = totalRows > 1 ? 's' : ''; + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Mostrando desde ".concat(pageFrom, " hasta ").concat(pageTo, " - En total ").concat(totalRows, " resultado").concat(plural, " (filtrado de un total de ").concat(totalNotFiltered, " fila").concat(plural, ")"); + } + return "Mostrando desde ".concat(pageFrom, " hasta ").concat(pageTo, " - En total ").concat(totalRows, " resultado").concat(plural); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'página anterior'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "a la p\xE1gina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'siguiente página'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Mostrando ".concat(totalRows, " fila").concat(totalRows > 1 ? 's' : ''); + }, + formatClearSearch: function formatClearSearch() { + return 'Limpiar búsqueda'; + }, + formatSearch: function formatSearch() { + return 'Buscar'; + }, + formatNoMatches: function formatNoMatches() { + return 'No se encontraron resultados coincidentes'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Ocultar/Mostrar paginación'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Mostrar paginación'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Ocultar paginación'; + }, + formatRefresh: function formatRefresh() { + return 'Recargar'; + }, + formatToggleOn: function formatToggleOn() { + return 'Mostrar vista de carta'; + }, + formatToggleOff: function formatToggleOff() { + return 'Ocultar vista de carta'; + }, + formatColumns: function formatColumns() { + return 'Columnas'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Cambiar todo'; + }, + formatFullscreen: function formatFullscreen() { + return 'Pantalla completa'; + }, + formatAllRows: function formatAllRows() { + return 'Todos'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Recargar'; + }, + formatExport: function formatExport() { + return 'Exportar los datos'; + }, + formatJumpTo: function formatJumpTo() { + return 'IR'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Búsqueda avanzada'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Cerrar'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Ocultar/Exibir controles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Ocultar controles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Mostrar controles'; + }, + formatAddLevel: function formatAddLevel() { + return 'Agregar nivel'; + }, + formatCancel: function formatCancel() { + return 'Cancelar'; + }, + formatColumn: function formatColumn() { + return 'Columna'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Eliminar nivel'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return '¡Se encontraron entradas duplicadas!'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Por favor, elimine o modifique las columnas duplicadas'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Ordenación múltiple'; + }, + formatOrder: function formatOrder() { + return 'Orden'; + }, + formatSort: function formatSort() { + return 'Ordenar'; + }, + formatSortBy: function formatSortBy() { + return 'Ordenar por'; + }, + formatThenBy: function formatThenBy() { + return 'a continuación'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Ascendente', + desc: 'Descendente' + }; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-ES']); + + /** + * Bootstrap Table Spanish (México) translation (Obtenido de traducción de Argentina) + * Author: Felix Vera (felix.vera@gmail.com) + * Copiado: Mauricio Vera (mauricioa.vera@gmail.com) + * Revisión: J Manuel Corona (jmcg92@gmail.com) (13/Feb/2018). + * Revisión: Ricardo González (rickygzz85@gmail.com) (20/Oct/2021) + */ + + $.fn.bootstrapTable.locales['es-MX'] = { + formatCopyRows: function formatCopyRows() { + return 'Copiar Filas'; + }, + formatPrint: function formatPrint() { + return 'Imprimir'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Cargando, espere por favor'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " resultados por p\xE1gina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas (filtrado de ").concat(totalNotFiltered, " filas totales)"); + } + return "Mostrando ".concat(pageFrom, " a ").concat(pageTo, " de ").concat(totalRows, " filas"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'página anterior'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "ir a la p\xE1gina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'página siguiente'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Mostrando ".concat(totalRows, " filas"); + }, + formatClearSearch: function formatClearSearch() { + return 'Limpiar búsqueda'; + }, + formatSearch: function formatSearch() { + return 'Buscar'; + }, + formatNoMatches: function formatNoMatches() { + return 'No se encontraron registros que coincidan'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Mostrar/ocultar paginación'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Mostrar paginación'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Ocultar paginación'; + }, + formatRefresh: function formatRefresh() { + return 'Actualizar'; + }, + formatToggleOn: function formatToggleOn() { + return 'Mostrar vista'; + }, + formatToggleOff: function formatToggleOff() { + return 'Ocultar vista'; + }, + formatColumns: function formatColumns() { + return 'Columnas'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Alternar todo'; + }, + formatFullscreen: function formatFullscreen() { + return 'Pantalla completa'; + }, + formatAllRows: function formatAllRows() { + return 'Todo'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto actualizar'; + }, + formatExport: function formatExport() { + return 'Exportar datos'; + }, + formatJumpTo: function formatJumpTo() { + return 'IR'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Búsqueda avanzada'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Cerrar'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Ocultar/Mostrar controles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Ocultar controles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Mostrar controles'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-MX']); + + /** + * Bootstrap Table Catalan translation + * Authors: Marc Pina + * Claudi Martinez + * Joan Puigcerver + */ + + $.fn.bootstrapTable.locales['ca-ES'] = $.fn.bootstrapTable.locales['ca'] = { + formatCopyRows: function formatCopyRows() { + return 'Copia resultats'; + }, + formatPrint: function formatPrint() { + return 'Imprimeix'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Espereu, si us plau'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " resultats per p\xE0gina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Mostrant resultats ".concat(pageFrom, " fins ").concat(pageTo, " - ").concat(totalRows, " resultats (filtrats d'un total de ").concat(totalNotFiltered, " resultats)"); + } + return "Mostrant resultats ".concat(pageFrom, " fins ").concat(pageTo, " - ").concat(totalRows, " resultats en total"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'Pàgina anterior'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "A la p\xE0gina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'Pàgina següent'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Mostrant ".concat(totalRows, " resultats"); + }, + formatClearSearch: function formatClearSearch() { + return 'Neteja cerca'; + }, + formatSearch: function formatSearch() { + return 'Cerca'; + }, + formatNoMatches: function formatNoMatches() { + return 'No s\'han trobat resultats'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Amaga/Mostra paginació'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Mostra paginació'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Amaga paginació'; + }, + formatRefresh: function formatRefresh() { + return 'Refresca'; + }, + formatToggleOn: function formatToggleOn() { + return 'Mostra vista de tarjeta'; + }, + formatToggleOff: function formatToggleOff() { + return 'Amaga vista de tarjeta'; + }, + formatColumns: function formatColumns() { + return 'Columnes'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Alterna totes'; + }, + formatFullscreen: function formatFullscreen() { + return 'Pantalla completa'; + }, + formatAllRows: function formatAllRows() { + return 'Tots'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresca'; + }, + formatExport: function formatExport() { + return 'Exporta dades'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Cerca avançada'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Tanca'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Mostra/Amaga controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Mostra controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Amaga controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ca-ES']); + + /** + * Bootstrap Table Spanish (Nicaragua) translation + * Author: Dennis Hernández + */ + + $.fn.bootstrapTable.locales['es-NI'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Cargando, por favor espere'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " registros por p\xE1gina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Mostrando de ".concat(pageFrom, " a ").concat(pageTo, " registros de ").concat(totalRows, " registros en total (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Mostrando de ".concat(pageFrom, " a ").concat(pageTo, " registros de ").concat(totalRows, " registros en total"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Limpiar búsqueda'; + }, + formatSearch: function formatSearch() { + return 'Buscar'; + }, + formatNoMatches: function formatNoMatches() { + return 'No se encontraron registros'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Hide/Show pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Refrescar'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Columnas'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Todo'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Ocultar/Mostrar controles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Ocultar controles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Mostrar controles'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-NI']); + + /** + * Bootstrap Table Spanish (España) translation + * Author: Antonio Pérez + */ + + $.fn.bootstrapTable.locales['es-SP'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Cargando, por favor espera'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " registros por página."); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "".concat(pageFrom, " - ").concat(pageTo, " de ").concat(totalRows, " registros (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "".concat(pageFrom, " - ").concat(pageTo, " de ").concat(totalRows, " registros."); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Limpiar búsqueda'; + }, + formatSearch: function formatSearch() { + return 'Buscar'; + }, + formatNoMatches: function formatNoMatches() { + return 'No se han encontrado registros.'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Hide/Show pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Actualizar'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Columnas'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Todo'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Ocultar/Mostrar controles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Ocultar controles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Mostrar controles'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['es-SP']); + + /** + * Bootstrap Table Estonian translation + * Author: kristjan@logist.it> + */ + + $.fn.bootstrapTable.locales['et-EE'] = $.fn.bootstrapTable.locales['et'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Päring käib, palun oota'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " rida lehe kohta"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "N\xE4itan tulemusi ".concat(pageFrom, " kuni ").concat(pageTo, " - kokku ").concat(totalRows, " tulemust (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "N\xE4itan tulemusi ".concat(pageFrom, " kuni ").concat(pageTo, " - kokku ").concat(totalRows, " tulemust"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Otsi'; + }, + formatNoMatches: function formatNoMatches() { + return 'Päringu tingimustele ei vastanud ühtegi tulemust'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Näita/Peida lehtedeks jagamine'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Värskenda'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Veerud'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Kõik'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['et-EE']); + + /** + * Bootstrap Table Basque (Basque Country) translation + * Author: Iker Ibarguren Berasaluze + */ + + $.fn.bootstrapTable.locales['eu-EU'] = $.fn.bootstrapTable.locales['eu'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Itxaron mesedez'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " emaitza orriko."); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "".concat(totalRows, " erregistroetatik ").concat(pageFrom, "etik ").concat(pageTo, "erakoak erakusten (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "".concat(totalRows, " erregistroetatik ").concat(pageFrom, "etik ").concat(pageTo, "erakoak erakusten."); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Bilatu'; + }, + formatNoMatches: function formatNoMatches() { + return 'Ez da emaitzarik aurkitu'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Ezkutatu/Erakutsi orrikatzea'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Eguneratu'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Zutabeak'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Guztiak'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['eu-EU']); + + /** + * Bootstrap Table Persian translation + * Author: MJ Vakili + */ + + $.fn.bootstrapTable.locales['fa-IR'] = $.fn.bootstrapTable.locales['fa'] = { + formatCopyRows: function formatCopyRows() { + return 'کپی ردیف ها'; + }, + formatPrint: function formatPrint() { + return 'پرینت'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'در حال بارگذاری, لطفا صبر کنید'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u0631\u06A9\u0648\u0631\u062F \u062F\u0631 \u0635\u0641\u062D\u0647"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u0646\u0645\u0627\u06CC\u0634 ".concat(pageFrom, " \u062A\u0627 ").concat(pageTo, " \u0627\u0632 ").concat(totalRows, " \u0631\u062F\u06CC\u0641 (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "\u0646\u0645\u0627\u06CC\u0634 ".concat(pageFrom, " \u062A\u0627 ").concat(pageTo, " \u0627\u0632 ").concat(totalRows, " \u0631\u062F\u06CC\u0641"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'صفحه قبلی'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "\u0628\u0647 \u0635\u0641\u062D\u0647 ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'صفحه بعدی'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "\u0646\u0645\u0627\u06CC\u0634 ".concat(totalRows, " \u0633\u0637\u0631\u0647\u0627"); + }, + formatClearSearch: function formatClearSearch() { + return 'پاک کردن جستجو'; + }, + formatSearch: function formatSearch() { + return 'جستجو'; + }, + formatNoMatches: function formatNoMatches() { + return 'رکوردی یافت نشد.'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'نمایش/مخفی صفحه بندی'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'نمایش صفحه بندی'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'پنهان کردن صفحه بندی'; + }, + formatRefresh: function formatRefresh() { + return 'به روز رسانی'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'سطر ها'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'تغییر وضعیت همه'; + }, + formatFullscreen: function formatFullscreen() { + return 'تمام صفحه'; + }, + formatAllRows: function formatAllRows() { + return 'همه'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'رفرش اتوماتیک'; + }, + formatExport: function formatExport() { + return 'خروجی دیتا'; + }, + formatJumpTo: function formatJumpTo() { + return 'برو'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'جستجوی پیشرفته'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'بستن'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'پنهان/نمایش دادن کنترل ها'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'پنهان کردن کنترل ها'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'نمایش کنترل ها'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fa-IR']); + + /** + * Bootstrap Table Finnish translations + * Author: Minna Lehtomäki + */ + + $.fn.bootstrapTable.locales['fi-FI'] = $.fn.bootstrapTable.locales['fi'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Ladataan, ole hyvä ja odota'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " rivi\xE4 sivulla"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "N\xE4ytet\xE4\xE4n rivit ".concat(pageFrom, " - ").concat(pageTo, " / ").concat(totalRows, " (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "N\xE4ytet\xE4\xE4n rivit ".concat(pageFrom, " - ").concat(pageTo, " / ").concat(totalRows); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Poista suodattimet'; + }, + formatSearch: function formatSearch() { + return 'Hae'; + }, + formatNoMatches: function formatNoMatches() { + return 'Hakuehtoja vastaavia tuloksia ei löytynyt'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Näytä/Piilota sivutus'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Päivitä'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Sarakkeet'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Kaikki'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Vie tiedot'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fi-FI']); + + /** + * Bootstrap Table French (Belgium) translation + * Author: Julien Bisconti (julien.bisconti@gmail.com) + * Nevets82 + */ + + $.fn.bootstrapTable.locales['fr-BE'] = { + formatCopyRows: function formatCopyRows() { + return 'Copier les lignes'; + }, + formatPrint: function formatPrint() { + return 'Imprimer'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Chargement en cours'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " lignes par page"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Affichage de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes (filtr\xE9es \xE0 partir de ").concat(totalNotFiltered, " lignes)"); + } + return "Affichage de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'page précédente'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "vers la page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'page suivante'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Affichage de ".concat(totalRows, " lignes"); + }, + formatClearSearch: function formatClearSearch() { + return 'Effacer la recherche'; + }, + formatSearch: function formatSearch() { + return 'Rechercher'; + }, + formatNoMatches: function formatNoMatches() { + return 'Aucun résultat'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Masquer/Afficher la pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Afficher la pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Masquer la pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Actualiser'; + }, + formatToggleOn: function formatToggleOn() { + return 'Afficher la vue en cartes'; + }, + formatToggleOff: function formatToggleOff() { + return 'Cacher la vue en cartes'; + }, + formatColumns: function formatColumns() { + return 'Colonnes'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Tout afficher'; + }, + formatFullscreen: function formatFullscreen() { + return 'Plein écran'; + }, + formatAllRows: function formatAllRows() { + return 'Tout'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Actualiser automatiquement'; + }, + formatExport: function formatExport() { + return 'Exporter'; + }, + formatJumpTo: function formatJumpTo() { + return 'Aller à'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Recherche avancée'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Fermer'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Masquer/Afficher les contrôles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Masquer les contrôles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Afficher les contrôles'; + }, + formatToggleCustomViewOn: function formatToggleCustomViewOn() { + return 'Afficher la vue personnalisée'; + }, + formatToggleCustomViewOff: function formatToggleCustomViewOff() { + return 'Cacher la vue personnalisée'; + }, + formatClearFilters: function formatClearFilters() { + return 'Retirer les filtres'; + }, + formatAddLevel: function formatAddLevel() { + return 'Ajouter un niveau'; + }, + formatCancel: function formatCancel() { + return 'Annuler'; + }, + formatColumn: function formatColumn() { + return 'Colonne'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Supprimer un niveau'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Des entrées en double ont été trouvées !'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Veuillez supprimer ou modifier les entrées en double'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Tri multiple'; + }, + formatOrder: function formatOrder() { + return 'Ordre'; + }, + formatSort: function formatSort() { + return 'Trier'; + }, + formatSortBy: function formatSortBy() { + return 'Trier par'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Ascendant', + desc: 'Descendant' + }; + }, + formatThenBy: function formatThenBy() { + return 'Puis par'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fr-BE']); + + /** + * Bootstrap Table French (Suisse) translation + * Author: Nevets82 + */ + + $.fn.bootstrapTable.locales['fr-CH'] = { + formatCopyRows: function formatCopyRows() { + return 'Copier les lignes'; + }, + formatPrint: function formatPrint() { + return 'Imprimer'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Chargement en cours'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " lignes par page"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Affichage de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes (filtr\xE9es \xE0 partir de ").concat(totalNotFiltered, " lignes)"); + } + return "Affichage de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'page précédente'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "vers la page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'page suivante'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Affichage de ".concat(totalRows, " lignes"); + }, + formatClearSearch: function formatClearSearch() { + return 'Effacer la recherche'; + }, + formatSearch: function formatSearch() { + return 'Rechercher'; + }, + formatNoMatches: function formatNoMatches() { + return 'Aucun résultat'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Masquer/Afficher la pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Afficher la pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Masquer la pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Actualiser'; + }, + formatToggleOn: function formatToggleOn() { + return 'Afficher la vue en cartes'; + }, + formatToggleOff: function formatToggleOff() { + return 'Cacher la vue en cartes'; + }, + formatColumns: function formatColumns() { + return 'Colonnes'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Tout afficher'; + }, + formatFullscreen: function formatFullscreen() { + return 'Plein écran'; + }, + formatAllRows: function formatAllRows() { + return 'Tout'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Actualiser automatiquement'; + }, + formatExport: function formatExport() { + return 'Exporter'; + }, + formatJumpTo: function formatJumpTo() { + return 'Aller à'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Recherche avancée'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Fermer'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Masquer/Afficher les contrôles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Masquer les contrôles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Afficher les contrôles'; + }, + formatToggleCustomViewOn: function formatToggleCustomViewOn() { + return 'Afficher la vue personnalisée'; + }, + formatToggleCustomViewOff: function formatToggleCustomViewOff() { + return 'Cacher la vue personnalisée'; + }, + formatClearFilters: function formatClearFilters() { + return 'Retirer les filtres'; + }, + formatAddLevel: function formatAddLevel() { + return 'Ajouter un niveau'; + }, + formatCancel: function formatCancel() { + return 'Annuler'; + }, + formatColumn: function formatColumn() { + return 'Colonne'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Supprimer un niveau'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Des entrées en double ont été trouvées !'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Veuillez supprimer ou modifier les entrées en double'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Tri multiple'; + }, + formatOrder: function formatOrder() { + return 'Ordre'; + }, + formatSort: function formatSort() { + return 'Trier'; + }, + formatSortBy: function formatSortBy() { + return 'Trier par'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Ascendant', + desc: 'Descendant' + }; + }, + formatThenBy: function formatThenBy() { + return 'Puis par'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fr-CH']); + + /** + * Bootstrap Table French (France) translation + * Author: Dennis Hernández + * Tidalf (https://github.com/TidalfFR) + * Nevets82 + */ + + $.fn.bootstrapTable.locales['fr-FR'] = $.fn.bootstrapTable.locales['fr'] = { + formatCopyRows: function formatCopyRows() { + return 'Copier les lignes'; + }, + formatPrint: function formatPrint() { + return 'Imprimer'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Chargement en cours'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " lignes par page"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Affichage de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes (filtr\xE9es \xE0 partir de ").concat(totalNotFiltered, " lignes)"); + } + return "Affichage de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'page précédente'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "vers la page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'page suivante'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Affichage de ".concat(totalRows, " lignes"); + }, + formatClearSearch: function formatClearSearch() { + return 'Effacer la recherche'; + }, + formatSearch: function formatSearch() { + return 'Rechercher'; + }, + formatNoMatches: function formatNoMatches() { + return 'Aucun résultat'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Masquer/Afficher la pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Afficher la pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Masquer la pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Actualiser'; + }, + formatToggleOn: function formatToggleOn() { + return 'Afficher la vue en cartes'; + }, + formatToggleOff: function formatToggleOff() { + return 'Cacher la vue en cartes'; + }, + formatColumns: function formatColumns() { + return 'Colonnes'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Tout afficher'; + }, + formatFullscreen: function formatFullscreen() { + return 'Plein écran'; + }, + formatAllRows: function formatAllRows() { + return 'Tout'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Actualiser automatiquement'; + }, + formatExport: function formatExport() { + return 'Exporter'; + }, + formatJumpTo: function formatJumpTo() { + return 'Aller à'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Recherche avancée'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Fermer'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Masquer/Afficher les contrôles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Masquer les contrôles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Afficher les contrôles'; + }, + formatToggleCustomViewOn: function formatToggleCustomViewOn() { + return 'Afficher la vue personnalisée'; + }, + formatToggleCustomViewOff: function formatToggleCustomViewOff() { + return 'Cacher la vue personnalisée'; + }, + formatClearFilters: function formatClearFilters() { + return 'Retirer les filtres'; + }, + formatAddLevel: function formatAddLevel() { + return 'Ajouter un niveau'; + }, + formatCancel: function formatCancel() { + return 'Annuler'; + }, + formatColumn: function formatColumn() { + return 'Colonne'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Supprimer un niveau'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Des entrées en double ont été trouvées !'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Veuillez supprimer ou modifier les entrées en double'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Tri multiple'; + }, + formatOrder: function formatOrder() { + return 'Ordre'; + }, + formatSort: function formatSort() { + return 'Trier'; + }, + formatSortBy: function formatSortBy() { + return 'Trier par'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Ascendant', + desc: 'Descendant' + }; + }, + formatThenBy: function formatThenBy() { + return 'Puis par'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fr-FR']); + + /** + * Bootstrap Table French (Luxembourg) translation + * Author: Nevets82 + * Editor: David Morais Ferreira (https://github.com/DavidMoraisFerreira/) + */ + + $.fn.bootstrapTable.locales['fr-LU'] = { + formatCopyRows: function formatCopyRows() { + return 'Copier les lignes'; + }, + formatPrint: function formatPrint() { + return 'Imprimer'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Chargement en cours'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " lignes par page"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Affichage de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes (filtr\xE9es \xE0 partir de ").concat(totalNotFiltered, " lignes)"); + } + return "Affichage de ".concat(pageFrom, " \xE0 ").concat(pageTo, " sur ").concat(totalRows, " lignes"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'page précédente'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "vers la page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'page suivante'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Affichage de ".concat(totalRows, " lignes"); + }, + formatClearSearch: function formatClearSearch() { + return 'Effacer la recherche'; + }, + formatSearch: function formatSearch() { + return 'Rechercher'; + }, + formatNoMatches: function formatNoMatches() { + return 'Aucun résultat'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Masquer/Afficher la pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Afficher la pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Masquer la pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Actualiser'; + }, + formatToggleOn: function formatToggleOn() { + return 'Afficher la vue en cartes'; + }, + formatToggleOff: function formatToggleOff() { + return 'Cacher la vue en cartes'; + }, + formatColumns: function formatColumns() { + return 'Colonnes'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Tout afficher'; + }, + formatFullscreen: function formatFullscreen() { + return 'Plein écran'; + }, + formatAllRows: function formatAllRows() { + return 'Tout'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Actualiser automatiquement'; + }, + formatExport: function formatExport() { + return 'Exporter'; + }, + formatJumpTo: function formatJumpTo() { + return 'Aller à'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Recherche avancée'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Fermer'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Masquer/Afficher les contrôles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Masquer les contrôles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Afficher les contrôles'; + }, + formatToggleCustomViewOn: function formatToggleCustomViewOn() { + return 'Afficher la vue personnalisée'; + }, + formatToggleCustomViewOff: function formatToggleCustomViewOff() { + return 'Cacher la vue personnalisée'; + }, + formatClearFilters: function formatClearFilters() { + return 'Retirer les filtres'; + }, + formatAddLevel: function formatAddLevel() { + return 'Ajouter un niveau'; + }, + formatCancel: function formatCancel() { + return 'Annuler'; + }, + formatColumn: function formatColumn() { + return 'Colonne'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Supprimer un niveau'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Des entrées en double ont été trouvées !'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Veuillez supprimer ou modifier les entrées en double'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Tri multiple'; + }, + formatOrder: function formatOrder() { + return 'Ordre'; + }, + formatSort: function formatSort() { + return 'Trier'; + }, + formatSortBy: function formatSortBy() { + return 'Trier par'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Ascendant', + desc: 'Descendant' + }; + }, + formatThenBy: function formatThenBy() { + return 'Puis par'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['fr-LU']); + + /** + * Bootstrap Table Hebrew translation + * Author: legshooter + */ + + $.fn.bootstrapTable.locales['he-IL'] = $.fn.bootstrapTable.locales['he'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'טוען, נא להמתין'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u05E9\u05D5\u05E8\u05D5\u05EA \u05D1\u05E2\u05DE\u05D5\u05D3"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u05DE\u05E6\u05D9\u05D2 ".concat(pageFrom, " \u05E2\u05D3 ").concat(pageTo, " \u05DE-").concat(totalRows, "\u05E9\u05D5\u05E8\u05D5\u05EA").concat(totalNotFiltered, " total rows)"); + } + return "\u05DE\u05E6\u05D9\u05D2 ".concat(pageFrom, " \u05E2\u05D3 ").concat(pageTo, " \u05DE-").concat(totalRows, " \u05E9\u05D5\u05E8\u05D5\u05EA"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'חיפוש'; + }, + formatNoMatches: function formatNoMatches() { + return 'לא נמצאו רשומות תואמות'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'הסתר/הצג מספור דפים'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'רענן'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'עמודות'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'הכל'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['he-IL']); + + /** + * Bootstrap Table Hindi translation + * Author: Saurabh Sharma + */ + + $.fn.bootstrapTable.locales['hi-IN'] = { + formatCopyRows: function formatCopyRows() { + return 'पंक्तियों की कॉपी करें'; + }, + formatPrint: function formatPrint() { + return 'प्रिंट'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'लोड हो रहा है कृपया प्रतीक्षा करें'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u092A\u094D\u0930\u0924\u093F \u092A\u0943\u0937\u094D\u0920 \u092A\u0902\u0915\u094D\u0924\u093F\u092F\u093E\u0901"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "".concat(pageFrom, " - ").concat(pageTo, " \u092A\u0915\u094D\u0924\u093F\u092F\u093E ").concat(totalRows, " \u092E\u0947\u0902 \u0938\u0947 ( ").concat(totalNotFiltered, " \u092A\u0915\u094D\u0924\u093F\u092F\u093E)"); + } + return "".concat(pageFrom, " - ").concat(pageTo, " \u092A\u0915\u094D\u0924\u093F\u092F\u093E ").concat(totalRows, " \u092E\u0947\u0902 \u0938\u0947"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'पिछला पृष्ठ'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "".concat(page, " \u092A\u0943\u0937\u094D\u0920 \u092A\u0930"); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'अगला पृष्ठ'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "".concat(totalRows, " \u092A\u0902\u0915\u094D\u0924\u093F\u092F\u093E\u0902"); + }, + formatClearSearch: function formatClearSearch() { + return 'सर्च क्लिअर करें'; + }, + formatSearch: function formatSearch() { + return 'सर्च'; + }, + formatNoMatches: function formatNoMatches() { + return 'मेल खाते रिकॉर्ड नही मिले'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'छुपाओ/दिखाओ पृष्ठ संख्या'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'दिखाओ पृष्ठ संख्या'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'छुपाओ पृष्ठ संख्या'; + }, + formatRefresh: function formatRefresh() { + return 'रिफ्रेश'; + }, + formatToggleOn: function formatToggleOn() { + return 'कार्ड दृश्य दिखाएं'; + }, + formatToggleOff: function formatToggleOff() { + return 'कार्ड दृश्य छुपाएं'; + }, + formatColumns: function formatColumns() { + return 'कॉलम'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'टॉगल आल'; + }, + formatFullscreen: function formatFullscreen() { + return 'पूर्ण स्क्रीन'; + }, + formatAllRows: function formatAllRows() { + return 'सब'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'ऑटो रिफ्रेश'; + }, + formatExport: function formatExport() { + return 'एक्सपोर्ट डाटा'; + }, + formatJumpTo: function formatJumpTo() { + return 'जाओ'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'एडवांस सर्च'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'बंद करे'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'छुपाओ/दिखाओ कंट्रोल्स'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'छुपाओ कंट्रोल्स'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'दिखाओ कंट्रोल्स'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['hi-IN']); + + /** + * Bootstrap Table Croatian translation + * Author: Petra Štrbenac (petra.strbenac@gmail.com) + * Author: Petra Štrbenac (petra.strbenac@gmail.com) + */ + + $.fn.bootstrapTable.locales['hr-HR'] = $.fn.bootstrapTable.locales['hr'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Molimo pričekajte'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " broj zapisa po stranici"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Prikazujem ".concat(pageFrom, ". - ").concat(pageTo, ". od ukupnog broja zapisa ").concat(totalRows, " (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Prikazujem ".concat(pageFrom, ". - ").concat(pageTo, ". od ukupnog broja zapisa ").concat(totalRows); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Pretraži'; + }, + formatNoMatches: function formatNoMatches() { + return 'Nije pronađen niti jedan zapis'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Prikaži/sakrij stranice'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Osvježi'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Kolone'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Sve'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['hr-HR']); + + /** + * Bootstrap Table Hungarian translation + * Author: Nagy Gergely + */ + + $.fn.bootstrapTable.locales['hu-HU'] = $.fn.bootstrapTable.locales['hu'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Betöltés, kérem várjon'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " rekord per oldal"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Megjelen\xEDtve ".concat(pageFrom, " - ").concat(pageTo, " / ").concat(totalRows, " \xF6sszesen (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Megjelen\xEDtve ".concat(pageFrom, " - ").concat(pageTo, " / ").concat(totalRows, " \xF6sszesen"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Keresés'; + }, + formatNoMatches: function formatNoMatches() { + return 'Nincs találat'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Lapozó elrejtése/megjelenítése'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Frissítés'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Oszlopok'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Összes'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['hu-HU']); + + /** + * Bootstrap Table Indonesian translation + * Author: Andre Gardiner + */ + + $.fn.bootstrapTable.locales['id-ID'] = $.fn.bootstrapTable.locales['id'] = { + formatCopyRows: function formatCopyRows() { + return 'Salin baris'; + }, + formatPrint: function formatPrint() { + return 'Mencetak'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Pemuatan sedang berlangsung'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " baris per halaman"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Menampilkan dari ".concat(pageFrom, " hingga ").concat(pageTo, " pada ").concat(totalRows, " baris (difilter dari ").concat(totalNotFiltered, " baris)"); + } + return "Menampilkan dari ".concat(pageFrom, " hingga ").concat(pageTo, " pada ").concat(totalRows, " baris"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'halaman sebelumnya'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "ke halaman ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'halaman berikutnya'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Tampilan ".concat(totalRows, " baris"); + }, + formatClearSearch: function formatClearSearch() { + return 'Menghapus pencarian'; + }, + formatSearch: function formatSearch() { + return 'Pencarian'; + }, + formatNoMatches: function formatNoMatches() { + return 'Tidak ada hasil'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Sembunyikan/Tampilkan penomoran halaman'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Tampilkan penomoran halaman'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Sembunyikan penomoran halaman'; + }, + formatRefresh: function formatRefresh() { + return 'Segarkan'; + }, + formatToggleOn: function formatToggleOn() { + return 'Menampilkan tampilan peta'; + }, + formatToggleOff: function formatToggleOff() { + return 'Menyembunyikan tampilan peta'; + }, + formatColumns: function formatColumns() { + return 'Kolom'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Tampilkan semua'; + }, + formatFullscreen: function formatFullscreen() { + return 'Layar penuh'; + }, + formatAllRows: function formatAllRows() { + return 'Semua'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Penyegaran otomatis'; + }, + formatExport: function formatExport() { + return 'Mengekspor data'; + }, + formatJumpTo: function formatJumpTo() { + return 'Pergi ke'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Pencarian lanjutan'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Tutup'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Menyembunyikan/Menampilkan kontrol'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Menyembunyikan kontrol'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Menampilkan kontrol'; + }, + formatToggleCustomViewOn: function formatToggleCustomViewOn() { + return 'Menampilkan tampilan khusus'; + }, + formatToggleCustomViewOff: function formatToggleCustomViewOff() { + return 'Menyembunyikan tampilan khusus'; + }, + formatClearFilters: function formatClearFilters() { + return 'Menghapus filter'; + }, + formatAddLevel: function formatAddLevel() { + return 'Menambahkan level'; + }, + formatCancel: function formatCancel() { + return 'Batal'; + }, + formatColumn: function formatColumn() { + return 'Kolom'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Menghapus level'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Entri duplikat telah ditemukan!'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Harap hapus atau ubah entri duplikat'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Penyortiran ganda'; + }, + formatOrder: function formatOrder() { + return 'Urutan'; + }, + formatSort: function formatSort() { + return 'Penyortiran'; + }, + formatSortBy: function formatSortBy() { + return 'Urutkan berdasarkan'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Menaik', + desc: 'Menurun' + }; + }, + formatThenBy: function formatThenBy() { + return 'Kemudian oleh'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['id-ID']); + + /** + * Bootstrap Table Italian translation + * Author: Davide Renzi + * Author: Davide Borsatto + * Author: Alessio Felicioni + */ + + $.fn.bootstrapTable.locales['it-IT'] = $.fn.bootstrapTable.locales['it'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Caricamento in corso'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " elementi per pagina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Visualizzazione da ".concat(pageFrom, " a ").concat(pageTo, " di ").concat(totalRows, " elementi (filtrati da ").concat(totalNotFiltered, " elementi totali)"); + } + return "Visualizzazione da ".concat(pageFrom, " a ").concat(pageTo, " di ").concat(totalRows, " elementi"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'pagina precedente'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "alla pagina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'pagina successiva'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Mostrando ".concat(totalRows, " elementi"); + }, + formatClearSearch: function formatClearSearch() { + return 'Pulisci filtri'; + }, + formatSearch: function formatSearch() { + return 'Cerca'; + }, + formatNoMatches: function formatNoMatches() { + return 'Nessun elemento trovato'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Nascondi/Mostra paginazione'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Mostra paginazione'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Nascondi paginazione'; + }, + formatRefresh: function formatRefresh() { + return 'Aggiorna'; + }, + formatToggleOn: function formatToggleOn() { + return 'Mostra visuale a scheda'; + }, + formatToggleOff: function formatToggleOff() { + return 'Nascondi visuale a scheda'; + }, + formatColumns: function formatColumns() { + return 'Colonne'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Mostra tutte'; + }, + formatFullscreen: function formatFullscreen() { + return 'Schermo intero'; + }, + formatAllRows: function formatAllRows() { + return 'Tutto'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Aggiornamento'; + }, + formatExport: function formatExport() { + return 'Esporta dati'; + }, + formatJumpTo: function formatJumpTo() { + return 'VAI'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Filtri avanzati'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Chiudi'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['it-IT']); + + /** + * Bootstrap Table Japanese translation + * Author: Azamshul Azizy + */ + + $.fn.bootstrapTable.locales['ja-JP'] = $.fn.bootstrapTable.locales['ja'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return '読み込み中です。少々お待ちください。'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "\u30DA\u30FC\u30B8\u5F53\u305F\u308A\u6700\u5927".concat(pageNumber, "\u4EF6"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u5168".concat(totalRows, "\u4EF6\u304B\u3089\u3001").concat(pageFrom, "\u304B\u3089").concat(pageTo, "\u4EF6\u76EE\u307E\u3067\u8868\u793A\u3057\u3066\u3044\u307E\u3059 (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "\u5168".concat(totalRows, "\u4EF6\u304B\u3089\u3001").concat(pageFrom, "\u304B\u3089").concat(pageTo, "\u4EF6\u76EE\u307E\u3067\u8868\u793A\u3057\u3066\u3044\u307E\u3059"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return '検索'; + }, + formatNoMatches: function formatNoMatches() { + return '該当するレコードが見つかりません'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'ページ数を表示・非表示'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return '更新'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return '列'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'すべて'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ja-JP']); + + /** + * Bootstrap Table Georgian translation + * Author: Levan Lotuashvili + */ + + $.fn.bootstrapTable.locales['ka-GE'] = $.fn.bootstrapTable.locales['ka'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'იტვირთება, გთხოვთ მოიცადოთ'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u10E9\u10D0\u10DC\u10D0\u10EC\u10D4\u10E0\u10D8 \u10D7\u10D8\u10D7\u10DD \u10D2\u10D5\u10D4\u10E0\u10D3\u10D6\u10D4"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u10DC\u10D0\u10E9\u10D5\u10D4\u10DC\u10D4\u10D1\u10D8\u10D0 ".concat(pageFrom, "-\u10D3\u10D0\u10DC ").concat(pageTo, "-\u10DB\u10D3\u10D4 \u10E9\u10D0\u10DC\u10D0\u10EC\u10D4\u10E0\u10D8 \u10EF\u10D0\u10DB\u10E3\u10E0\u10D8 ").concat(totalRows, "-\u10D3\u10D0\u10DC (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "\u10DC\u10D0\u10E9\u10D5\u10D4\u10DC\u10D4\u10D1\u10D8\u10D0 ".concat(pageFrom, "-\u10D3\u10D0\u10DC ").concat(pageTo, "-\u10DB\u10D3\u10D4 \u10E9\u10D0\u10DC\u10D0\u10EC\u10D4\u10E0\u10D8 \u10EF\u10D0\u10DB\u10E3\u10E0\u10D8 ").concat(totalRows, "-\u10D3\u10D0\u10DC"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'ძებნა'; + }, + formatNoMatches: function formatNoMatches() { + return 'მონაცემები არ არის'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'გვერდების გადამრთველის დამალვა/გამოჩენა'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'განახლება'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'სვეტები'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'All'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ka-GE']); + + /** + * Bootstrap Table Korean translation + * Author: Yi Tae-Hyeong (jsonobject@gmail.com) + * Revision: Abel Yeom (abel.yeom@gmail.com) + */ + + $.fn.bootstrapTable.locales['ko-KR'] = $.fn.bootstrapTable.locales['ko'] = { + formatCopyRows: function formatCopyRows() { + return '행 복사'; + }, + formatPrint: function formatPrint() { + return '프린트'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return '데이터를 불러오는 중입니다'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "\uD398\uC774\uC9C0 \uB2F9 ".concat(pageNumber, "\uAC1C \uB370\uC774\uD130 \uCD9C\uB825"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\uC804\uCCB4 ".concat(totalRows, "\uAC1C \uC911 ").concat(pageFrom, "~").concat(pageTo, "\uBC88\uC9F8 \uB370\uC774\uD130 \uCD9C\uB825, (\uC804\uCCB4 ").concat(totalNotFiltered, " \uD589\uC5D0\uC11C \uD544\uD130\uB428)"); + } + return "\uC804\uCCB4 ".concat(totalRows, "\uAC1C \uC911 ").concat(pageFrom, "~").concat(pageTo, "\uBC88\uC9F8 \uB370\uC774\uD130 \uCD9C\uB825,"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return '이전 페이지'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "".concat(page, " \uD398\uC774\uC9C0\uB85C \uC774\uB3D9"); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return '다음 페이지'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "".concat(totalRows, " \uD589\uB4E4 \uD45C\uC2DC \uC911"); + }, + formatClearSearch: function formatClearSearch() { + return '검색 초기화'; + }, + formatSearch: function formatSearch() { + return '검색'; + }, + formatNoMatches: function formatNoMatches() { + return '조회된 데이터가 없습니다.'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return '페이지 넘버 보기/숨기기'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return '페이지 넘버 보기'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return '페이지 넘버 숨기기'; + }, + formatRefresh: function formatRefresh() { + return '새로 고침'; + }, + formatToggleOn: function formatToggleOn() { + return '카드뷰 보기'; + }, + formatToggleOff: function formatToggleOff() { + return '카드뷰 숨기기'; + }, + formatColumns: function formatColumns() { + return '컬럼 필터링'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return '전체 토글'; + }, + formatFullscreen: function formatFullscreen() { + return '전체 화면'; + }, + formatAllRows: function formatAllRows() { + return '전체'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return '자동 갱신'; + }, + formatExport: function formatExport() { + return '데이터 추출'; + }, + formatJumpTo: function formatJumpTo() { + return '이동'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return '심화 검색'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return '닫기'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return '컨트롤 보기/숨기기'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return '컨트롤 숨기기'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return '컨트롤 보기'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ko-KR']); + + /** + * Bootstrap Table Luxembourgish translation + * Author: David Morais Ferreira (https://github.com/DavidMoraisFerreira) + */ + + $.fn.bootstrapTable.locales['lb-LU'] = $.fn.bootstrapTable.locales['lb'] = { + formatCopyRows: function formatCopyRows() { + return 'Zeilen kopéieren'; + }, + formatPrint: function formatPrint() { + return 'Drécken'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Gëtt gelueden, gedellëgt Iech wannechgelift ee Moment'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " Zeilen per S\xE4it"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Weist Zeil ".concat(pageFrom, " bis ").concat(pageTo, " vun ").concat(totalRows, " Zeil").concat(totalRows > 1 ? 'en' : '', " (gefiltert vun insgesamt ").concat(totalNotFiltered, " Zeil").concat(totalRows > 1 ? 'en' : '', ")"); + } + return "Weist Zeil ".concat(pageFrom, " bis ").concat(pageTo, " vun ").concat(totalRows, " Zeil").concat(totalRows > 1 ? 'en' : ''); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'viregt Säit'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "op S\xE4it ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'nächst Säit'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Weist ".concat(totalRows, " Zeilen"); + }, + formatClearSearch: function formatClearSearch() { + return 'Sich réckgängeg maachen'; + }, + formatSearch: function formatSearch() { + return 'Sich'; + }, + formatNoMatches: function formatNoMatches() { + return 'Keng passend Anträg fonnt'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Paginatioun uweisen/verstoppen'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Paginatioun uweisen'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Paginatioun verstoppen'; + }, + formatRefresh: function formatRefresh() { + return 'Nei lueden'; + }, + formatToggleOn: function formatToggleOn() { + return 'Kaartenusiicht uweisen'; + }, + formatToggleOff: function formatToggleOff() { + return 'Kaartenusiicht verstoppen'; + }, + formatColumns: function formatColumns() { + return 'Kolonnen'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'All ëmschalten'; + }, + formatFullscreen: function formatFullscreen() { + return 'Vollbild'; + }, + formatAllRows: function formatAllRows() { + return 'All'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Automatescht neilueden'; + }, + formatExport: function formatExport() { + return 'Daten exportéieren'; + }, + formatJumpTo: function formatJumpTo() { + return 'Sprangen'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Erweidert Sich'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Zoumaachen'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Schaltelementer uweisen/verstoppen'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Schaltelementer verstoppen'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Schaltelementer uweisen'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['lb-LU']); + + /** + * Bootstrap Table Malay translation + * Author: Azamshul Azizy + */ + + $.fn.bootstrapTable.locales['ms-MY'] = $.fn.bootstrapTable.locales['ms'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Permintaan sedang dimuatkan. Sila tunggu sebentar'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " rekod setiap muka surat"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Sedang memaparkan rekod ".concat(pageFrom, " hingga ").concat(pageTo, " daripada jumlah ").concat(totalRows, " rekod (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Sedang memaparkan rekod ".concat(pageFrom, " hingga ").concat(pageTo, " daripada jumlah ").concat(totalRows, " rekod"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Cari'; + }, + formatNoMatches: function formatNoMatches() { + return 'Tiada rekod yang menyamai permintaan'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Tunjuk/sembunyi muka surat'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Muatsemula'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Lajur'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Semua'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ms-MY']); + + /** + * Bootstrap Table norwegian translation + * Author: Jim Nordbø, jim@nordb.no + */ + + $.fn.bootstrapTable.locales['nb-NO'] = $.fn.bootstrapTable.locales['nb'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Oppdaterer, vennligst vent'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " poster pr side"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Viser ".concat(pageFrom, " til ").concat(pageTo, " av ").concat(totalRows, " rekker (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Viser ".concat(pageFrom, " til ").concat(pageTo, " av ").concat(totalRows, " rekker"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Søk'; + }, + formatNoMatches: function formatNoMatches() { + return 'Ingen poster funnet'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Hide/Show pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Oppdater'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Kolonner'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'All'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['nb-NO']); + + /** + * Bootstrap Table Dutch (België) translation + * Author: Nevets82 + */ + + $.fn.bootstrapTable.locales['nl-BE'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Laden, even geduld'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " records per pagina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Toon ".concat(pageFrom, " tot ").concat(pageTo, " van ").concat(totalRows, " record").concat(totalRows > 1 ? 's' : '', " (gefilterd van ").concat(totalNotFiltered, " records in totaal)"); + } + return "Toon ".concat(pageFrom, " tot ").concat(pageTo, " van ").concat(totalRows, " record").concat(totalRows > 1 ? 's' : ''); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'vorige pagina'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "tot pagina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'volgende pagina'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Toon ".concat(totalRows, " record").concat(totalRows > 1 ? 's' : ''); + }, + formatClearSearch: function formatClearSearch() { + return 'Verwijder filters'; + }, + formatSearch: function formatSearch() { + return 'Zoeken'; + }, + formatNoMatches: function formatNoMatches() { + return 'Geen resultaten gevonden'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Verberg/Toon paginering'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Toon paginering'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Verberg paginering'; + }, + formatRefresh: function formatRefresh() { + return 'Vernieuwen'; + }, + formatToggleOn: function formatToggleOn() { + return 'Toon kaartweergave'; + }, + formatToggleOff: function formatToggleOff() { + return 'Verberg kaartweergave'; + }, + formatColumns: function formatColumns() { + return 'Kolommen'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Allen omschakelen'; + }, + formatFullscreen: function formatFullscreen() { + return 'Volledig scherm'; + }, + formatAllRows: function formatAllRows() { + return 'Alle'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Automatisch vernieuwen'; + }, + formatExport: function formatExport() { + return 'Exporteer gegevens'; + }, + formatJumpTo: function formatJumpTo() { + return 'GA'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Geavanceerd zoeken'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Sluiten'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Verberg/Toon controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Verberg controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Toon controls'; + }, + formatAddLevel: function formatAddLevel() { + return 'Niveau toevoegen'; + }, + formatCancel: function formatCancel() { + return 'Annuleren'; + }, + formatColumn: function formatColumn() { + return 'Kolom'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Niveau verwijderen'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Duplicaten gevonden!'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Gelieve dubbele kolommen te verwijderen of wijzigen'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Meervoudige sortering'; + }, + formatOrder: function formatOrder() { + return 'Volgorde'; + }, + formatSort: function formatSort() { + return 'Sorteren'; + }, + formatSortBy: function formatSortBy() { + return 'Sorteren op'; + }, + formatThenBy: function formatThenBy() { + return 'vervolgens'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Oplopend', + desc: 'Aflopend' + }; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['nl-BE']); + + /** + * Bootstrap Table Dutch (Nederland) translation + * Author: Your Name + * Nevets82 + */ + + $.fn.bootstrapTable.locales['nl-NL'] = $.fn.bootstrapTable.locales['nl'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Laden, even geduld'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " records per pagina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Toon ".concat(pageFrom, " tot ").concat(pageTo, " van ").concat(totalRows, " record").concat(totalRows > 1 ? 's' : '', " (gefilterd van ").concat(totalNotFiltered, " records in totaal)"); + } + return "Toon ".concat(pageFrom, " tot ").concat(pageTo, " van ").concat(totalRows, " record").concat(totalRows > 1 ? 's' : ''); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'vorige pagina'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "tot pagina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'volgende pagina'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Toon ".concat(totalRows, " record").concat(totalRows > 1 ? 's' : ''); + }, + formatClearSearch: function formatClearSearch() { + return 'Verwijder filters'; + }, + formatSearch: function formatSearch() { + return 'Zoeken'; + }, + formatNoMatches: function formatNoMatches() { + return 'Geen resultaten gevonden'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Verberg/Toon paginering'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Toon paginering'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Verberg paginering'; + }, + formatRefresh: function formatRefresh() { + return 'Vernieuwen'; + }, + formatToggleOn: function formatToggleOn() { + return 'Toon kaartweergave'; + }, + formatToggleOff: function formatToggleOff() { + return 'Verberg kaartweergave'; + }, + formatColumns: function formatColumns() { + return 'Kolommen'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Allen omschakelen'; + }, + formatFullscreen: function formatFullscreen() { + return 'Volledig scherm'; + }, + formatAllRows: function formatAllRows() { + return 'Alle'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Automatisch vernieuwen'; + }, + formatExport: function formatExport() { + return 'Exporteer gegevens'; + }, + formatJumpTo: function formatJumpTo() { + return 'GA'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Geavanceerd zoeken'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Sluiten'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Verberg/Toon controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Verberg controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Toon controls'; + }, + formatAddLevel: function formatAddLevel() { + return 'Niveau toevoegen'; + }, + formatCancel: function formatCancel() { + return 'Annuleren'; + }, + formatColumn: function formatColumn() { + return 'Kolom'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Niveau verwijderen'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Duplicaten gevonden!'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Gelieve dubbele kolommen te verwijderen of wijzigen'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Meervoudige sortering'; + }, + formatOrder: function formatOrder() { + return 'Volgorde'; + }, + formatSort: function formatSort() { + return 'Sorteren'; + }, + formatSortBy: function formatSortBy() { + return 'Sorteren op'; + }, + formatThenBy: function formatThenBy() { + return 'vervolgens'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Oplopend', + desc: 'Aflopend' + }; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['nl-NL']); + + /** + * Bootstrap Table Polish translation + * Author: zergu + * Update: kerogos + */ + + $.fn.bootstrapTable.locales['pl-PL'] = $.fn.bootstrapTable.locales['pl'] = { + formatCopyRows: function formatCopyRows() { + return 'Kopiuj wiersze'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Ładowanie, proszę czekać'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " rekord\xF3w na stron\u0119"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Wy\u015Bwietlanie rekord\xF3w od ".concat(pageFrom, " do ").concat(pageTo, " z ").concat(totalRows, " (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Wy\u015Bwietlanie rekord\xF3w od ".concat(pageFrom, " do ").concat(pageTo, " z ").concat(totalRows); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'poprzednia strona'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "z ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'następna strona'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Wy\u015Bwietla ".concat(totalRows, " wierszy"); + }, + formatClearSearch: function formatClearSearch() { + return 'Wyczyść wyszukiwanie'; + }, + formatSearch: function formatSearch() { + return 'Szukaj'; + }, + formatNoMatches: function formatNoMatches() { + return 'Niestety, nic nie znaleziono'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Pokaż/ukryj stronicowanie'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Pokaż stronicowanie'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Ukryj stronicowanie'; + }, + formatRefresh: function formatRefresh() { + return 'Odśwież'; + }, + formatToggleOn: function formatToggleOn() { + return 'Pokaż układ karty'; + }, + formatToggleOff: function formatToggleOff() { + return 'Ukryj układ karty'; + }, + formatColumns: function formatColumns() { + return 'Kolumny'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Zaznacz wszystko'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Wszystkie'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto odświeżanie'; + }, + formatExport: function formatExport() { + return 'Eksport danych'; + }, + formatJumpTo: function formatJumpTo() { + return 'Przejdź'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Wyszukiwanie zaawansowane'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Zamknij'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Pokaż/Ukryj'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Pokaż'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Ukryj'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['pl-PL']); + + /** + * Bootstrap Table Brazilian Portuguese Translation + * Author: Eduardo Cerqueira + * Update: João Mello + * Update: Leandro Felizari + * Update: Fernando Marcos Souza Silva + * Update: @misteregis + */ + + $.fn.bootstrapTable.locales['pt-BR'] = $.fn.bootstrapTable.locales['br'] = { + formatCopyRows: function formatCopyRows() { + return 'Copiar linhas'; + }, + formatPrint: function formatPrint() { + return 'Imprimir'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Carregando, aguarde'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " registros por p\xE1gina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + var plural = totalRows > 1 ? 's' : ''; + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Exibindo ".concat(pageFrom, " at\xE9 ").concat(pageTo, " de ").concat(totalRows, " linha").concat(plural, " (filtrado de um total de ").concat(totalNotFiltered, " linha").concat(plural, ")"); + } + return "Exibindo ".concat(pageFrom, " at\xE9 ").concat(pageTo, " de ").concat(totalRows, " linha").concat(plural); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'página anterior'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "ir para a p\xE1gina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'próxima página'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Mostrando ".concat(totalRows, " linha").concat(totalRows > 1 ? 's' : ''); + }, + formatClearSearch: function formatClearSearch() { + return 'Limpar Pesquisa'; + }, + formatSearch: function formatSearch() { + return 'Pesquisar'; + }, + formatNoMatches: function formatNoMatches() { + return 'Nenhum registro encontrado'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Ocultar/Exibir paginação'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Mostrar Paginação'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Esconder Paginação'; + }, + formatRefresh: function formatRefresh() { + return 'Recarregar'; + }, + formatToggleOn: function formatToggleOn() { + return 'Mostrar visualização de cartão'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Colunas'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Alternar tudo'; + }, + formatFullscreen: function formatFullscreen() { + return 'Tela cheia'; + }, + formatAllRows: function formatAllRows() { + return 'Tudo'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Atualização Automática'; + }, + formatExport: function formatExport() { + return 'Exportar dados'; + }, + formatJumpTo: function formatJumpTo() { + return 'Ir'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Pesquisa Avançada'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Fechar'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Ocultar/Exibir controles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Ocultar controles'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Exibir controles'; + }, + formatAddLevel: function formatAddLevel() { + return 'Adicionar nível'; + }, + formatCancel: function formatCancel() { + return 'Cancelar'; + }, + formatColumn: function formatColumn() { + return 'Coluna'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Remover nível'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Encontradas entradas duplicadas!'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Por favor, remova ou altere as colunas duplicadas'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Ordenação múltipla'; + }, + formatOrder: function formatOrder() { + return 'Ordem'; + }, + formatSort: function formatSort() { + return 'Ordenar'; + }, + formatSortBy: function formatSortBy() { + return 'Ordenar por'; + }, + formatThenBy: function formatThenBy() { + return 'em seguida'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Crescente', + desc: 'Decrescente' + }; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['pt-BR']); + + /** + * Bootstrap Table Portuguese Portugal Translation + * Author: Burnspirit + * Update: @misteregis + */ + + $.fn.bootstrapTable.locales['pt-PT'] = $.fn.bootstrapTable.locales['pt'] = { + formatCopyRows: function formatCopyRows() { + return 'Copiar Linhas'; + }, + formatPrint: function formatPrint() { + return 'Imprimir'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'A carregar, por favor aguarde'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " registos por p\xE1gina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + var plural = totalRows > 1 ? 's' : ''; + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "A mostrar ".concat(pageFrom, " até ").concat(pageTo, " de ").concat(totalRows, " linha").concat(plural, " (filtrado de um total de ").concat(totalNotFiltered, " linha").concat(plural, ")"); + } + return "A mostrar ".concat(pageFrom, " at\xE9 ").concat(pageTo, " de ").concat(totalRows, " linha").concat(plural); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'página anterior'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "ir para p\xE1gina ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'próxima página'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Mostrando ".concat(totalRows, " linha").concat(totalRows > 1 ? 's' : ''); + }, + formatClearSearch: function formatClearSearch() { + return 'Limpar Pesquisa'; + }, + formatSearch: function formatSearch() { + return 'Pesquisa'; + }, + formatNoMatches: function formatNoMatches() { + return 'Nenhum registo encontrado'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Esconder/Mostrar paginação'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Mostrar página'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Esconder página'; + }, + formatRefresh: function formatRefresh() { + return 'Actualizar'; + }, + formatToggleOn: function formatToggleOn() { + return 'Mostrar vista em forma de cartão'; + }, + formatToggleOff: function formatToggleOff() { + return 'Esconder vista em forma de cartão'; + }, + formatColumns: function formatColumns() { + return 'Colunas'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Activar tudo'; + }, + formatFullscreen: function formatFullscreen() { + return 'Ecrã completo'; + }, + formatAllRows: function formatAllRows() { + return 'Tudo'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Actualização autmática'; + }, + formatExport: function formatExport() { + return 'Exportar dados'; + }, + formatJumpTo: function formatJumpTo() { + return 'Avançar'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Pesquisa avançada'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Fechar'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Ocultar/Exibir controles'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Esconder controlos'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Exibir controlos'; + }, + formatAddLevel: function formatAddLevel() { + return 'Adicionar nível'; + }, + formatCancel: function formatCancel() { + return 'Cancelar'; + }, + formatColumn: function formatColumn() { + return 'Coluna'; + }, + formatDeleteLevel: function formatDeleteLevel() { + return 'Remover nível'; + }, + formatDuplicateAlertTitle: function formatDuplicateAlertTitle() { + return 'Foram encontradas entradas duplicadas!'; + }, + formatDuplicateAlertDescription: function formatDuplicateAlertDescription() { + return 'Por favor, remova ou altere as colunas duplicadas'; + }, + formatMultipleSort: function formatMultipleSort() { + return 'Ordenação múltipla'; + }, + formatOrder: function formatOrder() { + return 'Ordem'; + }, + formatSort: function formatSort() { + return 'Ordenar'; + }, + formatSortBy: function formatSortBy() { + return 'Ordenar por'; + }, + formatThenBy: function formatThenBy() { + return 'em seguida'; + }, + formatSortOrders: function formatSortOrders() { + return { + asc: 'Ascendente', + desc: 'Descendente' + }; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['pt-PT']); + + /** + * Bootstrap Table Romanian translation + * Author: cristake + */ + + $.fn.bootstrapTable.locales['ro-RO'] = $.fn.bootstrapTable.locales['ro'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Se incarca, va rugam asteptati'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " inregistrari pe pagina"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Arata de la ".concat(pageFrom, " pana la ").concat(pageTo, " din ").concat(totalRows, " randuri (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Arata de la ".concat(pageFrom, " pana la ").concat(pageTo, " din ").concat(totalRows, " randuri"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Cauta'; + }, + formatNoMatches: function formatNoMatches() { + return 'Nu au fost gasite inregistrari'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Ascunde/Arata paginatia'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Reincarca'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Coloane'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Toate'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ro-RO']); + + /** + * Bootstrap Table Russian translation + * Author: Dunaevsky Maxim + */ + + $.fn.bootstrapTable.locales['ru-RU'] = $.fn.bootstrapTable.locales['ru'] = { + formatCopyRows: function formatCopyRows() { + return 'Скопировать строки'; + }, + formatPrint: function formatPrint() { + return 'Печать'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Пожалуйста, подождите, идёт загрузка'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u0437\u0430\u043F\u0438\u0441\u0435\u0439 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u0417\u0430\u043F\u0438\u0441\u0438 \u0441 ".concat(pageFrom, " \u043F\u043E ").concat(pageTo, " \u0438\u0437 ").concat(totalRows, " (\u043E\u0442\u0444\u0438\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u043D\u043E, \u0432\u0441\u0435\u0433\u043E \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 ").concat(totalNotFiltered, " \u0437\u0430\u043F\u0438\u0441\u0435\u0439)"); + } + return "\u0417\u0430\u043F\u0438\u0441\u0438 \u0441 ".concat(pageFrom, " \u043F\u043E ").concat(pageTo, " \u0438\u0437 ").concat(totalRows); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'предыдущая страница'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "\u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435 ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'следующая страница'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u043E ".concat(totalRows, " \u0441\u0442\u0440\u043E\u043A"); + }, + formatClearSearch: function formatClearSearch() { + return 'Очистить фильтры'; + }, + formatSearch: function formatSearch() { + return 'Поиск'; + }, + formatNoMatches: function formatNoMatches() { + return 'Ничего не найдено'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Скрыть/Показать постраничную навигацию'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Показать постраничную навигацию'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Скрыть постраничную навигацию'; + }, + formatRefresh: function formatRefresh() { + return 'Обновить'; + }, + formatToggleOn: function formatToggleOn() { + return 'Показать записи в виде карточек'; + }, + formatToggleOff: function formatToggleOff() { + return 'Табличный режим просмотра'; + }, + formatColumns: function formatColumns() { + return 'Колонки'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Выбрать все'; + }, + formatFullscreen: function formatFullscreen() { + return 'Полноэкранный режим'; + }, + formatAllRows: function formatAllRows() { + return 'Все'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Автоматическое обновление'; + }, + formatExport: function formatExport() { + return 'Экспортировать данные'; + }, + formatJumpTo: function formatJumpTo() { + return 'Стр.'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Расширенный поиск'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Закрыть'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Скрыть/Показать панель инструментов'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Скрыть панель инструментов'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Показать панель инструментов'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ru-RU']); + + /** + * Bootstrap Table Slovak translation + * Author: Jozef Dúc + */ + + $.fn.bootstrapTable.locales['sk-SK'] = $.fn.bootstrapTable.locales['sk'] = { + formatCopyRows: function formatCopyRows() { + return 'Skopírovať riadky'; + }, + formatPrint: function formatPrint() { + return 'Vytlačiť'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Prosím čakajte'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " z\xE1znamov na stranu"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Zobrazen\xE1 ".concat(pageFrom, ". - ").concat(pageTo, ". polo\u017Eka z celkov\xFDch ").concat(totalRows, " (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Zobrazen\xE1 ".concat(pageFrom, ". - ").concat(pageTo, ". polo\u017Eka z celkov\xFDch ").concat(totalRows); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'Predchádzajúca strana'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "na stranu ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'Nasledujúca strana'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Zobrazuje sa ".concat(totalRows, " riadkov"); + }, + formatClearSearch: function formatClearSearch() { + return 'Odstráň filtre'; + }, + formatSearch: function formatSearch() { + return 'Vyhľadávanie'; + }, + formatNoMatches: function formatNoMatches() { + return 'Nenájdená žiadna vyhovujúca položka'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Skry/Zobraz stránkovanie'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Zobraziť stránkovanie'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Skryť stránkovanie'; + }, + formatRefresh: function formatRefresh() { + return 'Obnoviť'; + }, + formatToggleOn: function formatToggleOn() { + return 'Zobraziť kartové zobrazenie'; + }, + formatToggleOff: function formatToggleOff() { + return 'skryť kartové zobrazenie'; + }, + formatColumns: function formatColumns() { + return 'Stĺpce'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Prepnúť všetky'; + }, + formatFullscreen: function formatFullscreen() { + return 'Celá obrazovka'; + }, + formatAllRows: function formatAllRows() { + return 'Všetky'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Automatické obnovenie'; + }, + formatExport: function formatExport() { + return 'Exportuj dáta'; + }, + formatJumpTo: function formatJumpTo() { + return 'Ísť'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Pokročilé vyhľadávanie'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Zatvoriť'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Zobraziť/Skryť tlačidlá'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Skryť tlačidlá'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Zobraziť tlačidlá'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['sk-SK']); + + /** + * Bootstrap Table Slovenian translation + * Author: Ales Hotko + */ + + $.fn.bootstrapTable.locales['sl-SI'] = $.fn.bootstrapTable.locales['sl'] = { + formatCopyRows: function formatCopyRows() { + return 'Kopiraj vrstice'; + }, + formatPrint: function formatPrint() { + return 'Natisni'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Prosim počakajte...'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " vrstic na stran"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Prikaz ".concat(pageFrom, " do ").concat(pageTo, " od ").concat(totalRows, " vrstic (filtrirano od skupno ").concat(totalNotFiltered, " vrstic)"); + } + return "Prikaz ".concat(pageFrom, " do ").concat(pageTo, " od ").concat(totalRows, " vrstic"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'prejšnja stran'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "na stran ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'na slednja stran'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Prikaz ".concat(totalRows, " vrstic"); + }, + formatClearSearch: function formatClearSearch() { + return 'Počisti'; + }, + formatSearch: function formatSearch() { + return 'Iskanje'; + }, + formatNoMatches: function formatNoMatches() { + return 'Ni najdenih rezultatov'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Skrij/Pokaži oštevilčevanje strani'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Pokaži oštevilčevanje strani'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Skrij oštevilčevanje strani'; + }, + formatRefresh: function formatRefresh() { + return 'Osveži'; + }, + formatToggleOn: function formatToggleOn() { + return 'Prikaži kartični pogled'; + }, + formatToggleOff: function formatToggleOff() { + return 'Skrij kartični pogled'; + }, + formatColumns: function formatColumns() { + return 'Stolpci'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Preklopi vse'; + }, + formatFullscreen: function formatFullscreen() { + return 'Celozaslonski prikaz'; + }, + formatAllRows: function formatAllRows() { + return 'Vse'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Samodejna osvežitev'; + }, + formatExport: function formatExport() { + return 'Izvoz podatkov'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Napredno iskanje'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Zapri'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Skrij/Pokaži kontrole'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Skrij kontrole'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Pokaži kontrole'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['sl-SI']); + + /** + * Bootstrap Table Serbian Cyrilic RS translation + * Author: Vladimir Kanazir (vladimir@kanazir.com) + */ + + $.fn.bootstrapTable.locales['sr-Cyrl-RS'] = $.fn.bootstrapTable.locales['sr'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Молим сачекај'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u0440\u0435\u0434\u043E\u0432\u0430 \u043F\u043E \u0441\u0442\u0440\u0430\u043D\u0438"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u041F\u0440\u0438\u043A\u0430\u0437\u0430\u043D\u043E ".concat(pageFrom, ". - ").concat(pageTo, ". \u043E\u0434 \u0443\u043A\u0443\u043F\u043D\u043E\u0433 \u0431\u0440\u043E\u0458\u0430 \u0440\u0435\u0434\u043E\u0432\u0430 ").concat(totalRows, " (\u0444\u0438\u043B\u0442\u0440\u0438\u0440\u0430\u043D\u043E \u043E\u0434 ").concat(totalNotFiltered, ")"); + } + return "\u041F\u0440\u0438\u043A\u0430\u0437\u0430\u043D\u043E ".concat(pageFrom, ". - ").concat(pageTo, ". \u043E\u0434 \u0443\u043A\u0443\u043F\u043D\u043E\u0433 \u0431\u0440\u043E\u0458\u0430 \u0440\u0435\u0434\u043E\u0432\u0430 ").concat(totalRows); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'претходна страна'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "\u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0443 ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'следећа страна'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "\u041F\u0440\u0438\u043A\u0430\u0437\u0430\u043D\u043E ".concat(totalRows, " \u0440\u0435\u0434\u043E\u0432\u0430"); + }, + formatClearSearch: function formatClearSearch() { + return 'Обриши претрагу'; + }, + formatSearch: function formatSearch() { + return 'Пронађи'; + }, + formatNoMatches: function formatNoMatches() { + return 'Није пронађен ни један податак'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Прикажи/сакриј пагинацију'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Прикажи пагинацију'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Сакриј пагинацију'; + }, + formatRefresh: function formatRefresh() { + return 'Освежи'; + }, + formatToggleOn: function formatToggleOn() { + return 'Прикажи картице'; + }, + formatToggleOff: function formatToggleOff() { + return 'Сакриј картице'; + }, + formatColumns: function formatColumns() { + return 'Колоне'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Прикажи/сакриј све'; + }, + formatFullscreen: function formatFullscreen() { + return 'Цео екран'; + }, + formatAllRows: function formatAllRows() { + return 'Све'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Аутоматско освежавање'; + }, + formatExport: function formatExport() { + return 'Извези податке'; + }, + formatJumpTo: function formatJumpTo() { + return 'Иди'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Напредна претрага'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Затвори'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['sr-Cyrl-RS']); + + /** + * Bootstrap Table Serbian Latin RS translation + * Author: Vladimir Kanazir (vladimir@kanazir.com) + */ + + $.fn.bootstrapTable.locales['sr-Latn-RS'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Molim sačekaj'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " redova po strani"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Prikazano ".concat(pageFrom, ". - ").concat(pageTo, ". od ukupnog broja redova ").concat(totalRows, " (filtrirano od ").concat(totalNotFiltered, ")"); + } + return "Prikazano ".concat(pageFrom, ". - ").concat(pageTo, ". od ukupnog broja redova ").concat(totalRows); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'prethodna strana'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "na stranu ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'sledeća strana'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Prikazano ".concat(totalRows, " redova"); + }, + formatClearSearch: function formatClearSearch() { + return 'Obriši pretragu'; + }, + formatSearch: function formatSearch() { + return 'Pronađi'; + }, + formatNoMatches: function formatNoMatches() { + return 'Nije pronađen ni jedan podatak'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Prikaži/sakrij paginaciju'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Prikaži paginaciju'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Sakrij paginaciju'; + }, + formatRefresh: function formatRefresh() { + return 'Osveži'; + }, + formatToggleOn: function formatToggleOn() { + return 'Prikaži kartice'; + }, + formatToggleOff: function formatToggleOff() { + return 'Sakrij kartice'; + }, + formatColumns: function formatColumns() { + return 'Kolone'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Prikaži/sakrij sve'; + }, + formatFullscreen: function formatFullscreen() { + return 'Ceo ekran'; + }, + formatAllRows: function formatAllRows() { + return 'Sve'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Automatsko osvežavanje'; + }, + formatExport: function formatExport() { + return 'Izvezi podatke'; + }, + formatJumpTo: function formatJumpTo() { + return 'Idi'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Napredna pretraga'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Zatvori'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['sr-Latn-RS']); + + /** + * Bootstrap Table Swedish translation + * Author: C Bratt + */ + + $.fn.bootstrapTable.locales['sv-SE'] = $.fn.bootstrapTable.locales['sv'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Laddar, vänligen vänta'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " rader per sida"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Visa ".concat(pageFrom, " till ").concat(pageTo, " av ").concat(totalRows, " rader (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Visa ".concat(pageFrom, " till ").concat(pageTo, " av ").concat(totalRows, " rader"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'Sök'; + }, + formatNoMatches: function formatNoMatches() { + return 'Inga matchande resultat funna.'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Hide/Show pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Uppdatera'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'kolumn'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'All'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['sv-SE']); + + /** + * Bootstrap Table Thai translation + * Author: Monchai S. + */ + + $.fn.bootstrapTable.locales['th-TH'] = $.fn.bootstrapTable.locales['th'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'กำลังโหลดข้อมูล, กรุณารอสักครู่'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E15\u0E48\u0E2D\u0E2B\u0E19\u0E49\u0E32"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48 ".concat(pageFrom, " \u0E16\u0E36\u0E07 ").concat(pageTo, " \u0E08\u0E32\u0E01\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14 ").concat(totalRows, " \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23 (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48 ".concat(pageFrom, " \u0E16\u0E36\u0E07 ").concat(pageTo, " \u0E08\u0E32\u0E01\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14 ").concat(totalRows, " \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'ค้นหา'; + }, + formatNoMatches: function formatNoMatches() { + return 'ไม่พบรายการที่ค้นหา !'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Hide/Show pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'รีเฟรส'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'คอลัมน์'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'All'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['th-TH']); + + /** + * Bootstrap Table Ukrainian translation + * Author: Vitaliy Timchenko + */ + + $.fn.bootstrapTable.locales['uk-UA'] = $.fn.bootstrapTable.locales['uk'] = { + formatCopyRows: function formatCopyRows() { + return 'Скопіювати рядки'; + }, + formatPrint: function formatPrint() { + return 'Друк'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Завантаження, будь ласка, зачекайте'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u0440\u044F\u0434\u043A\u0456\u0432 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u0412\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043E \u0440\u044F\u0434\u043A\u0438 \u0437 ".concat(pageFrom, " \u043F\u043E ").concat(pageTo, " \u0437 ").concat(totalRows, " \u0437\u0430\u0433\u0430\u043B\u043E\u043C (\u0432\u0456\u0434\u0444\u0456\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u043D\u043E \u0437 ").concat(totalNotFiltered, " \u0440\u044F\u0434\u043A\u0456\u0432)"); + } + return "\u0412\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043E \u0440\u044F\u0434\u043A\u0438 \u0437 ".concat(pageFrom, " \u043F\u043E ").concat(pageTo, " \u0437 ").concat(totalRows, " \u0437\u0430\u0433\u0430\u043B\u043E\u043C"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'попередня сторінка'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "\u0434\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'наступна сторінка'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "\u0412\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043E ".concat(totalRows, " \u0440\u044F\u0434\u043A\u0456\u0432"); + }, + formatClearSearch: function formatClearSearch() { + return 'Скинути фільтри'; + }, + formatSearch: function formatSearch() { + return 'Пошук'; + }, + formatNoMatches: function formatNoMatches() { + return 'Не знайдено жодного запису'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Сховати/Відобразити пагінацію'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Відобразити пагінацію'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Сховати пагінацію'; + }, + formatRefresh: function formatRefresh() { + return 'Оновити'; + }, + formatToggleOn: function formatToggleOn() { + return 'Відобразити у форматі карток'; + }, + formatToggleOff: function formatToggleOff() { + return 'Вимкнути формат карток'; + }, + formatColumns: function formatColumns() { + return 'Стовпці'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Переключити усі'; + }, + formatFullscreen: function formatFullscreen() { + return 'Повноекранний режим'; + }, + formatAllRows: function formatAllRows() { + return 'Усі'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Автооновлення'; + }, + formatExport: function formatExport() { + return 'Експортувати дані'; + }, + formatJumpTo: function formatJumpTo() { + return 'Швидкий перехід до'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Розширений пошук'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Закрити'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Сховати/Відобразити елементи керування'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Сховати елементи керування'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Відобразити елементи керування'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['uk-UA']); + + /** + * Bootstrap Table Urdu translation + * Author: Malik + */ + + $.fn.bootstrapTable.locales['ur-PK'] = $.fn.bootstrapTable.locales['ur'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'براۓ مہربانی انتظار کیجئے'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " \u0631\u06CC\u06A9\u0627\u0631\u0688\u0632 \u0641\u06CC \u0635\u0641\u06C1 "); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u062F\u06CC\u06A9\u06BE\u06CC\u06BA ".concat(pageFrom, " \u0633\u06D2 ").concat(pageTo, " \u06A9\u06D2 ").concat(totalRows, "\u0631\u06CC\u06A9\u0627\u0631\u0688\u0632 (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "\u062F\u06CC\u06A9\u06BE\u06CC\u06BA ".concat(pageFrom, " \u0633\u06D2 ").concat(pageTo, " \u06A9\u06D2 ").concat(totalRows, "\u0631\u06CC\u06A9\u0627\u0631\u0688\u0632"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Clear Search'; + }, + formatSearch: function formatSearch() { + return 'تلاش'; + }, + formatNoMatches: function formatNoMatches() { + return 'کوئی ریکارڈ نہیں ملا'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Hide/Show pagination'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'تازہ کریں'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'کالم'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'All'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Export data'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ur-PK']); + + /** + * Bootstrap Table Uzbek translation + * Author: Nabijon Masharipov + */ + + $.fn.bootstrapTable.locales['uz-Latn-UZ'] = $.fn.bootstrapTable.locales['uz'] = { + formatCopyRows: function formatCopyRows() { + return 'Copy Rows'; + }, + formatPrint: function formatPrint() { + return 'Print'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Yuklanyapti, iltimos kuting'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " qator har sahifada"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Ko'rsatypati ".concat(pageFrom, " dan ").concat(pageTo, " gacha ").concat(totalRows, " qatorlarni (filtered from ").concat(totalNotFiltered, " total rows)"); + } + return "Ko'rsatypati ".concat(pageFrom, " dan ").concat(pageTo, " gacha ").concat(totalRows, " qatorlarni"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'previous page'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "to page ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'next page'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "Showing ".concat(totalRows, " rows"); + }, + formatClearSearch: function formatClearSearch() { + return 'Filtrlarni tozalash'; + }, + formatSearch: function formatSearch() { + return 'Qidirish'; + }, + formatNoMatches: function formatNoMatches() { + return 'Hech narsa topilmadi'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Sahifalashni yashirish/ko\'rsatish'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Show pagination'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Hide pagination'; + }, + formatRefresh: function formatRefresh() { + return 'Yangilash'; + }, + formatToggleOn: function formatToggleOn() { + return 'Show card view'; + }, + formatToggleOff: function formatToggleOff() { + return 'Hide card view'; + }, + formatColumns: function formatColumns() { + return 'Ustunlar'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Toggle all'; + }, + formatFullscreen: function formatFullscreen() { + return 'Fullscreen'; + }, + formatAllRows: function formatAllRows() { + return 'Hammasi'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Auto Refresh'; + }, + formatExport: function formatExport() { + return 'Eksport'; + }, + formatJumpTo: function formatJumpTo() { + return 'GO'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Advanced search'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Close'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Hide/Show controls'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Hide controls'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Show controls'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['uz-Latn-UZ']); + + /** + * Bootstrap Table Vietnamese translation + * Author: Duc N. PHAM + * Revision: Le Ngo Duc Manh (07/Mar/2024) + */ + + $.fn.bootstrapTable.locales['vi-VN'] = $.fn.bootstrapTable.locales['vi'] = { + formatCopyRows: function formatCopyRows() { + return 'Sao chép hàng'; + }, + formatPrint: function formatPrint() { + return 'In'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Đang tải'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "".concat(pageNumber, " b\u1EA3n ghi m\u1ED7i trang"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "Hi\u1EC3n th\u1ECB t\u1EEB trang ".concat(pageFrom, " \u0111\u1EBFn ").concat(pageTo, " c\u1EE7a ").concat(totalRows, " b\u1EA3n ghi (\u0111\u01B0\u1EE3c l\u1ECDc t\u1EEB t\u1ED5ng ").concat(totalNotFiltered, " h\xE0ng)"); + } + return "Hi\u1EC3n th\u1ECB t\u1EEB trang ".concat(pageFrom, " \u0111\u1EBFn ").concat(pageTo, " c\u1EE7a ").concat(totalRows, " b\u1EA3n ghi"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'trang trước'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "\u0111\u1EBFn trang ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'trang sau'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "\u0110ang hi\u1EC7n ".concat(totalRows, " h\xE0ng"); + }, + formatClearSearch: function formatClearSearch() { + return 'Xoá tìm kiếm'; + }, + formatSearch: function formatSearch() { + return 'Tìm kiếm'; + }, + formatNoMatches: function formatNoMatches() { + return 'Không có dữ liệu'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Ẩn/Hiện phân trang'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Hiện phân trang'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Ẩn phân trang'; + }, + formatRefresh: function formatRefresh() { + return 'Làm mới'; + }, + formatToggleOn: function formatToggleOn() { + return 'Hiển thị các thẻ'; + }, + formatToggleOff: function formatToggleOff() { + return 'Ẩn các thẻ'; + }, + formatColumns: function formatColumns() { + return 'Cột'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Hiện tất cả'; + }, + formatFullscreen: function formatFullscreen() { + return 'Toàn màn hình'; + }, + formatAllRows: function formatAllRows() { + return 'Tất cả'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Tự động làm mới'; + }, + formatExport: function formatExport() { + return 'Xuất dữ liệu'; + }, + formatJumpTo: function formatJumpTo() { + return 'Đến'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Tìm kiếm nâng cao'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Đóng'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Ẩn/Hiện điều khiển'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Ẩn điều khiển'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Hiện điều khiển'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['vi-VN']); + + /** + * Bootstrap Table Chinese translation + * Author: Zhixin Wen + */ + + $.fn.bootstrapTable.locales['zh-CN'] = $.fn.bootstrapTable.locales['zh'] = { + formatCopyRows: function formatCopyRows() { + return '复制行'; + }, + formatPrint: function formatPrint() { + return '打印'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return '正在努力地加载数据中,请稍候'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "\u6BCF\u9875\u663E\u793A ".concat(pageNumber, " \u6761\u8BB0\u5F55"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u663E\u793A\u7B2C ".concat(pageFrom, " \u5230\u7B2C ").concat(pageTo, " \u6761\u8BB0\u5F55\uFF0C\u603B\u5171 ").concat(totalRows, " \u6761\u8BB0\u5F55\uFF08\u4ECE ").concat(totalNotFiltered, " \u603B\u8BB0\u5F55\u4E2D\u8FC7\u6EE4\uFF09"); + } + return "\u663E\u793A\u7B2C ".concat(pageFrom, " \u5230\u7B2C ").concat(pageTo, " \u6761\u8BB0\u5F55\uFF0C\u603B\u5171 ").concat(totalRows, " \u6761\u8BB0\u5F55"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return '上一页'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "\u7B2C".concat(page, "\u9875"); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return '下一页'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "\u603B\u5171 ".concat(totalRows, " \u6761\u8BB0\u5F55"); + }, + formatClearSearch: function formatClearSearch() { + return '清空过滤'; + }, + formatSearch: function formatSearch() { + return '搜索'; + }, + formatNoMatches: function formatNoMatches() { + return '没有找到匹配的记录'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return '隐藏/显示分页'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return '显示分页'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return '隐藏分页'; + }, + formatRefresh: function formatRefresh() { + return '刷新'; + }, + formatToggleOn: function formatToggleOn() { + return '显示卡片视图'; + }, + formatToggleOff: function formatToggleOff() { + return '隐藏卡片视图'; + }, + formatColumns: function formatColumns() { + return '列'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return '切换所有'; + }, + formatFullscreen: function formatFullscreen() { + return '全屏'; + }, + formatAllRows: function formatAllRows() { + return '所有'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return '自动刷新'; + }, + formatExport: function formatExport() { + return '导出数据'; + }, + formatJumpTo: function formatJumpTo() { + return '跳转'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return '高级搜索'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return '关闭'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return '隐藏/显示过滤控制'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return '隐藏过滤控制'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return '显示过滤控制'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']); + + /** + * Bootstrap Table Chinese translation + * Author: Zhixin Wen + */ + + $.fn.bootstrapTable.locales['zh-TW'] = { + formatCopyRows: function formatCopyRows() { + return '複製行'; + }, + formatPrint: function formatPrint() { + return '列印'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return '正在努力地載入資料,請稍候'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "\u6BCF\u9801\u986F\u793A ".concat(pageNumber, " \u9805\u8A18\u9304"); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "\u986F\u793A\u7B2C ".concat(pageFrom, " \u5230\u7B2C ").concat(pageTo, " \u9805\u8A18\u9304\uFF0C\u7E3D\u5171 ").concat(totalRows, " \u9805\u8A18\u9304\uFF08\u5F9E ").concat(totalNotFiltered, " \u7E3D\u8A18\u9304\u4E2D\u904E\u6FFE\uFF09"); + } + return "\u986F\u793A\u7B2C ".concat(pageFrom, " \u5230\u7B2C ").concat(pageTo, " \u9805\u8A18\u9304\uFF0C\u7E3D\u5171 ").concat(totalRows, " \u9805\u8A18\u9304"); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return '上一頁'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "\u7B2C".concat(page, "\u9801"); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return '下一頁'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "\u7E3D\u5171 ".concat(totalRows, " \u9805\u8A18\u9304"); + }, + formatClearSearch: function formatClearSearch() { + return '清空過濾'; + }, + formatSearch: function formatSearch() { + return '搜尋'; + }, + formatNoMatches: function formatNoMatches() { + return '沒有找到符合的結果'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return '隱藏/顯示分頁'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return '顯示分頁'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return '隱藏分頁'; + }, + formatRefresh: function formatRefresh() { + return '重新整理'; + }, + formatToggleOn: function formatToggleOn() { + return '顯示卡片視圖'; + }, + formatToggleOff: function formatToggleOff() { + return '隱藏卡片視圖'; + }, + formatColumns: function formatColumns() { + return '列'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return '切換所有'; + }, + formatFullscreen: function formatFullscreen() { + return '全屏'; + }, + formatAllRows: function formatAllRows() { + return '所有'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return '自動刷新'; + }, + formatExport: function formatExport() { + return '導出數據'; + }, + formatJumpTo: function formatJumpTo() { + return '跳轉'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return '高級搜尋'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return '關閉'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return '隱藏/顯示過濾控制'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return '隱藏過濾控制'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return '顯示過濾控制'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-TW']); + + /** + * Bootstrap Table Turkish translation + * Author: Emin Şen + * Author: Sercan Cakir + * Update From: Sait KURT + */ + + $.fn.bootstrapTable.locales['tr-TR'] = $.fn.bootstrapTable.locales['tr'] = { + formatCopyRows: function formatCopyRows() { + return 'Satırları Kopyala'; + }, + formatPrint: function formatPrint() { + return 'Yazdır'; + }, + formatLoadingMessage: function formatLoadingMessage() { + return 'Yükleniyor, lütfen bekleyin'; + }, + formatRecordsPerPage: function formatRecordsPerPage(pageNumber) { + return "Sayfa ba\u015F\u0131na ".concat(pageNumber, " kay\u0131t."); + }, + formatShowingRows: function formatShowingRows(pageFrom, pageTo, totalRows, totalNotFiltered) { + if (totalNotFiltered !== undefined && totalNotFiltered > 0 && totalNotFiltered > totalRows) { + return "".concat(totalRows, " kay\u0131ttan ").concat(pageFrom, "-").concat(pageTo, " aras\u0131 g\xF6steriliyor (").concat(totalNotFiltered, " toplam sat\u0131r filtrelendi)."); + } + return "".concat(totalRows, " kay\u0131ttan ").concat(pageFrom, "-").concat(pageTo, " aras\u0131 g\xF6steriliyor."); + }, + formatSRPaginationPreText: function formatSRPaginationPreText() { + return 'önceki sayfa'; + }, + formatSRPaginationPageText: function formatSRPaginationPageText(page) { + return "sayfa ".concat(page); + }, + formatSRPaginationNextText: function formatSRPaginationNextText() { + return 'sonraki sayfa'; + }, + formatDetailPagination: function formatDetailPagination(totalRows) { + return "".concat(totalRows, " sat\u0131r g\xF6steriliyor"); + }, + formatClearSearch: function formatClearSearch() { + return 'Aramayı Temizle'; + }, + formatSearch: function formatSearch() { + return 'Ara'; + }, + formatNoMatches: function formatNoMatches() { + return 'Eşleşen kayıt bulunamadı.'; + }, + formatPaginationSwitch: function formatPaginationSwitch() { + return 'Sayfalamayı Gizle/Göster'; + }, + formatPaginationSwitchDown: function formatPaginationSwitchDown() { + return 'Sayfalamayı Göster'; + }, + formatPaginationSwitchUp: function formatPaginationSwitchUp() { + return 'Sayfalamayı Gizle'; + }, + formatRefresh: function formatRefresh() { + return 'Yenile'; + }, + formatToggleOn: function formatToggleOn() { + return 'Kart Görünümünü Göster'; + }, + formatToggleOff: function formatToggleOff() { + return 'Kart Görünümünü Gizle'; + }, + formatColumns: function formatColumns() { + return 'Sütunlar'; + }, + formatColumnsToggleAll: function formatColumnsToggleAll() { + return 'Tümünü Kapat'; + }, + formatFullscreen: function formatFullscreen() { + return 'Tam Ekran'; + }, + formatAllRows: function formatAllRows() { + return 'Tüm Satırlar'; + }, + formatAutoRefresh: function formatAutoRefresh() { + return 'Otomatik Yenileme'; + }, + formatExport: function formatExport() { + return 'Verileri Dışa Aktar'; + }, + formatJumpTo: function formatJumpTo() { + return 'Git'; + }, + formatAdvancedSearch: function formatAdvancedSearch() { + return 'Gelişmiş Arama'; + }, + formatAdvancedCloseButton: function formatAdvancedCloseButton() { + return 'Kapat'; + }, + formatFilterControlSwitch: function formatFilterControlSwitch() { + return 'Kontrolleri Gizle/Göster'; + }, + formatFilterControlSwitchHide: function formatFilterControlSwitchHide() { + return 'Kontrolleri Gizle'; + }, + formatFilterControlSwitchShow: function formatFilterControlSwitchShow() { + return 'Kontrolleri Göster'; + } + }; + Object.assign($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['tr-TR']); + +})); diff --git a/static/bootstrap533/bootstrap-table-1.23.5/bootstrap-table-locale-all.min.js b/static/bootstrap533/bootstrap-table-1.23.5/bootstrap-table-locale-all.min.js new file mode 100644 index 0000000..760f77b --- /dev/null +++ b/static/bootstrap533/bootstrap-table-1.23.5/bootstrap-table-locale-all.min.js @@ -0,0 +1,10 @@ +/** + * bootstrap-table - An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation) + * + * @version v1.23.5 + * @homepage https://bootstrap-table.com + * @author wenzhixin (http://wenzhixin.net.cn/) + * @license MIT + */ + +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).jQuery)}(this,(function(t){"use strict";var n,r,o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e={};function a(){if(r)return n;r=1;var t=function(t){return t&&t.Math===Math&&t};return n=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof o&&o)||t("object"==typeof n&&n)||function(){return this}()||Function("return this")()}var i,u,c,f,l,s,m,g,d={};function h(){return u?i:(u=1,i=function(t){try{return!!t()}catch(t){return!0}})}function p(){if(f)return c;f=1;var t=h();return c=!t((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))}function S(){if(s)return l;s=1;var t=h();return l=!t((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))}function w(){if(g)return m;g=1;var t=S(),n=Function.prototype.call;return m=t?n.bind(n):function(){return n.apply(n,arguments)},m}var P,T,b,v,C,R,A,x,y,O,k,F,M,j,D,N,E,H,z,L,B,U,V,G,Z,J,I,q,K,W,Y,_,X,Q,$,tt,nt,rt,ot,et,at,it={};function ut(){if(P)return it;P=1;var t={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,r=n&&!t.call({1:2},1);return it.f=r?function(t){var r=n(this,t);return!!r&&r.enumerable}:t,it}function ct(){return b?T:(b=1,T=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}})}function ft(){if(C)return v;C=1;var t=S(),n=Function.prototype,r=n.call,o=t&&n.bind.bind(r,r);return v=t?o:function(t){return function(){return r.apply(t,arguments)}},v}function lt(){if(A)return R;A=1;var t=ft(),n=t({}.toString),r=t("".slice);return R=function(t){return r(n(t),8,-1)}}function st(){if(y)return x;y=1;var t=ft(),n=h(),r=lt(),o=Object,e=t("".split);return x=n((function(){return!o("z").propertyIsEnumerable(0)}))?function(t){return"String"===r(t)?e(t,""):o(t)}:o}function mt(){return k?O:(k=1,O=function(t){return null==t})}function gt(){if(M)return F;M=1;var t=mt(),n=TypeError;return F=function(r){if(t(r))throw new n("Can't call method on "+r);return r}}function dt(){if(D)return j;D=1;var t=st(),n=gt();return j=function(r){return t(n(r))}}function ht(){if(E)return N;E=1;var t="object"==typeof document&&document.all;return N=void 0===t&&void 0!==t?function(n){return"function"==typeof n||n===t}:function(t){return"function"==typeof t}}function pt(){if(z)return H;z=1;var t=ht();return H=function(n){return"object"==typeof n?null!==n:t(n)}}function St(){if(B)return L;B=1;var t=a(),n=ht();return L=function(r,o){return arguments.length<2?(e=t[r],n(e)?e:void 0):t[r]&&t[r][o];var e},L}function wt(){if(I)return J;I=1;var t,n,r=a(),o=function(){if(Z)return G;Z=1;var t=a().navigator,n=t&&t.userAgent;return G=n?String(n):""}(),e=r.process,i=r.Deno,u=e&&e.versions||i&&i.version,c=u&&u.v8;return c&&(n=(t=c.split("."))[0]>0&&t[0]<4?1:+(t[0]+t[1])),!n&&o&&(!(t=o.match(/Edge\/(\d+)/))||t[1]>=74)&&(t=o.match(/Chrome\/(\d+)/))&&(n=+t[1]),J=n}function Pt(){if(K)return q;K=1;var t=wt(),n=h(),r=a().String;return q=!!Object.getOwnPropertySymbols&&!n((function(){var n=Symbol("symbol detection");return!r(n)||!(Object(n)instanceof Symbol)||!Symbol.sham&&t&&t<41}))}function Tt(){if(Y)return W;Y=1;var t=Pt();return W=t&&!Symbol.sham&&"symbol"==typeof Symbol.iterator}function bt(){if(X)return _;X=1;var t=St(),n=ht(),r=function(){if(V)return U;V=1;var t=ft();return U=t({}.isPrototypeOf)}(),o=Tt(),e=Object;return _=o?function(t){return"symbol"==typeof t}:function(o){var a=t("Symbol");return n(a)&&r(a.prototype,e(o))}}function vt(){if($)return Q;$=1;var t=String;return Q=function(n){try{return t(n)}catch(t){return"Object"}}}function Ct(){if(nt)return tt;nt=1;var t=ht(),n=vt(),r=TypeError;return tt=function(o){if(t(o))return o;throw new r(n(o)+" is not a function")}}function Rt(){if(ot)return rt;ot=1;var t=Ct(),n=mt();return rt=function(r,o){var e=r[o];return n(e)?void 0:t(e)}}function At(){if(at)return et;at=1;var t=w(),n=ht(),r=pt(),o=TypeError;return et=function(e,a){var i,u;if("string"===a&&n(i=e.toString)&&!r(u=t(i,e)))return u;if(n(i=e.valueOf)&&!r(u=t(i,e)))return u;if("string"!==a&&n(i=e.toString)&&!r(u=t(i,e)))return u;throw new o("Can't convert object to primitive value")}}var xt,yt,Ot,kt,Ft,Mt,jt,Dt,Nt,Et,Ht,zt,Lt,Bt,Ut,Vt,Gt,Zt,Jt,It,qt,Kt,Wt,Yt,_t={exports:{}};function Xt(){if(kt)return Ot;kt=1;var t=a(),n=Object.defineProperty;return Ot=function(r,o){try{n(t,r,{value:o,configurable:!0,writable:!0})}catch(n){t[r]=o}return o}}function Qt(){if(Ft)return _t.exports;Ft=1;var t=yt?xt:(yt=1,xt=!1),n=a(),r=Xt(),o="__core-js_shared__",e=_t.exports=n[o]||r(o,{});return(e.versions||(e.versions=[])).push({version:"3.38.1",mode:t?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE",source:"https://github.com/zloirock/core-js"}),_t.exports}function $t(){if(jt)return Mt;jt=1;var t=Qt();return Mt=function(n,r){return t[n]||(t[n]=r||{})}}function tn(){if(Nt)return Dt;Nt=1;var t=gt(),n=Object;return Dt=function(r){return n(t(r))}}function nn(){if(Ht)return Et;Ht=1;var t=ft(),n=tn(),r=t({}.hasOwnProperty);return Et=Object.hasOwn||function(t,o){return r(n(t),o)}}function rn(){if(Lt)return zt;Lt=1;var t=ft(),n=0,r=Math.random(),o=t(1..toString);return zt=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++n+r,36)}}function on(){if(Ut)return Bt;Ut=1;var t=a(),n=$t(),r=nn(),o=rn(),e=Pt(),i=Tt(),u=t.Symbol,c=n("wks"),f=i?u.for||u:u&&u.withoutSetter||o;return Bt=function(t){return r(c,t)||(c[t]=e&&r(u,t)?u[t]:f("Symbol."+t)),c[t]}}function en(){if(Gt)return Vt;Gt=1;var t=w(),n=pt(),r=bt(),o=Rt(),e=At(),a=on(),i=TypeError,u=a("toPrimitive");return Vt=function(a,c){if(!n(a)||r(a))return a;var f,l=o(a,u);if(l){if(void 0===c&&(c="default"),f=t(l,a,c),!n(f)||r(f))return f;throw new i("Can't convert object to primitive value")}return void 0===c&&(c="number"),e(a,c)}}function an(){if(Jt)return Zt;Jt=1;var t=en(),n=bt();return Zt=function(r){var o=t(r,"string");return n(o)?o:o+""}}function un(){if(Wt)return Kt;Wt=1;var t=p(),n=h(),r=function(){if(qt)return It;qt=1;var t=a(),n=pt(),r=t.document,o=n(r)&&n(r.createElement);return It=function(t){return o?r.createElement(t):{}}}();return Kt=!t&&!n((function(){return 7!==Object.defineProperty(r("div"),"a",{get:function(){return 7}}).a}))}function cn(){if(Yt)return d;Yt=1;var t=p(),n=w(),r=ut(),o=ct(),e=dt(),a=an(),i=nn(),u=un(),c=Object.getOwnPropertyDescriptor;return d.f=t?c:function(t,f){if(t=e(t),f=a(f),u)try{return c(t,f)}catch(t){}if(i(t,f))return o(!n(r.f,t,f),t[f])},d}var fn,ln,sn,mn,gn,dn,hn,pn={};function Sn(){if(mn)return sn;mn=1;var t=pt(),n=String,r=TypeError;return sn=function(o){if(t(o))return o;throw new r(n(o)+" is not an object")}}function wn(){if(gn)return pn;gn=1;var t=p(),n=un(),r=function(){if(ln)return fn;ln=1;var t=p(),n=h();return fn=t&&n((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))}(),o=Sn(),e=an(),a=TypeError,i=Object.defineProperty,u=Object.getOwnPropertyDescriptor,c="enumerable",f="configurable",l="writable";return pn.f=t?r?function(t,n,r){if(o(t),n=e(n),o(r),"function"==typeof t&&"prototype"===n&&"value"in r&&l in r&&!r[l]){var a=u(t,n);a&&a[l]&&(t[n]=r.value,r={configurable:f in r?r[f]:a[f],enumerable:c in r?r[c]:a[c],writable:!1})}return i(t,n,r)}:i:function(t,r,u){if(o(t),r=e(r),o(u),n)try{return i(t,r,u)}catch(t){}if("get"in u||"set"in u)throw new a("Accessors not supported");return"value"in u&&(t[r]=u.value),t},pn}function Pn(){if(hn)return dn;hn=1;var t=p(),n=wn(),r=ct();return dn=t?function(t,o,e){return n.f(t,o,r(1,e))}:function(t,n,r){return t[n]=r,t}}var Tn,bn,vn,Cn,Rn,An,xn,yn,On,kn,Fn,Mn,jn,Dn,Nn,En={exports:{}};function Hn(){if(Cn)return vn;Cn=1;var t=ft(),n=ht(),r=Qt(),o=t(Function.toString);return n(r.inspectSource)||(r.inspectSource=function(t){return o(t)}),vn=r.inspectSource}function zn(){if(yn)return xn;yn=1;var t=$t(),n=rn(),r=t("keys");return xn=function(t){return r[t]||(r[t]=n(t))}}function Ln(){return kn?On:(kn=1,On={})}function Bn(){if(Mn)return Fn;Mn=1;var t,n,r,o=function(){if(An)return Rn;An=1;var t=a(),n=ht(),r=t.WeakMap;return Rn=n(r)&&/native code/.test(String(r))}(),e=a(),i=pt(),u=Pn(),c=nn(),f=Qt(),l=zn(),s=Ln(),m="Object already initialized",g=e.TypeError,d=e.WeakMap;if(o||f.state){var h=f.state||(f.state=new d);h.get=h.get,h.has=h.has,h.set=h.set,t=function(t,n){if(h.has(t))throw new g(m);return n.facade=t,h.set(t,n),n},n=function(t){return h.get(t)||{}},r=function(t){return h.has(t)}}else{var p=l("state");s[p]=!0,t=function(t,n){if(c(t,p))throw new g(m);return n.facade=t,u(t,p,n),n},n=function(t){return c(t,p)?t[p]:{}},r=function(t){return c(t,p)}}return Fn={set:t,get:n,has:r,enforce:function(o){return r(o)?n(o):t(o,{})},getterFor:function(t){return function(r){var o;if(!i(r)||(o=n(r)).type!==t)throw new g("Incompatible receiver, "+t+" required");return o}}}}function Un(){if(jn)return En.exports;jn=1;var t=ft(),n=h(),r=ht(),o=nn(),e=p(),a=function(){if(bn)return Tn;bn=1;var t=p(),n=nn(),r=Function.prototype,o=t&&Object.getOwnPropertyDescriptor,e=n(r,"name"),a=e&&"something"===function(){}.name,i=e&&(!t||t&&o(r,"name").configurable);return Tn={EXISTS:e,PROPER:a,CONFIGURABLE:i}}().CONFIGURABLE,i=Hn(),u=Bn(),c=u.enforce,f=u.get,l=String,s=Object.defineProperty,m=t("".slice),g=t("".replace),d=t([].join),S=e&&!n((function(){return 8!==s((function(){}),"length",{value:8}).length})),w=String(String).split("String"),P=En.exports=function(t,n,r){"Symbol("===m(l(n),0,7)&&(n="["+g(l(n),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),r&&r.getter&&(n="get "+n),r&&r.setter&&(n="set "+n),(!o(t,"name")||a&&t.name!==n)&&(e?s(t,"name",{value:n,configurable:!0}):t.name=n),S&&r&&o(r,"arity")&&t.length!==r.arity&&s(t,"length",{value:r.arity});try{r&&o(r,"constructor")&&r.constructor?e&&s(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var i=c(t);return o(i,"source")||(i.source=d(w,"string"==typeof n?n:"")),t};return Function.prototype.toString=P((function(){return r(this)&&f(this).source||i(this)}),"toString"),En.exports}function Vn(){if(Nn)return Dn;Nn=1;var t=ht(),n=wn(),r=Un(),o=Xt();return Dn=function(e,a,i,u){u||(u={});var c=u.enumerable,f=void 0!==u.name?u.name:a;if(t(i)&&r(i,f,u),u.global)c?e[a]=i:o(a,i);else{try{u.unsafe?e[a]&&(c=!0):delete e[a]}catch(t){}c?e[a]=i:n.f(e,a,{value:i,enumerable:!1,configurable:!u.nonConfigurable,writable:!u.nonWritable})}return e}}var Gn,Zn,Jn,In,qn,Kn,Wn,Yn,_n,Xn,Qn,$n,tr,nr,rr,or,er,ar={};function ir(){if(In)return Jn;In=1;var t=function(){if(Zn)return Gn;Zn=1;var t=Math.ceil,n=Math.floor;return Gn=Math.trunc||function(r){var o=+r;return(o>0?n:t)(o)}}();return Jn=function(n){var r=+n;return r!=r||0===r?0:t(r)}}function ur(){if(Kn)return qn;Kn=1;var t=ir(),n=Math.max,r=Math.min;return qn=function(o,e){var a=t(o);return a<0?n(a+e,0):r(a,e)}}function cr(){if(Yn)return Wn;Yn=1;var t=ir(),n=Math.min;return Wn=function(r){var o=t(r);return o>0?n(o,9007199254740991):0}}function fr(){if(Xn)return _n;Xn=1;var t=cr();return _n=function(n){return t(n.length)}}function lr(){if(nr)return tr;nr=1;var t=ft(),n=nn(),r=dt(),o=function(){if($n)return Qn;$n=1;var t=dt(),n=ur(),r=fr(),o=function(o){return function(e,a,i){var u=t(e),c=r(u);if(0===c)return!o&&-1;var f,l=n(i,c);if(o&&a!=a){for(;c>l;)if((f=u[l++])!=f)return!0}else for(;c>l;l++)if((o||l in u)&&u[l]===a)return o||l||0;return!o&&-1}};return Qn={includes:o(!0),indexOf:o(!1)}}().indexOf,e=Ln(),a=t([].push);return tr=function(t,i){var u,c=r(t),f=0,l=[];for(u in c)!n(e,u)&&n(c,u)&&a(l,u);for(;i.length>f;)n(c,u=i[f++])&&(~o(l,u)||a(l,u));return l}}function sr(){return or?rr:(or=1,rr=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"])}var mr,gr,dr,hr,pr,Sr,wr,Pr,Tr,br,vr,Cr,Rr,Ar,xr,yr,Or,kr,Fr,Mr,jr,Dr,Nr,Er,Hr,zr,Lr,Br,Ur={};function Vr(){return mr||(mr=1,Ur.f=Object.getOwnPropertySymbols),Ur}function Gr(){if(dr)return gr;dr=1;var t=St(),n=ft(),r=function(){if(er)return ar;er=1;var t=lr(),n=sr().concat("length","prototype");return ar.f=Object.getOwnPropertyNames||function(r){return t(r,n)},ar}(),o=Vr(),e=Sn(),a=n([].concat);return gr=t("Reflect","ownKeys")||function(t){var n=r.f(e(t)),i=o.f;return i?a(n,i(t)):n}}function Zr(){if(pr)return hr;pr=1;var t=nn(),n=Gr(),r=cn(),o=wn();return hr=function(e,a,i){for(var u=n(a),c=o.f,f=r.f,l=0;l9007199254740991)throw t("Maximum allowed index exceeded");return n}}function Kr(){if(xr)return Ar;xr=1;var t=p(),n=wn(),r=ct();return Ar=function(o,e,a){t?n.f(o,e,r(0,a)):o[e]=a}}function Wr(){if(Fr)return kr;Fr=1;var t=function(){if(Or)return yr;Or=1;var t={};return t[on()("toStringTag")]="z",yr="[object z]"===String(t)}(),n=ht(),r=lt(),o=on()("toStringTag"),e=Object,a="Arguments"===r(function(){return arguments}());return kr=t?r:function(t){var i,u,c;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(u=function(t,n){try{return t[n]}catch(t){}}(i=e(t),o))?u:a?r(i):"Object"===(c=r(i))&&n(i.callee)?"Arguments":c}}function Yr(){if(jr)return Mr;jr=1;var t=ft(),n=h(),r=ht(),o=Wr(),e=St(),a=Hn(),i=function(){},u=e("Reflect","construct"),c=/^\s*(?:class|function)\b/,f=t(c.exec),l=!c.test(i),s=function(t){if(!r(t))return!1;try{return u(i,[],t),!0}catch(t){return!1}},m=function(t){if(!r(t))return!1;switch(o(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return l||!!f(c,a(t))}catch(t){return!0}};return m.sham=!0,Mr=!u||n((function(){var t;return s(s.call)||!s(Object)||!s((function(){t=!0}))||t}))?m:s}function _r(){if(Nr)return Dr;Nr=1;var t=Ir(),n=Yr(),r=pt(),o=on()("species"),e=Array;return Dr=function(a){var i;return t(a)&&(i=a.constructor,(n(i)&&(i===e||t(i.prototype))||r(i)&&null===(i=i[o]))&&(i=void 0)),void 0===i?e:i}}function Xr(){if(Hr)return Er;Hr=1;var t=_r();return Er=function(n,r){return new(t(n))(0===r?0:r)}}function Qr(){if(Lr)return zr;Lr=1;var t=h(),n=on(),r=wt(),o=n("species");return zr=function(n){return r>=51||!t((function(){var t=[];return(t.constructor={})[o]=function(){return{foo:1}},1!==t[n](Boolean).foo}))}}!function(){if(Br)return e;Br=1;var t=Jr(),n=h(),r=Ir(),o=pt(),a=tn(),i=fr(),u=qr(),c=Kr(),f=Xr(),l=Qr(),s=on(),m=wt(),g=s("isConcatSpreadable"),d=m>=51||!n((function(){var t=[];return t[g]=!1,t.concat()[0]!==t})),p=function(t){if(!o(t))return!1;var n=t[g];return void 0!==n?!!n:r(t)};t({target:"Array",proto:!0,arity:1,forced:!d||!l("concat")},{concat:function(t){var n,r,o,e,l,s=a(this),m=f(s,0),g=0;for(n=-1,o=arguments.length;nm;)for(var h,p=c(arguments[m++]),S=g?s(e(p),g(p)):e(p),w=S.length,P=0;w>P;)h=S[P++],t&&!r(d,p,h)||(f[h]=p[h]);return f}:f,no}();t({target:"Object",stat:!0,arity:2,forced:Object.assign!==n},{assign:n})}(),t.fn.bootstrapTable.locales["af-ZA"]=t.fn.bootstrapTable.locales.af={formatCopyRows:function(){return"Kopieer lyne"},formatPrint:function(){return"Druk uit"},formatLoadingMessage:function(){return"Laai tans"},formatRecordsPerPage:function(t){return"".concat(t," reëls per bladsy")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Wys ".concat(t," tot ").concat(n," van ").concat(r," lyne (gefiltreer vanaf ").concat(o," lyne)"):"Wys ".concat(t," tot ").concat(n," van ").concat(r," lyne")},formatSRPaginationPreText:function(){return"vorige bladsy"},formatSRPaginationPageText:function(t){return"na bladsy ".concat(t)},formatSRPaginationNextText:function(){return"volgende bladsy"},formatDetailPagination:function(t){return"".concat(t,"-reël vertoon")},formatClearSearch:function(){return"Duidelike soektog"},formatSearch:function(){return"Navorsing"},formatNoMatches:function(){return"Geen resultate nie"},formatPaginationSwitch:function(){return"Versteek/Wys paginasie"},formatPaginationSwitchDown:function(){return"Wys paginasie"},formatPaginationSwitchUp:function(){return"Versteek paginasie"},formatRefresh:function(){return"Verfris"},formatToggleOn:function(){return"Wys kaartaansig"},formatToggleOff:function(){return"Versteek kaartaansig"},formatColumns:function(){return"Kolomme"},formatColumnsToggleAll:function(){return"Wys alles"},formatFullscreen:function(){return"Volskerm"},formatAllRows:function(){return"Alles"},formatAutoRefresh:function(){return"Verfris outomaties"},formatExport:function(){return"Voer data uit"},formatJumpTo:function(){return"Gaan na"},formatAdvancedSearch:function(){return"Gevorderde soektog"},formatAdvancedCloseButton:function(){return"Maak"},formatFilterControlSwitch:function(){return"Versteek/Wys kontroles"},formatFilterControlSwitchHide:function(){return"Versteek kontroles"},formatFilterControlSwitchShow:function(){return"Wys kontroles"},formatToggleCustomViewOn:function(){return"Wys pasgemaakte aansig"},formatToggleCustomViewOff:function(){return"Versteek pasgemaakte aansig"},formatClearFilters:function(){return"Verwyder filters"},formatAddLevel:function(){return"Voeg 'n vlak by"},formatCancel:function(){return"Kanselleer"},formatColumn:function(){return"Kolom"},formatDeleteLevel:function(){return"Vee 'n vlak uit"},formatDuplicateAlertTitle:function(){return"Duplikaatinskrywings is gevind!"},formatDuplicateAlertDescription:function(){return"Verwyder of wysig asseblief duplikaatinskrywings"},formatMultipleSort:function(){return"Multi-sorteer"},formatOrder:function(){return"Bestelling"},formatSort:function(){return"Rangskik"},formatSortBy:function(){return"Sorteer volgens"},formatSortOrders:function(){return{asc:"Stygende",desc:"Dalende"}},formatThenBy:function(){return"Dan deur"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["af-ZA"]),t.fn.bootstrapTable.locales["bg-BG"]=t.fn.bootstrapTable.locales.bg={formatCopyRows:function(){return"Копиране на редове"},formatPrint:function(){return"Печат"},formatLoadingMessage:function(){return"Зареждане, моля изчакайте"},formatRecordsPerPage:function(t){return"".concat(t," реда на страница")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Показани редове от ".concat(t," до ").concat(n," от ").concat(r," (филтрирани от общо ").concat(o,")"):"Показани редове от ".concat(t," до ").concat(n," от общо ").concat(r)},formatSRPaginationPreText:function(){return"предишна страница"},formatSRPaginationPageText:function(t){return"до страница ".concat(t)},formatSRPaginationNextText:function(){return"следваща страница"},formatDetailPagination:function(t){return"Показани ".concat(t," реда")},formatClearSearch:function(){return"Изчистване на търсенето"},formatSearch:function(){return"Търсене"},formatNoMatches:function(){return"Не са намерени съвпадащи записи"},formatPaginationSwitch:function(){return"Скриване/Показване на странициране"},formatPaginationSwitchDown:function(){return"Показване на странициране"},formatPaginationSwitchUp:function(){return"Скриване на странициране"},formatRefresh:function(){return"Обновяване"},formatToggleOn:function(){return"Показване на изглед карта"},formatToggleOff:function(){return"Скриване на изглед карта"},formatColumns:function(){return"Колони"},formatColumnsToggleAll:function(){return"Превключване на всички"},formatFullscreen:function(){return"Цял екран"},formatAllRows:function(){return"Всички"},formatAutoRefresh:function(){return"Автоматично обновяване"},formatExport:function(){return"Експорт на данни"},formatJumpTo:function(){return"ОТИДИ"},formatAdvancedSearch:function(){return"Разширено търсене"},formatAdvancedCloseButton:function(){return"Затваряне"},formatFilterControlSwitch:function(){return"Скрива/показва контроли"},formatFilterControlSwitchHide:function(){return"Скрива контроли"},formatFilterControlSwitchShow:function(){return"Показва контроли"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["bg-BG"]),t.fn.bootstrapTable.locales["ca-ES"]=t.fn.bootstrapTable.locales.ca={formatCopyRows:function(){return"Copia resultats"},formatPrint:function(){return"Imprimeix"},formatLoadingMessage:function(){return"Espereu, si us plau"},formatRecordsPerPage:function(t){return"".concat(t," resultats per pàgina")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Mostrant resultats ".concat(t," fins ").concat(n," - ").concat(r," resultats (filtrats d'un total de ").concat(o," resultats)"):"Mostrant resultats ".concat(t," fins ").concat(n," - ").concat(r," resultats en total")},formatSRPaginationPreText:function(){return"Pàgina anterior"},formatSRPaginationPageText:function(t){return"A la pàgina ".concat(t)},formatSRPaginationNextText:function(){return"Pàgina següent"},formatDetailPagination:function(t){return"Mostrant ".concat(t," resultats")},formatClearSearch:function(){return"Neteja cerca"},formatSearch:function(){return"Cerca"},formatNoMatches:function(){return"No s'han trobat resultats"},formatPaginationSwitch:function(){return"Amaga/Mostra paginació"},formatPaginationSwitchDown:function(){return"Mostra paginació"},formatPaginationSwitchUp:function(){return"Amaga paginació"},formatRefresh:function(){return"Refresca"},formatToggleOn:function(){return"Mostra vista de tarjeta"},formatToggleOff:function(){return"Amaga vista de tarjeta"},formatColumns:function(){return"Columnes"},formatColumnsToggleAll:function(){return"Alterna totes"},formatFullscreen:function(){return"Pantalla completa"},formatAllRows:function(){return"Tots"},formatAutoRefresh:function(){return"Auto Refresca"},formatExport:function(){return"Exporta dades"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Cerca avançada"},formatAdvancedCloseButton:function(){return"Tanca"},formatFilterControlSwitch:function(){return"Mostra/Amaga controls"},formatFilterControlSwitchHide:function(){return"Mostra controls"},formatFilterControlSwitchShow:function(){return"Amaga controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["ca-ES"]),t.fn.bootstrapTable.locales["cs-CZ"]=t.fn.bootstrapTable.locales.cs={formatCopyRows:function(){return"Kopírovat řádky"},formatPrint:function(){return"Tisk"},formatLoadingMessage:function(){return"Čekejte, prosím"},formatRecordsPerPage:function(t){return"".concat(t," položek na stránku")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Zobrazena ".concat(t,". - ").concat(n," . položka z celkových ").concat(r," (filtered from ").concat(o," total rows)"):"Zobrazena ".concat(t,". - ").concat(n," . položka z celkových ").concat(r)},formatSRPaginationPreText:function(){return"předchozí strana"},formatSRPaginationPageText:function(t){return"na stranu ".concat(t)},formatSRPaginationNextText:function(){return"další strana"},formatDetailPagination:function(t){return"Zobrazuji ".concat(t," řádek")},formatClearSearch:function(){return"Smazat hledání"},formatSearch:function(){return"Vyhledávání"},formatNoMatches:function(){return"Nenalezena žádná vyhovující položka"},formatPaginationSwitch:function(){return"Skrýt/Zobrazit stránkování"},formatPaginationSwitchDown:function(){return"Zobrazit stránkování"},formatPaginationSwitchUp:function(){return"Skrýt stránkování"},formatRefresh:function(){return"Aktualizovat"},formatToggleOn:function(){return"Zobrazit karty"},formatToggleOff:function(){return"Zobrazit tabulku"},formatColumns:function(){return"Sloupce"},formatColumnsToggleAll:function(){return"Zobrazit/Skrýt vše"},formatFullscreen:function(){return"Zapnout/Vypnout fullscreen"},formatAllRows:function(){return"Vše"},formatAutoRefresh:function(){return"Automatické obnovení"},formatExport:function(){return"Export dat"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Pokročilé hledání"},formatAdvancedCloseButton:function(){return"Zavřít"},formatFilterControlSwitch:function(){return"Skrýt/Zobrazit ovladače"},formatFilterControlSwitchHide:function(){return"Skrýt ovladače"},formatFilterControlSwitchShow:function(){return"Zobrazit ovladače"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["cs-CZ"]),t.fn.bootstrapTable.locales["da-DK"]=t.fn.bootstrapTable.locales.da={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Indlæser, vent venligst"},formatRecordsPerPage:function(t){return"".concat(t," poster pr side")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Viser ".concat(t," til ").concat(n," af ").concat(r," række").concat(r>1?"r":""," (filtered from ").concat(o," total rows)"):"Viser ".concat(t," til ").concat(n," af ").concat(r," række").concat(r>1?"r":"")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Viser ".concat(t," række").concat(t>1?"r":"")},formatClearSearch:function(){return"Ryd filtre"},formatSearch:function(){return"Søg"},formatNoMatches:function(){return"Ingen poster fundet"},formatPaginationSwitch:function(){return"Skjul/vis nummerering"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Opdater"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Kolonner"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Alle"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Eksporter"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["da-DK"]),t.fn.bootstrapTable.locales["de-DE"]=t.fn.bootstrapTable.locales.de={formatCopyRows:function(){return"Zeilen kopieren"},formatPrint:function(){return"Drucken"},formatLoadingMessage:function(){return"Lade, bitte warten"},formatRecordsPerPage:function(t){return"".concat(t," Zeilen pro Seite.")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Zeige Zeile ".concat(t," bis ").concat(n," von ").concat(r," Zeile").concat(r>1?"n":""," (Gefiltert von ").concat(o," Zeile").concat(o>1?"n":"",")"):"Zeige Zeile ".concat(t," bis ").concat(n," von ").concat(r," Zeile").concat(r>1?"n":"",".")},formatSRPaginationPreText:function(){return"Vorherige Seite"},formatSRPaginationPageText:function(t){return"Zu Seite ".concat(t)},formatSRPaginationNextText:function(){return"Nächste Seite"},formatDetailPagination:function(t){return"Zeige ".concat(t," Zeile").concat(t>1?"n":"",".")},formatClearSearch:function(){return"Lösche Filter"},formatSearch:function(){return"Suchen"},formatNoMatches:function(){return"Keine passenden Ergebnisse gefunden"},formatPaginationSwitch:function(){return"Verstecke/Zeige Nummerierung"},formatPaginationSwitchDown:function(){return"Zeige Nummerierung"},formatPaginationSwitchUp:function(){return"Verstecke Nummerierung"},formatRefresh:function(){return"Neu laden"},formatToggleOn:function(){return"Normale Ansicht"},formatToggleOff:function(){return"Kartenansicht"},formatColumns:function(){return"Spalten"},formatColumnsToggleAll:function(){return"Alle umschalten"},formatFullscreen:function(){return"Vollbild"},formatAllRows:function(){return"Alle"},formatAutoRefresh:function(){return"Automatisches Neuladen"},formatExport:function(){return"Datenexport"},formatJumpTo:function(){return"Springen"},formatAdvancedSearch:function(){return"Erweiterte Suche"},formatAdvancedCloseButton:function(){return"Schließen"},formatFilterControlSwitch:function(){return"Verstecke/Zeige Filter"},formatFilterControlSwitchHide:function(){return"Verstecke Filter"},formatFilterControlSwitchShow:function(){return"Zeige Filter"},formatAddLevel:function(){return"Ebene hinzufügen"},formatCancel:function(){return"Abbrechen"},formatColumn:function(){return"Spalte"},formatDeleteLevel:function(){return"Ebene entfernen"},formatDuplicateAlertTitle:function(){return"Doppelte Einträge gefunden!"},formatDuplicateAlertDescription:function(){return"Bitte doppelte Spalten entfenen oder ändern"},formatMultipleSort:function(){return"Mehrfachsortierung"},formatOrder:function(){return"Reihenfolge"},formatSort:function(){return"Sortieren"},formatSortBy:function(){return"Sortieren nach"},formatThenBy:function(){return"anschließend"},formatSortOrders:function(){return{asc:"Aufsteigend",desc:"Absteigend"}}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["de-DE"]),t.fn.bootstrapTable.locales["ar-SA"]=t.fn.bootstrapTable.locales.ar={formatCopyRows:function(){return"نسخ الصفوف"},formatPrint:function(){return"طباعة"},formatLoadingMessage:function(){return"جارٍ التحميل، يرجى الانتظار..."},formatRecordsPerPage:function(t){return"".concat(t," صف لكل صفحة")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"الظاهر ".concat(t," إلى ").concat(n," من ").concat(r," سجل ").concat(o," إجمالي الصفوف)"):"الظاهر ".concat(t," إلى ").concat(n," من ").concat(r," سجل")},formatSRPaginationPreText:function(){return"الصفحة السابقة"},formatSRPaginationPageText:function(t){return"إلى الصفحة ".concat(t)},formatSRPaginationNextText:function(){return"الصفحة التالية"},formatDetailPagination:function(t){return"عرض ".concat(t," أعمدة")},formatClearSearch:function(){return"مسح مربع البحث"},formatSearch:function(){return"بحث"},formatNoMatches:function(){return"لا توجد نتائج مطابقة للبحث"},formatPaginationSwitch:function(){return"إخفاء/إظهار ترقيم الصفحات"},formatPaginationSwitchDown:function(){return"إظهار ترقيم الصفحات"},formatPaginationSwitchUp:function(){return"إخفاء ترقيم الصفحات"},formatRefresh:function(){return"تحديث"},formatToggleOn:function(){return"إظهار كبطاقات"},formatToggleOff:function(){return"إلغاء البطاقات"},formatColumns:function(){return"أعمدة"},formatColumnsToggleAll:function(){return"تبديل الكل"},formatFullscreen:function(){return"الشاشة كاملة"},formatAllRows:function(){return"الكل"},formatAutoRefresh:function(){return"تحديث تلقائي"},formatExport:function(){return"تصدير البيانات"},formatJumpTo:function(){return"قفز"},formatAdvancedSearch:function(){return"بحث متقدم"},formatAdvancedCloseButton:function(){return"إغلاق"},formatFilterControlSwitch:function(){return"عرض/إخفاء عناصر التصفية"},formatFilterControlSwitchHide:function(){return"إخفاء عناصر التصفية"},formatFilterControlSwitchShow:function(){return"عرض عناصر التصفية"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["ar-SA"]),t.fn.bootstrapTable.locales["el-GR"]=t.fn.bootstrapTable.locales.el={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Φορτώνει, παρακαλώ περιμένετε"},formatRecordsPerPage:function(t){return"".concat(t," αποτελέσματα ανά σελίδα")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Εμφανίζονται από την ".concat(t," ως την ").concat(n," από σύνολο ").concat(r," σειρών (filtered from ").concat(o," total rows)"):"Εμφανίζονται από την ".concat(t," ως την ").concat(n," από σύνολο ").concat(r," σειρών")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Αναζητήστε"},formatNoMatches:function(){return"Δεν βρέθηκαν αποτελέσματα"},formatPaginationSwitch:function(){return"Hide/Show pagination"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Refresh"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Columns"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"All"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["el-GR"]),t.fn.bootstrapTable.locales["es-AR"]={formatCopyRows:function(){return"Copiar Filas"},formatPrint:function(){return"Imprimir"},formatLoadingMessage:function(){return"Cargando, espere por favor"},formatRecordsPerPage:function(t){return"".concat(t," registros por página")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Mostrando desde ".concat(t," a ").concat(n," de ").concat(r," filas (filtrado de ").concat(o," columnas totales)"):"Mostrando desde ".concat(t," a ").concat(n," de ").concat(r," filas")},formatSRPaginationPreText:function(){return"página anterior"},formatSRPaginationPageText:function(t){return"a la página ".concat(t)},formatSRPaginationNextText:function(){return"siguiente página"},formatDetailPagination:function(t){return"Mostrando ".concat(t," columnas")},formatClearSearch:function(){return"Limpiar búsqueda"},formatSearch:function(){return"Buscar"},formatNoMatches:function(){return"No se encontraron registros"},formatPaginationSwitch:function(){return"Ocultar/Mostrar paginación"},formatPaginationSwitchDown:function(){return"Mostrar paginación"},formatPaginationSwitchUp:function(){return"Ocultar paginación"},formatRefresh:function(){return"Recargar"},formatToggleOn:function(){return"Mostrar vista de carta"},formatToggleOff:function(){return"Ocultar vista de carta"},formatColumns:function(){return"Columnas"},formatColumnsToggleAll:function(){return"Cambiar todo"},formatFullscreen:function(){return"Pantalla completa"},formatAllRows:function(){return"Todo"},formatAutoRefresh:function(){return"Auto Recargar"},formatExport:function(){return"Exportar datos"},formatJumpTo:function(){return"Ir"},formatAdvancedSearch:function(){return"Búsqueda avanzada"},formatAdvancedCloseButton:function(){return"Cerrar"},formatFilterControlSwitch:function(){return"Ocultar/Mostrar controles"},formatFilterControlSwitchHide:function(){return"Ocultar controles"},formatFilterControlSwitchShow:function(){return"Mostrar controles"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["es-AR"]),t.fn.bootstrapTable.locales["es-CL"]={formatCopyRows:function(){return"Copiar Filas"},formatPrint:function(){return"Imprimir"},formatLoadingMessage:function(){return"Cargando, espere por favor"},formatRecordsPerPage:function(t){return"".concat(t," filas por página")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Mostrando ".concat(t," a ").concat(n," de ").concat(r," filas (filtrado de ").concat(o," filas totales)"):"Mostrando ".concat(t," a ").concat(n," de ").concat(r," filas")},formatSRPaginationPreText:function(){return"página anterior"},formatSRPaginationPageText:function(t){return"a la página ".concat(t)},formatSRPaginationNextText:function(){return"siguiente página"},formatDetailPagination:function(t){return"Mostrando ".concat(t," filas")},formatClearSearch:function(){return"Limpiar búsqueda"},formatSearch:function(){return"Buscar"},formatNoMatches:function(){return"No se encontraron registros"},formatPaginationSwitch:function(){return"Ocultar/Mostrar paginación"},formatPaginationSwitchDown:function(){return"Mostrar paginación"},formatPaginationSwitchUp:function(){return"Ocultar paginación"},formatRefresh:function(){return"Refrescar"},formatToggleOn:function(){return"Mostrar vista de carta"},formatToggleOff:function(){return"Ocultar vista de carta"},formatColumns:function(){return"Columnas"},formatColumnsToggleAll:function(){return"Cambiar todo"},formatFullscreen:function(){return"Pantalla completa"},formatAllRows:function(){return"Todo"},formatAutoRefresh:function(){return"Auto Recargar"},formatExport:function(){return"Exportar datos"},formatJumpTo:function(){return"IR"},formatAdvancedSearch:function(){return"Búsqueda avanzada"},formatAdvancedCloseButton:function(){return"Cerrar"},formatFilterControlSwitch:function(){return"Ocultar/Mostrar controles"},formatFilterControlSwitchHide:function(){return"Ocultar controles"},formatFilterControlSwitchShow:function(){return"Mostrar controles"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["es-CL"]),t.fn.bootstrapTable.locales["es-ES"]=t.fn.bootstrapTable.locales.es={formatCopyRows:function(){return"Copiar filas"},formatPrint:function(){return"Imprimir"},formatLoadingMessage:function(){return"Cargando, por favor espere"},formatRecordsPerPage:function(t){return"".concat(t," resultados por página")},formatShowingRows:function(t,n,r,o){var e=r>1?"s":"";return void 0!==o&&o>0&&o>r?"Mostrando desde ".concat(t," hasta ").concat(n," - En total ").concat(r," resultado").concat(e," (filtrado de un total de ").concat(o," fila").concat(e,")"):"Mostrando desde ".concat(t," hasta ").concat(n," - En total ").concat(r," resultado").concat(e)},formatSRPaginationPreText:function(){return"página anterior"},formatSRPaginationPageText:function(t){return"a la página ".concat(t)},formatSRPaginationNextText:function(){return"siguiente página"},formatDetailPagination:function(t){return"Mostrando ".concat(t," fila").concat(t>1?"s":"")},formatClearSearch:function(){return"Limpiar búsqueda"},formatSearch:function(){return"Buscar"},formatNoMatches:function(){return"No se encontraron resultados coincidentes"},formatPaginationSwitch:function(){return"Ocultar/Mostrar paginación"},formatPaginationSwitchDown:function(){return"Mostrar paginación"},formatPaginationSwitchUp:function(){return"Ocultar paginación"},formatRefresh:function(){return"Recargar"},formatToggleOn:function(){return"Mostrar vista de carta"},formatToggleOff:function(){return"Ocultar vista de carta"},formatColumns:function(){return"Columnas"},formatColumnsToggleAll:function(){return"Cambiar todo"},formatFullscreen:function(){return"Pantalla completa"},formatAllRows:function(){return"Todos"},formatAutoRefresh:function(){return"Auto Recargar"},formatExport:function(){return"Exportar los datos"},formatJumpTo:function(){return"IR"},formatAdvancedSearch:function(){return"Búsqueda avanzada"},formatAdvancedCloseButton:function(){return"Cerrar"},formatFilterControlSwitch:function(){return"Ocultar/Exibir controles"},formatFilterControlSwitchHide:function(){return"Ocultar controles"},formatFilterControlSwitchShow:function(){return"Mostrar controles"},formatAddLevel:function(){return"Agregar nivel"},formatCancel:function(){return"Cancelar"},formatColumn:function(){return"Columna"},formatDeleteLevel:function(){return"Eliminar nivel"},formatDuplicateAlertTitle:function(){return"¡Se encontraron entradas duplicadas!"},formatDuplicateAlertDescription:function(){return"Por favor, elimine o modifique las columnas duplicadas"},formatMultipleSort:function(){return"Ordenación múltiple"},formatOrder:function(){return"Orden"},formatSort:function(){return"Ordenar"},formatSortBy:function(){return"Ordenar por"},formatThenBy:function(){return"a continuación"},formatSortOrders:function(){return{asc:"Ascendente",desc:"Descendente"}}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["es-ES"]),t.fn.bootstrapTable.locales["es-CR"]={formatCopyRows:function(){return"Copiar filas"},formatPrint:function(){return"Imprimir"},formatLoadingMessage:function(){return"Cargando, por favor espere"},formatRecordsPerPage:function(t){return"".concat(t," filas por página")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Mostrando ".concat(t," a ").concat(n," de ").concat(r," filas (filtrado de un total de ").concat(o," filas)"):"Mostrando ".concat(t," a ").concat(n," de ").concat(r," filas")},formatSRPaginationPreText:function(){return"página anterior"},formatSRPaginationPageText:function(t){return"ir a la página ".concat(t)},formatSRPaginationNextText:function(){return"página siguiente"},formatDetailPagination:function(t){return"Mostrando ".concat(t," filas")},formatClearSearch:function(){return"Limpiar búsqueda"},formatSearch:function(){return"Buscar"},formatNoMatches:function(){return"No se encontraron resultados"},formatPaginationSwitch:function(){return"Mostrar/ocultar paginación"},formatPaginationSwitchDown:function(){return"Mostrar paginación"},formatPaginationSwitchUp:function(){return"Ocultar paginación"},formatRefresh:function(){return"Actualizar"},formatToggleOn:function(){return"Mostrar vista en tarjetas"},formatToggleOff:function(){return"Ocultar vista en tarjetas"},formatColumns:function(){return"Columnas"},formatColumnsToggleAll:function(){return"Alternar todo"},formatFullscreen:function(){return"Pantalla completa"},formatAllRows:function(){return"Todas las filas"},formatAutoRefresh:function(){return"Actualización automática"},formatExport:function(){return"Exportar"},formatJumpTo:function(){return"Ver"},formatAdvancedSearch:function(){return"Búsqueda avanzada"},formatAdvancedCloseButton:function(){return"Cerrar"},formatFilterControlSwitch:function(){return"Mostrar/ocultar controles"},formatFilterControlSwitchHide:function(){return"Ocultar controles"},formatFilterControlSwitchShow:function(){return"Mostrar controles"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["es-CR"]),t.fn.bootstrapTable.locales["es-NI"]={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Cargando, por favor espere"},formatRecordsPerPage:function(t){return"".concat(t," registros por página")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Mostrando de ".concat(t," a ").concat(n," registros de ").concat(r," registros en total (filtered from ").concat(o," total rows)"):"Mostrando de ".concat(t," a ").concat(n," registros de ").concat(r," registros en total")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Limpiar búsqueda"},formatSearch:function(){return"Buscar"},formatNoMatches:function(){return"No se encontraron registros"},formatPaginationSwitch:function(){return"Hide/Show pagination"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Refrescar"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Columnas"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Todo"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Ocultar/Mostrar controles"},formatFilterControlSwitchHide:function(){return"Ocultar controles"},formatFilterControlSwitchShow:function(){return"Mostrar controles"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["es-NI"]),t.fn.bootstrapTable.locales["es-MX"]={formatCopyRows:function(){return"Copiar Filas"},formatPrint:function(){return"Imprimir"},formatLoadingMessage:function(){return"Cargando, espere por favor"},formatRecordsPerPage:function(t){return"".concat(t," resultados por página")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Mostrando ".concat(t," a ").concat(n," de ").concat(r," filas (filtrado de ").concat(o," filas totales)"):"Mostrando ".concat(t," a ").concat(n," de ").concat(r," filas")},formatSRPaginationPreText:function(){return"página anterior"},formatSRPaginationPageText:function(t){return"ir a la página ".concat(t)},formatSRPaginationNextText:function(){return"página siguiente"},formatDetailPagination:function(t){return"Mostrando ".concat(t," filas")},formatClearSearch:function(){return"Limpiar búsqueda"},formatSearch:function(){return"Buscar"},formatNoMatches:function(){return"No se encontraron registros que coincidan"},formatPaginationSwitch:function(){return"Mostrar/ocultar paginación"},formatPaginationSwitchDown:function(){return"Mostrar paginación"},formatPaginationSwitchUp:function(){return"Ocultar paginación"},formatRefresh:function(){return"Actualizar"},formatToggleOn:function(){return"Mostrar vista"},formatToggleOff:function(){return"Ocultar vista"},formatColumns:function(){return"Columnas"},formatColumnsToggleAll:function(){return"Alternar todo"},formatFullscreen:function(){return"Pantalla completa"},formatAllRows:function(){return"Todo"},formatAutoRefresh:function(){return"Auto actualizar"},formatExport:function(){return"Exportar datos"},formatJumpTo:function(){return"IR"},formatAdvancedSearch:function(){return"Búsqueda avanzada"},formatAdvancedCloseButton:function(){return"Cerrar"},formatFilterControlSwitch:function(){return"Ocultar/Mostrar controles"},formatFilterControlSwitchHide:function(){return"Ocultar controles"},formatFilterControlSwitchShow:function(){return"Mostrar controles"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["es-MX"]),t.fn.bootstrapTable.locales["es-SP"]={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Cargando, por favor espera"},formatRecordsPerPage:function(t){return"".concat(t," registros por página.")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"".concat(t," - ").concat(n," de ").concat(r," registros (filtered from ").concat(o," total rows)"):"".concat(t," - ").concat(n," de ").concat(r," registros.")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Limpiar búsqueda"},formatSearch:function(){return"Buscar"},formatNoMatches:function(){return"No se han encontrado registros."},formatPaginationSwitch:function(){return"Hide/Show pagination"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Actualizar"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Columnas"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Todo"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Ocultar/Mostrar controles"},formatFilterControlSwitchHide:function(){return"Ocultar controles"},formatFilterControlSwitchShow:function(){return"Mostrar controles"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["es-SP"]),t.fn.bootstrapTable.locales["et-EE"]=t.fn.bootstrapTable.locales.et={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Päring käib, palun oota"},formatRecordsPerPage:function(t){return"".concat(t," rida lehe kohta")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Näitan tulemusi ".concat(t," kuni ").concat(n," - kokku ").concat(r," tulemust (filtered from ").concat(o," total rows)"):"Näitan tulemusi ".concat(t," kuni ").concat(n," - kokku ").concat(r," tulemust")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Otsi"},formatNoMatches:function(){return"Päringu tingimustele ei vastanud ühtegi tulemust"},formatPaginationSwitch:function(){return"Näita/Peida lehtedeks jagamine"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Värskenda"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Veerud"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Kõik"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["et-EE"]),t.fn.bootstrapTable.locales["eu-EU"]=t.fn.bootstrapTable.locales.eu={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Itxaron mesedez"},formatRecordsPerPage:function(t){return"".concat(t," emaitza orriko.")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"".concat(r," erregistroetatik ").concat(t,"etik ").concat(n,"erakoak erakusten (filtered from ").concat(o," total rows)"):"".concat(r," erregistroetatik ").concat(t,"etik ").concat(n,"erakoak erakusten.")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Bilatu"},formatNoMatches:function(){return"Ez da emaitzarik aurkitu"},formatPaginationSwitch:function(){return"Ezkutatu/Erakutsi orrikatzea"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Eguneratu"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Zutabeak"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Guztiak"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["eu-EU"]),t.fn.bootstrapTable.locales["fa-IR"]=t.fn.bootstrapTable.locales.fa={formatCopyRows:function(){return"کپی ردیف ها"},formatPrint:function(){return"پرینت"},formatLoadingMessage:function(){return"در حال بارگذاری, لطفا صبر کنید"},formatRecordsPerPage:function(t){return"".concat(t," رکورد در صفحه")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"نمایش ".concat(t," تا ").concat(n," از ").concat(r," ردیف (filtered from ").concat(o," total rows)"):"نمایش ".concat(t," تا ").concat(n," از ").concat(r," ردیف")},formatSRPaginationPreText:function(){return"صفحه قبلی"},formatSRPaginationPageText:function(t){return"به صفحه ".concat(t)},formatSRPaginationNextText:function(){return"صفحه بعدی"},formatDetailPagination:function(t){return"نمایش ".concat(t," سطرها")},formatClearSearch:function(){return"پاک کردن جستجو"},formatSearch:function(){return"جستجو"},formatNoMatches:function(){return"رکوردی یافت نشد."},formatPaginationSwitch:function(){return"نمایش/مخفی صفحه بندی"},formatPaginationSwitchDown:function(){return"نمایش صفحه بندی"},formatPaginationSwitchUp:function(){return"پنهان کردن صفحه بندی"},formatRefresh:function(){return"به روز رسانی"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"سطر ها"},formatColumnsToggleAll:function(){return"تغییر وضعیت همه"},formatFullscreen:function(){return"تمام صفحه"},formatAllRows:function(){return"همه"},formatAutoRefresh:function(){return"رفرش اتوماتیک"},formatExport:function(){return"خروجی دیتا"},formatJumpTo:function(){return"برو"},formatAdvancedSearch:function(){return"جستجوی پیشرفته"},formatAdvancedCloseButton:function(){return"بستن"},formatFilterControlSwitch:function(){return"پنهان/نمایش دادن کنترل ها"},formatFilterControlSwitchHide:function(){return"پنهان کردن کنترل ها"},formatFilterControlSwitchShow:function(){return"نمایش کنترل ها"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["fa-IR"]),t.fn.bootstrapTable.locales["fi-FI"]=t.fn.bootstrapTable.locales.fi={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Ladataan, ole hyvä ja odota"},formatRecordsPerPage:function(t){return"".concat(t," riviä sivulla")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Näytetään rivit ".concat(t," - ").concat(n," / ").concat(r," (filtered from ").concat(o," total rows)"):"Näytetään rivit ".concat(t," - ").concat(n," / ").concat(r)},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Poista suodattimet"},formatSearch:function(){return"Hae"},formatNoMatches:function(){return"Hakuehtoja vastaavia tuloksia ei löytynyt"},formatPaginationSwitch:function(){return"Näytä/Piilota sivutus"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Päivitä"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Sarakkeet"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Kaikki"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Vie tiedot"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["fi-FI"]),t.fn.bootstrapTable.locales["fr-BE"]={formatCopyRows:function(){return"Copier les lignes"},formatPrint:function(){return"Imprimer"},formatLoadingMessage:function(){return"Chargement en cours"},formatRecordsPerPage:function(t){return"".concat(t," lignes par page")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Affichage de ".concat(t," à ").concat(n," sur ").concat(r," lignes (filtrées à partir de ").concat(o," lignes)"):"Affichage de ".concat(t," à ").concat(n," sur ").concat(r," lignes")},formatSRPaginationPreText:function(){return"page précédente"},formatSRPaginationPageText:function(t){return"vers la page ".concat(t)},formatSRPaginationNextText:function(){return"page suivante"},formatDetailPagination:function(t){return"Affichage de ".concat(t," lignes")},formatClearSearch:function(){return"Effacer la recherche"},formatSearch:function(){return"Rechercher"},formatNoMatches:function(){return"Aucun résultat"},formatPaginationSwitch:function(){return"Masquer/Afficher la pagination"},formatPaginationSwitchDown:function(){return"Afficher la pagination"},formatPaginationSwitchUp:function(){return"Masquer la pagination"},formatRefresh:function(){return"Actualiser"},formatToggleOn:function(){return"Afficher la vue en cartes"},formatToggleOff:function(){return"Cacher la vue en cartes"},formatColumns:function(){return"Colonnes"},formatColumnsToggleAll:function(){return"Tout afficher"},formatFullscreen:function(){return"Plein écran"},formatAllRows:function(){return"Tout"},formatAutoRefresh:function(){return"Actualiser automatiquement"},formatExport:function(){return"Exporter"},formatJumpTo:function(){return"Aller à"},formatAdvancedSearch:function(){return"Recherche avancée"},formatAdvancedCloseButton:function(){return"Fermer"},formatFilterControlSwitch:function(){return"Masquer/Afficher les contrôles"},formatFilterControlSwitchHide:function(){return"Masquer les contrôles"},formatFilterControlSwitchShow:function(){return"Afficher les contrôles"},formatToggleCustomViewOn:function(){return"Afficher la vue personnalisée"},formatToggleCustomViewOff:function(){return"Cacher la vue personnalisée"},formatClearFilters:function(){return"Retirer les filtres"},formatAddLevel:function(){return"Ajouter un niveau"},formatCancel:function(){return"Annuler"},formatColumn:function(){return"Colonne"},formatDeleteLevel:function(){return"Supprimer un niveau"},formatDuplicateAlertTitle:function(){return"Des entrées en double ont été trouvées !"},formatDuplicateAlertDescription:function(){return"Veuillez supprimer ou modifier les entrées en double"},formatMultipleSort:function(){return"Tri multiple"},formatOrder:function(){return"Ordre"},formatSort:function(){return"Trier"},formatSortBy:function(){return"Trier par"},formatSortOrders:function(){return{asc:"Ascendant",desc:"Descendant"}},formatThenBy:function(){return"Puis par"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["fr-BE"]),t.fn.bootstrapTable.locales["fr-CH"]={formatCopyRows:function(){return"Copier les lignes"},formatPrint:function(){return"Imprimer"},formatLoadingMessage:function(){return"Chargement en cours"},formatRecordsPerPage:function(t){return"".concat(t," lignes par page")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Affichage de ".concat(t," à ").concat(n," sur ").concat(r," lignes (filtrées à partir de ").concat(o," lignes)"):"Affichage de ".concat(t," à ").concat(n," sur ").concat(r," lignes")},formatSRPaginationPreText:function(){return"page précédente"},formatSRPaginationPageText:function(t){return"vers la page ".concat(t)},formatSRPaginationNextText:function(){return"page suivante"},formatDetailPagination:function(t){return"Affichage de ".concat(t," lignes")},formatClearSearch:function(){return"Effacer la recherche"},formatSearch:function(){return"Rechercher"},formatNoMatches:function(){return"Aucun résultat"},formatPaginationSwitch:function(){return"Masquer/Afficher la pagination"},formatPaginationSwitchDown:function(){return"Afficher la pagination"},formatPaginationSwitchUp:function(){return"Masquer la pagination"},formatRefresh:function(){return"Actualiser"},formatToggleOn:function(){return"Afficher la vue en cartes"},formatToggleOff:function(){return"Cacher la vue en cartes"},formatColumns:function(){return"Colonnes"},formatColumnsToggleAll:function(){return"Tout afficher"},formatFullscreen:function(){return"Plein écran"},formatAllRows:function(){return"Tout"},formatAutoRefresh:function(){return"Actualiser automatiquement"},formatExport:function(){return"Exporter"},formatJumpTo:function(){return"Aller à"},formatAdvancedSearch:function(){return"Recherche avancée"},formatAdvancedCloseButton:function(){return"Fermer"},formatFilterControlSwitch:function(){return"Masquer/Afficher les contrôles"},formatFilterControlSwitchHide:function(){return"Masquer les contrôles"},formatFilterControlSwitchShow:function(){return"Afficher les contrôles"},formatToggleCustomViewOn:function(){return"Afficher la vue personnalisée"},formatToggleCustomViewOff:function(){return"Cacher la vue personnalisée"},formatClearFilters:function(){return"Retirer les filtres"},formatAddLevel:function(){return"Ajouter un niveau"},formatCancel:function(){return"Annuler"},formatColumn:function(){return"Colonne"},formatDeleteLevel:function(){return"Supprimer un niveau"},formatDuplicateAlertTitle:function(){return"Des entrées en double ont été trouvées !"},formatDuplicateAlertDescription:function(){return"Veuillez supprimer ou modifier les entrées en double"},formatMultipleSort:function(){return"Tri multiple"},formatOrder:function(){return"Ordre"},formatSort:function(){return"Trier"},formatSortBy:function(){return"Trier par"},formatSortOrders:function(){return{asc:"Ascendant",desc:"Descendant"}},formatThenBy:function(){return"Puis par"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["fr-CH"]),t.fn.bootstrapTable.locales["fr-FR"]=t.fn.bootstrapTable.locales.fr={formatCopyRows:function(){return"Copier les lignes"},formatPrint:function(){return"Imprimer"},formatLoadingMessage:function(){return"Chargement en cours"},formatRecordsPerPage:function(t){return"".concat(t," lignes par page")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Affichage de ".concat(t," à ").concat(n," sur ").concat(r," lignes (filtrées à partir de ").concat(o," lignes)"):"Affichage de ".concat(t," à ").concat(n," sur ").concat(r," lignes")},formatSRPaginationPreText:function(){return"page précédente"},formatSRPaginationPageText:function(t){return"vers la page ".concat(t)},formatSRPaginationNextText:function(){return"page suivante"},formatDetailPagination:function(t){return"Affichage de ".concat(t," lignes")},formatClearSearch:function(){return"Effacer la recherche"},formatSearch:function(){return"Rechercher"},formatNoMatches:function(){return"Aucun résultat"},formatPaginationSwitch:function(){return"Masquer/Afficher la pagination"},formatPaginationSwitchDown:function(){return"Afficher la pagination"},formatPaginationSwitchUp:function(){return"Masquer la pagination"},formatRefresh:function(){return"Actualiser"},formatToggleOn:function(){return"Afficher la vue en cartes"},formatToggleOff:function(){return"Cacher la vue en cartes"},formatColumns:function(){return"Colonnes"},formatColumnsToggleAll:function(){return"Tout afficher"},formatFullscreen:function(){return"Plein écran"},formatAllRows:function(){return"Tout"},formatAutoRefresh:function(){return"Actualiser automatiquement"},formatExport:function(){return"Exporter"},formatJumpTo:function(){return"Aller à"},formatAdvancedSearch:function(){return"Recherche avancée"},formatAdvancedCloseButton:function(){return"Fermer"},formatFilterControlSwitch:function(){return"Masquer/Afficher les contrôles"},formatFilterControlSwitchHide:function(){return"Masquer les contrôles"},formatFilterControlSwitchShow:function(){return"Afficher les contrôles"},formatToggleCustomViewOn:function(){return"Afficher la vue personnalisée"},formatToggleCustomViewOff:function(){return"Cacher la vue personnalisée"},formatClearFilters:function(){return"Retirer les filtres"},formatAddLevel:function(){return"Ajouter un niveau"},formatCancel:function(){return"Annuler"},formatColumn:function(){return"Colonne"},formatDeleteLevel:function(){return"Supprimer un niveau"},formatDuplicateAlertTitle:function(){return"Des entrées en double ont été trouvées !"},formatDuplicateAlertDescription:function(){return"Veuillez supprimer ou modifier les entrées en double"},formatMultipleSort:function(){return"Tri multiple"},formatOrder:function(){return"Ordre"},formatSort:function(){return"Trier"},formatSortBy:function(){return"Trier par"},formatSortOrders:function(){return{asc:"Ascendant",desc:"Descendant"}},formatThenBy:function(){return"Puis par"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["fr-FR"]),t.fn.bootstrapTable.locales["fr-LU"]={formatCopyRows:function(){return"Copier les lignes"},formatPrint:function(){return"Imprimer"},formatLoadingMessage:function(){return"Chargement en cours"},formatRecordsPerPage:function(t){return"".concat(t," lignes par page")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Affichage de ".concat(t," à ").concat(n," sur ").concat(r," lignes (filtrées à partir de ").concat(o," lignes)"):"Affichage de ".concat(t," à ").concat(n," sur ").concat(r," lignes")},formatSRPaginationPreText:function(){return"page précédente"},formatSRPaginationPageText:function(t){return"vers la page ".concat(t)},formatSRPaginationNextText:function(){return"page suivante"},formatDetailPagination:function(t){return"Affichage de ".concat(t," lignes")},formatClearSearch:function(){return"Effacer la recherche"},formatSearch:function(){return"Rechercher"},formatNoMatches:function(){return"Aucun résultat"},formatPaginationSwitch:function(){return"Masquer/Afficher la pagination"},formatPaginationSwitchDown:function(){return"Afficher la pagination"},formatPaginationSwitchUp:function(){return"Masquer la pagination"},formatRefresh:function(){return"Actualiser"},formatToggleOn:function(){return"Afficher la vue en cartes"},formatToggleOff:function(){return"Cacher la vue en cartes"},formatColumns:function(){return"Colonnes"},formatColumnsToggleAll:function(){return"Tout afficher"},formatFullscreen:function(){return"Plein écran"},formatAllRows:function(){return"Tout"},formatAutoRefresh:function(){return"Actualiser automatiquement"},formatExport:function(){return"Exporter"},formatJumpTo:function(){return"Aller à"},formatAdvancedSearch:function(){return"Recherche avancée"},formatAdvancedCloseButton:function(){return"Fermer"},formatFilterControlSwitch:function(){return"Masquer/Afficher les contrôles"},formatFilterControlSwitchHide:function(){return"Masquer les contrôles"},formatFilterControlSwitchShow:function(){return"Afficher les contrôles"},formatToggleCustomViewOn:function(){return"Afficher la vue personnalisée"},formatToggleCustomViewOff:function(){return"Cacher la vue personnalisée"},formatClearFilters:function(){return"Retirer les filtres"},formatAddLevel:function(){return"Ajouter un niveau"},formatCancel:function(){return"Annuler"},formatColumn:function(){return"Colonne"},formatDeleteLevel:function(){return"Supprimer un niveau"},formatDuplicateAlertTitle:function(){return"Des entrées en double ont été trouvées !"},formatDuplicateAlertDescription:function(){return"Veuillez supprimer ou modifier les entrées en double"},formatMultipleSort:function(){return"Tri multiple"},formatOrder:function(){return"Ordre"},formatSort:function(){return"Trier"},formatSortBy:function(){return"Trier par"},formatSortOrders:function(){return{asc:"Ascendant",desc:"Descendant"}},formatThenBy:function(){return"Puis par"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["fr-LU"]),t.fn.bootstrapTable.locales["he-IL"]=t.fn.bootstrapTable.locales.he={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"טוען, נא להמתין"},formatRecordsPerPage:function(t){return"".concat(t," שורות בעמוד")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"מציג ".concat(t," עד ").concat(n," מ-").concat(r,"שורות").concat(o," total rows)"):"מציג ".concat(t," עד ").concat(n," מ-").concat(r," שורות")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"חיפוש"},formatNoMatches:function(){return"לא נמצאו רשומות תואמות"},formatPaginationSwitch:function(){return"הסתר/הצג מספור דפים"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"רענן"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"עמודות"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"הכל"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["he-IL"]),t.fn.bootstrapTable.locales["hi-IN"]={formatCopyRows:function(){return"पंक्तियों की कॉपी करें"},formatPrint:function(){return"प्रिंट"},formatLoadingMessage:function(){return"लोड हो रहा है कृपया प्रतीक्षा करें"},formatRecordsPerPage:function(t){return"".concat(t," प्रति पृष्ठ पंक्तियाँ")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"".concat(t," - ").concat(n," पक्तिया ").concat(r," में से ( ").concat(o," पक्तिया)"):"".concat(t," - ").concat(n," पक्तिया ").concat(r," में से")},formatSRPaginationPreText:function(){return"पिछला पृष्ठ"},formatSRPaginationPageText:function(t){return"".concat(t," पृष्ठ पर")},formatSRPaginationNextText:function(){return"अगला पृष्ठ"},formatDetailPagination:function(t){return"".concat(t," पंक्तियां")},formatClearSearch:function(){return"सर्च क्लिअर करें"},formatSearch:function(){return"सर्च"},formatNoMatches:function(){return"मेल खाते रिकॉर्ड नही मिले"},formatPaginationSwitch:function(){return"छुपाओ/दिखाओ पृष्ठ संख्या"},formatPaginationSwitchDown:function(){return"दिखाओ पृष्ठ संख्या"},formatPaginationSwitchUp:function(){return"छुपाओ पृष्ठ संख्या"},formatRefresh:function(){return"रिफ्रेश"},formatToggleOn:function(){return"कार्ड दृश्य दिखाएं"},formatToggleOff:function(){return"कार्ड दृश्य छुपाएं"},formatColumns:function(){return"कॉलम"},formatColumnsToggleAll:function(){return"टॉगल आल"},formatFullscreen:function(){return"पूर्ण स्क्रीन"},formatAllRows:function(){return"सब"},formatAutoRefresh:function(){return"ऑटो रिफ्रेश"},formatExport:function(){return"एक्सपोर्ट डाटा"},formatJumpTo:function(){return"जाओ"},formatAdvancedSearch:function(){return"एडवांस सर्च"},formatAdvancedCloseButton:function(){return"बंद करे"},formatFilterControlSwitch:function(){return"छुपाओ/दिखाओ कंट्रोल्स"},formatFilterControlSwitchHide:function(){return"छुपाओ कंट्रोल्स"},formatFilterControlSwitchShow:function(){return"दिखाओ कंट्रोल्स"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["hi-IN"]),t.fn.bootstrapTable.locales["hr-HR"]=t.fn.bootstrapTable.locales.hr={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Molimo pričekajte"},formatRecordsPerPage:function(t){return"".concat(t," broj zapisa po stranici")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Prikazujem ".concat(t,". - ").concat(n,". od ukupnog broja zapisa ").concat(r," (filtered from ").concat(o," total rows)"):"Prikazujem ".concat(t,". - ").concat(n,". od ukupnog broja zapisa ").concat(r)},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Pretraži"},formatNoMatches:function(){return"Nije pronađen niti jedan zapis"},formatPaginationSwitch:function(){return"Prikaži/sakrij stranice"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Osvježi"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Kolone"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Sve"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["hr-HR"]),t.fn.bootstrapTable.locales["hu-HU"]=t.fn.bootstrapTable.locales.hu={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Betöltés, kérem várjon"},formatRecordsPerPage:function(t){return"".concat(t," rekord per oldal")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Megjelenítve ".concat(t," - ").concat(n," / ").concat(r," összesen (filtered from ").concat(o," total rows)"):"Megjelenítve ".concat(t," - ").concat(n," / ").concat(r," összesen")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Keresés"},formatNoMatches:function(){return"Nincs találat"},formatPaginationSwitch:function(){return"Lapozó elrejtése/megjelenítése"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Frissítés"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Oszlopok"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Összes"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["hu-HU"]),t.fn.bootstrapTable.locales["id-ID"]=t.fn.bootstrapTable.locales.id={formatCopyRows:function(){return"Salin baris"},formatPrint:function(){return"Mencetak"},formatLoadingMessage:function(){return"Pemuatan sedang berlangsung"},formatRecordsPerPage:function(t){return"".concat(t," baris per halaman")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Menampilkan dari ".concat(t," hingga ").concat(n," pada ").concat(r," baris (difilter dari ").concat(o," baris)"):"Menampilkan dari ".concat(t," hingga ").concat(n," pada ").concat(r," baris")},formatSRPaginationPreText:function(){return"halaman sebelumnya"},formatSRPaginationPageText:function(t){return"ke halaman ".concat(t)},formatSRPaginationNextText:function(){return"halaman berikutnya"},formatDetailPagination:function(t){return"Tampilan ".concat(t," baris")},formatClearSearch:function(){return"Menghapus pencarian"},formatSearch:function(){return"Pencarian"},formatNoMatches:function(){return"Tidak ada hasil"},formatPaginationSwitch:function(){return"Sembunyikan/Tampilkan penomoran halaman"},formatPaginationSwitchDown:function(){return"Tampilkan penomoran halaman"},formatPaginationSwitchUp:function(){return"Sembunyikan penomoran halaman"},formatRefresh:function(){return"Segarkan"},formatToggleOn:function(){return"Menampilkan tampilan peta"},formatToggleOff:function(){return"Menyembunyikan tampilan peta"},formatColumns:function(){return"Kolom"},formatColumnsToggleAll:function(){return"Tampilkan semua"},formatFullscreen:function(){return"Layar penuh"},formatAllRows:function(){return"Semua"},formatAutoRefresh:function(){return"Penyegaran otomatis"},formatExport:function(){return"Mengekspor data"},formatJumpTo:function(){return"Pergi ke"},formatAdvancedSearch:function(){return"Pencarian lanjutan"},formatAdvancedCloseButton:function(){return"Tutup"},formatFilterControlSwitch:function(){return"Menyembunyikan/Menampilkan kontrol"},formatFilterControlSwitchHide:function(){return"Menyembunyikan kontrol"},formatFilterControlSwitchShow:function(){return"Menampilkan kontrol"},formatToggleCustomViewOn:function(){return"Menampilkan tampilan khusus"},formatToggleCustomViewOff:function(){return"Menyembunyikan tampilan khusus"},formatClearFilters:function(){return"Menghapus filter"},formatAddLevel:function(){return"Menambahkan level"},formatCancel:function(){return"Batal"},formatColumn:function(){return"Kolom"},formatDeleteLevel:function(){return"Menghapus level"},formatDuplicateAlertTitle:function(){return"Entri duplikat telah ditemukan!"},formatDuplicateAlertDescription:function(){return"Harap hapus atau ubah entri duplikat"},formatMultipleSort:function(){return"Penyortiran ganda"},formatOrder:function(){return"Urutan"},formatSort:function(){return"Penyortiran"},formatSortBy:function(){return"Urutkan berdasarkan"},formatSortOrders:function(){return{asc:"Menaik",desc:"Menurun"}},formatThenBy:function(){return"Kemudian oleh"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["id-ID"]),t.fn.bootstrapTable.locales["en-US"]=t.fn.bootstrapTable.locales.en={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Loading, please wait"},formatRecordsPerPage:function(t){return"".concat(t," rows per page")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Showing ".concat(t," to ").concat(n," of ").concat(r," rows (filtered from ").concat(o," total rows)"):"Showing ".concat(t," to ").concat(n," of ").concat(r," rows")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Search"},formatNoMatches:function(){return"No matching records found"},formatPaginationSwitch:function(){return"Hide/Show pagination"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Refresh"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Columns"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"All"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["en-US"]),t.fn.bootstrapTable.locales["ja-JP"]=t.fn.bootstrapTable.locales.ja={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"読み込み中です。少々お待ちください。"},formatRecordsPerPage:function(t){return"ページ当たり最大".concat(t,"件")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"全".concat(r,"件から、").concat(t,"から").concat(n,"件目まで表示しています (filtered from ").concat(o," total rows)"):"全".concat(r,"件から、").concat(t,"から").concat(n,"件目まで表示しています")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"検索"},formatNoMatches:function(){return"該当するレコードが見つかりません"},formatPaginationSwitch:function(){return"ページ数を表示・非表示"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"更新"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"列"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"すべて"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["ja-JP"]),t.fn.bootstrapTable.locales["it-IT"]=t.fn.bootstrapTable.locales.it={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Caricamento in corso"},formatRecordsPerPage:function(t){return"".concat(t," elementi per pagina")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Visualizzazione da ".concat(t," a ").concat(n," di ").concat(r," elementi (filtrati da ").concat(o," elementi totali)"):"Visualizzazione da ".concat(t," a ").concat(n," di ").concat(r," elementi")},formatSRPaginationPreText:function(){return"pagina precedente"},formatSRPaginationPageText:function(t){return"alla pagina ".concat(t)},formatSRPaginationNextText:function(){return"pagina successiva"},formatDetailPagination:function(t){return"Mostrando ".concat(t," elementi")},formatClearSearch:function(){return"Pulisci filtri"},formatSearch:function(){return"Cerca"},formatNoMatches:function(){return"Nessun elemento trovato"},formatPaginationSwitch:function(){return"Nascondi/Mostra paginazione"},formatPaginationSwitchDown:function(){return"Mostra paginazione"},formatPaginationSwitchUp:function(){return"Nascondi paginazione"},formatRefresh:function(){return"Aggiorna"},formatToggleOn:function(){return"Mostra visuale a scheda"},formatToggleOff:function(){return"Nascondi visuale a scheda"},formatColumns:function(){return"Colonne"},formatColumnsToggleAll:function(){return"Mostra tutte"},formatFullscreen:function(){return"Schermo intero"},formatAllRows:function(){return"Tutto"},formatAutoRefresh:function(){return"Auto Aggiornamento"},formatExport:function(){return"Esporta dati"},formatJumpTo:function(){return"VAI"},formatAdvancedSearch:function(){return"Filtri avanzati"},formatAdvancedCloseButton:function(){return"Chiudi"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["it-IT"]),t.fn.bootstrapTable.locales["ka-GE"]=t.fn.bootstrapTable.locales.ka={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"იტვირთება, გთხოვთ მოიცადოთ"},formatRecordsPerPage:function(t){return"".concat(t," ჩანაწერი თითო გვერდზე")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"ნაჩვენებია ".concat(t,"-დან ").concat(n,"-მდე ჩანაწერი ჯამური ").concat(r,"-დან (filtered from ").concat(o," total rows)"):"ნაჩვენებია ".concat(t,"-დან ").concat(n,"-მდე ჩანაწერი ჯამური ").concat(r,"-დან")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"ძებნა"},formatNoMatches:function(){return"მონაცემები არ არის"},formatPaginationSwitch:function(){return"გვერდების გადამრთველის დამალვა/გამოჩენა"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"განახლება"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"სვეტები"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"All"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["ka-GE"]),t.fn.bootstrapTable.locales["ko-KR"]=t.fn.bootstrapTable.locales.ko={formatCopyRows:function(){return"행 복사"},formatPrint:function(){return"프린트"},formatLoadingMessage:function(){return"데이터를 불러오는 중입니다"},formatRecordsPerPage:function(t){return"페이지 당 ".concat(t,"개 데이터 출력")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"전체 ".concat(r,"개 중 ").concat(t,"~").concat(n,"번째 데이터 출력, (전체 ").concat(o," 행에서 필터됨)"):"전체 ".concat(r,"개 중 ").concat(t,"~").concat(n,"번째 데이터 출력,")},formatSRPaginationPreText:function(){return"이전 페이지"},formatSRPaginationPageText:function(t){return"".concat(t," 페이지로 이동")},formatSRPaginationNextText:function(){return"다음 페이지"},formatDetailPagination:function(t){return"".concat(t," 행들 표시 중")},formatClearSearch:function(){return"검색 초기화"},formatSearch:function(){return"검색"},formatNoMatches:function(){return"조회된 데이터가 없습니다."},formatPaginationSwitch:function(){return"페이지 넘버 보기/숨기기"},formatPaginationSwitchDown:function(){return"페이지 넘버 보기"},formatPaginationSwitchUp:function(){return"페이지 넘버 숨기기"},formatRefresh:function(){return"새로 고침"},formatToggleOn:function(){return"카드뷰 보기"},formatToggleOff:function(){return"카드뷰 숨기기"},formatColumns:function(){return"컬럼 필터링"},formatColumnsToggleAll:function(){return"전체 토글"},formatFullscreen:function(){return"전체 화면"},formatAllRows:function(){return"전체"},formatAutoRefresh:function(){return"자동 갱신"},formatExport:function(){return"데이터 추출"},formatJumpTo:function(){return"이동"},formatAdvancedSearch:function(){return"심화 검색"},formatAdvancedCloseButton:function(){return"닫기"},formatFilterControlSwitch:function(){return"컨트롤 보기/숨기기"},formatFilterControlSwitchHide:function(){return"컨트롤 숨기기"},formatFilterControlSwitchShow:function(){return"컨트롤 보기"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["ko-KR"]),t.fn.bootstrapTable.locales["lb-LU"]=t.fn.bootstrapTable.locales.lb={formatCopyRows:function(){return"Zeilen kopéieren"},formatPrint:function(){return"Drécken"},formatLoadingMessage:function(){return"Gëtt gelueden, gedellëgt Iech wannechgelift ee Moment"},formatRecordsPerPage:function(t){return"".concat(t," Zeilen per Säit")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Weist Zeil ".concat(t," bis ").concat(n," vun ").concat(r," Zeil").concat(r>1?"en":""," (gefiltert vun insgesamt ").concat(o," Zeil").concat(r>1?"en":"",")"):"Weist Zeil ".concat(t," bis ").concat(n," vun ").concat(r," Zeil").concat(r>1?"en":"")},formatSRPaginationPreText:function(){return"viregt Säit"},formatSRPaginationPageText:function(t){return"op Säit ".concat(t)},formatSRPaginationNextText:function(){return"nächst Säit"},formatDetailPagination:function(t){return"Weist ".concat(t," Zeilen")},formatClearSearch:function(){return"Sich réckgängeg maachen"},formatSearch:function(){return"Sich"},formatNoMatches:function(){return"Keng passend Anträg fonnt"},formatPaginationSwitch:function(){return"Paginatioun uweisen/verstoppen"},formatPaginationSwitchDown:function(){return"Paginatioun uweisen"},formatPaginationSwitchUp:function(){return"Paginatioun verstoppen"},formatRefresh:function(){return"Nei lueden"},formatToggleOn:function(){return"Kaartenusiicht uweisen"},formatToggleOff:function(){return"Kaartenusiicht verstoppen"},formatColumns:function(){return"Kolonnen"},formatColumnsToggleAll:function(){return"All ëmschalten"},formatFullscreen:function(){return"Vollbild"},formatAllRows:function(){return"All"},formatAutoRefresh:function(){return"Automatescht neilueden"},formatExport:function(){return"Daten exportéieren"},formatJumpTo:function(){return"Sprangen"},formatAdvancedSearch:function(){return"Erweidert Sich"},formatAdvancedCloseButton:function(){return"Zoumaachen"},formatFilterControlSwitch:function(){return"Schaltelementer uweisen/verstoppen"},formatFilterControlSwitchHide:function(){return"Schaltelementer verstoppen"},formatFilterControlSwitchShow:function(){return"Schaltelementer uweisen"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["lb-LU"]),t.fn.bootstrapTable.locales["nl-BE"]={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Laden, even geduld"},formatRecordsPerPage:function(t){return"".concat(t," records per pagina")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Toon ".concat(t," tot ").concat(n," van ").concat(r," record").concat(r>1?"s":""," (gefilterd van ").concat(o," records in totaal)"):"Toon ".concat(t," tot ").concat(n," van ").concat(r," record").concat(r>1?"s":"")},formatSRPaginationPreText:function(){return"vorige pagina"},formatSRPaginationPageText:function(t){return"tot pagina ".concat(t)},formatSRPaginationNextText:function(){return"volgende pagina"},formatDetailPagination:function(t){return"Toon ".concat(t," record").concat(t>1?"s":"")},formatClearSearch:function(){return"Verwijder filters"},formatSearch:function(){return"Zoeken"},formatNoMatches:function(){return"Geen resultaten gevonden"},formatPaginationSwitch:function(){return"Verberg/Toon paginering"},formatPaginationSwitchDown:function(){return"Toon paginering"},formatPaginationSwitchUp:function(){return"Verberg paginering"},formatRefresh:function(){return"Vernieuwen"},formatToggleOn:function(){return"Toon kaartweergave"},formatToggleOff:function(){return"Verberg kaartweergave"},formatColumns:function(){return"Kolommen"},formatColumnsToggleAll:function(){return"Allen omschakelen"},formatFullscreen:function(){return"Volledig scherm"},formatAllRows:function(){return"Alle"},formatAutoRefresh:function(){return"Automatisch vernieuwen"},formatExport:function(){return"Exporteer gegevens"},formatJumpTo:function(){return"GA"},formatAdvancedSearch:function(){return"Geavanceerd zoeken"},formatAdvancedCloseButton:function(){return"Sluiten"},formatFilterControlSwitch:function(){return"Verberg/Toon controls"},formatFilterControlSwitchHide:function(){return"Verberg controls"},formatFilterControlSwitchShow:function(){return"Toon controls"},formatAddLevel:function(){return"Niveau toevoegen"},formatCancel:function(){return"Annuleren"},formatColumn:function(){return"Kolom"},formatDeleteLevel:function(){return"Niveau verwijderen"},formatDuplicateAlertTitle:function(){return"Duplicaten gevonden!"},formatDuplicateAlertDescription:function(){return"Gelieve dubbele kolommen te verwijderen of wijzigen"},formatMultipleSort:function(){return"Meervoudige sortering"},formatOrder:function(){return"Volgorde"},formatSort:function(){return"Sorteren"},formatSortBy:function(){return"Sorteren op"},formatThenBy:function(){return"vervolgens"},formatSortOrders:function(){return{asc:"Oplopend",desc:"Aflopend"}}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["nl-BE"]),t.fn.bootstrapTable.locales["ms-MY"]=t.fn.bootstrapTable.locales.ms={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Permintaan sedang dimuatkan. Sila tunggu sebentar"},formatRecordsPerPage:function(t){return"".concat(t," rekod setiap muka surat")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Sedang memaparkan rekod ".concat(t," hingga ").concat(n," daripada jumlah ").concat(r," rekod (filtered from ").concat(o," total rows)"):"Sedang memaparkan rekod ".concat(t," hingga ").concat(n," daripada jumlah ").concat(r," rekod")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Cari"},formatNoMatches:function(){return"Tiada rekod yang menyamai permintaan"},formatPaginationSwitch:function(){return"Tunjuk/sembunyi muka surat"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Muatsemula"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Lajur"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Semua"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["ms-MY"]),t.fn.bootstrapTable.locales["nb-NO"]=t.fn.bootstrapTable.locales.nb={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Oppdaterer, vennligst vent"},formatRecordsPerPage:function(t){return"".concat(t," poster pr side")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Viser ".concat(t," til ").concat(n," av ").concat(r," rekker (filtered from ").concat(o," total rows)"):"Viser ".concat(t," til ").concat(n," av ").concat(r," rekker")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Søk"},formatNoMatches:function(){return"Ingen poster funnet"},formatPaginationSwitch:function(){return"Hide/Show pagination"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Oppdater"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Kolonner"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"All"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["nb-NO"]),t.fn.bootstrapTable.locales["nl-NL"]=t.fn.bootstrapTable.locales.nl={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Laden, even geduld"},formatRecordsPerPage:function(t){return"".concat(t," records per pagina")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Toon ".concat(t," tot ").concat(n," van ").concat(r," record").concat(r>1?"s":""," (gefilterd van ").concat(o," records in totaal)"):"Toon ".concat(t," tot ").concat(n," van ").concat(r," record").concat(r>1?"s":"")},formatSRPaginationPreText:function(){return"vorige pagina"},formatSRPaginationPageText:function(t){return"tot pagina ".concat(t)},formatSRPaginationNextText:function(){return"volgende pagina"},formatDetailPagination:function(t){return"Toon ".concat(t," record").concat(t>1?"s":"")},formatClearSearch:function(){return"Verwijder filters"},formatSearch:function(){return"Zoeken"},formatNoMatches:function(){return"Geen resultaten gevonden"},formatPaginationSwitch:function(){return"Verberg/Toon paginering"},formatPaginationSwitchDown:function(){return"Toon paginering"},formatPaginationSwitchUp:function(){return"Verberg paginering"},formatRefresh:function(){return"Vernieuwen"},formatToggleOn:function(){return"Toon kaartweergave"},formatToggleOff:function(){return"Verberg kaartweergave"},formatColumns:function(){return"Kolommen"},formatColumnsToggleAll:function(){return"Allen omschakelen"},formatFullscreen:function(){return"Volledig scherm"},formatAllRows:function(){return"Alle"},formatAutoRefresh:function(){return"Automatisch vernieuwen"},formatExport:function(){return"Exporteer gegevens"},formatJumpTo:function(){return"GA"},formatAdvancedSearch:function(){return"Geavanceerd zoeken"},formatAdvancedCloseButton:function(){return"Sluiten"},formatFilterControlSwitch:function(){return"Verberg/Toon controls"},formatFilterControlSwitchHide:function(){return"Verberg controls"},formatFilterControlSwitchShow:function(){return"Toon controls"},formatAddLevel:function(){return"Niveau toevoegen"},formatCancel:function(){return"Annuleren"},formatColumn:function(){return"Kolom"},formatDeleteLevel:function(){return"Niveau verwijderen"},formatDuplicateAlertTitle:function(){return"Duplicaten gevonden!"},formatDuplicateAlertDescription:function(){return"Gelieve dubbele kolommen te verwijderen of wijzigen"},formatMultipleSort:function(){return"Meervoudige sortering"},formatOrder:function(){return"Volgorde"},formatSort:function(){return"Sorteren"},formatSortBy:function(){return"Sorteren op"},formatThenBy:function(){return"vervolgens"},formatSortOrders:function(){return{asc:"Oplopend",desc:"Aflopend"}}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["nl-NL"]),t.fn.bootstrapTable.locales["pl-PL"]=t.fn.bootstrapTable.locales.pl={formatCopyRows:function(){return"Kopiuj wiersze"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Ładowanie, proszę czekać"},formatRecordsPerPage:function(t){return"".concat(t," rekordów na stronę")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Wyświetlanie rekordów od ".concat(t," do ").concat(n," z ").concat(r," (filtered from ").concat(o," total rows)"):"Wyświetlanie rekordów od ".concat(t," do ").concat(n," z ").concat(r)},formatSRPaginationPreText:function(){return"poprzednia strona"},formatSRPaginationPageText:function(t){return"z ".concat(t)},formatSRPaginationNextText:function(){return"następna strona"},formatDetailPagination:function(t){return"Wyświetla ".concat(t," wierszy")},formatClearSearch:function(){return"Wyczyść wyszukiwanie"},formatSearch:function(){return"Szukaj"},formatNoMatches:function(){return"Niestety, nic nie znaleziono"},formatPaginationSwitch:function(){return"Pokaż/ukryj stronicowanie"},formatPaginationSwitchDown:function(){return"Pokaż stronicowanie"},formatPaginationSwitchUp:function(){return"Ukryj stronicowanie"},formatRefresh:function(){return"Odśwież"},formatToggleOn:function(){return"Pokaż układ karty"},formatToggleOff:function(){return"Ukryj układ karty"},formatColumns:function(){return"Kolumny"},formatColumnsToggleAll:function(){return"Zaznacz wszystko"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Wszystkie"},formatAutoRefresh:function(){return"Auto odświeżanie"},formatExport:function(){return"Eksport danych"},formatJumpTo:function(){return"Przejdź"},formatAdvancedSearch:function(){return"Wyszukiwanie zaawansowane"},formatAdvancedCloseButton:function(){return"Zamknij"},formatFilterControlSwitch:function(){return"Pokaż/Ukryj"},formatFilterControlSwitchHide:function(){return"Pokaż"},formatFilterControlSwitchShow:function(){return"Ukryj"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["pl-PL"]),t.fn.bootstrapTable.locales["pt-PT"]=t.fn.bootstrapTable.locales.pt={formatCopyRows:function(){return"Copiar Linhas"},formatPrint:function(){return"Imprimir"},formatLoadingMessage:function(){return"A carregar, por favor aguarde"},formatRecordsPerPage:function(t){return"".concat(t," registos por página")},formatShowingRows:function(t,n,r,o){var e=r>1?"s":"";return void 0!==o&&o>0&&o>r?"A mostrar ".concat(t," até ").concat(n," de ").concat(r," linha").concat(e," (filtrado de um total de ").concat(o," linha").concat(e,")"):"A mostrar ".concat(t," até ").concat(n," de ").concat(r," linha").concat(e)},formatSRPaginationPreText:function(){return"página anterior"},formatSRPaginationPageText:function(t){return"ir para página ".concat(t)},formatSRPaginationNextText:function(){return"próxima página"},formatDetailPagination:function(t){return"Mostrando ".concat(t," linha").concat(t>1?"s":"")},formatClearSearch:function(){return"Limpar Pesquisa"},formatSearch:function(){return"Pesquisa"},formatNoMatches:function(){return"Nenhum registo encontrado"},formatPaginationSwitch:function(){return"Esconder/Mostrar paginação"},formatPaginationSwitchDown:function(){return"Mostrar página"},formatPaginationSwitchUp:function(){return"Esconder página"},formatRefresh:function(){return"Actualizar"},formatToggleOn:function(){return"Mostrar vista em forma de cartão"},formatToggleOff:function(){return"Esconder vista em forma de cartão"},formatColumns:function(){return"Colunas"},formatColumnsToggleAll:function(){return"Activar tudo"},formatFullscreen:function(){return"Ecrã completo"},formatAllRows:function(){return"Tudo"},formatAutoRefresh:function(){return"Actualização autmática"},formatExport:function(){return"Exportar dados"},formatJumpTo:function(){return"Avançar"},formatAdvancedSearch:function(){return"Pesquisa avançada"},formatAdvancedCloseButton:function(){return"Fechar"},formatFilterControlSwitch:function(){return"Ocultar/Exibir controles"},formatFilterControlSwitchHide:function(){return"Esconder controlos"},formatFilterControlSwitchShow:function(){return"Exibir controlos"},formatAddLevel:function(){return"Adicionar nível"},formatCancel:function(){return"Cancelar"},formatColumn:function(){return"Coluna"},formatDeleteLevel:function(){return"Remover nível"},formatDuplicateAlertTitle:function(){return"Foram encontradas entradas duplicadas!"},formatDuplicateAlertDescription:function(){return"Por favor, remova ou altere as colunas duplicadas"},formatMultipleSort:function(){return"Ordenação múltipla"},formatOrder:function(){return"Ordem"},formatSort:function(){return"Ordenar"},formatSortBy:function(){return"Ordenar por"},formatThenBy:function(){return"em seguida"},formatSortOrders:function(){return{asc:"Ascendente",desc:"Descendente"}}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["pt-PT"]),t.fn.bootstrapTable.locales["ru-RU"]=t.fn.bootstrapTable.locales.ru={formatCopyRows:function(){return"Скопировать строки"},formatPrint:function(){return"Печать"},formatLoadingMessage:function(){return"Пожалуйста, подождите, идёт загрузка"},formatRecordsPerPage:function(t){return"".concat(t," записей на страницу")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Записи с ".concat(t," по ").concat(n," из ").concat(r," (отфильтровано, всего на сервере ").concat(o," записей)"):"Записи с ".concat(t," по ").concat(n," из ").concat(r)},formatSRPaginationPreText:function(){return"предыдущая страница"},formatSRPaginationPageText:function(t){return"перейти к странице ".concat(t)},formatSRPaginationNextText:function(){return"следующая страница"},formatDetailPagination:function(t){return"Загружено ".concat(t," строк")},formatClearSearch:function(){return"Очистить фильтры"},formatSearch:function(){return"Поиск"},formatNoMatches:function(){return"Ничего не найдено"},formatPaginationSwitch:function(){return"Скрыть/Показать постраничную навигацию"},formatPaginationSwitchDown:function(){return"Показать постраничную навигацию"},formatPaginationSwitchUp:function(){return"Скрыть постраничную навигацию"},formatRefresh:function(){return"Обновить"},formatToggleOn:function(){return"Показать записи в виде карточек"},formatToggleOff:function(){return"Табличный режим просмотра"},formatColumns:function(){return"Колонки"},formatColumnsToggleAll:function(){return"Выбрать все"},formatFullscreen:function(){return"Полноэкранный режим"},formatAllRows:function(){return"Все"},formatAutoRefresh:function(){return"Автоматическое обновление"},formatExport:function(){return"Экспортировать данные"},formatJumpTo:function(){return"Стр."},formatAdvancedSearch:function(){return"Расширенный поиск"},formatAdvancedCloseButton:function(){return"Закрыть"},formatFilterControlSwitch:function(){return"Скрыть/Показать панель инструментов"},formatFilterControlSwitchHide:function(){return"Скрыть панель инструментов"},formatFilterControlSwitchShow:function(){return"Показать панель инструментов"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["ru-RU"]),t.fn.bootstrapTable.locales["pt-BR"]=t.fn.bootstrapTable.locales.br={formatCopyRows:function(){return"Copiar linhas"},formatPrint:function(){return"Imprimir"},formatLoadingMessage:function(){return"Carregando, aguarde"},formatRecordsPerPage:function(t){return"".concat(t," registros por página")},formatShowingRows:function(t,n,r,o){var e=r>1?"s":"";return void 0!==o&&o>0&&o>r?"Exibindo ".concat(t," até ").concat(n," de ").concat(r," linha").concat(e," (filtrado de um total de ").concat(o," linha").concat(e,")"):"Exibindo ".concat(t," até ").concat(n," de ").concat(r," linha").concat(e)},formatSRPaginationPreText:function(){return"página anterior"},formatSRPaginationPageText:function(t){return"ir para a página ".concat(t)},formatSRPaginationNextText:function(){return"próxima página"},formatDetailPagination:function(t){return"Mostrando ".concat(t," linha").concat(t>1?"s":"")},formatClearSearch:function(){return"Limpar Pesquisa"},formatSearch:function(){return"Pesquisar"},formatNoMatches:function(){return"Nenhum registro encontrado"},formatPaginationSwitch:function(){return"Ocultar/Exibir paginação"},formatPaginationSwitchDown:function(){return"Mostrar Paginação"},formatPaginationSwitchUp:function(){return"Esconder Paginação"},formatRefresh:function(){return"Recarregar"},formatToggleOn:function(){return"Mostrar visualização de cartão"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Colunas"},formatColumnsToggleAll:function(){return"Alternar tudo"},formatFullscreen:function(){return"Tela cheia"},formatAllRows:function(){return"Tudo"},formatAutoRefresh:function(){return"Atualização Automática"},formatExport:function(){return"Exportar dados"},formatJumpTo:function(){return"Ir"},formatAdvancedSearch:function(){return"Pesquisa Avançada"},formatAdvancedCloseButton:function(){return"Fechar"},formatFilterControlSwitch:function(){return"Ocultar/Exibir controles"},formatFilterControlSwitchHide:function(){return"Ocultar controles"},formatFilterControlSwitchShow:function(){return"Exibir controles"},formatAddLevel:function(){return"Adicionar nível"},formatCancel:function(){return"Cancelar"},formatColumn:function(){return"Coluna"},formatDeleteLevel:function(){return"Remover nível"},formatDuplicateAlertTitle:function(){return"Encontradas entradas duplicadas!"},formatDuplicateAlertDescription:function(){return"Por favor, remova ou altere as colunas duplicadas"},formatMultipleSort:function(){return"Ordenação múltipla"},formatOrder:function(){return"Ordem"},formatSort:function(){return"Ordenar"},formatSortBy:function(){return"Ordenar por"},formatThenBy:function(){return"em seguida"},formatSortOrders:function(){return{asc:"Crescente",desc:"Decrescente"}}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["pt-BR"]),t.fn.bootstrapTable.locales["sk-SK"]=t.fn.bootstrapTable.locales.sk={formatCopyRows:function(){return"Skopírovať riadky"},formatPrint:function(){return"Vytlačiť"},formatLoadingMessage:function(){return"Prosím čakajte"},formatRecordsPerPage:function(t){return"".concat(t," záznamov na stranu")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Zobrazená ".concat(t,". - ").concat(n,". položka z celkových ").concat(r," (filtered from ").concat(o," total rows)"):"Zobrazená ".concat(t,". - ").concat(n,". položka z celkových ").concat(r)},formatSRPaginationPreText:function(){return"Predchádzajúca strana"},formatSRPaginationPageText:function(t){return"na stranu ".concat(t)},formatSRPaginationNextText:function(){return"Nasledujúca strana"},formatDetailPagination:function(t){return"Zobrazuje sa ".concat(t," riadkov")},formatClearSearch:function(){return"Odstráň filtre"},formatSearch:function(){return"Vyhľadávanie"},formatNoMatches:function(){return"Nenájdená žiadna vyhovujúca položka"},formatPaginationSwitch:function(){return"Skry/Zobraz stránkovanie"},formatPaginationSwitchDown:function(){return"Zobraziť stránkovanie"},formatPaginationSwitchUp:function(){return"Skryť stránkovanie"},formatRefresh:function(){return"Obnoviť"},formatToggleOn:function(){return"Zobraziť kartové zobrazenie"},formatToggleOff:function(){return"skryť kartové zobrazenie"},formatColumns:function(){return"Stĺpce"},formatColumnsToggleAll:function(){return"Prepnúť všetky"},formatFullscreen:function(){return"Celá obrazovka"},formatAllRows:function(){return"Všetky"},formatAutoRefresh:function(){return"Automatické obnovenie"},formatExport:function(){return"Exportuj dáta"},formatJumpTo:function(){return"Ísť"},formatAdvancedSearch:function(){return"Pokročilé vyhľadávanie"},formatAdvancedCloseButton:function(){return"Zatvoriť"},formatFilterControlSwitch:function(){return"Zobraziť/Skryť tlačidlá"},formatFilterControlSwitchHide:function(){return"Skryť tlačidlá"},formatFilterControlSwitchShow:function(){return"Zobraziť tlačidlá"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["sk-SK"]),t.fn.bootstrapTable.locales["sr-Cyrl-RS"]=t.fn.bootstrapTable.locales.sr={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Молим сачекај"},formatRecordsPerPage:function(t){return"".concat(t," редова по страни")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Приказано ".concat(t,". - ").concat(n,". од укупног броја редова ").concat(r," (филтрирано од ").concat(o,")"):"Приказано ".concat(t,". - ").concat(n,". од укупног броја редова ").concat(r)},formatSRPaginationPreText:function(){return"претходна страна"},formatSRPaginationPageText:function(t){return"на страну ".concat(t)},formatSRPaginationNextText:function(){return"следећа страна"},formatDetailPagination:function(t){return"Приказано ".concat(t," редова")},formatClearSearch:function(){return"Обриши претрагу"},formatSearch:function(){return"Пронађи"},formatNoMatches:function(){return"Није пронађен ни један податак"},formatPaginationSwitch:function(){return"Прикажи/сакриј пагинацију"},formatPaginationSwitchDown:function(){return"Прикажи пагинацију"},formatPaginationSwitchUp:function(){return"Сакриј пагинацију"},formatRefresh:function(){return"Освежи"},formatToggleOn:function(){return"Прикажи картице"},formatToggleOff:function(){return"Сакриј картице"},formatColumns:function(){return"Колоне"},formatColumnsToggleAll:function(){return"Прикажи/сакриј све"},formatFullscreen:function(){return"Цео екран"},formatAllRows:function(){return"Све"},formatAutoRefresh:function(){return"Аутоматско освежавање"},formatExport:function(){return"Извези податке"},formatJumpTo:function(){return"Иди"},formatAdvancedSearch:function(){return"Напредна претрага"},formatAdvancedCloseButton:function(){return"Затвори"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["sr-Cyrl-RS"]),t.fn.bootstrapTable.locales["sl-SI"]=t.fn.bootstrapTable.locales.sl={formatCopyRows:function(){return"Kopiraj vrstice"},formatPrint:function(){return"Natisni"},formatLoadingMessage:function(){return"Prosim počakajte..."},formatRecordsPerPage:function(t){return"".concat(t," vrstic na stran")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Prikaz ".concat(t," do ").concat(n," od ").concat(r," vrstic (filtrirano od skupno ").concat(o," vrstic)"):"Prikaz ".concat(t," do ").concat(n," od ").concat(r," vrstic")},formatSRPaginationPreText:function(){return"prejšnja stran"},formatSRPaginationPageText:function(t){return"na stran ".concat(t)},formatSRPaginationNextText:function(){return"na slednja stran"},formatDetailPagination:function(t){return"Prikaz ".concat(t," vrstic")},formatClearSearch:function(){return"Počisti"},formatSearch:function(){return"Iskanje"},formatNoMatches:function(){return"Ni najdenih rezultatov"},formatPaginationSwitch:function(){return"Skrij/Pokaži oštevilčevanje strani"},formatPaginationSwitchDown:function(){return"Pokaži oštevilčevanje strani"},formatPaginationSwitchUp:function(){return"Skrij oštevilčevanje strani"},formatRefresh:function(){return"Osveži"},formatToggleOn:function(){return"Prikaži kartični pogled"},formatToggleOff:function(){return"Skrij kartični pogled"},formatColumns:function(){return"Stolpci"},formatColumnsToggleAll:function(){return"Preklopi vse"},formatFullscreen:function(){return"Celozaslonski prikaz"},formatAllRows:function(){return"Vse"},formatAutoRefresh:function(){return"Samodejna osvežitev"},formatExport:function(){return"Izvoz podatkov"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Napredno iskanje"},formatAdvancedCloseButton:function(){return"Zapri"},formatFilterControlSwitch:function(){return"Skrij/Pokaži kontrole"},formatFilterControlSwitchHide:function(){return"Skrij kontrole"},formatFilterControlSwitchShow:function(){return"Pokaži kontrole"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["sl-SI"]),t.fn.bootstrapTable.locales["sr-Latn-RS"]={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Molim sačekaj"},formatRecordsPerPage:function(t){return"".concat(t," redova po strani")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Prikazano ".concat(t,". - ").concat(n,". od ukupnog broja redova ").concat(r," (filtrirano od ").concat(o,")"):"Prikazano ".concat(t,". - ").concat(n,". od ukupnog broja redova ").concat(r)},formatSRPaginationPreText:function(){return"prethodna strana"},formatSRPaginationPageText:function(t){return"na stranu ".concat(t)},formatSRPaginationNextText:function(){return"sledeća strana"},formatDetailPagination:function(t){return"Prikazano ".concat(t," redova")},formatClearSearch:function(){return"Obriši pretragu"},formatSearch:function(){return"Pronađi"},formatNoMatches:function(){return"Nije pronađen ni jedan podatak"},formatPaginationSwitch:function(){return"Prikaži/sakrij paginaciju"},formatPaginationSwitchDown:function(){return"Prikaži paginaciju"},formatPaginationSwitchUp:function(){return"Sakrij paginaciju"},formatRefresh:function(){return"Osveži"},formatToggleOn:function(){return"Prikaži kartice"},formatToggleOff:function(){return"Sakrij kartice"},formatColumns:function(){return"Kolone"},formatColumnsToggleAll:function(){return"Prikaži/sakrij sve"},formatFullscreen:function(){return"Ceo ekran"},formatAllRows:function(){return"Sve"},formatAutoRefresh:function(){return"Automatsko osvežavanje"},formatExport:function(){return"Izvezi podatke"},formatJumpTo:function(){return"Idi"},formatAdvancedSearch:function(){return"Napredna pretraga"},formatAdvancedCloseButton:function(){return"Zatvori"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["sr-Latn-RS"]),t.fn.bootstrapTable.locales["th-TH"]=t.fn.bootstrapTable.locales.th={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"กำลังโหลดข้อมูล, กรุณารอสักครู่"},formatRecordsPerPage:function(t){return"".concat(t," รายการต่อหน้า")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"รายการที่ ".concat(t," ถึง ").concat(n," จากทั้งหมด ").concat(r," รายการ (filtered from ").concat(o," total rows)"):"รายการที่ ".concat(t," ถึง ").concat(n," จากทั้งหมด ").concat(r," รายการ")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"ค้นหา"},formatNoMatches:function(){return"ไม่พบรายการที่ค้นหา !"},formatPaginationSwitch:function(){return"Hide/Show pagination"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"รีเฟรส"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"คอลัมน์"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"All"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["th-TH"]),t.fn.bootstrapTable.locales["sv-SE"]=t.fn.bootstrapTable.locales.sv={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Laddar, vänligen vänta"},formatRecordsPerPage:function(t){return"".concat(t," rader per sida")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Visa ".concat(t," till ").concat(n," av ").concat(r," rader (filtered from ").concat(o," total rows)"):"Visa ".concat(t," till ").concat(n," av ").concat(r," rader")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Sök"},formatNoMatches:function(){return"Inga matchande resultat funna."},formatPaginationSwitch:function(){return"Hide/Show pagination"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Uppdatera"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"kolumn"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"All"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["sv-SE"]),t.fn.bootstrapTable.locales["tr-TR"]=t.fn.bootstrapTable.locales.tr={formatCopyRows:function(){return"Satırları Kopyala"},formatPrint:function(){return"Yazdır"},formatLoadingMessage:function(){return"Yükleniyor, lütfen bekleyin"},formatRecordsPerPage:function(t){return"Sayfa başına ".concat(t," kayıt.")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"".concat(r," kayıttan ").concat(t,"-").concat(n," arası gösteriliyor (").concat(o," toplam satır filtrelendi)."):"".concat(r," kayıttan ").concat(t,"-").concat(n," arası gösteriliyor.")},formatSRPaginationPreText:function(){return"önceki sayfa"},formatSRPaginationPageText:function(t){return"sayfa ".concat(t)},formatSRPaginationNextText:function(){return"sonraki sayfa"},formatDetailPagination:function(t){return"".concat(t," satır gösteriliyor")},formatClearSearch:function(){return"Aramayı Temizle"},formatSearch:function(){return"Ara"},formatNoMatches:function(){return"Eşleşen kayıt bulunamadı."},formatPaginationSwitch:function(){return"Sayfalamayı Gizle/Göster"},formatPaginationSwitchDown:function(){return"Sayfalamayı Göster"},formatPaginationSwitchUp:function(){return"Sayfalamayı Gizle"},formatRefresh:function(){return"Yenile"},formatToggleOn:function(){return"Kart Görünümünü Göster"},formatToggleOff:function(){return"Kart Görünümünü Gizle"},formatColumns:function(){return"Sütunlar"},formatColumnsToggleAll:function(){return"Tümünü Kapat"},formatFullscreen:function(){return"Tam Ekran"},formatAllRows:function(){return"Tüm Satırlar"},formatAutoRefresh:function(){return"Otomatik Yenileme"},formatExport:function(){return"Verileri Dışa Aktar"},formatJumpTo:function(){return"Git"},formatAdvancedSearch:function(){return"Gelişmiş Arama"},formatAdvancedCloseButton:function(){return"Kapat"},formatFilterControlSwitch:function(){return"Kontrolleri Gizle/Göster"},formatFilterControlSwitchHide:function(){return"Kontrolleri Gizle"},formatFilterControlSwitchShow:function(){return"Kontrolleri Göster"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["tr-TR"]),t.fn.bootstrapTable.locales["ro-RO"]=t.fn.bootstrapTable.locales.ro={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Se incarca, va rugam asteptati"},formatRecordsPerPage:function(t){return"".concat(t," inregistrari pe pagina")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Arata de la ".concat(t," pana la ").concat(n," din ").concat(r," randuri (filtered from ").concat(o," total rows)"):"Arata de la ".concat(t," pana la ").concat(n," din ").concat(r," randuri")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"Cauta"},formatNoMatches:function(){return"Nu au fost gasite inregistrari"},formatPaginationSwitch:function(){return"Ascunde/Arata paginatia"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Reincarca"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Coloane"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Toate"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["ro-RO"]),t.fn.bootstrapTable.locales["ur-PK"]=t.fn.bootstrapTable.locales.ur={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"براۓ مہربانی انتظار کیجئے"},formatRecordsPerPage:function(t){return"".concat(t," ریکارڈز فی صفہ ")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"دیکھیں ".concat(t," سے ").concat(n," کے ").concat(r,"ریکارڈز (filtered from ").concat(o," total rows)"):"دیکھیں ".concat(t," سے ").concat(n," کے ").concat(r,"ریکارڈز")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Clear Search"},formatSearch:function(){return"تلاش"},formatNoMatches:function(){return"کوئی ریکارڈ نہیں ملا"},formatPaginationSwitch:function(){return"Hide/Show pagination"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"تازہ کریں"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"کالم"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"All"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Export data"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["ur-PK"]),t.fn.bootstrapTable.locales["uz-Latn-UZ"]=t.fn.bootstrapTable.locales.uz={formatCopyRows:function(){return"Copy Rows"},formatPrint:function(){return"Print"},formatLoadingMessage:function(){return"Yuklanyapti, iltimos kuting"},formatRecordsPerPage:function(t){return"".concat(t," qator har sahifada")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Ko'rsatypati ".concat(t," dan ").concat(n," gacha ").concat(r," qatorlarni (filtered from ").concat(o," total rows)"):"Ko'rsatypati ".concat(t," dan ").concat(n," gacha ").concat(r," qatorlarni")},formatSRPaginationPreText:function(){return"previous page"},formatSRPaginationPageText:function(t){return"to page ".concat(t)},formatSRPaginationNextText:function(){return"next page"},formatDetailPagination:function(t){return"Showing ".concat(t," rows")},formatClearSearch:function(){return"Filtrlarni tozalash"},formatSearch:function(){return"Qidirish"},formatNoMatches:function(){return"Hech narsa topilmadi"},formatPaginationSwitch:function(){return"Sahifalashni yashirish/ko'rsatish"},formatPaginationSwitchDown:function(){return"Show pagination"},formatPaginationSwitchUp:function(){return"Hide pagination"},formatRefresh:function(){return"Yangilash"},formatToggleOn:function(){return"Show card view"},formatToggleOff:function(){return"Hide card view"},formatColumns:function(){return"Ustunlar"},formatColumnsToggleAll:function(){return"Toggle all"},formatFullscreen:function(){return"Fullscreen"},formatAllRows:function(){return"Hammasi"},formatAutoRefresh:function(){return"Auto Refresh"},formatExport:function(){return"Eksport"},formatJumpTo:function(){return"GO"},formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"},formatFilterControlSwitch:function(){return"Hide/Show controls"},formatFilterControlSwitchHide:function(){return"Hide controls"},formatFilterControlSwitchShow:function(){return"Show controls"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["uz-Latn-UZ"]),t.fn.bootstrapTable.locales["uk-UA"]=t.fn.bootstrapTable.locales.uk={formatCopyRows:function(){return"Скопіювати рядки"},formatPrint:function(){return"Друк"},formatLoadingMessage:function(){return"Завантаження, будь ласка, зачекайте"},formatRecordsPerPage:function(t){return"".concat(t," рядків на сторінку")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Відображено рядки з ".concat(t," по ").concat(n," з ").concat(r," загалом (відфільтровано з ").concat(o," рядків)"):"Відображено рядки з ".concat(t," по ").concat(n," з ").concat(r," загалом")},formatSRPaginationPreText:function(){return"попередня сторінка"},formatSRPaginationPageText:function(t){return"до сторінки ".concat(t)},formatSRPaginationNextText:function(){return"наступна сторінка"},formatDetailPagination:function(t){return"Відображено ".concat(t," рядків")},formatClearSearch:function(){return"Скинути фільтри"},formatSearch:function(){return"Пошук"},formatNoMatches:function(){return"Не знайдено жодного запису"},formatPaginationSwitch:function(){return"Сховати/Відобразити пагінацію"},formatPaginationSwitchDown:function(){return"Відобразити пагінацію"},formatPaginationSwitchUp:function(){return"Сховати пагінацію"},formatRefresh:function(){return"Оновити"},formatToggleOn:function(){return"Відобразити у форматі карток"},formatToggleOff:function(){return"Вимкнути формат карток"},formatColumns:function(){return"Стовпці"},formatColumnsToggleAll:function(){return"Переключити усі"},formatFullscreen:function(){return"Повноекранний режим"},formatAllRows:function(){return"Усі"},formatAutoRefresh:function(){return"Автооновлення"},formatExport:function(){return"Експортувати дані"},formatJumpTo:function(){return"Швидкий перехід до"},formatAdvancedSearch:function(){return"Розширений пошук"},formatAdvancedCloseButton:function(){return"Закрити"},formatFilterControlSwitch:function(){return"Сховати/Відобразити елементи керування"},formatFilterControlSwitchHide:function(){return"Сховати елементи керування"},formatFilterControlSwitchShow:function(){return"Відобразити елементи керування"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["uk-UA"]),t.fn.bootstrapTable.locales["vi-VN"]=t.fn.bootstrapTable.locales.vi={formatCopyRows:function(){return"Sao chép hàng"},formatPrint:function(){return"In"},formatLoadingMessage:function(){return"Đang tải"},formatRecordsPerPage:function(t){return"".concat(t," bản ghi mỗi trang")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"Hiển thị từ trang ".concat(t," đến ").concat(n," của ").concat(r," bản ghi (được lọc từ tổng ").concat(o," hàng)"):"Hiển thị từ trang ".concat(t," đến ").concat(n," của ").concat(r," bản ghi")},formatSRPaginationPreText:function(){return"trang trước"},formatSRPaginationPageText:function(t){return"đến trang ".concat(t)},formatSRPaginationNextText:function(){return"trang sau"},formatDetailPagination:function(t){return"Đang hiện ".concat(t," hàng")},formatClearSearch:function(){return"Xoá tìm kiếm"},formatSearch:function(){return"Tìm kiếm"},formatNoMatches:function(){return"Không có dữ liệu"},formatPaginationSwitch:function(){return"Ẩn/Hiện phân trang"},formatPaginationSwitchDown:function(){return"Hiện phân trang"},formatPaginationSwitchUp:function(){return"Ẩn phân trang"},formatRefresh:function(){return"Làm mới"},formatToggleOn:function(){return"Hiển thị các thẻ"},formatToggleOff:function(){return"Ẩn các thẻ"},formatColumns:function(){return"Cột"},formatColumnsToggleAll:function(){return"Hiện tất cả"},formatFullscreen:function(){return"Toàn màn hình"},formatAllRows:function(){return"Tất cả"},formatAutoRefresh:function(){return"Tự động làm mới"},formatExport:function(){return"Xuất dữ liệu"},formatJumpTo:function(){return"Đến"},formatAdvancedSearch:function(){return"Tìm kiếm nâng cao"},formatAdvancedCloseButton:function(){return"Đóng"},formatFilterControlSwitch:function(){return"Ẩn/Hiện điều khiển"},formatFilterControlSwitchHide:function(){return"Ẩn điều khiển"},formatFilterControlSwitchShow:function(){return"Hiện điều khiển"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["vi-VN"]),t.fn.bootstrapTable.locales["zh-CN"]=t.fn.bootstrapTable.locales.zh={formatCopyRows:function(){return"复制行"},formatPrint:function(){return"打印"},formatLoadingMessage:function(){return"正在努力地加载数据中,请稍候"},formatRecordsPerPage:function(t){return"每页显示 ".concat(t," 条记录")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"显示第 ".concat(t," 到第 ").concat(n," 条记录,总共 ").concat(r," 条记录(从 ").concat(o," 总记录中过滤)"):"显示第 ".concat(t," 到第 ").concat(n," 条记录,总共 ").concat(r," 条记录")},formatSRPaginationPreText:function(){return"上一页"},formatSRPaginationPageText:function(t){return"第".concat(t,"页")},formatSRPaginationNextText:function(){return"下一页"},formatDetailPagination:function(t){return"总共 ".concat(t," 条记录")},formatClearSearch:function(){return"清空过滤"},formatSearch:function(){return"搜索"},formatNoMatches:function(){return"没有找到匹配的记录"},formatPaginationSwitch:function(){return"隐藏/显示分页"},formatPaginationSwitchDown:function(){return"显示分页"},formatPaginationSwitchUp:function(){return"隐藏分页"},formatRefresh:function(){return"刷新"},formatToggleOn:function(){return"显示卡片视图"},formatToggleOff:function(){return"隐藏卡片视图"},formatColumns:function(){return"列"},formatColumnsToggleAll:function(){return"切换所有"},formatFullscreen:function(){return"全屏"},formatAllRows:function(){return"所有"},formatAutoRefresh:function(){return"自动刷新"},formatExport:function(){return"导出数据"},formatJumpTo:function(){return"跳转"},formatAdvancedSearch:function(){return"高级搜索"},formatAdvancedCloseButton:function(){return"关闭"},formatFilterControlSwitch:function(){return"隐藏/显示过滤控制"},formatFilterControlSwitchHide:function(){return"隐藏过滤控制"},formatFilterControlSwitchShow:function(){return"显示过滤控制"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["zh-CN"]),t.fn.bootstrapTable.locales["zh-TW"]={formatCopyRows:function(){return"複製行"},formatPrint:function(){return"列印"},formatLoadingMessage:function(){return"正在努力地載入資料,請稍候"},formatRecordsPerPage:function(t){return"每頁顯示 ".concat(t," 項記錄")},formatShowingRows:function(t,n,r,o){return void 0!==o&&o>0&&o>r?"顯示第 ".concat(t," 到第 ").concat(n," 項記錄,總共 ").concat(r," 項記錄(從 ").concat(o," 總記錄中過濾)"):"顯示第 ".concat(t," 到第 ").concat(n," 項記錄,總共 ").concat(r," 項記錄")},formatSRPaginationPreText:function(){return"上一頁"},formatSRPaginationPageText:function(t){return"第".concat(t,"頁")},formatSRPaginationNextText:function(){return"下一頁"},formatDetailPagination:function(t){return"總共 ".concat(t," 項記錄")},formatClearSearch:function(){return"清空過濾"},formatSearch:function(){return"搜尋"},formatNoMatches:function(){return"沒有找到符合的結果"},formatPaginationSwitch:function(){return"隱藏/顯示分頁"},formatPaginationSwitchDown:function(){return"顯示分頁"},formatPaginationSwitchUp:function(){return"隱藏分頁"},formatRefresh:function(){return"重新整理"},formatToggleOn:function(){return"顯示卡片視圖"},formatToggleOff:function(){return"隱藏卡片視圖"},formatColumns:function(){return"列"},formatColumnsToggleAll:function(){return"切換所有"},formatFullscreen:function(){return"全屏"},formatAllRows:function(){return"所有"},formatAutoRefresh:function(){return"自動刷新"},formatExport:function(){return"導出數據"},formatJumpTo:function(){return"跳轉"},formatAdvancedSearch:function(){return"高級搜尋"},formatAdvancedCloseButton:function(){return"關閉"},formatFilterControlSwitch:function(){return"隱藏/顯示過濾控制"},formatFilterControlSwitchHide:function(){return"隱藏過濾控制"},formatFilterControlSwitchShow:function(){return"顯示過濾控制"}},Object.assign(t.fn.bootstrapTable.defaults,t.fn.bootstrapTable.locales["zh-TW"])})); diff --git a/static/bootstrap533/bootstrap-table-1.23.5/bootstrap-table-vue.js b/static/bootstrap533/bootstrap-table-1.23.5/bootstrap-table-vue.js new file mode 100644 index 0000000..c4640c0 --- /dev/null +++ b/static/bootstrap533/bootstrap-table-1.23.5/bootstrap-table-vue.js @@ -0,0 +1,2059 @@ +var Dt = {}; +/** +* @vue/shared v3.5.10 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function un(e) { + const t = /* @__PURE__ */ Object.create(null); + for (const n of e.split(",")) t[n] = 1; + return (n) => n in t; +} +const I = Dt.NODE_ENV !== "production" ? Object.freeze({}) : {}, fn = Dt.NODE_ENV !== "production" ? Object.freeze([]) : [], le = () => { +}, pn = (e) => e.charCodeAt(0) === 111 && e.charCodeAt(1) === 110 && // uppercase letter +(e.charCodeAt(2) > 122 || e.charCodeAt(2) < 97), C = Object.assign, dn = Object.prototype.hasOwnProperty, w = (e, t) => dn.call(e, t), b = Array.isArray, ne = (e) => Pe(e) === "[object Map]", hn = (e) => Pe(e) === "[object Set]", O = (e) => typeof e == "function", A = (e) => typeof e == "string", pe = (e) => typeof e == "symbol", v = (e) => e !== null && typeof e == "object", gn = (e) => (v(e) || O(e)) && O(e.then) && O(e.catch), _n = Object.prototype.toString, Pe = (e) => _n.call(e), Vt = (e) => Pe(e).slice(8, -1), mn = (e) => Pe(e) === "[object Object]", et = (e) => A(e) && e !== "NaN" && e[0] !== "-" && "" + parseInt(e, 10) === e, bn = (e) => { + const t = /* @__PURE__ */ Object.create(null); + return (n) => t[n] || (t[n] = e(n)); +}, En = bn((e) => e.charAt(0).toUpperCase() + e.slice(1)), Z = (e, t) => !Object.is(e, t), wn = (e, t, n, r = !1) => { + Object.defineProperty(e, t, { + configurable: !0, + enumerable: !1, + writable: r, + value: n + }); +}; +let gt; +const Tt = () => gt || (gt = typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : typeof global < "u" ? global : {}); +function tt(e) { + if (b(e)) { + const t = {}; + for (let n = 0; n < e.length; n++) { + const r = e[n], s = A(r) ? xn(r) : tt(r); + if (s) + for (const i in s) + t[i] = s[i]; + } + return t; + } else if (A(e) || v(e)) + return e; +} +const Nn = /;(?![^(]*\))/g, Sn = /:([^]+)/, On = /\/\*[^]*?\*\//g; +function xn(e) { + const t = {}; + return e.replace(On, "").split(Nn).forEach((n) => { + if (n) { + const r = n.split(Sn); + r.length > 1 && (t[r[0].trim()] = r[1].trim()); + } + }), t; +} +function nt(e) { + let t = ""; + if (A(e)) + t = e; + else if (b(e)) + for (let n = 0; n < e.length; n++) { + const r = nt(e[n]); + r && (t += r + " "); + } + else if (v(e)) + for (const n in e) + e[n] && (t += n + " "); + return t.trim(); +} +var E = {}; +function B(e, ...t) { + console.warn(`[Vue warn] ${e}`, ...t); +} +let _; +const Ke = /* @__PURE__ */ new WeakSet(); +class yn { + constructor(t) { + this.fn = t, this.deps = void 0, this.depsTail = void 0, this.flags = 5, this.next = void 0, this.cleanup = void 0, this.scheduler = void 0; + } + pause() { + this.flags |= 64; + } + resume() { + this.flags & 64 && (this.flags &= -65, Ke.has(this) && (Ke.delete(this), this.trigger())); + } + /** + * @internal + */ + notify() { + this.flags & 2 && !(this.flags & 32) || this.flags & 8 || vn(this); + } + run() { + if (!(this.flags & 1)) + return this.fn(); + this.flags |= 2, _t(this), Rt(this); + const t = _, n = P; + _ = this, P = !0; + try { + return this.fn(); + } finally { + E.NODE_ENV !== "production" && _ !== this && B( + "Active effect was not restored correctly - this is likely a Vue internal bug." + ), Ct(this), _ = t, P = n, this.flags &= -3; + } + } + stop() { + if (this.flags & 1) { + for (let t = this.deps; t; t = t.nextDep) + it(t); + this.deps = this.depsTail = void 0, _t(this), this.onStop && this.onStop(), this.flags &= -2; + } + } + trigger() { + this.flags & 64 ? Ke.add(this) : this.scheduler ? this.scheduler() : this.runIfDirty(); + } + /** + * @internal + */ + runIfDirty() { + Ye(this) && this.run(); + } + get dirty() { + return Ye(this); + } +} +let It = 0, te; +function vn(e) { + e.flags |= 8, e.next = te, te = e; +} +function rt() { + It++; +} +function st() { + if (--It > 0) + return; + let e; + for (; te; ) { + let t = te, n; + for (; t; ) + t.flags & 1 || (t.flags &= -9), t = t.next; + for (t = te, te = void 0; t; ) { + if (n = t.next, t.next = void 0, t.flags &= -9, t.flags & 1) + try { + t.trigger(); + } catch (r) { + e || (e = r); + } + t = n; + } + } + if (e) throw e; +} +function Rt(e) { + for (let t = e.deps; t; t = t.nextDep) + t.version = -1, t.prevActiveLink = t.dep.activeLink, t.dep.activeLink = t; +} +function Ct(e) { + let t, n = e.depsTail, r = n; + for (; r; ) { + const s = r.prevDep; + r.version === -1 ? (r === n && (n = s), it(r), Vn(r)) : t = r, r.dep.activeLink = r.prevActiveLink, r.prevActiveLink = void 0, r = s; + } + e.deps = t, e.depsTail = n; +} +function Ye(e) { + for (let t = e.deps; t; t = t.nextDep) + if (t.dep.version !== t.version || t.dep.computed && (Dn(t.dep.computed) || t.dep.version !== t.version)) + return !0; + return !!e._dirty; +} +function Dn(e) { + if (e.flags & 4 && !(e.flags & 16) || (e.flags &= -17, e.globalVersion === ve)) + return; + e.globalVersion = ve; + const t = e.dep; + if (e.flags |= 2, t.version > 0 && !e.isSSR && e.deps && !Ye(e)) { + e.flags &= -3; + return; + } + const n = _, r = P; + _ = e, P = !0; + try { + Rt(e); + const s = e.fn(e._value); + (t.version === 0 || Z(s, e._value)) && (e._value = s, t.version++); + } catch (s) { + throw t.version++, s; + } finally { + _ = n, P = r, Ct(e), e.flags &= -3; + } +} +function it(e, t = !1) { + const { dep: n, prevSub: r, nextSub: s } = e; + if (r && (r.nextSub = s, e.prevSub = void 0), s && (s.prevSub = r, e.nextSub = void 0), n.subs === e && (n.subs = r), E.NODE_ENV !== "production" && n.subsHead === e && (n.subsHead = s), !n.subs && n.computed) { + n.computed.flags &= -5; + for (let i = n.computed.deps; i; i = i.nextDep) + it(i, !0); + } + !t && !--n.sc && n.map && n.map.delete(n.key); +} +function Vn(e) { + const { prevDep: t, nextDep: n } = e; + t && (t.nextDep = n, e.prevDep = void 0), n && (n.prevDep = t, e.nextDep = void 0); +} +let P = !0; +const $t = []; +function Ae() { + $t.push(P), P = !1; +} +function Me() { + const e = $t.pop(); + P = e === void 0 ? !0 : e; +} +function _t(e) { + const { cleanup: t } = e; + if (e.cleanup = void 0, t) { + const n = _; + _ = void 0; + try { + t(); + } finally { + _ = n; + } + } +} +let ve = 0; +class Tn { + constructor(t, n) { + this.sub = t, this.dep = n, this.version = n.version, this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; + } +} +class In { + constructor(t) { + this.computed = t, this.version = 0, this.activeLink = void 0, this.subs = void 0, this.target = void 0, this.map = void 0, this.key = void 0, this.sc = 0, E.NODE_ENV !== "production" && (this.subsHead = void 0); + } + track(t) { + if (!_ || !P || _ === this.computed) + return; + let n = this.activeLink; + if (n === void 0 || n.sub !== _) + n = this.activeLink = new Tn(_, this), _.deps ? (n.prevDep = _.depsTail, _.depsTail.nextDep = n, _.depsTail = n) : _.deps = _.depsTail = n, Pt(n); + else if (n.version === -1 && (n.version = this.version, n.nextDep)) { + const r = n.nextDep; + r.prevDep = n.prevDep, n.prevDep && (n.prevDep.nextDep = r), n.prevDep = _.depsTail, n.nextDep = void 0, _.depsTail.nextDep = n, _.depsTail = n, _.deps === n && (_.deps = r); + } + return E.NODE_ENV !== "production" && _.onTrack && _.onTrack( + C( + { + effect: _ + }, + t + ) + ), n; + } + trigger(t) { + this.version++, ve++, this.notify(t); + } + notify(t) { + rt(); + try { + if (E.NODE_ENV !== "production") + for (let n = this.subsHead; n; n = n.nextSub) + n.sub.onTrigger && !(n.sub.flags & 8) && n.sub.onTrigger( + C( + { + effect: n.sub + }, + t + ) + ); + for (let n = this.subs; n; n = n.prevSub) + n.sub.notify() && n.sub.dep.notify(); + } finally { + st(); + } + } +} +function Pt(e) { + if (e.dep.sc++, e.sub.flags & 4) { + const t = e.dep.computed; + if (t && !e.dep.subs) { + t.flags |= 20; + for (let r = t.deps; r; r = r.nextDep) + Pt(r); + } + const n = e.dep.subs; + n !== e && (e.prevSub = n, n && (n.nextSub = e)), E.NODE_ENV !== "production" && e.dep.subsHead === void 0 && (e.dep.subsHead = e), e.dep.subs = e; + } +} +const Ge = /* @__PURE__ */ new WeakMap(), G = Symbol( + E.NODE_ENV !== "production" ? "Object iterate" : "" +), Qe = Symbol( + E.NODE_ENV !== "production" ? "Map keys iterate" : "" +), ue = Symbol( + E.NODE_ENV !== "production" ? "Array iterate" : "" +); +function x(e, t, n) { + if (P && _) { + let r = Ge.get(e); + r || Ge.set(e, r = /* @__PURE__ */ new Map()); + let s = r.get(n); + s || (r.set(n, s = new In()), s.target = e, s.map = r, s.key = n), E.NODE_ENV !== "production" ? s.track({ + target: e, + type: t, + key: n + }) : s.track(); + } +} +function U(e, t, n, r, s, i) { + const o = Ge.get(e); + if (!o) { + ve++; + return; + } + const l = (a) => { + a && (E.NODE_ENV !== "production" ? a.trigger({ + target: e, + type: t, + key: n, + newValue: r, + oldValue: s, + oldTarget: i + }) : a.trigger()); + }; + if (rt(), t === "clear") + o.forEach(l); + else { + const a = b(e), f = a && et(n); + if (a && n === "length") { + const g = Number(r); + o.forEach((c, u) => { + (u === "length" || u === ue || !pe(u) && u >= g) && l(c); + }); + } else + switch (n !== void 0 && l(o.get(n)), f && l(o.get(ue)), t) { + case "add": + a ? f && l(o.get("length")) : (l(o.get(G)), ne(e) && l(o.get(Qe))); + break; + case "delete": + a || (l(o.get(G)), ne(e) && l(o.get(Qe))); + break; + case "set": + ne(e) && l(o.get(G)); + break; + } + } + st(); +} +function k(e) { + const t = d(e); + return t === e ? t : (x(t, "iterate", ue), T(e) ? t : t.map(V)); +} +function ot(e) { + return x(e = d(e), "iterate", ue), e; +} +const Rn = { + __proto__: null, + [Symbol.iterator]() { + return ze(this, Symbol.iterator, V); + }, + concat(...e) { + return k(this).concat( + ...e.map((t) => b(t) ? k(t) : t) + ); + }, + entries() { + return ze(this, "entries", (e) => (e[1] = V(e[1]), e)); + }, + every(e, t) { + return j(this, "every", e, t, void 0, arguments); + }, + filter(e, t) { + return j(this, "filter", e, t, (n) => n.map(V), arguments); + }, + find(e, t) { + return j(this, "find", e, t, V, arguments); + }, + findIndex(e, t) { + return j(this, "findIndex", e, t, void 0, arguments); + }, + findLast(e, t) { + return j(this, "findLast", e, t, V, arguments); + }, + findLastIndex(e, t) { + return j(this, "findLastIndex", e, t, void 0, arguments); + }, + // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement + forEach(e, t) { + return j(this, "forEach", e, t, void 0, arguments); + }, + includes(...e) { + return Le(this, "includes", e); + }, + indexOf(...e) { + return Le(this, "indexOf", e); + }, + join(e) { + return k(this).join(e); + }, + // keys() iterator only reads `length`, no optimisation required + lastIndexOf(...e) { + return Le(this, "lastIndexOf", e); + }, + map(e, t) { + return j(this, "map", e, t, void 0, arguments); + }, + pop() { + return oe(this, "pop"); + }, + push(...e) { + return oe(this, "push", e); + }, + reduce(e, ...t) { + return mt(this, "reduce", e, t); + }, + reduceRight(e, ...t) { + return mt(this, "reduceRight", e, t); + }, + shift() { + return oe(this, "shift"); + }, + // slice could use ARRAY_ITERATE but also seems to beg for range tracking + some(e, t) { + return j(this, "some", e, t, void 0, arguments); + }, + splice(...e) { + return oe(this, "splice", e); + }, + toReversed() { + return k(this).toReversed(); + }, + toSorted(e) { + return k(this).toSorted(e); + }, + toSpliced(...e) { + return k(this).toSpliced(...e); + }, + unshift(...e) { + return oe(this, "unshift", e); + }, + values() { + return ze(this, "values", V); + } +}; +function ze(e, t, n) { + const r = ot(e), s = r[t](); + return r !== e && !T(e) && (s._next = s.next, s.next = () => { + const i = s._next(); + return i.value && (i.value = n(i.value)), i; + }), s; +} +const Cn = Array.prototype; +function j(e, t, n, r, s, i) { + const o = ot(e), l = o !== e && !T(e), a = o[t]; + if (a !== Cn[t]) { + const c = a.apply(e, i); + return l ? V(c) : c; + } + let f = n; + o !== e && (l ? f = function(c, u) { + return n.call(this, V(c), u, e); + } : n.length > 2 && (f = function(c, u) { + return n.call(this, c, u, e); + })); + const g = a.call(o, f, r); + return l && s ? s(g) : g; +} +function mt(e, t, n, r) { + const s = ot(e); + let i = n; + return s !== e && (T(e) ? n.length > 3 && (i = function(o, l, a) { + return n.call(this, o, l, a, e); + }) : i = function(o, l, a) { + return n.call(this, o, V(l), a, e); + }), s[t](i, ...r); +} +function Le(e, t, n) { + const r = d(e); + x(r, "iterate", ue); + const s = r[t](...n); + return (s === -1 || s === !1) && De(n[0]) ? (n[0] = d(n[0]), r[t](...n)) : s; +} +function oe(e, t, n = []) { + Ae(), rt(); + const r = d(e)[t].apply(e, n); + return st(), Me(), r; +} +const $n = /* @__PURE__ */ un("__proto__,__v_isRef,__isVue"), At = new Set( + /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((e) => e !== "arguments" && e !== "caller").map((e) => Symbol[e]).filter(pe) +); +function Pn(e) { + pe(e) || (e = String(e)); + const t = d(this); + return x(t, "has", e), t.hasOwnProperty(e); +} +class Mt { + constructor(t = !1, n = !1) { + this._isReadonly = t, this._isShallow = n; + } + get(t, n, r) { + const s = this._isReadonly, i = this._isShallow; + if (n === "__v_isReactive") + return !s; + if (n === "__v_isReadonly") + return s; + if (n === "__v_isShallow") + return i; + if (n === "__v_raw") + return r === (s ? i ? Kt : Wt : i ? qn : Ht).get(t) || // receiver is not the reactive proxy, but has the same prototype + // this means the receiver is a user proxy of the reactive proxy + Object.getPrototypeOf(t) === Object.getPrototypeOf(r) ? t : void 0; + const o = b(t); + if (!s) { + let a; + if (o && (a = Rn[n])) + return a; + if (n === "hasOwnProperty") + return Pn; + } + const l = Reflect.get( + t, + n, + // if this is a proxy wrapping a ref, return methods using the raw ref + // as receiver so that we don't have to call `toRaw` on the ref in all + // its class methods + D(t) ? t : r + ); + return (pe(n) ? At.has(n) : $n(n)) || (s || x(t, "get", n), i) ? l : D(l) ? o && et(n) ? l : l.value : v(l) ? s ? Lt(l) : zt(l) : l; + } +} +class An extends Mt { + constructor(t = !1) { + super(!1, t); + } + set(t, n, r, s) { + let i = t[n]; + if (!this._isShallow) { + const a = J(i); + if (!T(r) && !J(r) && (i = d(i), r = d(r)), !b(t) && D(i) && !D(r)) + return a ? !1 : (i.value = r, !0); + } + const o = b(t) && et(n) ? Number(n) < t.length : w(t, n), l = Reflect.set( + t, + n, + r, + D(t) ? t : s + ); + return t === d(s) && (o ? Z(r, i) && U(t, "set", n, r, i) : U(t, "add", n, r)), l; + } + deleteProperty(t, n) { + const r = w(t, n), s = t[n], i = Reflect.deleteProperty(t, n); + return i && r && U(t, "delete", n, void 0, s), i; + } + has(t, n) { + const r = Reflect.has(t, n); + return (!pe(n) || !At.has(n)) && x(t, "has", n), r; + } + ownKeys(t) { + return x( + t, + "iterate", + b(t) ? "length" : G + ), Reflect.ownKeys(t); + } +} +class Ft extends Mt { + constructor(t = !1) { + super(!0, t); + } + set(t, n) { + return E.NODE_ENV !== "production" && B( + `Set operation on key "${String(n)}" failed: target is readonly.`, + t + ), !0; + } + deleteProperty(t, n) { + return E.NODE_ENV !== "production" && B( + `Delete operation on key "${String(n)}" failed: target is readonly.`, + t + ), !0; + } +} +const Mn = /* @__PURE__ */ new An(), Fn = /* @__PURE__ */ new Ft(), jn = /* @__PURE__ */ new Ft(!0), ct = (e) => e, Fe = (e) => Reflect.getPrototypeOf(e); +function ge(e, t, n = !1, r = !1) { + e = e.__v_raw; + const s = d(e), i = d(t); + n || (Z(t, i) && x(s, "get", t), x(s, "get", i)); + const { has: o } = Fe(s), l = r ? ct : n ? ut : V; + if (o.call(s, t)) + return l(e.get(t)); + if (o.call(s, i)) + return l(e.get(i)); + e !== s && e.get(t); +} +function _e(e, t = !1) { + const n = this.__v_raw, r = d(n), s = d(e); + return t || (Z(e, s) && x(r, "has", e), x(r, "has", s)), e === s ? n.has(e) : n.has(e) || n.has(s); +} +function me(e, t = !1) { + return e = e.__v_raw, !t && x(d(e), "iterate", G), Reflect.get(e, "size", e); +} +function bt(e, t = !1) { + !t && !T(e) && !J(e) && (e = d(e)); + const n = d(this); + return Fe(n).has.call(n, e) || (n.add(e), U(n, "add", e, e)), this; +} +function Et(e, t, n = !1) { + !n && !T(t) && !J(t) && (t = d(t)); + const r = d(this), { has: s, get: i } = Fe(r); + let o = s.call(r, e); + o ? E.NODE_ENV !== "production" && jt(r, s, e) : (e = d(e), o = s.call(r, e)); + const l = i.call(r, e); + return r.set(e, t), o ? Z(t, l) && U(r, "set", e, t, l) : U(r, "add", e, t), this; +} +function wt(e) { + const t = d(this), { has: n, get: r } = Fe(t); + let s = n.call(t, e); + s ? E.NODE_ENV !== "production" && jt(t, n, e) : (e = d(e), s = n.call(t, e)); + const i = r ? r.call(t, e) : void 0, o = t.delete(e); + return s && U(t, "delete", e, void 0, i), o; +} +function Nt() { + const e = d(this), t = e.size !== 0, n = E.NODE_ENV !== "production" ? ne(e) ? new Map(e) : new Set(e) : void 0, r = e.clear(); + return t && U(e, "clear", void 0, void 0, n), r; +} +function be(e, t) { + return function(r, s) { + const i = this, o = i.__v_raw, l = d(o), a = t ? ct : e ? ut : V; + return !e && x(l, "iterate", G), o.forEach((f, g) => r.call(s, a(f), a(g), i)); + }; +} +function Ee(e, t, n) { + return function(...r) { + const s = this.__v_raw, i = d(s), o = ne(i), l = e === "entries" || e === Symbol.iterator && o, a = e === "keys" && o, f = s[e](...r), g = n ? ct : t ? ut : V; + return !t && x( + i, + "iterate", + a ? Qe : G + ), { + // iterator protocol + next() { + const { value: c, done: u } = f.next(); + return u ? { value: c, done: u } : { + value: l ? [g(c[0]), g(c[1])] : g(c), + done: u + }; + }, + // iterable protocol + [Symbol.iterator]() { + return this; + } + }; + }; +} +function K(e) { + return function(...t) { + if (E.NODE_ENV !== "production") { + const n = t[0] ? `on key "${t[0]}" ` : ""; + B( + `${En(e)} operation ${n}failed: target is readonly.`, + d(this) + ); + } + return e === "delete" ? !1 : e === "clear" ? void 0 : this; + }; +} +function Hn() { + const e = { + get(i) { + return ge(this, i); + }, + get size() { + return me(this); + }, + has: _e, + add: bt, + set: Et, + delete: wt, + clear: Nt, + forEach: be(!1, !1) + }, t = { + get(i) { + return ge(this, i, !1, !0); + }, + get size() { + return me(this); + }, + has: _e, + add(i) { + return bt.call(this, i, !0); + }, + set(i, o) { + return Et.call(this, i, o, !0); + }, + delete: wt, + clear: Nt, + forEach: be(!1, !0) + }, n = { + get(i) { + return ge(this, i, !0); + }, + get size() { + return me(this, !0); + }, + has(i) { + return _e.call(this, i, !0); + }, + add: K("add"), + set: K("set"), + delete: K("delete"), + clear: K("clear"), + forEach: be(!0, !1) + }, r = { + get(i) { + return ge(this, i, !0, !0); + }, + get size() { + return me(this, !0); + }, + has(i) { + return _e.call(this, i, !0); + }, + add: K("add"), + set: K("set"), + delete: K("delete"), + clear: K("clear"), + forEach: be(!0, !0) + }; + return [ + "keys", + "values", + "entries", + Symbol.iterator + ].forEach((i) => { + e[i] = Ee(i, !1, !1), n[i] = Ee(i, !0, !1), t[i] = Ee(i, !1, !0), r[i] = Ee( + i, + !0, + !0 + ); + }), [ + e, + n, + t, + r + ]; +} +const [ + Wn, + Kn, + zn, + Ln +] = /* @__PURE__ */ Hn(); +function lt(e, t) { + const n = t ? e ? Ln : zn : e ? Kn : Wn; + return (r, s, i) => s === "__v_isReactive" ? !e : s === "__v_isReadonly" ? e : s === "__v_raw" ? r : Reflect.get( + w(n, s) && s in r ? n : r, + s, + i + ); +} +const Un = { + get: /* @__PURE__ */ lt(!1, !1) +}, Bn = { + get: /* @__PURE__ */ lt(!0, !1) +}, Jn = { + get: /* @__PURE__ */ lt(!0, !0) +}; +function jt(e, t, n) { + const r = d(n); + if (r !== n && t.call(e, r)) { + const s = Vt(e); + B( + `Reactive ${s} contains both the raw and reactive versions of the same object${s === "Map" ? " as keys" : ""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` + ); + } +} +const Ht = /* @__PURE__ */ new WeakMap(), qn = /* @__PURE__ */ new WeakMap(), Wt = /* @__PURE__ */ new WeakMap(), Kt = /* @__PURE__ */ new WeakMap(); +function Yn(e) { + switch (e) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } +} +function Gn(e) { + return e.__v_skip || !Object.isExtensible(e) ? 0 : Yn(Vt(e)); +} +function zt(e) { + return J(e) ? e : at( + e, + !1, + Mn, + Un, + Ht + ); +} +function Lt(e) { + return at( + e, + !0, + Fn, + Bn, + Wt + ); +} +function we(e) { + return at( + e, + !0, + jn, + Jn, + Kt + ); +} +function at(e, t, n, r, s) { + if (!v(e)) + return E.NODE_ENV !== "production" && B( + `value cannot be made ${t ? "readonly" : "reactive"}: ${String( + e + )}` + ), e; + if (e.__v_raw && !(t && e.__v_isReactive)) + return e; + const i = s.get(e); + if (i) + return i; + const o = Gn(e); + if (o === 0) + return e; + const l = new Proxy( + e, + o === 2 ? r : n + ); + return s.set(e, l), l; +} +function re(e) { + return J(e) ? re(e.__v_raw) : !!(e && e.__v_isReactive); +} +function J(e) { + return !!(e && e.__v_isReadonly); +} +function T(e) { + return !!(e && e.__v_isShallow); +} +function De(e) { + return e ? !!e.__v_raw : !1; +} +function d(e) { + const t = e && e.__v_raw; + return t ? d(t) : e; +} +function Qn(e) { + return !w(e, "__v_skip") && Object.isExtensible(e) && wn(e, "__v_skip", !0), e; +} +const V = (e) => v(e) ? zt(e) : e, ut = (e) => v(e) ? Lt(e) : e; +function D(e) { + return e ? e.__v_isRef === !0 : !1; +} +function Zn(e) { + return D(e) ? e.value : e; +} +const Xn = { + get: (e, t, n) => t === "__v_raw" ? e : Zn(Reflect.get(e, t, n)), + set: (e, t, n, r) => { + const s = e[t]; + return D(s) && !D(n) ? (s.value = n, !0) : Reflect.set(e, t, n, r); + } +}; +function kn(e) { + return re(e) ? e : new Proxy(e, Xn); +} +const Ne = {}, Ve = /* @__PURE__ */ new WeakMap(); +let Y; +function er(e, t = !1, n = Y) { + if (n) { + let r = Ve.get(n); + r || Ve.set(n, r = []), r.push(e); + } else E.NODE_ENV !== "production" && !t && B( + "onWatcherCleanup() was called when there was no active watcher to associate with." + ); +} +function tr(e, t, n = I) { + const { immediate: r, deep: s, once: i, scheduler: o, augmentJob: l, call: a } = n, f = (h) => { + (n.onWarn || B)( + "Invalid watch source: ", + h, + "A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types." + ); + }, g = (h) => s ? h : T(h) || s === !1 || s === 0 ? L(h, 1) : L(h); + let c, u, m, S, M = !1, de = !1; + if (D(e) ? (u = () => e.value, M = T(e)) : re(e) ? (u = () => g(e), M = !0) : b(e) ? (de = !0, M = e.some((h) => re(h) || T(h)), u = () => e.map((h) => { + if (D(h)) + return h.value; + if (re(h)) + return g(h); + if (O(h)) + return a ? a(h, 2) : h(); + E.NODE_ENV !== "production" && f(h); + })) : O(e) ? t ? u = a ? () => a(e, 2) : e : u = () => { + if (m) { + Ae(); + try { + m(); + } finally { + Me(); + } + } + const h = Y; + Y = c; + try { + return a ? a(e, 3, [S]) : e(S); + } finally { + Y = h; + } + } : (u = le, E.NODE_ENV !== "production" && f(e)), t && s) { + const h = u, F = s === !0 ? 1 / 0 : s; + u = () => L(h(), F); + } + const X = () => { + c.stop(); + }; + if (i && t) { + const h = t; + t = (...F) => { + h(...F), X(); + }; + } + let q = de ? new Array(e.length).fill(Ne) : Ne; + const ie = (h) => { + if (!(!(c.flags & 1) || !c.dirty && !h)) + if (t) { + const F = c.run(); + if (s || M || (de ? F.some((We, he) => Z(We, q[he])) : Z(F, q))) { + m && m(); + const We = Y; + Y = c; + try { + const he = [ + F, + // pass undefined as the old value when it's changed for the first time + q === Ne ? void 0 : de && q[0] === Ne ? [] : q, + S + ]; + a ? a(t, 3, he) : ( + // @ts-expect-error + t(...he) + ), q = F; + } finally { + Y = We; + } + } + } else + c.run(); + }; + return l && l(ie), c = new yn(u), c.scheduler = o ? () => o(ie, !1) : ie, S = (h) => er(h, !1, c), m = c.onStop = () => { + const h = Ve.get(c); + if (h) { + if (a) + a(h, 4); + else + for (const F of h) F(); + Ve.delete(c); + } + }, E.NODE_ENV !== "production" && (c.onTrack = n.onTrack, c.onTrigger = n.onTrigger), t ? r ? ie(!0) : q = c.run() : o ? o(ie.bind(null, !0), !0) : c.run(), X.pause = c.pause.bind(c), X.resume = c.resume.bind(c), X.stop = X, X; +} +function L(e, t = 1 / 0, n) { + if (t <= 0 || !v(e) || e.__v_skip || (n = n || /* @__PURE__ */ new Set(), n.has(e))) + return e; + if (n.add(e), t--, D(e)) + L(e.value, t, n); + else if (b(e)) + for (let r = 0; r < e.length; r++) + L(e[r], t, n); + else if (hn(e) || ne(e)) + e.forEach((r) => { + L(r, t, n); + }); + else if (mn(e)) { + for (const r in e) + L(e[r], t, n); + for (const r of Object.getOwnPropertySymbols(e)) + Object.prototype.propertyIsEnumerable.call(e, r) && L(e[r], t, n); + } + return e; +} +var p = {}; +const Q = []; +function nr(e) { + Q.push(e); +} +function rr() { + Q.pop(); +} +let Ue = !1; +function N(e, ...t) { + if (Ue) return; + Ue = !0, Ae(); + const n = Q.length ? Q[Q.length - 1].component : null, r = n && n.appContext.config.warnHandler, s = sr(); + if (r) + je( + r, + n, + 11, + [ + // eslint-disable-next-line no-restricted-syntax + e + t.map((i) => { + var o, l; + return (l = (o = i.toString) == null ? void 0 : o.call(i)) != null ? l : JSON.stringify(i); + }).join(""), + n && n.proxy, + s.map( + ({ vnode: i }) => `at <${ln(n, i.type)}>` + ).join(` +`), + s + ] + ); + else { + const i = [`[Vue warn]: ${e}`, ...t]; + s.length && i.push(` +`, ...ir(s)), console.warn(...i); + } + Me(), Ue = !1; +} +function sr() { + let e = Q[Q.length - 1]; + if (!e) + return []; + const t = []; + for (; e; ) { + const n = t[0]; + n && n.vnode === e ? n.recurseCount++ : t.push({ + vnode: e, + recurseCount: 0 + }); + const r = e.component && e.component.parent; + e = r && r.vnode; + } + return t; +} +function ir(e) { + const t = []; + return e.forEach((n, r) => { + t.push(...r === 0 ? [] : [` +`], ...or(n)); + }), t; +} +function or({ vnode: e, recurseCount: t }) { + const n = t > 0 ? `... (${t} recursive calls)` : "", r = e.component ? e.component.parent == null : !1, s = ` at <${ln( + e.component, + e.type, + r + )}`, i = ">" + n; + return e.props ? [s, ...cr(e.props), i] : [s + i]; +} +function cr(e) { + const t = [], n = Object.keys(e); + return n.slice(0, 3).forEach((r) => { + t.push(...Ut(r, e[r])); + }), n.length > 3 && t.push(" ..."), t; +} +function Ut(e, t, n) { + return A(t) ? (t = JSON.stringify(t), n ? t : [`${e}=${t}`]) : typeof t == "number" || typeof t == "boolean" || t == null ? n ? t : [`${e}=${t}`] : D(t) ? (t = Ut(e, d(t.value), !0), n ? t : [`${e}=Ref<`, t, ">"]) : O(t) ? [`${e}=fn${t.name ? `<${t.name}>` : ""}`] : (t = d(t), n ? t : [`${e}=`, t]); +} +const Bt = { + sp: "serverPrefetch hook", + bc: "beforeCreate hook", + c: "created hook", + bm: "beforeMount hook", + m: "mounted hook", + bu: "beforeUpdate hook", + u: "updated", + bum: "beforeUnmount hook", + um: "unmounted hook", + a: "activated hook", + da: "deactivated hook", + ec: "errorCaptured hook", + rtc: "renderTracked hook", + rtg: "renderTriggered hook", + 0: "setup function", + 1: "render function", + 2: "watcher getter", + 3: "watcher callback", + 4: "watcher cleanup function", + 5: "native event handler", + 6: "component event handler", + 7: "vnode hook", + 8: "directive hook", + 9: "transition hook", + 10: "app errorHandler", + 11: "app warnHandler", + 12: "ref function", + 13: "async component loader", + 14: "scheduler flush", + 15: "component update", + 16: "app unmount cleanup function" +}; +function je(e, t, n, r) { + try { + return r ? e(...r) : e(); + } catch (s) { + ft(s, t, n); + } +} +function Jt(e, t, n, r) { + if (O(e)) { + const s = je(e, t, n, r); + return s && gn(s) && s.catch((i) => { + ft(i, t, n); + }), s; + } + if (b(e)) { + const s = []; + for (let i = 0; i < e.length; i++) + s.push(Jt(e[i], t, n, r)); + return s; + } else p.NODE_ENV !== "production" && N( + `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof e}` + ); +} +function ft(e, t, n, r = !0) { + const s = t ? t.vnode : null, { errorHandler: i, throwUnhandledErrorInProduction: o } = t && t.appContext.config || I; + if (t) { + let l = t.parent; + const a = t.proxy, f = p.NODE_ENV !== "production" ? Bt[n] : `https://vuejs.org/error-reference/#runtime-${n}`; + for (; l; ) { + const g = l.ec; + if (g) { + for (let c = 0; c < g.length; c++) + if (g[c](e, a, f) === !1) + return; + } + l = l.parent; + } + if (i) { + Ae(), je(i, null, 10, [ + e, + a, + f + ]), Me(); + return; + } + } + lr(e, n, s, r, o); +} +function lr(e, t, n, r = !0, s = !1) { + if (p.NODE_ENV !== "production") { + const i = Bt[t]; + if (n && nr(n), N(`Unhandled error${i ? ` during execution of ${i}` : ""}`), n && rr(), r) + throw e; + console.error(e); + } else { + if (s) + throw e; + console.error(e); + } +} +let Te = !1, Ze = !1; +const R = []; +let H = 0; +const se = []; +let z = null, ee = 0; +const qt = /* @__PURE__ */ Promise.resolve(); +let pt = null; +const ar = 100; +function ur(e) { + const t = pt || qt; + return e ? t.then(this ? e.bind(this) : e) : t; +} +function fr(e) { + let t = Te ? H + 1 : 0, n = R.length; + for (; t < n; ) { + const r = t + n >>> 1, s = R[r], i = fe(s); + i < e || i === e && s.flags & 2 ? t = r + 1 : n = r; + } + return t; +} +function dt(e) { + if (!(e.flags & 1)) { + const t = fe(e), n = R[R.length - 1]; + !n || // fast path when the job id is larger than the tail + !(e.flags & 2) && t >= fe(n) ? R.push(e) : R.splice(fr(t), 0, e), e.flags |= 1, Yt(); + } +} +function Yt() { + !Te && !Ze && (Ze = !0, pt = qt.then(Qt)); +} +function Gt(e) { + b(e) ? se.push(...e) : z && e.id === -1 ? z.splice(ee + 1, 0, e) : e.flags & 1 || (se.push(e), e.flags |= 1), Yt(); +} +function pr(e) { + if (se.length) { + const t = [...new Set(se)].sort( + (n, r) => fe(n) - fe(r) + ); + if (se.length = 0, z) { + z.push(...t); + return; + } + for (z = t, p.NODE_ENV !== "production" && (e = e || /* @__PURE__ */ new Map()), ee = 0; ee < z.length; ee++) { + const n = z[ee]; + p.NODE_ENV !== "production" && Zt(e, n) || (n.flags & 4 && (n.flags &= -2), n.flags & 8 || n(), n.flags &= -2); + } + z = null, ee = 0; + } +} +const fe = (e) => e.id == null ? e.flags & 2 ? -1 : 1 / 0 : e.id; +function Qt(e) { + Ze = !1, Te = !0, p.NODE_ENV !== "production" && (e = e || /* @__PURE__ */ new Map()); + const t = p.NODE_ENV !== "production" ? (n) => Zt(e, n) : le; + try { + for (H = 0; H < R.length; H++) { + const n = R[H]; + if (n && !(n.flags & 8)) { + if (p.NODE_ENV !== "production" && t(n)) + continue; + n.flags & 4 && (n.flags &= -2), je( + n, + n.i, + n.i ? 15 : 14 + ), n.flags & 4 || (n.flags &= -2); + } + } + } finally { + for (; H < R.length; H++) { + const n = R[H]; + n && (n.flags &= -2); + } + H = 0, R.length = 0, pr(e), Te = !1, pt = null, (R.length || se.length) && Qt(e); + } +} +function Zt(e, t) { + const n = e.get(t) || 0; + if (n > ar) { + const r = t.i, s = r && cn(r.type); + return ft( + `Maximum recursive updates exceeded${s ? ` in component <${s}>` : ""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`, + null, + 10 + ), !0; + } + return e.set(t, n + 1), !1; +} +const Be = /* @__PURE__ */ new Map(); +p.NODE_ENV !== "production" && (Tt().__VUE_HMR_RUNTIME__ = { + createRecord: Je(dr), + rerender: Je(hr), + reload: Je(gr) +}); +const Ie = /* @__PURE__ */ new Map(); +function dr(e, t) { + return Ie.has(e) ? !1 : (Ie.set(e, { + initialDef: Re(t), + instances: /* @__PURE__ */ new Set() + }), !0); +} +function Re(e) { + return an(e) ? e.__vccOpts : e; +} +function hr(e, t) { + const n = Ie.get(e); + n && (n.initialDef.render = t, [...n.instances].forEach((r) => { + t && (r.render = t, Re(r.type).render = t), r.renderCache = [], r.update(); + })); +} +function gr(e, t) { + const n = Ie.get(e); + if (!n) return; + t = Re(t), St(n.initialDef, t); + const r = [...n.instances]; + for (let s = 0; s < r.length; s++) { + const i = r[s], o = Re(i.type); + let l = Be.get(o); + l || (o !== n.initialDef && St(o, t), Be.set(o, l = /* @__PURE__ */ new Set())), l.add(i), i.appContext.propsCache.delete(i.type), i.appContext.emitsCache.delete(i.type), i.appContext.optionsCache.delete(i.type), i.ceReload ? (l.add(i), i.ceReload(t.styles), l.delete(i)) : i.parent ? dt(() => { + i.parent.update(), l.delete(i); + }) : i.appContext.reload ? i.appContext.reload() : typeof window < "u" ? window.location.reload() : console.warn( + "[HMR] Root or manually mounted instance modified. Full reload required." + ), i.root.ce && i !== i.root && i.root.ce._removeChildStyle(o); + } + Gt(() => { + Be.clear(); + }); +} +function St(e, t) { + C(e, t); + for (const n in e) + n !== "__file" && !(n in t) && delete e[n]; +} +function Je(e) { + return (t, n) => { + try { + return e(t, n); + } catch (r) { + console.error(r), console.warn( + "[HMR] Something went wrong during Vue component hot-reload. Full reload required." + ); + } + }; +} +let W = null, _r = null; +const mr = (e) => e.__isTeleport; +function Xt(e, t) { + e.shapeFlag & 6 && e.component ? (e.transition = t, Xt(e.component.subTree, t)) : e.shapeFlag & 128 ? (e.ssContent.transition = t.clone(e.ssContent), e.ssFallback.transition = t.clone(e.ssFallback)) : e.transition = t; +} +const br = Symbol.for("v-ndc"), Xe = (e) => e ? Gr(e) ? Qr(e) : Xe(e.parent) : null, ae = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + /* @__PURE__ */ C(/* @__PURE__ */ Object.create(null), { + $: (e) => e, + $el: (e) => e.vnode.el, + $data: (e) => e.data, + $props: (e) => p.NODE_ENV !== "production" ? we(e.props) : e.props, + $attrs: (e) => p.NODE_ENV !== "production" ? we(e.attrs) : e.attrs, + $slots: (e) => p.NODE_ENV !== "production" ? we(e.slots) : e.slots, + $refs: (e) => p.NODE_ENV !== "production" ? we(e.refs) : e.refs, + $parent: (e) => Xe(e.parent), + $root: (e) => Xe(e.root), + $host: (e) => e.ce, + $emit: (e) => e.emit, + $options: (e) => Nr(e), + $forceUpdate: (e) => e.f || (e.f = () => { + dt(e.update); + }), + $nextTick: (e) => e.n || (e.n = ur.bind(e.proxy)), + $watch: (e) => Cr.bind(e) + }) +), Er = (e) => e === "_" || e === "$", qe = (e, t) => e !== I && !e.__isScriptSetup && w(e, t), wr = { + get({ _: e }, t) { + if (t === "__v_skip") + return !0; + const { ctx: n, setupState: r, data: s, props: i, accessCache: o, type: l, appContext: a } = e; + if (p.NODE_ENV !== "production" && t === "__isVue") + return !0; + let f; + if (t[0] !== "$") { + const m = o[t]; + if (m !== void 0) + switch (m) { + case 1: + return r[t]; + case 2: + return s[t]; + case 4: + return n[t]; + case 3: + return i[t]; + } + else { + if (qe(r, t)) + return o[t] = 1, r[t]; + if (s !== I && w(s, t)) + return o[t] = 2, s[t]; + if ( + // only cache other properties when instance has declared (thus stable) + // props + (f = e.propsOptions[0]) && w(f, t) + ) + return o[t] = 3, i[t]; + if (n !== I && w(n, t)) + return o[t] = 4, n[t]; + o[t] = 0; + } + } + const g = ae[t]; + let c, u; + if (g) + return t === "$attrs" ? x(e.attrs, "get", "") : p.NODE_ENV !== "production" && t === "$slots" && x(e, "get", t), g(e); + if ( + // css module (injected by vue-loader) + (c = l.__cssModules) && (c = c[t]) + ) + return c; + if (n !== I && w(n, t)) + return o[t] = 4, n[t]; + if ( + // global properties + u = a.config.globalProperties, w(u, t) + ) + return u[t]; + p.NODE_ENV !== "production" && W && (!A(t) || // #1091 avoid internal isRef/isVNode checks on component instance leading + // to infinite warning loop + t.indexOf("__v") !== 0) && (s !== I && Er(t[0]) && w(s, t) ? N( + `Property ${JSON.stringify( + t + )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` + ) : e === W && N( + `Property ${JSON.stringify(t)} was accessed during render but is not defined on instance.` + )); + }, + set({ _: e }, t, n) { + const { data: r, setupState: s, ctx: i } = e; + return qe(s, t) ? (s[t] = n, !0) : p.NODE_ENV !== "production" && s.__isScriptSetup && w(s, t) ? (N(`Cannot mutate + + + + + +
+
+
+ + + + + + +

Area charts support highlighting and mouse events by default. The options and handlers and callbacks are essentially the same as with bar, pie, donut and funnel charts. One notable exception for area charts is that no data point index will be provided to the callback and the entire data set for the highlighted area will be returned. This is because the area is not associated with one particular data point, but with the entire data set of the series.

+ +
Moused Over: Nothing
+ +
+ +

For the chart below, mouseover has been disabled and click handling is enabled by setting "highlightMouseDown: true". For "fillToZero" area charts that have both negative and positive values as shown below, clicking in either the positive of negative regions will generate the same result.

+ +
You Clicked: Nothing yet
+ +
+ +
+ +
I'm a tooltip.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/axisLabelTests.html b/static/bootstrap533/jqplot-1.0.9/examples/axisLabelTests.html new file mode 100644 index 0000000..3063581 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/axisLabelTests.html @@ -0,0 +1,220 @@ + + + + + + Axis Labels + + + + + + + + + + + + + +
+
+
+ + + + +

jqPlot support axis labels through the "label" option of each axis. The default label renderer creates labels in div tags, which allows full css control over every label. Labels are assigned css classes like "jqplot-axis_name-label" where "axis_name" will be xaxis, yaxis, etc.

+ +
+ +

+
+
+

By including the "jqplot.canvasTextRenderer.min.js" and "jqplot.canvasAxisLabelRenderer.min.js" plugins, you can render label text directly onto canvas elements. This allows text to be rotated and yaxes will have their labels rotated 90 degrees by default. By default the labels will be rendered using the Hershey font metrics and not stroked as text. Most recent browsers (include IE 9) support native text rendering in canvas elements.

+ +
+ +

+
+      
+

If a visitors is using a browser suppporting native canvas fonts, the plot belowsupported browser, they will see the labels in the plot below rendered as 12 pt Georgia (or their system serif font if Georgia is unavailable). If they are on an unsupported browser, they will see the default Hershey font.

+ +
+ +

+
+
+  
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+  
+  
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/axisLabelsRotatedText.html b/static/bootstrap533/jqplot-1.0.9/examples/axisLabelsRotatedText.html new file mode 100644 index 0000000..d77c3b0 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/axisLabelsRotatedText.html @@ -0,0 +1,292 @@ + + + + + + Axis Labels and Rotated Text + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/axisScalingForceTickAt.html b/static/bootstrap533/jqplot-1.0.9/examples/axisScalingForceTickAt.html new file mode 100644 index 0000000..fa483b3 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/axisScalingForceTickAt.html @@ -0,0 +1,303 @@ + + + + + + Force Plot to Have Tick at 0 or 100 + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
+

+
+

+
+

+
+

+
+

+
+ +
+ + +
+
+ + +
+ +

+
+
+
+
+
+
+    
+    
+    
+    
+
+
+  
+  
+  
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/bandedLine.html b/static/bootstrap533/jqplot-1.0.9/examples/bandedLine.html new file mode 100644 index 0000000..9847935 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/bandedLine.html @@ -0,0 +1,373 @@ + + + + + + Error Bands and Confidence Intervals + + + + + + + + + + + + + +
+
+
+ + + +

Bands (like confidence intervals or error bands) can be added to line charts through the "bands" option of the line renderer. The band data can be automatically computed or manually assigned. If assigned manually, the simpliest approach is to set the "rendererOptions: { bandData: [] }" array on the series. Note that band data is taken into account when axes scale themselves so bands will not get clipped.

+ + +

Band data can be supplied as arrays of [x,y] values. One array for the upper band line and one for the lower band line.

+ +
+

+
+
+

The number of points in the band data arrays does not have to correspond to the number of points in the data series. Also, band data will be drawn as smoothed lines if the data series is smoothed.

+ +
+

+
+

In this example, band data is supplied as an array of arrays of y values for the low and hi bands. X values for the bands are taken from the x values of the series. The band data is of the form: [ [y low 1, y hi 1], [y low 2, y hi 2], ... ] and there must be a corresponding array of low/hi y values for each x value in the data series.

+ +
+

+
+

The band data can also be supplied as an array of [low y values], [hi y values]. In this case there must also be an equal number of low y values and hi y values as there are data points in the series. X values for the low and hi bands will be taken from the series data. Additionally, the order of low/hi values does not matter as long as they are consistent. jqPlot will figure out which is the low values and which are the high values.

+ +
+

+
+

Band data does not have to be provided. By default, jqPlot will compute +/- 3% band intervals if the "rendererOptions: { bands: { show: true } }" option is set. The band intervals can be customized as well through the "rendererOptions: { bands: { interval: [number|string|arry] } }" option. Valid intervals are:

+ +
    +
  • '1.7' - will add bands at y +/- 1.7 above and below the line.
  • +
  • '10%' - will compute +/- 10% interval bands.
  • +
  • [3, '-10%'] - will add bands at y + 3 and y - 10% above and below the line.
  • +
+ +

Examples of such interval specifications are shown below:

+ +
+

+ 
+

+
+ 
+

+    
+

You can also customize the fill color of the bands and turn on/off band lines. By default, bands respond to the mouse over event, but they can be set to respond to mouse down as well.

+
+

+
+

Note, the plots on this page all extend the following pre-defined theme:

+ +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+    
+    
+    
+    
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/bar-charts.html b/static/bootstrap533/jqplot-1.0.9/examples/bar-charts.html new file mode 100644 index 0000000..857ef45 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/bar-charts.html @@ -0,0 +1,282 @@ + + + + + + Vertical and Horizontal Bar Charts + + + + + + + + + + + + + +
+
+
+ + + + + + + +
+ +

+
+    
+ +

+
+    

Click on a bar in the plot below to update the text box.

+

You Clicked: + Nothing yet. +

+
+ +

+
+  
+  
+
+
+
+    
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+    
+    
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/barLineAnimated.html b/static/bootstrap533/jqplot-1.0.9/examples/barLineAnimated.html new file mode 100644 index 0000000..5a19874 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/barLineAnimated.html @@ -0,0 +1,228 @@ + + + + + + Animated Charts + + + + + + + + + + + + + +
+
+
+ + + + +
+ +

This plot animates the bars bottom to top and the line series left to right upon initial page load. Since the animateReplot: true option is set, the bars and line will also animate upon calls to plot1.replot( { resetAxes: true } ).

+ +

+
+
+ 
+
+
+
+
+
+    
+    
+    
+    
+
+
+  
+  
+   
+  
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/barTest.html b/static/bootstrap533/jqplot-1.0.9/examples/barTest.html new file mode 100644 index 0000000..8b5efa6 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/barTest.html @@ -0,0 +1,361 @@ + + + + + + Bar Charts + + + + + + + + + + + + + +
+
+
+ + + + +

Below is a default bar plot. Bars will highlight on mouseover. Events are triggered when you mouseover a bar and also when you click on a bar. Here We capture the 'jqplotDataClick' event and display the clicked series index, point index and data values. When series data is assigned as a 1-dimensional array as in this example, jqPlot automatically converts it into a 2-dimensional array for plotting. So a series defined as [2, 6, 7, 10] will become [[1,2], [2,6], [3,7], [4,10]].

+ +

You Clicked: Nothing yet
+ +
+

+
+    

The plot target also fires a 'jqplotDataMouseOver' when the cursor is moused over a bar even if highlighting is turned off. This event will fire continuously as the user mouses over the bar. 'jqplotDataHighlight' fires only once when the user first passes over the bar. Additionally, a 'jqplotDataUnhighlight' event is fired when the user moves out of a bar (if highlighting is enabled).

+ +

Moused Over: Nothing
+ +
+

+    
+    
Moused Over: Nothing
+
Clicked: Nothing
+ +
+

+    
+    

The next example has the plot's 'captureRightClick' option set to true. This causes the plot to fire a 'jqplotRightClick' event the the user clicks the right mouse button over a bar. Here, the 'highlightMouseDown' option is also set to true. This will highlight a slice on mouse down instead of on move over. Highlighting will occur for either left or right click.

+ +
You Right Clicked: Nothing yet
+ +
+

+    
+    
+

+    
+    
+

+        
+

A pie chart is added to test for incompatibilities.

+
+

+
+

The next example shows the placement of point labels on negative bars. They should be placed on the opposite position. That is, if it is placed 'north' to the positive bars, then it should be placed 'south' to the negative bars.

+
+

+
+  
+    
+  
+    
+  
+    
+  
+    
+  
+    
+  
+
+   
+
+     
+
+
+
+
+
+    
+    
+    
+    
+
+
+  
+  
+  
+  
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/bezierCurve.html b/static/bootstrap533/jqplot-1.0.9/examples/bezierCurve.html new file mode 100644 index 0000000..4c72eb7 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/bezierCurve.html @@ -0,0 +1,188 @@ + + + + + + Bezier Curve Plots + + + + + + + + + + + + + +
+
+
+ + + + +

The Bezier curve renderer can distinguish between two different input data formats. This first example has the data passed in as 2 data points, the second one defining the Bezier curve to the end point. With this format, non-default axes renderers will require specifying the minimum and maximum on the axes.

+
+    [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]];
+
+
+

This second example has the data broken out into 4 points, which will be assembled to define the Bezier Curve. With this format, any axes renderer can be used without explicitly specifying the minimum and maximum.

+
+    [[xstart, ystart], [cp1x, cp1y], [cp2x, cp2y], [xend, yend]];
+
+
+

Here is an example using a date axis renderer with Bezier curves. The data looks like:

+
+    [['01/01/2010', 6], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 3]]
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/blockPlot.html b/static/bootstrap533/jqplot-1.0.9/examples/blockPlot.html new file mode 100644 index 0000000..9e9c14f --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/blockPlot.html @@ -0,0 +1,262 @@ + + + + + + Block Plots + + + + + + + + + + + + + +
+
+
+ + + + +

Below is an example block plot. This plot also uses the Enhanced Legend Renderer plugin. Clicking on an item in the legend will toggle display of the appropriate series.

+ +
+ +

Blocks can be moved by selecting the series, the point, and an optional duration parameter. If specified, duration will animate the movement. Duration is either a number in milliseconds, or the keywords 'fast' or 'slow'. Higher numbers will cause a slower animation.

+ Series: + Point: + Duration: + X: + Y: + +

+    
+    
+    

This second chart is like the first except the "varyBlockColors" renderer option is set to true. This will vary the color of each block in a series separately. This allows displaying a third dimension to the data such as grouping beverage products by producer and by category such as "cola", "tea", "energy drink", etc.

+ +

Also, the legend has its "showSwatches" option set to false, since the blocks of each series will be of varying color and won't correspond to one swatch color. This still enables the user to show and hide the series by clicking on a label in the legend.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/bubble-plots.html b/static/bootstrap533/jqplot-1.0.9/examples/bubble-plots.html new file mode 100644 index 0000000..a83a093 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/bubble-plots.html @@ -0,0 +1,276 @@ + + + + + + Bubble Plots + + + + + + + + + + + + + +
+
+
+ + + + + + +

Bubble charts represent 3 dimensional data. First, a basic bubble chart with the "bubbleGradients: true" option to specify gradient fills. Radial gradients are not supported in IE version before IE 9 and will be automatically disabled.

+ +
+ +

+
+
+

Data is passed in to a bubble chart as a series of [x, y, radius, <label or object>]. The optional fourth element of the data point can either be either a label string or an object having 'label' and/or 'color' properties to assign to the bubble.

+ +

By default, all bubbles are scaled according to the size of the plot area. The radius value in the data point will be adjusted to fit the bubbles in the chart. If the "autoscaleBubbles" option is set to false, the radius value in the data will be taken as a literal pixel value for the radius of the points.

+ +

Next are some basic customizations of bubble appearance with the "bubbleAlpha" and "highlightAlpha" options.

+ +
+ +

+
+
+

In the following example, display of a custom toolip and highlighting of a custom table legend is performed by binding to the "jqplotDataHighlight" and "jqplotDataUnhighlight" events. The custom legend table here is dynamically created with a few lines of jQuery (O.K., it could be done in one line) based on the data array of the plot.

+ + + +
+ + +
CompanyR Value
+ +

+
+
+
+  
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+
+
+
+        
+         
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/bubbleChart.html b/static/bootstrap533/jqplot-1.0.9/examples/bubbleChart.html new file mode 100644 index 0000000..09ac970 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/bubbleChart.html @@ -0,0 +1,327 @@ + + + + + + Bubble Charts + + + + + + + + + + + + + +
+
+
+ + + + + + + +

Bubble charts represent 3 dimensional data. Data is passed in to a bubble chart as a series of [x, y, radius, <label or object>]. The optional fourth element of the data point can either be either a label string or an object having 'label' and/or 'color' properties to assign to the bubble.

+ +

By default, all bubbles are scaled according to the size of the plot area. The radius value in the data point will be adjusted to fit the bubbles in the chart. If the "autoscaleBubbles" option is set to false, the radius value in the data will be taken as a literal pixel value for the radius of the points.

+ +

The below chart show basic customization of bubble appearance with the "bubbleAlpha" and "highlightAlpha" options.

+ +
+

+
+
+
+
+    
+    
+
CompanyR Value
+

+
+

Below is a basic bubble chart showing usage of the optional label and color properties passed in with the data.

+ +
+

+
+

The next chart uses the "bubbleGradients: true" option to specify gradient fills on the bubbles. Radial gradients are not supported in IE* and will be automatically disabled.

+ +
+ +

*Radial gradients are not supported in IE 7 and IE 8 because they are not supported in the excanvas emulation layer used by jqPlot to render charts in IE 7 and IE 8. jqPlot renders charts using the HTML canvas element which is supported by nearly every browser including IE 9. Excanvas translates the canvas rendering to VML rendering for IE 7 and 8, but unfortunately does not properly handle radial gradients.

+ +

+
+

The following bubble chart shows the "autoscalePointsFactor" and "autoscaleMultiplier" options which can be used to control bubble scaling. The "autoscalePointsFactor" options controls bubble scaling with the number of points on the plot. A negative value will decrease bubble size and number of bubbles increases. The "autoscaleMultiplier" will makes all bubbles larger or smaller for values greater or less than 1.0.

+ +

This chart also demonstrates some of the highlighting options. Bubble highlighting is controlled with the "highlightMouseOver" and "highlightMouseDown" boolean options. Here the "highlightMouseDown: true" option is set which causes the plot to highlight on mousedown (click). This automatically sets the "highlightMouseOver" option to false.

+ +

Events are also trigger with plot interaction. Specifically, "jqplotDataHighlight", "jqplotDataUnhighlight", "jqplotDataClick" and "jqplotDataRightClick" events are triggered. Handlers are passed an event object, the series index, the point index, and the bubble data.

+ +
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+  
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/candlestick-charts.html b/static/bootstrap533/jqplot-1.0.9/examples/candlestick-charts.html new file mode 100644 index 0000000..d66b304 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/candlestick-charts.html @@ -0,0 +1,272 @@ + + + + + + Open Hi Low Close and Candlestick Charts + + + + + + + + + + + + + +
+
+
+ + + + +

OHLC, HLC and Candlestick charts are all created using the $.jqplot.OHLCRenderer plugin. The plots on this page make use of the highlighter plugin which shows a customized tooltip as the mouse moves over a data point.

+
+ +

+
+
+ +

+
+

The previous plots use the following data set. jqPlot will parse most human readable date formats. It is always safest, however, to pass a date in as a JavaScript timestamp rather than have jqPlot parse an arbitrary date string.

+ +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+    
+    
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/candlestick.html b/static/bootstrap533/jqplot-1.0.9/examples/candlestick.html new file mode 100644 index 0000000..43f98fe --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/candlestick.html @@ -0,0 +1,383 @@ + + + + + + Candlestick and Open Hi Low Close Charts + + + + + + + + + + + + + +
+
+
+ + + + +
+

+
+

+
+

+
+

+
+

+

The examples on this page use the folowing code:

+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+    
+    
+    
+    
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/canvas-overlay.html b/static/bootstrap533/jqplot-1.0.9/examples/canvas-overlay.html new file mode 100644 index 0000000..8089a83 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/canvas-overlay.html @@ -0,0 +1,294 @@ + + + + + + Draw Lines on Plots - Canvas Overlay + + + + + + + + + + + + + +
+
+
+ + + + + +
+ + + +

+
+    
+

+
+  
+  
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+  
+  
+  
+  
+  
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/cursor-highlighter.html b/static/bootstrap533/jqplot-1.0.9/examples/cursor-highlighter.html new file mode 100644 index 0000000..a638992 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/cursor-highlighter.html @@ -0,0 +1,236 @@ + + + + + + Data Point Highlighting, Tooltips and Cursor Tracking + + + + + + + + + + + + + +
+
+
+ + + + +

The Highlighter plugin will highlight data points near the mouse and display an optional tooltip with the data point value. By default, the tooltip values will be formatted with the same formatter as used to display the axes tick values. The text format can be customized with an optional sprintf style format string.

+ +
+ +

+
+

The Cursor plugin changes the mouse cursor when it enters the graph area and displays an optional tooltip with the mouse position. The tooltip can be in a fixed location, or it can follow the mouse. The pointer style, set to "crosshair" by default, can also be customized. Tooltip values are formatted similar to the Highlighter plugin. By default they use the axes formatters, but can be customized with a sprintf format string.

+ +
+ +

+
+

Tooltips can be displayed with Pie Charts. Cursor tracking doesn't work with Pie Charts since they do not have points or axes, so the tooltip is based on the highlighter and always follows the mouse. You may wish to change the background and border colors of the highlighter tooltip for use with Pie Charts, since the default tooltip colors are designed to be displayed on top of a white background, while the Pie Chart slices provide a darker color background for the tooltips. To change the tooltip colors or other attributes, modify the jqplot-highlighter-tooltip class in jquery.jqplot.css.

+ +
+ +

+
+
+  
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+    
+    
+    
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/customHighlighterCursorTrendline.html b/static/bootstrap533/jqplot-1.0.9/examples/customHighlighterCursorTrendline.html new file mode 100644 index 0000000..f966219 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/customHighlighterCursorTrendline.html @@ -0,0 +1,167 @@ + + + + + + Highlighting, Dragging Points, Cursor and Trend Lines + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/dashboardWidget.html b/static/bootstrap533/jqplot-1.0.9/examples/dashboardWidget.html new file mode 100644 index 0000000..9604399 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/dashboardWidget.html @@ -0,0 +1,275 @@ + + + + + + Animated Dashboard Sample - Filled Line with Log Axis + + + + + + + + + + + + + +
+
+
+ + + + + + + +
+
Hi Powered Data
+
+
+
+
+ +

+
+    
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+    
+    
+    
+    
+    
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/dashedLines.html b/static/bootstrap533/jqplot-1.0.9/examples/dashedLines.html new file mode 100644 index 0000000..0ed5906 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/dashedLines.html @@ -0,0 +1,290 @@ + + + + + + Dashed Lines with Smoothing + + + + + + + + + + + + + +
+
+
+ + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/data-renderers.html b/static/bootstrap533/jqplot-1.0.9/examples/data-renderers.html new file mode 100644 index 0000000..1e67102 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/data-renderers.html @@ -0,0 +1,207 @@ + + + + + + AJAX and JSON Data Loading via Data Renderers + + + + + + + + + + + + + +
+
+
+ + + + +

Data renderers allow jqPlot to pull data from any external source (e.g. a function implementing an AJAX call). Simply assign the external source to the "dataRenderer" plot option. The only requirement on data renderers is that it must return a valid jqPlot data array.

+ +
+ +

+
+
+

Data renderers get passed options by the plot. The signiture for a data renderer is:

+ + +
+function(userData, plotObject, options) {
+  ...
+  return data;
+}
+
+ + +

Where userData is whatever data was passed into the plot, plotObject is a reference back to the plot itself, and options are any options passed into the plots "dataRendererOption" option. The following example shows a more complicated example which uses ajax pulls data from an external json data source.

+ +
+ +

+
+
+
+
+  
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/date-axes.html b/static/bootstrap533/jqplot-1.0.9/examples/date-axes.html new file mode 100644 index 0000000..0e905c6 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/date-axes.html @@ -0,0 +1,191 @@ + + + + + + Date Axes + + + + + + + + + + + + + +
+
+
+ + + +

Date axes support is provided through the dateAxisRenderer plugin. Date axes expand javascripts native date handling capabilities. This allow dates to be input in almost any unambiguous form, not just in milliseconds!

+ +

Note, although jqPlot will parse most any human readable date, it is safest to use javascript time stamps when possible. Also, it is best to specify a date and time and not just a date alone. This is due to inconsistent browser handling of local time vs. UTC with bare dates.

+ +
+ +

+
+

Date Axes also provide powerful formatting features. This allows custom formatter strings to be used to format axis tick labels precisely the way you want.

+ +
+ +

+  
+
+ +

+  
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/dateAxisLogAxisZooming.html b/static/bootstrap533/jqplot-1.0.9/examples/dateAxisLogAxisZooming.html new file mode 100644 index 0000000..2c73cf8 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/dateAxisLogAxisZooming.html @@ -0,0 +1,164 @@ + + + + + + Zooming with Date and Log Axes + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/dateAxisRenderer.html b/static/bootstrap533/jqplot-1.0.9/examples/dateAxisRenderer.html new file mode 100644 index 0000000..44c2407 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/dateAxisRenderer.html @@ -0,0 +1,355 @@ + + + + + + Date Axes 2 + + + + + + + + + + + + + +
+
+
+ + + + +

Date axis renderer with default settings. Ticks are given wider spacing by default since date axes typically have longer tick labels.

+
+

Date axis recognizes rotated tick labels. It will space ticks a little closer when labels are rotated.

+
+

If you want more or less ticks, specify the "numberTicks" options. Date axes will try to produce the desired number of ticks, but may adjust to get a nice interval.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/draw-rectangles.html b/static/bootstrap533/jqplot-1.0.9/examples/draw-rectangles.html new file mode 100644 index 0000000..fa38510 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/draw-rectangles.html @@ -0,0 +1,197 @@ + + + + + + Draw Rectangles on Plots + + + + + + + + + + + + + +
+
+
+ + + + +

These examples use rectangle overlays to show various ranges. +xmin, xmax, ymin, ymax are all optional -- the rectangle will go to the end of the plot area if they are not specified. +Colors are specified in the canvas drawing format (use rgba for transparency). +

+ +
+ + + +

+
+    
+ +

+  
+    
+ +

+  
+
+  
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+  
+  
+  
+  
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/example.js b/static/bootstrap533/jqplot-1.0.9/examples/example.js new file mode 100644 index 0000000..75cb3bf --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/example.js @@ -0,0 +1,114 @@ +$(document).ready(function(){ + if (!$.jqplot._noCodeBlock) { + $('script.code').each(function(index) { + if ($('pre.code').eq(index).length ) { + $('pre.code').eq(index).text($(this).html()); + } + else { + // var str = $(this).text(); + // $('div.jqplot-target').eq(index).after($('
'+str+'
')); + var pre = $('
');
+                $('div.jqplot-target').eq(index).after(pre);
+                pre.text($(this).html());
+                pre = null;
+            }
+        });
+
+        $('script.common').each(function(index) {
+            $('pre.common').eq(index).text($(this).html());
+        });
+
+        var elstr='';
+        if ($('script.include, link.include').length > 0) {
+
+            if ($('pre.include').length == 0) {
+                var temp = [
+                    '
', + '

The charts on this page depend on the following files:

', + '
',
+                    '
' + ]; + + temp = $(temp.join('\n')); + $('div#example-content').append(temp); + temp = null; + } + + + $('script.include').each(function(index) { + if (elstr !== '') { + elstr += '\n'; + } + elstr += ''; + }); + + $('link.include').each(function(index) { + if (elstr !== '') { + elstr += '\n'; + } + elstr += ''; + }) + + $('pre.include').text(elstr); + } + + else { + $('pre.include').remove(); + $('div.include').remove(); + } + } + + if (!$.jqplot.use_excanvas) { + $('div.jqplot-target').each(function(){ + var outerDiv = $(document.createElement('div')); + var header = $(document.createElement('div')); + var div = $(document.createElement('div')); + + outerDiv.append(header); + outerDiv.append(div); + + outerDiv.addClass('jqplot-image-container'); + header.addClass('jqplot-image-container-header'); + div.addClass('jqplot-image-container-content'); + + header.html('Right Click to Save Image As...'); + + var close = $(document.createElement('a')); + close.addClass('jqplot-image-container-close'); + close.html('Close'); + close.attr('href', '#'); + close.click(function() { + $(this).parents('div.jqplot-image-container').hide(500); + }) + header.append(close); + + $(this).after(outerDiv); + outerDiv.hide(); + + outerDiv = header = div = close = null; + + if (!$.jqplot._noToImageButton) { + var btn = $(document.createElement('button')); + btn.text('View Plot Image'); + btn.addClass('jqplot-image-button'); + btn.bind('click', {chart: $(this)}, function(evt) { + var imgelem = evt.data.chart.jqplotToImageElem(); + var div = $(this).nextAll('div.jqplot-image-container').first(); + div.children('div.jqplot-image-container-content').empty(); + div.children('div.jqplot-image-container-content').append(imgelem); + div.show(500); + div = null; + }); + + $(this).after(btn); + btn.after('
'); + btn = null; + } + }); + } + + SyntaxHighlighter.defaults['toolbar'] = true; + SyntaxHighlighter.all(); + + $(document).unload(function() {$('*').unbind(); }); +}); \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/example.min.js b/static/bootstrap533/jqplot-1.0.9/examples/example.min.js new file mode 100644 index 0000000..3e3feed --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/example.min.js @@ -0,0 +1,4 @@ +/* jqplot 1.0.9 | (c) 2009-2016 Chris Leonello | jplot.com + jsDate | (c) 2010-2016 Chris Leonello + */ +$(document).ready(function(){if(!$.jqplot._noCodeBlock){$("script.code").each(function(a){if($("pre.code").eq(a).length)$("pre.code").eq(a).text($(this).html());else{var b=$('
');$("div.jqplot-target").eq(a).after(b),b.text($(this).html()),b=null}}),$("script.common").each(function(a){$("pre.common").eq(a).text($(this).html())});var a="";if($("script.include, link.include").length>0){if(0==$("pre.include").length){var b=['
','

The charts on this page depend on the following files:

','
',"
"];b=$(b.join("\n")),$("div#example-content").append(b),b=null}$("script.include").each(function(b){""!==a&&(a+="\n"),a+=''}),$("link.include").each(function(b){""!==a&&(a+="\n"),a+=''}),$("pre.include").text(a)}else $("pre.include").remove(),$("div.include").remove()}$.jqplot.use_excanvas||$("div.jqplot-target").each(function(){var a=$(document.createElement("div")),b=$(document.createElement("div")),c=$(document.createElement("div"));a.append(b),a.append(c),a.addClass("jqplot-image-container"),b.addClass("jqplot-image-container-header"),c.addClass("jqplot-image-container-content"),b.html("Right Click to Save Image As...");var d=$(document.createElement("a"));if(d.addClass("jqplot-image-container-close"),d.html("Close"),d.attr("href","#"),d.click(function(){$(this).parents("div.jqplot-image-container").hide(500)}),b.append(d),$(this).after(a),a.hide(),a=b=c=d=null,!$.jqplot._noToImageButton){var e=$(document.createElement("button"));e.text("View Plot Image"),e.addClass("jqplot-image-button"),e.bind("click",{chart:$(this)},function(a){var b=a.data.chart.jqplotToImageElem(),c=$(this).nextAll("div.jqplot-image-container").first();c.children("div.jqplot-image-container-content").empty(),c.children("div.jqplot-image-container-content").append(b),c.show(500),c=null}),$(this).after(e),e.after("
"),e=null}}),SyntaxHighlighter.defaults.toolbar=!0,SyntaxHighlighter.all(),$(document).unload(function(){$("*").unbind()})}); \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/examples.css b/static/bootstrap533/jqplot-1.0.9/examples/examples.css new file mode 100644 index 0000000..64ba40d --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/examples.css @@ -0,0 +1,211 @@ +body { + margin: 0; + padding: 0; + border: 0; + width: 100%; + background: #fff; + min-width: 600px; + font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; +} + +/* Header styles */ +#header { + clear: both; + float: left; + width: 100%; + position: relative; + height: 94px; + top: 0px; + padding: 0px; + background-image: url('./images/logo.jpg'); + background-repeat: no-repeat; + background-color: #292929; +} + +/* 'widths' sub menu */ +#layoutdims { + clear: both; + background: #eee; + border-top: 4px solid #000; + margin: 0; + padding: 6px 15px !important; + text-align: right; +} + +/* column container */ +.colmask { + position: relative; /* This fixes the IE7 overflow hidden bug */ + clear: both; + float: left; + width: 100%; /* width of whole page */ + overflow: hidden; /* This chops off any overhanging divs */ +} +/* common column settings */ +.colright, +.colmid, +.colleft { + float: left; + width: 100%; + position: relative; +} +.col1, +.col2, +.col3 { + float: left; + position: relative; + padding: 0 0 1em 0; + overflow: hidden; +} +/* 2 Column (left menu) settings */ +.leftmenu { + background: #ffffff; /* right column background colour */ +} +.leftmenu .colleft { + right: 75%; /* right column width */ + background: #717171; /* left column background colour */ +} +.leftmenu .col1 { + width: 71%; /* right column content width */ + left: 102%; /* 100% plus left column left padding */ + margin-top: 20px; +} +.leftmenu .col2 { + width: 21%; /* left column content width (column width minus left and right padding) */ + left: 6%; /* (right column left and right padding) plus (left column left padding) */ + margin-top: 20px; +} + +/* Footer styles */ +#footer { + clear: both; + float: left; + width: 100%; + border-top: 1px solid #000; +} +#footer p { + padding: 10px; + margin: 0; +} + + +div.nav { + position:relative; + top: 70px; + text-align: right; +} + +a.nav span { + font-size: 11px; + position: relative; + bottom: 2px; +} + +a.nav:visited { + text-decoration: none; + border: 0px; + color: #aaaaaa; +} + +a.nav, a.nav:link { + border: 0px; + text-decoration: none; + font-family: Tahoma, "Helvetica Neue", "Trebuchet MS", Verdana, Arial, sans-serif; + font-size: 16px; + color: #aaaaaa; + margin-right: 11px; +} + +a.nav:hover { + text-decoration: none; + border: 0px; + color: #E0771C; +} + +a.nav:active { + text-decoration: none; + border: 0px; + color: #E0771C; +} + +pre.code-block{ + background: #D8F4DC; + border: 1px solid rgb(200, 200, 200); + padding-top: 1em; + padding-left: 3em; + padding-bottom: 1em; + margin-top: 1em; + margin-bottom: 3em; + +} + +pre.code { + border: 1px solid rgb(200, 200, 200); + padding-top: 1em; + padding-left: 3em; + padding-bottom: 1em; + margin-top: 1em; + margin-bottom: 4em; + +} + +div.include { + margin-bottom: 2em; +} + +p { + margin: 2em 0; +} + +.jqplot-image-button { + margin-bottom: 15px; + margin-top: 15px; +} + +div.jqplot-image-container { + position: relative; + z-index: 11; + margin: auto; + display: none; + background-color: #ffffff; + border: 1px solid #999; + display: inline-block; + margin-top: 25px; +} + +div.jqplot-image-container-header { + font-size: 1.0em; + font-weight: bold; + padding: 5px 15px; + background-color: #eee; +} + +div.jqplot-image-container-content { + padding: 15px; + background-color: #ffffff; +} + +a.jqplot-image-container-close { + float: right; +} + +div.example-link { + margin-bottom: 8px; +} + +a.example-link { + color: #ffffff; +} + +div.example-plot { + width: 500px; + height: 300px; +} + +.jqplot-table-legend-label { + white-space: nowrap; +} + +div.syntaxhighlighter { + margin-top: 4em !important; + margin-bottom: 3em !important; +} \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/examples.min.css b/static/bootstrap533/jqplot-1.0.9/examples/examples.min.css new file mode 100644 index 0000000..891b28e --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/examples.min.css @@ -0,0 +1 @@ +#header,body{padding:0;width:100%}#header,.colmask,body{width:100%}.col1,.col2,.col3,.colmask{overflow:hidden;float:left;position:relative}#header,.col1,.col2,.col3,.colmask,a.nav span,div.jqplot-image-container,div.nav{position:relative}body{margin:0;border:0;background:#fff;min-width:600px;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif}#header{clear:both;float:left;height:94px;top:0;background-image:url(./images/logo.jpg);background-repeat:no-repeat;background-color:#292929}#layoutdims{clear:both;background:#eee;border-top:4px solid #000;margin:0;padding:6px 15px!important;text-align:right}.colmask{clear:both}.colleft,.colmid,.colright{float:left;width:100%;position:relative}.col1,.col2,.col3{padding:0 0 1em}.leftmenu{background:#fff}.leftmenu .colleft{right:75%;background:#717171}.leftmenu .col1{width:71%;left:102%;margin-top:20px}.leftmenu .col2{width:21%;left:6%;margin-top:20px}#footer{clear:both;float:left;width:100%;border-top:1px solid #000}a.nav,a.nav:active,a.nav:hover,a.nav:link,a.nav:visited{text-decoration:none;border:0}#footer p{padding:10px;margin:0}div.nav{top:70px;text-align:right}a.nav span{font-size:11px;bottom:2px}a.nav:visited{color:#aaa}a.nav,a.nav:link{font-family:Tahoma,"Helvetica Neue","Trebuchet MS",Verdana,Arial,sans-serif;font-size:16px;color:#aaa;margin-right:11px}a.nav:active,a.nav:hover{color:#E0771C}pre.code,pre.code-block{border:1px solid #c8c8c8;padding-top:1em;padding-left:3em;padding-bottom:1em;margin-top:1em}pre.code-block{background:#D8F4DC;margin-bottom:3em}pre.code{margin-bottom:4em}div.include{margin-bottom:2em}p{margin:2em 0}.jqplot-image-button{margin-bottom:15px;margin-top:15px}div.jqplot-image-container{z-index:11;margin:25px auto auto;background-color:#fff;border:1px solid #999;display:inline-block}div.jqplot-image-container-header{font-size:1em;font-weight:700;padding:5px 15px;background-color:#eee}div.jqplot-image-container-content{padding:15px;background-color:#fff}a.jqplot-image-container-close{float:right}div.example-link{margin-bottom:8px}a.example-link{color:#fff}div.example-plot{width:500px;height:300px}.jqplot-table-legend-label{white-space:nowrap}div.syntaxhighlighter{margin-top:4em!important;margin-bottom:3em!important} \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/fillBetweenLines.html b/static/bootstrap533/jqplot-1.0.9/examples/fillBetweenLines.html new file mode 100644 index 0000000..99774b0 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/fillBetweenLines.html @@ -0,0 +1,216 @@ + + + + + + Charts with Fill Between Lines + + + + + + + + + + + + + +
+
+
+ + + + + + + +
+ +

Enter 2 series to fill between:

+ + + + + + + +

+
+
+    
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/hiddenPlotsInTabs.html b/static/bootstrap533/jqplot-1.0.9/examples/hiddenPlotsInTabs.html new file mode 100644 index 0000000..121fa30 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/hiddenPlotsInTabs.html @@ -0,0 +1,288 @@ + + + + + + Hidden Plots + + + + + + + + + + + + + +
+
+
+ + + + + + +

This page demonstrates placing plots within jQuery UI widgets. Tab 2 and tab 3 contain plots. Using a combination of alternate sizing specification and the jqplot "replot" method the plots are properly displayed when their containers are shown.

+ +

The alternate sizing specifications for setting plot height and width are needed because a hidden element (or child of a hidden element) has no size. The first example in tab 2 uses custom "data-height" and "data-width" attributes on the plot target element. The second example uses "width" and "height" properties specified on the options object passed into the $.jqplot() function.

+ +

The default plot size is 300px wide by 400px high. The default setting can be overridden by specifying different values to the $.jqplot.config.defaultHeight and $.jqplot.config.defaultWidth properties. Height and width values are taken in this order of precedence: +

+ +
    +
  1. The css properties of the plot target if available (not available with display:none;).
  2. +
  3. Options object passed into the $.jqplot() function.
  4. +
  5. Custom data-height and data-width attributes on the plot target.
  6. +
  7. The config defaults.
  8. +
+ +
+ +
+ Tabs 2 and 3 have plots. Since tabs 2 and 3 are initially inactive, their contents (and the plots) are initially hidden. +
+ +
+

This plot was in an initially hidden container. Its height and width are set by the "data-height" and "data-width" properties of the plot container.

+
+
+ +
+

This plot is in an initially hidden container. Its height and width are set by the 'height' and 'width' properties of the options object passed into the plot constructor.

+
+
+ +
+ +

In the accordion below, section 2 contains a plot. Sizing plots in hidden accordion sections is very similar to sizing in a tab widget. Because of the default animation on accordions, however, the plot will not draw itself until the entire accordion panel is shown.

+ +
+ +

Section 1

+
+ Here is section 1 there is no plot. Section 2 has a plot that will display once the section is completely shown. +
+ +

Section 2

+
+

+ This plot also has its height and width set with the data-height and data-width attributes. Note, if you want the accordion widget to properly size itself before the plot is shown, you must also specify a css height and width on the plot target. +

+
+
+ +
+ +

Code for generating the plots follows. It is critical to bind the callback to the UI widgets "show" or "change" method which calls the plots "replot" method. Without this, the plot won't properly redraw itself when its container becomes visible.

+ +

+ Note in the ui.index and plot._drawCount properties in the tabsshow callback. ui.index gives the index of the activated tab. plot._drawCount keeps track of how many times the plot was visibly drawn (or redrawn/replotted). Generally, replot only needs to be called the first time the plot is visibly drawn, hence the check for plot._drawCount === 0. +

+ +

+
+ 
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+  
+  
+  
+  
+   
+  
+
+
+
+        
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/index.html b/static/bootstrap533/jqplot-1.0.9/examples/index.html new file mode 100644 index 0000000..5ab895b --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/index.html @@ -0,0 +1,131 @@ + + + + + + Examples + + + + + + + + + + + + + +
+
+
+ + + +There are lots of examples showing basic chart functionality as well as zoom proxies, dynamic replotting, Mekko charts, trend lines, block plots, log axes, filled line (area) plots, and...well you get the picture. When you download a distribution, you'll get over 90 examples of plot types, features and functionality! The examples are a great way to understand what jqPlot is capable of, and to learn how to use the library. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/jsondata.txt b/static/bootstrap533/jqplot-1.0.9/examples/jsondata.txt new file mode 100644 index 0000000..b6a0cff --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/jsondata.txt @@ -0,0 +1 @@ +[[1, 3, 2, 4, 6, 9]] \ No newline at end of file diff --git a/static/bootstrap533/jqplot-1.0.9/examples/kcp.print.js b/static/bootstrap533/jqplot-1.0.9/examples/kcp.print.js new file mode 100644 index 0000000..0f1d371 --- /dev/null +++ b/static/bootstrap533/jqplot-1.0.9/examples/kcp.print.js @@ -0,0 +1,136 @@ +// <--- --------------------------------------------------------------------------------------- ---- + +// Blog Entry: +// Ask Ben: Print Part Of A Web Page With jQuery + +// Author: +// Ben Nadel / Kinky Solutions + +// Link: +// http://www.bennadel.com/index.cfm?event=blog.view&id=1591 + +// Date Posted: +// May 21, 2009 at 9:10 PM + +// ---- --------------------------------------------------------------------------------------- ---> + + +// Create a jquery plugin that prints the given element. +jQuery.fn.print = function(){ + // NOTE: We are trimming the jQuery collection down to the + // first element in the collection. + if (this.size() > 1){ + this.eq( 0 ).print(); + return; + } else if (!this.size()){ + return; + } + + var chart = $(this).closest('div.quintile-outer-container').find('div.jqplot-target'); + // var imgelem = chart.jqplotToImageElem(); + var imageElemStr = chart.jqplotToImageElemStr(); + // var statsrows = $(this).closest('div.quintile-outer-container').find('table.stats-table tr'); + var statsTable = $('
').append($(this).closest('div.quintile-outer-container').find('table.stats-table').clone()); + // var rowstyles = window.getComputedStyle(statsrows.get(0), ''); + + // ASSERT: At this point, we know that the current jQuery + // collection (as defined by THIS), contains only one + // printable element. + + // Create a random name for the print frame. + var strFrameName = ("printer-" + (new Date()).getTime()); + + // Create an iFrame with the new name. + var jFrame = $( "--> - - -
- +
+

Video

+
+ + - -