Head 1955
@ -29,8 +29,7 @@ The :mod:`lib` module contains most of the components and libraries that make
|
|||||||
OpenLP work.
|
OpenLP work.
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
import os.path
|
import os
|
||||||
import types
|
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui, Qt
|
from PyQt4 import QtCore, QtGui, Qt
|
||||||
|
|
||||||
@ -63,6 +62,7 @@ class ServiceItemAction(object):
|
|||||||
PreviousLastSlide = 2
|
PreviousLastSlide = 2
|
||||||
Next = 3
|
Next = 3
|
||||||
|
|
||||||
|
|
||||||
def translate(context, text, comment=None,
|
def translate(context, text, comment=None,
|
||||||
encoding=QtCore.QCoreApplication.CodecForTr, n=-1,
|
encoding=QtCore.QCoreApplication.CodecForTr, n=-1,
|
||||||
translate=QtCore.QCoreApplication.translate):
|
translate=QtCore.QCoreApplication.translate):
|
||||||
@ -84,6 +84,7 @@ def translate(context, text, comment=None,
|
|||||||
"""
|
"""
|
||||||
return translate(context, text, comment, encoding, n)
|
return translate(context, text, comment, encoding, n)
|
||||||
|
|
||||||
|
|
||||||
def get_text_file_string(text_file):
|
def get_text_file_string(text_file):
|
||||||
"""
|
"""
|
||||||
Open a file and return its content as unicode string. If the supplied file
|
Open a file and return its content as unicode string. If the supplied file
|
||||||
@ -112,6 +113,7 @@ def get_text_file_string(text_file):
|
|||||||
file_handle.close()
|
file_handle.close()
|
||||||
return content_string
|
return content_string
|
||||||
|
|
||||||
|
|
||||||
def str_to_bool(stringvalue):
|
def str_to_bool(stringvalue):
|
||||||
"""
|
"""
|
||||||
Convert a string version of a boolean into a real boolean.
|
Convert a string version of a boolean into a real boolean.
|
||||||
@ -123,6 +125,7 @@ def str_to_bool(stringvalue):
|
|||||||
return stringvalue
|
return stringvalue
|
||||||
return unicode(stringvalue).strip().lower() in (u'true', u'yes', u'y')
|
return unicode(stringvalue).strip().lower() in (u'true', u'yes', u'y')
|
||||||
|
|
||||||
|
|
||||||
def build_icon(icon):
|
def build_icon(icon):
|
||||||
"""
|
"""
|
||||||
Build a QIcon instance from an existing QIcon, a resource location, or a
|
Build a QIcon instance from an existing QIcon, a resource location, or a
|
||||||
@ -149,6 +152,7 @@ def build_icon(icon):
|
|||||||
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
return button_icon
|
return button_icon
|
||||||
|
|
||||||
|
|
||||||
def image_to_byte(image):
|
def image_to_byte(image):
|
||||||
"""
|
"""
|
||||||
Resize an image to fit on the current screen for the web and returns
|
Resize an image to fit on the current screen for the web and returns
|
||||||
@ -167,6 +171,7 @@ def image_to_byte(image):
|
|||||||
# convert to base64 encoding so does not get missed!
|
# convert to base64 encoding so does not get missed!
|
||||||
return byte_array.toBase64()
|
return byte_array.toBase64()
|
||||||
|
|
||||||
|
|
||||||
def create_thumb(image_path, thumb_path, return_icon=True, size=None):
|
def create_thumb(image_path, thumb_path, return_icon=True, size=None):
|
||||||
"""
|
"""
|
||||||
Create a thumbnail from the given image path and depending on
|
Create a thumbnail from the given image path and depending on
|
||||||
@ -202,6 +207,7 @@ def create_thumb(image_path, thumb_path, return_icon=True, size=None):
|
|||||||
# Fallback for files with animation support.
|
# Fallback for files with animation support.
|
||||||
return build_icon(unicode(image_path))
|
return build_icon(unicode(image_path))
|
||||||
|
|
||||||
|
|
||||||
def validate_thumb(file_path, thumb_path):
|
def validate_thumb(file_path, thumb_path):
|
||||||
"""
|
"""
|
||||||
Validates whether an file's thumb still exists and if is up to date.
|
Validates whether an file's thumb still exists and if is up to date.
|
||||||
@ -220,6 +226,7 @@ def validate_thumb(file_path, thumb_path):
|
|||||||
thumb_date = os.stat(thumb_path).st_mtime
|
thumb_date = os.stat(thumb_path).st_mtime
|
||||||
return image_date <= thumb_date
|
return image_date <= thumb_date
|
||||||
|
|
||||||
|
|
||||||
def resize_image(image_path, width, height, background=u'#000000'):
|
def resize_image(image_path, width, height, background=u'#000000'):
|
||||||
"""
|
"""
|
||||||
Resize an image to fit on the current screen.
|
Resize an image to fit on the current screen.
|
||||||
@ -267,6 +274,7 @@ def resize_image(image_path, width, height, background=u'#000000'):
|
|||||||
painter.drawImage((width - realw) / 2, (height - realh) / 2, preview)
|
painter.drawImage((width - realw) / 2, (height - realh) / 2, preview)
|
||||||
return new_image
|
return new_image
|
||||||
|
|
||||||
|
|
||||||
def check_item_selected(list_widget, message):
|
def check_item_selected(list_widget, message):
|
||||||
"""
|
"""
|
||||||
Check if a list item is selected so an action may be performed on it
|
Check if a list item is selected so an action may be performed on it
|
||||||
@ -283,6 +291,7 @@ def check_item_selected(list_widget, message):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def clean_tags(text):
|
def clean_tags(text):
|
||||||
"""
|
"""
|
||||||
Remove Tags from text for display
|
Remove Tags from text for display
|
||||||
@ -295,6 +304,7 @@ def clean_tags(text):
|
|||||||
text = text.replace(tag[u'end tag'], u'')
|
text = text.replace(tag[u'end tag'], u'')
|
||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
||||||
def expand_tags(text):
|
def expand_tags(text):
|
||||||
"""
|
"""
|
||||||
Expand tags HTML for display
|
Expand tags HTML for display
|
||||||
@ -304,6 +314,7 @@ def expand_tags(text):
|
|||||||
text = text.replace(tag[u'end tag'], tag[u'end html'])
|
text = text.replace(tag[u'end tag'], tag[u'end html'])
|
||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
||||||
def check_directory_exists(dir):
|
def check_directory_exists(dir):
|
||||||
"""
|
"""
|
||||||
Check a theme directory exists and if not create it
|
Check a theme directory exists and if not create it
|
||||||
@ -318,6 +329,7 @@ def check_directory_exists(dir):
|
|||||||
except IOError:
|
except IOError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def create_separated_list(stringlist):
|
def create_separated_list(stringlist):
|
||||||
"""
|
"""
|
||||||
Returns a string that represents a join of a list of strings with a
|
Returns a string that represents a join of a list of strings with a
|
||||||
@ -346,6 +358,7 @@ def create_separated_list(stringlist):
|
|||||||
return unicode(translate('OpenLP.core.lib', '%1, %2',
|
return unicode(translate('OpenLP.core.lib', '%1, %2',
|
||||||
u'Locale list separator: start').arg(stringlist[0], merged))
|
u'Locale list separator: start').arg(stringlist[0], merged))
|
||||||
|
|
||||||
|
|
||||||
from eventreceiver import Receiver
|
from eventreceiver import Receiver
|
||||||
from listwidgetwithdnd import ListWidgetWithDnD
|
from listwidgetwithdnd import ListWidgetWithDnD
|
||||||
from formattingtags import FormattingTags
|
from formattingtags import FormattingTags
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
"""
|
"""
|
||||||
Extend QListWidget to handle drag and drop functionality
|
Extend QListWidget to handle drag and drop functionality
|
||||||
"""
|
"""
|
||||||
import os.path
|
import os
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
|
@ -582,7 +582,7 @@ class MediaManagerItem(QtGui.QWidget):
|
|||||||
Common method for generating a service item
|
Common method for generating a service item
|
||||||
"""
|
"""
|
||||||
serviceItem = ServiceItem(self.plugin)
|
serviceItem = ServiceItem(self.plugin)
|
||||||
serviceItem.add_icon(self.plugin.icon_path)
|
serviceItem.add_icon(self.plugin.iconPath)
|
||||||
if self.generateSlideData(serviceItem, item, xmlVersion, remote):
|
if self.generateSlideData(serviceItem, item, xmlVersion, remote):
|
||||||
return serviceItem
|
return serviceItem
|
||||||
else:
|
else:
|
||||||
|
@ -155,9 +155,9 @@ class Plugin(QtCore.QObject):
|
|||||||
self.version = get_application_version()[u'version']
|
self.version = get_application_version()[u'version']
|
||||||
self.settingsSection = self.name
|
self.settingsSection = self.name
|
||||||
self.icon = None
|
self.icon = None
|
||||||
self.media_item_class = media_item_class
|
self.mediaItemClass = media_item_class
|
||||||
self.settings_tab_class = settings_tab_class
|
self.settingsTabClass = settings_tab_class
|
||||||
self.settings_tab = None
|
self.settingsTab = None
|
||||||
self.mediaItem = None
|
self.mediaItem = None
|
||||||
self.weight = 0
|
self.weight = 0
|
||||||
self.status = PluginStatus.Inactive
|
self.status = PluginStatus.Inactive
|
||||||
@ -166,9 +166,9 @@ class Plugin(QtCore.QObject):
|
|||||||
self.renderer = plugin_helpers[u'renderer']
|
self.renderer = plugin_helpers[u'renderer']
|
||||||
self.serviceManager = plugin_helpers[u'service']
|
self.serviceManager = plugin_helpers[u'service']
|
||||||
self.settingsForm = plugin_helpers[u'settings form']
|
self.settingsForm = plugin_helpers[u'settings form']
|
||||||
self.mediadock = plugin_helpers[u'toolbox']
|
self.mediaDock = plugin_helpers[u'toolbox']
|
||||||
self.pluginManager = plugin_helpers[u'pluginmanager']
|
self.pluginManager = plugin_helpers[u'pluginmanager']
|
||||||
self.formparent = plugin_helpers[u'formparent']
|
self.formParent = plugin_helpers[u'formparent']
|
||||||
self.mediaController = plugin_helpers[u'mediacontroller']
|
self.mediaController = plugin_helpers[u'mediacontroller']
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'%s_add_service_item' % self.name),
|
QtCore.SIGNAL(u'%s_add_service_item' % self.name),
|
||||||
@ -219,8 +219,8 @@ class Plugin(QtCore.QObject):
|
|||||||
Construct a MediaManagerItem object with all the buttons and things
|
Construct a MediaManagerItem object with all the buttons and things
|
||||||
you need, and return it for integration into OpenLP.
|
you need, and return it for integration into OpenLP.
|
||||||
"""
|
"""
|
||||||
if self.media_item_class:
|
if self.mediaItemClass:
|
||||||
self.mediaItem = self.media_item_class(self.mediadock.media_dock,
|
self.mediaItem = self.mediaItemClass(self.mediaDock.media_dock,
|
||||||
self, self.icon)
|
self, self.icon)
|
||||||
|
|
||||||
def addImportMenuItem(self, importMenu):
|
def addImportMenuItem(self, importMenu):
|
||||||
@ -255,10 +255,10 @@ class Plugin(QtCore.QObject):
|
|||||||
Create a tab for the settings window to display the configurable options
|
Create a tab for the settings window to display the configurable options
|
||||||
for this plugin to the user.
|
for this plugin to the user.
|
||||||
"""
|
"""
|
||||||
if self.settings_tab_class:
|
if self.settingsTabClass:
|
||||||
self.settings_tab = self.settings_tab_class(parent, self.name,
|
self.settingsTab = self.settingsTabClass(parent, self.name,
|
||||||
self.getString(StringContent.VisibleName)[u'title'],
|
self.getString(StringContent.VisibleName)[u'title'],
|
||||||
self.icon_path)
|
self.iconPath)
|
||||||
|
|
||||||
def addToMenu(self, menubar):
|
def addToMenu(self, menubar):
|
||||||
"""
|
"""
|
||||||
@ -294,14 +294,14 @@ class Plugin(QtCore.QObject):
|
|||||||
"""
|
"""
|
||||||
if self.mediaItem:
|
if self.mediaItem:
|
||||||
self.mediaItem.initialise()
|
self.mediaItem.initialise()
|
||||||
self.mediadock.insert_dock(self.mediaItem, self.icon, self.weight)
|
self.mediaDock.insert_dock(self.mediaItem, self.icon, self.weight)
|
||||||
|
|
||||||
def finalise(self):
|
def finalise(self):
|
||||||
"""
|
"""
|
||||||
Called by the plugin Manager to cleanup things.
|
Called by the plugin Manager to cleanup things.
|
||||||
"""
|
"""
|
||||||
if self.mediaItem:
|
if self.mediaItem:
|
||||||
self.mediadock.remove_dock(self.mediaItem)
|
self.mediaDock.remove_dock(self.mediaItem)
|
||||||
|
|
||||||
def appStartup(self):
|
def appStartup(self):
|
||||||
"""
|
"""
|
||||||
|
@ -236,18 +236,18 @@ class Renderer(object):
|
|||||||
# the first two slides (and neglect the last for now).
|
# the first two slides (and neglect the last for now).
|
||||||
if len(slides) == 3:
|
if len(slides) == 3:
|
||||||
html_text = expand_tags(u'\n'.join(slides[:2]))
|
html_text = expand_tags(u'\n'.join(slides[:2]))
|
||||||
# We check both slides to determine if the virtual break is
|
# We check both slides to determine if the optional break is
|
||||||
# needed (there is only one virtual break).
|
# needed (there is only one optional break).
|
||||||
else:
|
else:
|
||||||
html_text = expand_tags(u'\n'.join(slides))
|
html_text = expand_tags(u'\n'.join(slides))
|
||||||
html_text = html_text.replace(u'\n', u'<br>')
|
html_text = html_text.replace(u'\n', u'<br>')
|
||||||
if self._text_fits_on_slide(html_text):
|
if self._text_fits_on_slide(html_text):
|
||||||
# The first two virtual slides fit (as a whole) on one
|
# The first two optional slides fit (as a whole) on one
|
||||||
# slide. Replace the first occurrence of [---].
|
# slide. Replace the first occurrence of [---].
|
||||||
text = text.replace(u'\n[---]', u'', 1)
|
text = text.replace(u'\n[---]', u'', 1)
|
||||||
else:
|
else:
|
||||||
# The first virtual slide fits, which means we have to
|
# The first optional slide fits, which means we have to
|
||||||
# render the first virtual slide.
|
# render the first optional slide.
|
||||||
text_contains_break = u'[---]' in text
|
text_contains_break = u'[---]' in text
|
||||||
if text_contains_break:
|
if text_contains_break:
|
||||||
try:
|
try:
|
||||||
@ -364,7 +364,7 @@ class Renderer(object):
|
|||||||
self.web.setVisible(False)
|
self.web.setVisible(False)
|
||||||
self.web.resize(self.page_width, self.page_height)
|
self.web.resize(self.page_width, self.page_height)
|
||||||
self.web_frame = self.web.page().mainFrame()
|
self.web_frame = self.web.page().mainFrame()
|
||||||
# Adjust width and height to account for shadow. outline done in css
|
# Adjust width and height to account for shadow. outline done in css.
|
||||||
html = u"""<!DOCTYPE html><html><head><script>
|
html = u"""<!DOCTYPE html><html><head><script>
|
||||||
function show_text(newtext) {
|
function show_text(newtext) {
|
||||||
var main = document.getElementById('main');
|
var main = document.getElementById('main');
|
||||||
|
@ -104,7 +104,7 @@ class SettingsManager(object):
|
|||||||
u'%s count' % name, QtCore.QVariant(0)).toInt()[0]
|
u'%s count' % name, QtCore.QVariant(0)).toInt()[0]
|
||||||
new_count = len(list)
|
new_count = len(list)
|
||||||
settings.setValue(u'%s count' % name, QtCore.QVariant(new_count))
|
settings.setValue(u'%s count' % name, QtCore.QVariant(new_count))
|
||||||
for counter in range (0, new_count):
|
for counter in range(new_count):
|
||||||
settings.setValue(
|
settings.setValue(
|
||||||
u'%s %d' % (name, counter), QtCore.QVariant(list[counter-1]))
|
u'%s %d' % (name, counter), QtCore.QVariant(list[counter-1]))
|
||||||
if old_count > new_count:
|
if old_count > new_count:
|
||||||
@ -130,7 +130,7 @@ class SettingsManager(object):
|
|||||||
u'%s count' % name, QtCore.QVariant(0)).toInt()[0]
|
u'%s count' % name, QtCore.QVariant(0)).toInt()[0]
|
||||||
list = []
|
list = []
|
||||||
if list_count:
|
if list_count:
|
||||||
for counter in range(0, list_count):
|
for counter in range(list_count):
|
||||||
item = unicode(
|
item = unicode(
|
||||||
settings.value(u'%s %d' % (name, counter)).toString())
|
settings.value(u'%s %d' % (name, counter)).toString())
|
||||||
if item:
|
if item:
|
||||||
|
@ -47,7 +47,7 @@ class SettingsTab(QtGui.QWidget):
|
|||||||
self.tabTitleVisible = visible_title
|
self.tabTitleVisible = visible_title
|
||||||
self.settingsSection = self.tabTitle.lower()
|
self.settingsSection = self.tabTitle.lower()
|
||||||
if icon_path:
|
if icon_path:
|
||||||
self.icon_path = icon_path
|
self.iconPath = icon_path
|
||||||
self.setupUi()
|
self.setupUi()
|
||||||
self.retranslateUi()
|
self.retranslateUi()
|
||||||
self.initialise()
|
self.initialise()
|
||||||
|
@ -124,7 +124,7 @@ class UiStrings(object):
|
|||||||
self.Settings = translate('OpenLP.Ui', 'Settings')
|
self.Settings = translate('OpenLP.Ui', 'Settings')
|
||||||
self.SaveService = translate('OpenLP.Ui', 'Save Service')
|
self.SaveService = translate('OpenLP.Ui', 'Save Service')
|
||||||
self.Service = translate('OpenLP.Ui', 'Service')
|
self.Service = translate('OpenLP.Ui', 'Service')
|
||||||
self.Split = translate('OpenLP.Ui', '&Split')
|
self.Split = translate('OpenLP.Ui', 'Optional &Split')
|
||||||
self.SplitToolTip = translate('OpenLP.Ui', 'Split a slide into two '
|
self.SplitToolTip = translate('OpenLP.Ui', 'Split a slide into two '
|
||||||
'only if it does not fit on the screen as one slide.')
|
'only if it does not fit on the screen as one slide.')
|
||||||
self.StartTimeCode = unicode(translate('OpenLP.Ui', 'Start %s'))
|
self.StartTimeCode = unicode(translate('OpenLP.Ui', 'Start %s'))
|
||||||
@ -143,6 +143,7 @@ class UiStrings(object):
|
|||||||
self.View = translate('OpenLP.Ui', 'View')
|
self.View = translate('OpenLP.Ui', 'View')
|
||||||
self.ViewMode = translate('OpenLP.Ui', 'View Mode')
|
self.ViewMode = translate('OpenLP.Ui', 'View Mode')
|
||||||
|
|
||||||
|
|
||||||
def add_welcome_page(parent, image):
|
def add_welcome_page(parent, image):
|
||||||
"""
|
"""
|
||||||
Generate an opening welcome page for a wizard using a provided image.
|
Generate an opening welcome page for a wizard using a provided image.
|
||||||
@ -170,6 +171,7 @@ def add_welcome_page(parent, image):
|
|||||||
parent.welcomeLayout.addStretch()
|
parent.welcomeLayout.addStretch()
|
||||||
parent.addPage(parent.welcomePage)
|
parent.addPage(parent.welcomePage)
|
||||||
|
|
||||||
|
|
||||||
def create_button_box(dialog, name, standard_buttons, custom_buttons=[]):
|
def create_button_box(dialog, name, standard_buttons, custom_buttons=[]):
|
||||||
"""
|
"""
|
||||||
Creates a QDialogButtonBox with the given buttons. The ``accepted()`` and
|
Creates a QDialogButtonBox with the given buttons. The ``accepted()`` and
|
||||||
@ -216,6 +218,7 @@ def create_button_box(dialog, name, standard_buttons, custom_buttons=[]):
|
|||||||
dialog.reject)
|
dialog.reject)
|
||||||
return button_box
|
return button_box
|
||||||
|
|
||||||
|
|
||||||
def critical_error_message_box(title=None, message=None, parent=None,
|
def critical_error_message_box(title=None, message=None, parent=None,
|
||||||
question=False):
|
question=False):
|
||||||
"""
|
"""
|
||||||
@ -242,6 +245,7 @@ def critical_error_message_box(title=None, message=None, parent=None,
|
|||||||
data[u'title'] = title if title else UiStrings().Error
|
data[u'title'] = title if title else UiStrings().Error
|
||||||
return Receiver.send_message(u'openlp_error_message', data)
|
return Receiver.send_message(u'openlp_error_message', data)
|
||||||
|
|
||||||
|
|
||||||
def create_horizontal_adjusting_combo_box(parent, name):
|
def create_horizontal_adjusting_combo_box(parent, name):
|
||||||
"""
|
"""
|
||||||
Creates a QComboBox with adapting width for media items.
|
Creates a QComboBox with adapting width for media items.
|
||||||
@ -258,6 +262,7 @@ def create_horizontal_adjusting_combo_box(parent, name):
|
|||||||
combo.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
combo.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
|
||||||
return combo
|
return combo
|
||||||
|
|
||||||
|
|
||||||
def create_button(parent, name, **kwargs):
|
def create_button(parent, name, **kwargs):
|
||||||
"""
|
"""
|
||||||
Return an button with the object name set and the given parameters.
|
Return an button with the object name set and the given parameters.
|
||||||
@ -324,6 +329,7 @@ def create_button(parent, name, **kwargs):
|
|||||||
log.warn(u'Parameter %s was not consumed in create_button().', key)
|
log.warn(u'Parameter %s was not consumed in create_button().', key)
|
||||||
return button
|
return button
|
||||||
|
|
||||||
|
|
||||||
def create_action(parent, name, **kwargs):
|
def create_action(parent, name, **kwargs):
|
||||||
"""
|
"""
|
||||||
Return an action with the object name set and the given parameters.
|
Return an action with the object name set and the given parameters.
|
||||||
@ -411,6 +417,7 @@ def create_action(parent, name, **kwargs):
|
|||||||
log.warn(u'Parameter %s was not consumed in create_action().', key)
|
log.warn(u'Parameter %s was not consumed in create_action().', key)
|
||||||
return action
|
return action
|
||||||
|
|
||||||
|
|
||||||
def create_widget_action(parent, name=u'', **kwargs):
|
def create_widget_action(parent, name=u'', **kwargs):
|
||||||
"""
|
"""
|
||||||
Return a new QAction by calling ``create_action(parent, name, **kwargs)``.
|
Return a new QAction by calling ``create_action(parent, name, **kwargs)``.
|
||||||
@ -422,6 +429,7 @@ def create_widget_action(parent, name=u'', **kwargs):
|
|||||||
parent.addAction(action)
|
parent.addAction(action)
|
||||||
return action
|
return action
|
||||||
|
|
||||||
|
|
||||||
def set_case_insensitive_completer(cache, widget):
|
def set_case_insensitive_completer(cache, widget):
|
||||||
"""
|
"""
|
||||||
Sets a case insensitive text completer for a widget.
|
Sets a case insensitive text completer for a widget.
|
||||||
@ -436,6 +444,7 @@ def set_case_insensitive_completer(cache, widget):
|
|||||||
completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
|
completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
|
||||||
widget.setCompleter(completer)
|
widget.setCompleter(completer)
|
||||||
|
|
||||||
|
|
||||||
def create_valign_selection_widgets(parent):
|
def create_valign_selection_widgets(parent):
|
||||||
"""
|
"""
|
||||||
Creates a standard label and combo box for asking users to select a
|
Creates a standard label and combo box for asking users to select a
|
||||||
@ -455,6 +464,7 @@ def create_valign_selection_widgets(parent):
|
|||||||
label.setBuddy(combo_box)
|
label.setBuddy(combo_box)
|
||||||
return label, combo_box
|
return label, combo_box
|
||||||
|
|
||||||
|
|
||||||
def find_and_set_in_combo_box(combo_box, value_to_find):
|
def find_and_set_in_combo_box(combo_box, value_to_find):
|
||||||
"""
|
"""
|
||||||
Find a string in a combo box and set it as the selected item if present
|
Find a string in a combo box and set it as the selected item if present
|
||||||
|
@ -59,7 +59,7 @@ class AdvancedTab(SettingsTab):
|
|||||||
'#strftime-strptime-behavior for more information.'))
|
'#strftime-strptime-behavior for more information.'))
|
||||||
self.defaultImage = u':/graphics/openlp-splash-screen.png'
|
self.defaultImage = u':/graphics/openlp-splash-screen.png'
|
||||||
self.defaultColor = u'#ffffff'
|
self.defaultColor = u'#ffffff'
|
||||||
self.icon_path = u':/system/system_settings.png'
|
self.iconPath = u':/system/system_settings.png'
|
||||||
advanced_translated = translate('OpenLP.AdvancedTab', 'Advanced')
|
advanced_translated = translate('OpenLP.AdvancedTab', 'Advanced')
|
||||||
SettingsTab.__init__(self, parent, u'Advanced', advanced_translated)
|
SettingsTab.__init__(self, parent, u'Advanced', advanced_translated)
|
||||||
|
|
||||||
|
@ -77,6 +77,8 @@ try:
|
|||||||
UNO_VERSION = node.getByName(u'ooSetupVersion')
|
UNO_VERSION = node.getByName(u'ooSetupVersion')
|
||||||
except ImportError:
|
except ImportError:
|
||||||
UNO_VERSION = u'-'
|
UNO_VERSION = u'-'
|
||||||
|
except:
|
||||||
|
UNO_VERSION = u'- (Possible non-standard UNO installation)'
|
||||||
try:
|
try:
|
||||||
WEBKIT_VERSION = QtWebKit.qWebKitVersion()
|
WEBKIT_VERSION = QtWebKit.qWebKitVersion()
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -43,7 +43,7 @@ class GeneralTab(SettingsTab):
|
|||||||
Initialise the general settings tab
|
Initialise the general settings tab
|
||||||
"""
|
"""
|
||||||
self.screens = ScreenList.get_instance()
|
self.screens = ScreenList.get_instance()
|
||||||
self.icon_path = u':/icon/openlp-logo-16x16.png'
|
self.iconPath = u':/icon/openlp-logo-16x16.png'
|
||||||
generalTranslated = translate('OpenLP.GeneralTab', 'General')
|
generalTranslated = translate('OpenLP.GeneralTab', 'General')
|
||||||
SettingsTab.__init__(self, parent, u'General', generalTranslated)
|
SettingsTab.__init__(self, parent, u'General', generalTranslated)
|
||||||
|
|
||||||
@ -65,42 +65,42 @@ class GeneralTab(SettingsTab):
|
|||||||
self.monitorComboBox = QtGui.QComboBox(self.monitorGroupBox)
|
self.monitorComboBox = QtGui.QComboBox(self.monitorGroupBox)
|
||||||
self.monitorComboBox.setObjectName(u'monitorComboBox')
|
self.monitorComboBox.setObjectName(u'monitorComboBox')
|
||||||
self.monitorLayout.addWidget(self.monitorComboBox, 1, 1, 1, 4)
|
self.monitorLayout.addWidget(self.monitorComboBox, 1, 1, 1, 4)
|
||||||
self.displayOnMonitorCheck = QtGui.QCheckBox(self.monitorGroupBox)
|
|
||||||
self.displayOnMonitorCheck.setObjectName(u'monitorComboBox')
|
|
||||||
self.monitorLayout.addWidget(self.displayOnMonitorCheck, 2, 1, 1, 4)
|
|
||||||
# Display Position
|
# Display Position
|
||||||
self.overrideRadioButton = QtGui.QRadioButton(self.monitorGroupBox)
|
self.overrideRadioButton = QtGui.QRadioButton(self.monitorGroupBox)
|
||||||
self.overrideRadioButton.setObjectName(u'overrideRadioButton')
|
self.overrideRadioButton.setObjectName(u'overrideRadioButton')
|
||||||
self.monitorLayout.addWidget(self.overrideRadioButton, 3, 0, 1, 5)
|
self.monitorLayout.addWidget(self.overrideRadioButton, 2, 0, 1, 5)
|
||||||
# Custom position
|
# Custom position
|
||||||
self.customXLabel = QtGui.QLabel(self.monitorGroupBox)
|
self.customXLabel = QtGui.QLabel(self.monitorGroupBox)
|
||||||
self.customXLabel.setObjectName(u'customXLabel')
|
self.customXLabel.setObjectName(u'customXLabel')
|
||||||
self.monitorLayout.addWidget(self.customXLabel, 4, 1)
|
self.monitorLayout.addWidget(self.customXLabel, 3, 1)
|
||||||
self.customXValueEdit = QtGui.QSpinBox(self.monitorGroupBox)
|
self.customXValueEdit = QtGui.QSpinBox(self.monitorGroupBox)
|
||||||
self.customXValueEdit.setObjectName(u'customXValueEdit')
|
self.customXValueEdit.setObjectName(u'customXValueEdit')
|
||||||
self.customXValueEdit.setRange(-9999, 9999)
|
self.customXValueEdit.setRange(-9999, 9999)
|
||||||
self.monitorLayout.addWidget(self.customXValueEdit, 5, 1)
|
self.monitorLayout.addWidget(self.customXValueEdit, 4, 1)
|
||||||
self.customYLabel = QtGui.QLabel(self.monitorGroupBox)
|
self.customYLabel = QtGui.QLabel(self.monitorGroupBox)
|
||||||
self.customYLabel.setObjectName(u'customYLabel')
|
self.customYLabel.setObjectName(u'customYLabel')
|
||||||
self.monitorLayout.addWidget(self.customYLabel, 4, 2)
|
self.monitorLayout.addWidget(self.customYLabel, 3, 2)
|
||||||
self.customYValueEdit = QtGui.QSpinBox(self.monitorGroupBox)
|
self.customYValueEdit = QtGui.QSpinBox(self.monitorGroupBox)
|
||||||
self.customYValueEdit.setObjectName(u'customYValueEdit')
|
self.customYValueEdit.setObjectName(u'customYValueEdit')
|
||||||
self.customYValueEdit.setRange(-9999, 9999)
|
self.customYValueEdit.setRange(-9999, 9999)
|
||||||
self.monitorLayout.addWidget(self.customYValueEdit, 5, 2)
|
self.monitorLayout.addWidget(self.customYValueEdit, 4, 2)
|
||||||
self.customWidthLabel = QtGui.QLabel(self.monitorGroupBox)
|
self.customWidthLabel = QtGui.QLabel(self.monitorGroupBox)
|
||||||
self.customWidthLabel.setObjectName(u'customWidthLabel')
|
self.customWidthLabel.setObjectName(u'customWidthLabel')
|
||||||
self.monitorLayout.addWidget(self.customWidthLabel, 4, 3)
|
self.monitorLayout.addWidget(self.customWidthLabel, 3, 3)
|
||||||
self.customWidthValueEdit = QtGui.QSpinBox(self.monitorGroupBox)
|
self.customWidthValueEdit = QtGui.QSpinBox(self.monitorGroupBox)
|
||||||
self.customWidthValueEdit.setObjectName(u'customWidthValueEdit')
|
self.customWidthValueEdit.setObjectName(u'customWidthValueEdit')
|
||||||
self.customWidthValueEdit.setMaximum(9999)
|
self.customWidthValueEdit.setMaximum(9999)
|
||||||
self.monitorLayout.addWidget(self.customWidthValueEdit, 5, 3)
|
self.monitorLayout.addWidget(self.customWidthValueEdit, 4, 3)
|
||||||
self.customHeightLabel = QtGui.QLabel(self.monitorGroupBox)
|
self.customHeightLabel = QtGui.QLabel(self.monitorGroupBox)
|
||||||
self.customHeightLabel.setObjectName(u'customHeightLabel')
|
self.customHeightLabel.setObjectName(u'customHeightLabel')
|
||||||
self.monitorLayout.addWidget(self.customHeightLabel, 4, 4)
|
self.monitorLayout.addWidget(self.customHeightLabel, 3, 4)
|
||||||
self.customHeightValueEdit = QtGui.QSpinBox(self.monitorGroupBox)
|
self.customHeightValueEdit = QtGui.QSpinBox(self.monitorGroupBox)
|
||||||
self.customHeightValueEdit.setObjectName(u'customHeightValueEdit')
|
self.customHeightValueEdit.setObjectName(u'customHeightValueEdit')
|
||||||
self.customHeightValueEdit.setMaximum(9999)
|
self.customHeightValueEdit.setMaximum(9999)
|
||||||
self.monitorLayout.addWidget(self.customHeightValueEdit, 5, 4)
|
self.monitorLayout.addWidget(self.customHeightValueEdit, 4, 4)
|
||||||
|
self.displayOnMonitorCheck = QtGui.QCheckBox(self.monitorGroupBox)
|
||||||
|
self.displayOnMonitorCheck.setObjectName(u'monitorComboBox')
|
||||||
|
self.monitorLayout.addWidget(self.displayOnMonitorCheck, 5, 0, 1, 5)
|
||||||
# Set up the stretchiness of each column, so that the first column
|
# Set up the stretchiness of each column, so that the first column
|
||||||
# less stretchy (and therefore smaller) than the others
|
# less stretchy (and therefore smaller) than the others
|
||||||
self.monitorLayout.setColumnStretch(0, 1)
|
self.monitorLayout.setColumnStretch(0, 1)
|
||||||
@ -314,8 +314,6 @@ class GeneralTab(SettingsTab):
|
|||||||
u'audio repeat list', QtCore.QVariant(False)).toBool())
|
u'audio repeat list', QtCore.QVariant(False)).toBool())
|
||||||
settings.endGroup()
|
settings.endGroup()
|
||||||
self.monitorComboBox.setDisabled(self.overrideRadioButton.isChecked())
|
self.monitorComboBox.setDisabled(self.overrideRadioButton.isChecked())
|
||||||
self.displayOnMonitorCheck.setDisabled(
|
|
||||||
self.overrideRadioButton.isChecked())
|
|
||||||
self.customXValueEdit.setEnabled(self.overrideRadioButton.isChecked())
|
self.customXValueEdit.setEnabled(self.overrideRadioButton.isChecked())
|
||||||
self.customYValueEdit.setEnabled(self.overrideRadioButton.isChecked())
|
self.customYValueEdit.setEnabled(self.overrideRadioButton.isChecked())
|
||||||
self.customHeightValueEdit.setEnabled(
|
self.customHeightValueEdit.setEnabled(
|
||||||
@ -408,7 +406,6 @@ class GeneralTab(SettingsTab):
|
|||||||
The state of the check box (boolean).
|
The state of the check box (boolean).
|
||||||
"""
|
"""
|
||||||
self.monitorComboBox.setDisabled(checked)
|
self.monitorComboBox.setDisabled(checked)
|
||||||
self.displayOnMonitorCheck.setDisabled(checked)
|
|
||||||
self.customXValueEdit.setEnabled(checked)
|
self.customXValueEdit.setEnabled(checked)
|
||||||
self.customYValueEdit.setEnabled(checked)
|
self.customYValueEdit.setEnabled(checked)
|
||||||
self.customHeightValueEdit.setEnabled(checked)
|
self.customHeightValueEdit.setEnabled(checked)
|
||||||
|
@ -221,11 +221,6 @@ class MainDisplay(Display):
|
|||||||
self.webView.setHtml(build_html(serviceItem, self.screen,
|
self.webView.setHtml(build_html(serviceItem, self.screen,
|
||||||
self.isLive, None, plugins=self.plugins))
|
self.isLive, None, plugins=self.plugins))
|
||||||
self.__hideMouse()
|
self.__hideMouse()
|
||||||
# To display or not to display?
|
|
||||||
if not self.screen[u'primary']:
|
|
||||||
self.primary = False
|
|
||||||
else:
|
|
||||||
self.primary = True
|
|
||||||
log.debug(u'Finished MainDisplay setup')
|
log.debug(u'Finished MainDisplay setup')
|
||||||
|
|
||||||
def text(self, slide):
|
def text(self, slide):
|
||||||
@ -253,10 +248,10 @@ class MainDisplay(Display):
|
|||||||
log.debug(u'alert to display')
|
log.debug(u'alert to display')
|
||||||
# First we convert <>& marks to html variants, then apply
|
# First we convert <>& marks to html variants, then apply
|
||||||
# formattingtags, finally we double all backslashes for JavaScript.
|
# formattingtags, finally we double all backslashes for JavaScript.
|
||||||
text_prepared = expand_tags(cgi.escape(text)) \
|
text_prepared = expand_tags(
|
||||||
.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"')
|
cgi.escape(text)).replace(u'\\', u'\\\\').replace(u'\"', u'\\\"')
|
||||||
if self.height() != self.screen[u'size'].height() or \
|
if self.height() != self.screen[u'size'].height() or not \
|
||||||
not self.isVisible():
|
self.isVisible():
|
||||||
shrink = True
|
shrink = True
|
||||||
js = u'show_alert("%s", "%s")' % (text_prepared, u'top')
|
js = u'show_alert("%s", "%s")' % (text_prepared, u'top')
|
||||||
else:
|
else:
|
||||||
@ -336,7 +331,7 @@ class MainDisplay(Display):
|
|||||||
"""
|
"""
|
||||||
log.debug(u'preview for %s', self.isLive)
|
log.debug(u'preview for %s', self.isLive)
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
# We must have a service item to preview
|
# We must have a service item to preview.
|
||||||
if self.isLive and hasattr(self, u'serviceItem'):
|
if self.isLive and hasattr(self, u'serviceItem'):
|
||||||
# Wait for the fade to finish before geting the preview.
|
# Wait for the fade to finish before geting the preview.
|
||||||
# Important otherwise preview will have incorrect text if at all!
|
# Important otherwise preview will have incorrect text if at all!
|
||||||
@ -345,7 +340,7 @@ class MainDisplay(Display):
|
|||||||
while self.frame.evaluateJavaScript(u'show_text_complete()') \
|
while self.frame.evaluateJavaScript(u'show_text_complete()') \
|
||||||
.toString() == u'false':
|
.toString() == u'false':
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
# Wait for the webview to update before geting the preview.
|
# Wait for the webview to update before getting the preview.
|
||||||
# Important otherwise first preview will miss the background !
|
# Important otherwise first preview will miss the background !
|
||||||
while not self.webLoaded:
|
while not self.webLoaded:
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
@ -356,7 +351,7 @@ class MainDisplay(Display):
|
|||||||
else:
|
else:
|
||||||
# Single screen active
|
# Single screen active
|
||||||
if self.screens.display_count == 1:
|
if self.screens.display_count == 1:
|
||||||
# Only make visible if setting enabled
|
# Only make visible if setting enabled.
|
||||||
if QtCore.QSettings().value(u'general/display on monitor',
|
if QtCore.QSettings().value(u'general/display on monitor',
|
||||||
QtCore.QVariant(True)).toBool():
|
QtCore.QVariant(True)).toBool():
|
||||||
self.setVisible(True)
|
self.setVisible(True)
|
||||||
@ -374,9 +369,9 @@ class MainDisplay(Display):
|
|||||||
self.initialFrame = None
|
self.initialFrame = None
|
||||||
self.serviceItem = serviceItem
|
self.serviceItem = serviceItem
|
||||||
background = None
|
background = None
|
||||||
# We have an image override so keep the image till the theme changes
|
# We have an image override so keep the image till the theme changes.
|
||||||
if self.override:
|
if self.override:
|
||||||
# We have an video override so allow it to be stopped
|
# We have an video override so allow it to be stopped.
|
||||||
if u'video' in self.override:
|
if u'video' in self.override:
|
||||||
Receiver.send_message(u'video_background_replaced')
|
Receiver.send_message(u'video_background_replaced')
|
||||||
self.override = {}
|
self.override = {}
|
||||||
@ -429,7 +424,7 @@ class MainDisplay(Display):
|
|||||||
"""
|
"""
|
||||||
log.debug(u'hideDisplay mode = %d', mode)
|
log.debug(u'hideDisplay mode = %d', mode)
|
||||||
if self.screens.display_count == 1:
|
if self.screens.display_count == 1:
|
||||||
# Only make visible if setting enabled
|
# Only make visible if setting enabled.
|
||||||
if not QtCore.QSettings().value(u'general/display on monitor',
|
if not QtCore.QSettings().value(u'general/display on monitor',
|
||||||
QtCore.QVariant(True)).toBool():
|
QtCore.QVariant(True)).toBool():
|
||||||
return
|
return
|
||||||
@ -454,7 +449,7 @@ class MainDisplay(Display):
|
|||||||
"""
|
"""
|
||||||
log.debug(u'showDisplay')
|
log.debug(u'showDisplay')
|
||||||
if self.screens.display_count == 1:
|
if self.screens.display_count == 1:
|
||||||
# Only make visible if setting enabled
|
# Only make visible if setting enabled.
|
||||||
if not QtCore.QSettings().value(u'general/display on monitor',
|
if not QtCore.QSettings().value(u'general/display on monitor',
|
||||||
QtCore.QVariant(True)).toBool():
|
QtCore.QVariant(True)).toBool():
|
||||||
return
|
return
|
||||||
@ -462,12 +457,14 @@ class MainDisplay(Display):
|
|||||||
if self.isHidden():
|
if self.isHidden():
|
||||||
self.setVisible(True)
|
self.setVisible(True)
|
||||||
self.hideMode = None
|
self.hideMode = None
|
||||||
# Trigger actions when display is active again
|
# Trigger actions when display is active again.
|
||||||
if self.isLive:
|
if self.isLive:
|
||||||
Receiver.send_message(u'live_display_active')
|
Receiver.send_message(u'live_display_active')
|
||||||
|
|
||||||
def __hideMouse(self):
|
def __hideMouse(self):
|
||||||
# Hide mouse cursor when moved over display if enabled in settings
|
"""
|
||||||
|
Hide mouse cursor when moved over display.
|
||||||
|
"""
|
||||||
if QtCore.QSettings().value(u'advanced/hide mouse',
|
if QtCore.QSettings().value(u'advanced/hide mouse',
|
||||||
QtCore.QVariant(False)).toBool():
|
QtCore.QVariant(False)).toBool():
|
||||||
self.setCursor(QtCore.Qt.BlankCursor)
|
self.setCursor(QtCore.Qt.BlankCursor)
|
||||||
@ -569,13 +566,12 @@ class AudioPlayer(QtCore.QObject):
|
|||||||
"""
|
"""
|
||||||
Add another file to the playlist.
|
Add another file to the playlist.
|
||||||
|
|
||||||
``filename``
|
``filenames``
|
||||||
The file to add to the playlist.
|
A list with files to be added to the playlist.
|
||||||
"""
|
"""
|
||||||
if not isinstance(filenames, list):
|
if not isinstance(filenames, list):
|
||||||
filenames = [filenames]
|
filenames = [filenames]
|
||||||
for filename in filenames:
|
self.playlist.extend(map(Phonon.MediaSource, filenames))
|
||||||
self.playlist.append(Phonon.MediaSource(filename))
|
|
||||||
|
|
||||||
def next(self):
|
def next(self):
|
||||||
if not self.repeat and self.currentIndex + 1 == len(self.playlist):
|
if not self.repeat and self.currentIndex + 1 == len(self.playlist):
|
||||||
|
@ -554,9 +554,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
# (not for use by plugins)
|
# (not for use by plugins)
|
||||||
self.uiSettingsSection = u'user interface'
|
self.uiSettingsSection = u'user interface'
|
||||||
self.generalSettingsSection = u'general'
|
self.generalSettingsSection = u'general'
|
||||||
self.advancedlSettingsSection = u'advanced'
|
self.advancedSettingsSection = u'advanced'
|
||||||
self.shortcutsSettingsSection = u'shortcuts'
|
self.shortcutsSettingsSection = u'shortcuts'
|
||||||
self.servicemanagerSettingsSection = u'servicemanager'
|
self.serviceManagerSettingsSection = u'servicemanager'
|
||||||
self.songsSettingsSection = u'songs'
|
self.songsSettingsSection = u'songs'
|
||||||
self.themesSettingsSection = u'themes'
|
self.themesSettingsSection = u'themes'
|
||||||
self.displayTagsSection = u'displayTags'
|
self.displayTagsSection = u'displayTags'
|
||||||
@ -568,8 +568,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
self.shortcutForm = ShortcutListForm(self)
|
self.shortcutForm = ShortcutListForm(self)
|
||||||
self.recentFiles = QtCore.QStringList()
|
self.recentFiles = QtCore.QStringList()
|
||||||
# Set up the path with plugins
|
# Set up the path with plugins
|
||||||
pluginpath = AppLocation.get_directory(AppLocation.PluginsDir)
|
plugin_path = AppLocation.get_directory(AppLocation.PluginsDir)
|
||||||
self.pluginManager = PluginManager(pluginpath)
|
self.pluginManager = PluginManager(plugin_path)
|
||||||
self.pluginHelpers = {}
|
self.pluginHelpers = {}
|
||||||
self.imageManager = ImageManager()
|
self.imageManager = ImageManager()
|
||||||
self.mediaController = MediaController(self)
|
self.mediaController = MediaController(self)
|
||||||
@ -661,7 +661,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
self.pluginHelpers[u'pluginmanager'] = self.pluginManager
|
self.pluginHelpers[u'pluginmanager'] = self.pluginManager
|
||||||
self.pluginHelpers[u'formparent'] = self
|
self.pluginHelpers[u'formparent'] = self
|
||||||
self.pluginHelpers[u'mediacontroller'] = self.mediaController
|
self.pluginHelpers[u'mediacontroller'] = self.mediaController
|
||||||
self.pluginManager.find_plugins(pluginpath, self.pluginHelpers)
|
self.pluginManager.find_plugins(plugin_path, self.pluginHelpers)
|
||||||
# hook methods have to happen after find_plugins. Find plugins needs
|
# hook methods have to happen after find_plugins. Find plugins needs
|
||||||
# the controllers hence the hooks have moved from setupUI() to here
|
# the controllers hence the hooks have moved from setupUI() to here
|
||||||
# Find and insert settings tabs
|
# Find and insert settings tabs
|
||||||
@ -944,10 +944,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
setting_sections = []
|
setting_sections = []
|
||||||
# Add main sections.
|
# Add main sections.
|
||||||
setting_sections.extend([self.generalSettingsSection])
|
setting_sections.extend([self.generalSettingsSection])
|
||||||
setting_sections.extend([self.advancedlSettingsSection])
|
setting_sections.extend([self.advancedSettingsSection])
|
||||||
setting_sections.extend([self.uiSettingsSection])
|
setting_sections.extend([self.uiSettingsSection])
|
||||||
setting_sections.extend([self.shortcutsSettingsSection])
|
setting_sections.extend([self.shortcutsSettingsSection])
|
||||||
setting_sections.extend([self.servicemanagerSettingsSection])
|
setting_sections.extend([self.serviceManagerSettingsSection])
|
||||||
setting_sections.extend([self.themesSettingsSection])
|
setting_sections.extend([self.themesSettingsSection])
|
||||||
setting_sections.extend([self.displayTagsSection])
|
setting_sections.extend([self.displayTagsSection])
|
||||||
setting_sections.extend([self.headerSection])
|
setting_sections.extend([self.headerSection])
|
||||||
@ -1027,10 +1027,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
setting_sections = []
|
setting_sections = []
|
||||||
# Add main sections.
|
# Add main sections.
|
||||||
setting_sections.extend([self.generalSettingsSection])
|
setting_sections.extend([self.generalSettingsSection])
|
||||||
setting_sections.extend([self.advancedlSettingsSection])
|
setting_sections.extend([self.advancedSettingsSection])
|
||||||
setting_sections.extend([self.uiSettingsSection])
|
setting_sections.extend([self.uiSettingsSection])
|
||||||
setting_sections.extend([self.shortcutsSettingsSection])
|
setting_sections.extend([self.shortcutsSettingsSection])
|
||||||
setting_sections.extend([self.servicemanagerSettingsSection])
|
setting_sections.extend([self.serviceManagerSettingsSection])
|
||||||
setting_sections.extend([self.themesSettingsSection])
|
setting_sections.extend([self.themesSettingsSection])
|
||||||
setting_sections.extend([self.displayTagsSection])
|
setting_sections.extend([self.displayTagsSection])
|
||||||
# Add plugin sections.
|
# Add plugin sections.
|
||||||
@ -1314,10 +1314,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
u'/enable slide loop'):
|
u'/enable slide loop'):
|
||||||
if QtCore.QSettings().value(self.generalSettingsSection +
|
if QtCore.QSettings().value(self.generalSettingsSection +
|
||||||
u'/enable slide loop', QtCore.QVariant(True)).toBool():
|
u'/enable slide loop', QtCore.QVariant(True)).toBool():
|
||||||
QtCore.QSettings().setValue(self.advancedlSettingsSection +
|
QtCore.QSettings().setValue(self.advancedSettingsSection +
|
||||||
u'/slide limits', QtCore.QVariant(SlideLimits.Wrap))
|
u'/slide limits', QtCore.QVariant(SlideLimits.Wrap))
|
||||||
else:
|
else:
|
||||||
QtCore.QSettings().setValue(self.advancedlSettingsSection +
|
QtCore.QSettings().setValue(self.advancedSettingsSection +
|
||||||
u'/slide limits', QtCore.QVariant(SlideLimits.End))
|
u'/slide limits', QtCore.QVariant(SlideLimits.End))
|
||||||
QtCore.QSettings().remove(self.generalSettingsSection +
|
QtCore.QSettings().remove(self.generalSettingsSection +
|
||||||
u'/enable slide loop')
|
u'/enable slide loop')
|
||||||
|
@ -105,6 +105,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
self.suffixes = []
|
self.suffixes = []
|
||||||
self.dropPosition = 0
|
self.dropPosition = 0
|
||||||
self.expandTabs = False
|
self.expandTabs = False
|
||||||
|
self.serviceId = 0
|
||||||
# is a new service and has not been saved
|
# is a new service and has not been saved
|
||||||
self._modified = False
|
self._modified = False
|
||||||
self._fileName = u''
|
self._fileName = u''
|
||||||
@ -271,7 +272,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
QtCore.SIGNAL(u'service_item_update'), self.serviceItemUpdate)
|
QtCore.SIGNAL(u'service_item_update'), self.serviceItemUpdate)
|
||||||
# Last little bits of setting up
|
# Last little bits of setting up
|
||||||
self.service_theme = unicode(QtCore.QSettings().value(
|
self.service_theme = unicode(QtCore.QSettings().value(
|
||||||
self.mainwindow.servicemanagerSettingsSection + u'/service theme',
|
self.mainwindow.serviceManagerSettingsSection + u'/service theme',
|
||||||
QtCore.QVariant(u'')).toString())
|
QtCore.QVariant(u'')).toString())
|
||||||
self.servicePath = AppLocation.get_section_data_path(u'servicemanager')
|
self.servicePath = AppLocation.get_section_data_path(u'servicemanager')
|
||||||
# build the drag and drop context menu
|
# build the drag and drop context menu
|
||||||
@ -331,6 +332,8 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
Setter for property "modified". Sets whether or not the current service
|
Setter for property "modified". Sets whether or not the current service
|
||||||
has been modified.
|
has been modified.
|
||||||
"""
|
"""
|
||||||
|
if modified:
|
||||||
|
self.serviceId += 1
|
||||||
self._modified = modified
|
self._modified = modified
|
||||||
serviceFile = self.shortFileName() or translate(
|
serviceFile = self.shortFileName() or translate(
|
||||||
'OpenLP.ServiceManager', 'Untitled Service')
|
'OpenLP.ServiceManager', 'Untitled Service')
|
||||||
@ -408,7 +411,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
self.mainwindow,
|
self.mainwindow,
|
||||||
translate('OpenLP.ServiceManager', 'Open File'),
|
translate('OpenLP.ServiceManager', 'Open File'),
|
||||||
SettingsManager.get_last_dir(
|
SettingsManager.get_last_dir(
|
||||||
self.mainwindow.servicemanagerSettingsSection),
|
self.mainwindow.serviceManagerSettingsSection),
|
||||||
translate('OpenLP.ServiceManager',
|
translate('OpenLP.ServiceManager',
|
||||||
'OpenLP Service Files (*.osz)')))
|
'OpenLP Service Files (*.osz)')))
|
||||||
if not fileName:
|
if not fileName:
|
||||||
@ -416,7 +419,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
else:
|
else:
|
||||||
fileName = loadFile
|
fileName = loadFile
|
||||||
SettingsManager.set_last_dir(
|
SettingsManager.set_last_dir(
|
||||||
self.mainwindow.servicemanagerSettingsSection,
|
self.mainwindow.serviceManagerSettingsSection,
|
||||||
split_filename(fileName)[0])
|
split_filename(fileName)[0])
|
||||||
self.loadFile(fileName)
|
self.loadFile(fileName)
|
||||||
|
|
||||||
@ -439,6 +442,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
self.serviceManagerList.clear()
|
self.serviceManagerList.clear()
|
||||||
self.serviceItems = []
|
self.serviceItems = []
|
||||||
self.setFileName(u'')
|
self.setFileName(u'')
|
||||||
|
self.serviceId += 1
|
||||||
self.setModified(False)
|
self.setModified(False)
|
||||||
QtCore.QSettings(). \
|
QtCore.QSettings(). \
|
||||||
setValue(u'servicemanager/last file',QtCore.QVariant(u''))
|
setValue(u'servicemanager/last file',QtCore.QVariant(u''))
|
||||||
@ -465,7 +469,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
service_file_name = '%s.osd' % basename
|
service_file_name = '%s.osd' % basename
|
||||||
log.debug(u'ServiceManager.saveFile - %s', path_file_name)
|
log.debug(u'ServiceManager.saveFile - %s', path_file_name)
|
||||||
SettingsManager.set_last_dir(
|
SettingsManager.set_last_dir(
|
||||||
self.mainwindow.servicemanagerSettingsSection,
|
self.mainwindow.serviceManagerSettingsSection,
|
||||||
path)
|
path)
|
||||||
service = []
|
service = []
|
||||||
write_list = []
|
write_list = []
|
||||||
@ -618,7 +622,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
else:
|
else:
|
||||||
default_filename = u''
|
default_filename = u''
|
||||||
directory = unicode(SettingsManager.get_last_dir(
|
directory = unicode(SettingsManager.get_last_dir(
|
||||||
self.mainwindow.servicemanagerSettingsSection))
|
self.mainwindow.serviceManagerSettingsSection))
|
||||||
path = os.path.join(directory, default_filename)
|
path = os.path.join(directory, default_filename)
|
||||||
fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow,
|
fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow,
|
||||||
UiStrings().SaveService, path,
|
UiStrings().SaveService, path,
|
||||||
@ -1103,7 +1107,7 @@ class ServiceManager(QtGui.QWidget):
|
|||||||
self.service_theme = unicode(self.themeComboBox.currentText())
|
self.service_theme = unicode(self.themeComboBox.currentText())
|
||||||
self.mainwindow.renderer.set_service_theme(self.service_theme)
|
self.mainwindow.renderer.set_service_theme(self.service_theme)
|
||||||
QtCore.QSettings().setValue(
|
QtCore.QSettings().setValue(
|
||||||
self.mainwindow.servicemanagerSettingsSection +
|
self.mainwindow.serviceManagerSettingsSection +
|
||||||
u'/service theme',
|
u'/service theme',
|
||||||
QtCore.QVariant(self.service_theme))
|
QtCore.QVariant(self.service_theme))
|
||||||
self.regenerateServiceItems(True)
|
self.regenerateServiceItems(True)
|
||||||
|
@ -65,8 +65,8 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog):
|
|||||||
self.insertTab(self.advancedTab, 2, PluginStatus.Active)
|
self.insertTab(self.advancedTab, 2, PluginStatus.Active)
|
||||||
count = 3
|
count = 3
|
||||||
for plugin in self.plugins:
|
for plugin in self.plugins:
|
||||||
if plugin.settings_tab:
|
if plugin.settingsTab:
|
||||||
self.insertTab(plugin.settings_tab, count, plugin.status)
|
self.insertTab(plugin.settingsTab, count, plugin.status)
|
||||||
count += 1
|
count += 1
|
||||||
self.settingListWidget.setCurrentRow(0)
|
self.settingListWidget.setCurrentRow(0)
|
||||||
return QtGui.QDialog.exec_(self)
|
return QtGui.QDialog.exec_(self)
|
||||||
@ -80,7 +80,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog):
|
|||||||
pos = self.stackedLayout.addWidget(tab)
|
pos = self.stackedLayout.addWidget(tab)
|
||||||
if is_active:
|
if is_active:
|
||||||
item_name = QtGui.QListWidgetItem(tab.tabTitleVisible)
|
item_name = QtGui.QListWidgetItem(tab.tabTitleVisible)
|
||||||
icon = build_icon(tab.icon_path)
|
icon = build_icon(tab.iconPath)
|
||||||
item_name.setIcon(icon)
|
item_name.setIcon(icon)
|
||||||
self.settingListWidget.insertItem(location, item_name)
|
self.settingListWidget.insertItem(location, item_name)
|
||||||
else:
|
else:
|
||||||
@ -114,8 +114,8 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog):
|
|||||||
self.themesTab.postSetUp()
|
self.themesTab.postSetUp()
|
||||||
self.advancedTab.postSetUp()
|
self.advancedTab.postSetUp()
|
||||||
for plugin in self.plugins:
|
for plugin in self.plugins:
|
||||||
if plugin.settings_tab:
|
if plugin.settingsTab:
|
||||||
plugin.settings_tab.postSetUp()
|
plugin.settingsTab.postSetUp()
|
||||||
|
|
||||||
def tabChanged(self, tabIndex):
|
def tabChanged(self, tabIndex):
|
||||||
"""
|
"""
|
||||||
|
@ -648,8 +648,8 @@ class SlideController(Controller):
|
|||||||
|
|
||||||
def onSongBarHandler(self):
|
def onSongBarHandler(self):
|
||||||
request = unicode(self.sender().text())
|
request = unicode(self.sender().text())
|
||||||
slideno = self.slideList[request]
|
slide_no = self.slideList[request]
|
||||||
self.__updatePreviewSelection(slideno)
|
self.__updatePreviewSelection(slide_no)
|
||||||
self.slideSelected()
|
self.slideSelected()
|
||||||
|
|
||||||
def receiveSpinDelay(self, value):
|
def receiveSpinDelay(self, value):
|
||||||
@ -663,7 +663,7 @@ class SlideController(Controller):
|
|||||||
Updates the Slide Limits variable from the settings.
|
Updates the Slide Limits variable from the settings.
|
||||||
"""
|
"""
|
||||||
self.slide_limits = QtCore.QSettings().value(
|
self.slide_limits = QtCore.QSettings().value(
|
||||||
self.parent().advancedlSettingsSection + u'/slide limits',
|
self.parent().advancedSettingsSection + u'/slide limits',
|
||||||
QtCore.QVariant(SlideLimits.End)).toInt()[0]
|
QtCore.QVariant(SlideLimits.End)).toInt()[0]
|
||||||
|
|
||||||
def enableToolBar(self, item):
|
def enableToolBar(self, item):
|
||||||
|
@ -39,7 +39,7 @@ class ThemesTab(SettingsTab):
|
|||||||
self.mainwindow = mainwindow
|
self.mainwindow = mainwindow
|
||||||
generalTranslated = translate('OpenLP.ThemesTab', 'Themes')
|
generalTranslated = translate('OpenLP.ThemesTab', 'Themes')
|
||||||
SettingsTab.__init__(self, parent, u'Themes', generalTranslated)
|
SettingsTab.__init__(self, parent, u'Themes', generalTranslated)
|
||||||
self.icon_path = u':/themes/theme_new.png'
|
self.iconPath = u':/themes/theme_new.png'
|
||||||
|
|
||||||
def setupUi(self):
|
def setupUi(self):
|
||||||
self.setObjectName(u'ThemesTab')
|
self.setObjectName(u'ThemesTab')
|
||||||
|
@ -46,6 +46,7 @@ class WizardStrings(object):
|
|||||||
# the writers translating their own product name.
|
# the writers translating their own product name.
|
||||||
CCLI = u'CCLI/SongSelect'
|
CCLI = u'CCLI/SongSelect'
|
||||||
CSV = u'CSV'
|
CSV = u'CSV'
|
||||||
|
DB = u'DreamBeam'
|
||||||
EW = u'EasyWorship'
|
EW = u'EasyWorship'
|
||||||
ES = u'EasySlides'
|
ES = u'EasySlides'
|
||||||
FP = u'Foilpresenter'
|
FP = u'Foilpresenter'
|
||||||
|
@ -117,8 +117,8 @@ class AlertsPlugin(Plugin):
|
|||||||
Plugin.__init__(self, u'alerts', plugin_helpers,
|
Plugin.__init__(self, u'alerts', plugin_helpers,
|
||||||
settings_tab_class=AlertsTab)
|
settings_tab_class=AlertsTab)
|
||||||
self.weight = -3
|
self.weight = -3
|
||||||
self.icon_path = u':/plugins/plugin_alerts.png'
|
self.iconPath = u':/plugins/plugin_alerts.png'
|
||||||
self.icon = build_icon(self.icon_path)
|
self.icon = build_icon(self.iconPath)
|
||||||
self.alertsmanager = AlertsManager(self)
|
self.alertsmanager = AlertsManager(self)
|
||||||
self.manager = Manager(u'alerts', init_schema)
|
self.manager = Manager(u'alerts', init_schema)
|
||||||
self.alertForm = AlertForm(self)
|
self.alertForm = AlertForm(self)
|
||||||
@ -197,10 +197,10 @@ class AlertsPlugin(Plugin):
|
|||||||
"""
|
"""
|
||||||
Add CSS to the main display.
|
Add CSS to the main display.
|
||||||
"""
|
"""
|
||||||
align = VerticalType.Names[self.settings_tab.location]
|
align = VerticalType.Names[self.settingsTab.location]
|
||||||
return CSS % (align, self.settings_tab.font_face,
|
return CSS % (align, self.settingsTab.font_face,
|
||||||
self.settings_tab.font_size, self.settings_tab.font_color,
|
self.settingsTab.font_size, self.settingsTab.font_color,
|
||||||
self.settings_tab.bg_color)
|
self.settingsTab.bg_color)
|
||||||
|
|
||||||
def getDisplayHtml(self):
|
def getDisplayHtml(self):
|
||||||
"""
|
"""
|
||||||
@ -215,7 +215,7 @@ class AlertsPlugin(Plugin):
|
|||||||
``frame``
|
``frame``
|
||||||
The Web frame holding the page.
|
The Web frame holding the page.
|
||||||
"""
|
"""
|
||||||
align = VerticalType.Names[self.settings_tab.location]
|
align = VerticalType.Names[self.settingsTab.location]
|
||||||
frame.evaluateJavaScript(u'update_css("%s", "%s", "%s", "%s", "%s")' %
|
frame.evaluateJavaScript(u'update_css("%s", "%s", "%s", "%s", "%s")' %
|
||||||
(align, self.settings_tab.font_face, self.settings_tab.font_size,
|
(align, self.settingsTab.font_face, self.settingsTab.font_size,
|
||||||
self.settings_tab.font_color, self.settings_tab.bg_color))
|
self.settingsTab.font_color, self.settingsTab.bg_color))
|
||||||
|
@ -43,7 +43,7 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog):
|
|||||||
self.manager = plugin.manager
|
self.manager = plugin.manager
|
||||||
self.plugin = plugin
|
self.plugin = plugin
|
||||||
self.item_id = None
|
self.item_id = None
|
||||||
QtGui.QDialog.__init__(self, plugin.formparent)
|
QtGui.QDialog.__init__(self, plugin.formParent)
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
QtCore.QObject.connect(self.displayButton,
|
QtCore.QObject.connect(self.displayButton,
|
||||||
QtCore.SIGNAL(u'clicked()'), self.onDisplayClicked)
|
QtCore.SIGNAL(u'clicked()'), self.onDisplayClicked)
|
||||||
|
@ -84,7 +84,7 @@ class AlertsManager(QtCore.QObject):
|
|||||||
if not self.alertList:
|
if not self.alertList:
|
||||||
return
|
return
|
||||||
text = self.alertList.pop(0)
|
text = self.alertList.pop(0)
|
||||||
alertTab = self.parent().settings_tab
|
alertTab = self.parent().settingsTab
|
||||||
self.parent().liveController.display.alert(text, alertTab.location)
|
self.parent().liveController.display.alert(text, alertTab.location)
|
||||||
# Check to see if we have a timer running.
|
# Check to see if we have a timer running.
|
||||||
if self.timer_id == 0:
|
if self.timer_id == 0:
|
||||||
@ -100,7 +100,7 @@ class AlertsManager(QtCore.QObject):
|
|||||||
"""
|
"""
|
||||||
log.debug(u'timer event')
|
log.debug(u'timer event')
|
||||||
if event.timerId() == self.timer_id:
|
if event.timerId() == self.timer_id:
|
||||||
alertTab = self.parent().settings_tab
|
alertTab = self.parent().settingsTab
|
||||||
self.parent().liveController.display.alert(u'', alertTab.location)
|
self.parent().liveController.display.alert(u'', alertTab.location)
|
||||||
self.killTimer(self.timer_id)
|
self.killTimer(self.timer_id)
|
||||||
self.timer_id = 0
|
self.timer_id = 0
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from PyQt4 import QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
from openlp.core.lib import Plugin, StringContent, build_icon, translate
|
from openlp.core.lib import Plugin, StringContent, build_icon, translate
|
||||||
from openlp.core.lib.ui import create_action, UiStrings
|
from openlp.core.lib.ui import create_action, UiStrings
|
||||||
@ -44,8 +44,8 @@ class BiblePlugin(Plugin):
|
|||||||
Plugin.__init__(self, u'bibles', plugin_helpers,
|
Plugin.__init__(self, u'bibles', plugin_helpers,
|
||||||
BibleMediaItem, BiblesTab)
|
BibleMediaItem, BiblesTab)
|
||||||
self.weight = -9
|
self.weight = -9
|
||||||
self.icon_path = u':/plugins/plugin_bibles.png'
|
self.iconPath = u':/plugins/plugin_bibles.png'
|
||||||
self.icon = build_icon(self.icon_path)
|
self.icon = build_icon(self.iconPath)
|
||||||
self.manager = None
|
self.manager = None
|
||||||
|
|
||||||
def initialise(self):
|
def initialise(self):
|
||||||
@ -81,16 +81,23 @@ class BiblePlugin(Plugin):
|
|||||||
|
|
||||||
def appStartup(self):
|
def appStartup(self):
|
||||||
"""
|
"""
|
||||||
Perform tasks on application starup
|
Perform tasks on application startup
|
||||||
"""
|
"""
|
||||||
if len(self.manager.old_bible_databases):
|
if len(self.manager.old_bible_databases):
|
||||||
if QtGui.QMessageBox.information(self.formparent,
|
if QtGui.QMessageBox.information(self.formParent,
|
||||||
translate('OpenLP', 'Information'), translate('OpenLP',
|
translate('OpenLP', 'Information'), translate('OpenLP',
|
||||||
'Bible format has changed.\nYou have to upgrade your '
|
'Bible format has changed.\nYou have to upgrade your '
|
||||||
'existing Bibles.\nShould OpenLP upgrade now?'),
|
'existing Bibles.\nShould OpenLP upgrade now?'),
|
||||||
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
|
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
|
||||||
QtGui.QMessageBox.No)) == QtGui.QMessageBox.Yes:
|
QtGui.QMessageBox.No)) == QtGui.QMessageBox.Yes:
|
||||||
self.onToolsUpgradeItemTriggered()
|
self.onToolsUpgradeItemTriggered()
|
||||||
|
settings = QtCore.QSettings()
|
||||||
|
settings.beginGroup(self.settingsSection)
|
||||||
|
if settings.contains(u'bookname language'):
|
||||||
|
settings.setValue(u'book name language', settings.value(
|
||||||
|
u'bookname language', QtCore.QVariant(0)).toInt()[0])
|
||||||
|
settings.remove(u'bookname language')
|
||||||
|
settings.endGroup()
|
||||||
|
|
||||||
def addImportMenuItem(self, import_menu):
|
def addImportMenuItem(self, import_menu):
|
||||||
self.importBibleItem = create_action(import_menu, u'importBibleItem',
|
self.importBibleItem = create_action(import_menu, u'importBibleItem',
|
||||||
@ -126,7 +133,7 @@ class BiblePlugin(Plugin):
|
|||||||
Upgrade older bible databases.
|
Upgrade older bible databases.
|
||||||
"""
|
"""
|
||||||
if not hasattr(self, u'upgrade_wizard'):
|
if not hasattr(self, u'upgrade_wizard'):
|
||||||
self.upgrade_wizard = BibleUpgradeForm(self.formparent,
|
self.upgrade_wizard = BibleUpgradeForm(self.formParent,
|
||||||
self.manager, self)
|
self.manager, self)
|
||||||
# If the import was not cancelled then reload.
|
# If the import was not cancelled then reload.
|
||||||
if self.upgrade_wizard.exec_():
|
if self.upgrade_wizard.exec_():
|
||||||
@ -145,11 +152,10 @@ class BiblePlugin(Plugin):
|
|||||||
def usesTheme(self, theme):
|
def usesTheme(self, theme):
|
||||||
"""
|
"""
|
||||||
Called to find out if the bible plugin is currently using a theme.
|
Called to find out if the bible plugin is currently using a theme.
|
||||||
Returns True if the theme is being used, otherwise returns False.
|
Returns ``True`` if the theme is being used, otherwise returns
|
||||||
|
``False``.
|
||||||
"""
|
"""
|
||||||
if unicode(self.settings_tab.bible_theme) == theme:
|
return unicode(self.settingsTab.bible_theme) == theme
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def renameTheme(self, oldTheme, newTheme):
|
def renameTheme(self, oldTheme, newTheme):
|
||||||
"""
|
"""
|
||||||
@ -163,8 +169,8 @@ class BiblePlugin(Plugin):
|
|||||||
``newTheme``
|
``newTheme``
|
||||||
The new name the plugin should now use.
|
The new name the plugin should now use.
|
||||||
"""
|
"""
|
||||||
self.settings_tab.bible_theme = newTheme
|
self.settingsTab.bible_theme = newTheme
|
||||||
self.settings_tab.save()
|
self.settingsTab.save()
|
||||||
|
|
||||||
def setPluginTextStrings(self):
|
def setPluginTextStrings(self):
|
||||||
"""
|
"""
|
||||||
|
@ -55,6 +55,7 @@ from booknameform import BookNameForm
|
|||||||
from languageform import LanguageForm
|
from languageform import LanguageForm
|
||||||
from bibleimportform import BibleImportForm
|
from bibleimportform import BibleImportForm
|
||||||
from bibleupgradeform import BibleUpgradeForm
|
from bibleupgradeform import BibleUpgradeForm
|
||||||
|
from editbibleform import EditBibleForm
|
||||||
|
|
||||||
__all__ = [u'BookNameForm', u'LanguageForm', u'BibleImportForm',
|
__all__ = [u'BookNameForm', u'LanguageForm', u'BibleImportForm',
|
||||||
u'BibleUpgradeForm']
|
u'BibleUpgradeForm', u'EditBibleForm']
|
||||||
|
@ -29,7 +29,6 @@ The bible import functions for OpenLP
|
|||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import os.path
|
|
||||||
import locale
|
import locale
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
@ -371,7 +371,7 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
"""
|
"""
|
||||||
Perform the actual upgrade.
|
Perform the actual upgrade.
|
||||||
"""
|
"""
|
||||||
self.include_webbible = False
|
self.includeWebBible = False
|
||||||
proxy_server = None
|
proxy_server = None
|
||||||
if not self.files:
|
if not self.files:
|
||||||
self.progressLabel.setText(
|
self.progressLabel.setText(
|
||||||
@ -383,14 +383,14 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
for number, file in enumerate(self.files):
|
for number, file in enumerate(self.files):
|
||||||
if self.checkBox[number].checkState() == QtCore.Qt.Checked:
|
if self.checkBox[number].checkState() == QtCore.Qt.Checked:
|
||||||
max_bibles += 1
|
max_bibles += 1
|
||||||
oldBible = None
|
old_bible = None
|
||||||
for number, filename in enumerate(self.files):
|
for number, filename in enumerate(self.files):
|
||||||
# Close the previous bible's connection.
|
# Close the previous bible's connection.
|
||||||
if oldBible is not None:
|
if old_bible is not None:
|
||||||
oldBible.close_connection()
|
old_bible.close_connection()
|
||||||
# Set to None to make obvious that we have already closed the
|
# Set to None to make obvious that we have already closed the
|
||||||
# database.
|
# database.
|
||||||
oldBible = None
|
old_bible = None
|
||||||
if self.stop_import_flag:
|
if self.stop_import_flag:
|
||||||
self.success[number] = False
|
self.success[number] = False
|
||||||
break
|
break
|
||||||
@ -398,7 +398,7 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
self.success[number] = False
|
self.success[number] = False
|
||||||
continue
|
continue
|
||||||
self.progressBar.reset()
|
self.progressBar.reset()
|
||||||
oldBible = OldBibleDB(self.mediaItem, path=self.temp_dir,
|
old_bible = OldBibleDB(self.mediaItem, path=self.temp_dir,
|
||||||
file=filename[0])
|
file=filename[0])
|
||||||
name = filename[1]
|
name = filename[1]
|
||||||
self.progressLabel.setText(unicode(translate(
|
self.progressLabel.setText(unicode(translate(
|
||||||
@ -408,33 +408,39 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
self.newbibles[number] = BibleDB(self.mediaItem, path=self.path,
|
self.newbibles[number] = BibleDB(self.mediaItem, path=self.path,
|
||||||
name=name, file=filename[0])
|
name=name, file=filename[0])
|
||||||
self.newbibles[number].register(self.plugin.upgrade_wizard)
|
self.newbibles[number].register(self.plugin.upgrade_wizard)
|
||||||
metadata = oldBible.get_metadata()
|
metadata = old_bible.get_metadata()
|
||||||
webbible = False
|
web_bible = False
|
||||||
meta_data = {}
|
meta_data = {}
|
||||||
for meta in metadata:
|
for meta in metadata:
|
||||||
|
# Upgrade the names of the metadata keys
|
||||||
|
if meta[u'key'] == u'Version':
|
||||||
|
meta[u'key'] = u'name'
|
||||||
|
if meta[u'key'] == u'Bookname language':
|
||||||
|
meta[u'key'] = 'book_name_language'
|
||||||
|
meta[u'key'] = meta[u'key'].lower().replace(' ', '_')
|
||||||
|
# Copy the metadata
|
||||||
meta_data[meta[u'key']] = meta[u'value']
|
meta_data[meta[u'key']] = meta[u'value']
|
||||||
if not meta[u'key'] == u'Version' and not meta[u'key'] == \
|
if meta[u'key'] != u'name' and meta[u'key'] != u'dbversion':
|
||||||
u'dbversion':
|
self.newbibles[number].save_meta(meta[u'key'],
|
||||||
self.newbibles[number].create_meta(meta[u'key'],
|
|
||||||
meta[u'value'])
|
meta[u'value'])
|
||||||
if meta[u'key'] == u'download source':
|
if meta[u'key'] == u'download_source':
|
||||||
webbible = True
|
web_bible = True
|
||||||
self.include_webbible = True
|
self.includeWebBible = True
|
||||||
if meta.has_key(u'proxy server'):
|
if meta.has_key(u'proxy_server'):
|
||||||
proxy_server = meta[u'proxy server']
|
proxy_server = meta[u'proxy_server']
|
||||||
if webbible:
|
if web_bible:
|
||||||
if meta_data[u'download source'].lower() == u'crosswalk':
|
if meta_data[u'download_source'].lower() == u'crosswalk':
|
||||||
handler = CWExtract(proxy_server)
|
handler = CWExtract(proxy_server)
|
||||||
elif meta_data[u'download source'].lower() == u'biblegateway':
|
elif meta_data[u'download_source'].lower() == u'biblegateway':
|
||||||
handler = BGExtract(proxy_server)
|
handler = BGExtract(proxy_server)
|
||||||
elif meta_data[u'download source'].lower() == u'bibleserver':
|
elif meta_data[u'download_source'].lower() == u'bibleserver':
|
||||||
handler = BSExtract(proxy_server)
|
handler = BSExtract(proxy_server)
|
||||||
books = handler.get_books_from_http(meta_data[u'download name'])
|
books = handler.get_books_from_http(meta_data[u'download_name'])
|
||||||
if not books:
|
if not books:
|
||||||
log.error(u'Upgrading books from %s - download '\
|
log.error(u'Upgrading books from %s - download '\
|
||||||
u'name: "%s" failed' % (
|
u'name: "%s" failed' % (
|
||||||
meta_data[u'download source'],
|
meta_data[u'download_source'],
|
||||||
meta_data[u'download name']))
|
meta_data[u'download_name']))
|
||||||
self.newbibles[number].session.close()
|
self.newbibles[number].session.close()
|
||||||
del self.newbibles[number]
|
del self.newbibles[number]
|
||||||
critical_error_message_box(
|
critical_error_message_box(
|
||||||
@ -451,11 +457,11 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
self.success[number] = False
|
self.success[number] = False
|
||||||
continue
|
continue
|
||||||
bible = BiblesResourcesDB.get_webbible(
|
bible = BiblesResourcesDB.get_webbible(
|
||||||
meta_data[u'download name'],
|
meta_data[u'download_name'],
|
||||||
meta_data[u'download source'].lower())
|
meta_data[u'download_source'].lower())
|
||||||
if bible and bible[u'language_id']:
|
if bible and bible[u'language_id']:
|
||||||
language_id = bible[u'language_id']
|
language_id = bible[u'language_id']
|
||||||
self.newbibles[number].create_meta(u'language_id',
|
self.newbibles[number].save_meta(u'language_id',
|
||||||
language_id)
|
language_id)
|
||||||
else:
|
else:
|
||||||
language_id = self.newbibles[number].get_language(name)
|
language_id = self.newbibles[number].get_language(name)
|
||||||
@ -485,8 +491,8 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
if not book_ref_id:
|
if not book_ref_id:
|
||||||
log.warn(u'Upgrading books from %s - download '\
|
log.warn(u'Upgrading books from %s - download '\
|
||||||
u'name: "%s" aborted by user' % (
|
u'name: "%s" aborted by user' % (
|
||||||
meta_data[u'download source'],
|
meta_data[u'download_source'],
|
||||||
meta_data[u'download name']))
|
meta_data[u'download_name']))
|
||||||
self.newbibles[number].session.close()
|
self.newbibles[number].session.close()
|
||||||
del self.newbibles[number]
|
del self.newbibles[number]
|
||||||
self.success[number] = False
|
self.success[number] = False
|
||||||
@ -495,9 +501,9 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
db_book = self.newbibles[number].create_book(book,
|
db_book = self.newbibles[number].create_book(book,
|
||||||
book_ref_id, book_details[u'testament_id'])
|
book_ref_id, book_details[u'testament_id'])
|
||||||
# Try to import already downloaded verses.
|
# Try to import already downloaded verses.
|
||||||
oldbook = oldBible.get_book(book)
|
oldbook = old_bible.get_book(book)
|
||||||
if oldbook:
|
if oldbook:
|
||||||
verses = oldBible.get_verses(oldbook[u'id'])
|
verses = old_bible.get_verses(oldbook[u'id'])
|
||||||
if not verses:
|
if not verses:
|
||||||
log.warn(u'No verses found to import for book '
|
log.warn(u'No verses found to import for book '
|
||||||
u'"%s"', book)
|
u'"%s"', book)
|
||||||
@ -527,7 +533,7 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
self.progressBar.maximum() - self.progressBar.value())
|
self.progressBar.maximum() - self.progressBar.value())
|
||||||
self.success[number] = False
|
self.success[number] = False
|
||||||
continue
|
continue
|
||||||
books = oldBible.get_books()
|
books = old_bible.get_books()
|
||||||
self.progressBar.setMaximum(len(books))
|
self.progressBar.setMaximum(len(books))
|
||||||
for book in books:
|
for book in books:
|
||||||
if self.stop_import_flag:
|
if self.stop_import_flag:
|
||||||
@ -551,7 +557,7 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)
|
book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)
|
||||||
db_book = self.newbibles[number].create_book(book[u'name'],
|
db_book = self.newbibles[number].create_book(book[u'name'],
|
||||||
book_ref_id, book_details[u'testament_id'])
|
book_ref_id, book_details[u'testament_id'])
|
||||||
verses = oldBible.get_verses(book[u'id'])
|
verses = old_bible.get_verses(book[u'id'])
|
||||||
if not verses:
|
if not verses:
|
||||||
log.warn(u'No verses found to import for book '
|
log.warn(u'No verses found to import for book '
|
||||||
u'"%s"', book[u'name'])
|
u'"%s"', book[u'name'])
|
||||||
@ -574,7 +580,7 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
self.progressBar.maximum() - self.progressBar.value())
|
self.progressBar.maximum() - self.progressBar.value())
|
||||||
else:
|
else:
|
||||||
self.success[number] = True
|
self.success[number] = True
|
||||||
self.newbibles[number].create_meta(u'Version', name)
|
self.newbibles[number].save_meta(u'name', name)
|
||||||
self.incrementProgressBar(unicode(translate(
|
self.incrementProgressBar(unicode(translate(
|
||||||
'BiblesPlugin.UpgradeWizardForm',
|
'BiblesPlugin.UpgradeWizardForm',
|
||||||
'Upgrading Bible %s of %s: "%s"\n'
|
'Upgrading Bible %s of %s: "%s"\n'
|
||||||
@ -583,8 +589,8 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
if self.newbibles.has_key(number):
|
if self.newbibles.has_key(number):
|
||||||
self.newbibles[number].session.close()
|
self.newbibles[number].session.close()
|
||||||
# Close the last bible's connection if possible.
|
# Close the last bible's connection if possible.
|
||||||
if oldBible is not None:
|
if old_bible is not None:
|
||||||
oldBible.close_connection()
|
old_bible.close_connection()
|
||||||
|
|
||||||
def postWizard(self):
|
def postWizard(self):
|
||||||
"""
|
"""
|
||||||
@ -608,7 +614,7 @@ class BibleUpgradeForm(OpenLPWizard):
|
|||||||
else:
|
else:
|
||||||
failed_import_text = u''
|
failed_import_text = u''
|
||||||
if successful_import > 0:
|
if successful_import > 0:
|
||||||
if self.include_webbible:
|
if self.includeWebBible:
|
||||||
self.progressLabel.setText(unicode(
|
self.progressLabel.setText(unicode(
|
||||||
translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading '
|
translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading '
|
||||||
'Bible(s): %s successful%s\nPlease note that verses from '
|
'Bible(s): %s successful%s\nPlease note that verses from '
|
||||||
|
@ -90,7 +90,7 @@ class Ui_BookNameDialog(object):
|
|||||||
'Select Book Name'))
|
'Select Book Name'))
|
||||||
self.infoLabel.setText(translate('BiblesPlugin.BookNameDialog',
|
self.infoLabel.setText(translate('BiblesPlugin.BookNameDialog',
|
||||||
'The following book name cannot be matched up internally. Please '
|
'The following book name cannot be matched up internally. Please '
|
||||||
'select the corresponding English name from the list.'))
|
'select the corresponding name from the list.'))
|
||||||
self.currentLabel.setText(translate('BiblesPlugin.BookNameDialog',
|
self.currentLabel.setText(translate('BiblesPlugin.BookNameDialog',
|
||||||
'Current name:'))
|
'Current name:'))
|
||||||
self.correspondingLabel.setText(translate(
|
self.correspondingLabel.setText(translate(
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
Module implementing BookNameForm.
|
Module implementing BookNameForm.
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
import re
|
||||||
|
|
||||||
from PyQt4.QtGui import QDialog
|
from PyQt4.QtGui import QDialog
|
||||||
from PyQt4 import QtCore
|
from PyQt4 import QtCore
|
||||||
@ -36,6 +37,7 @@ from openlp.core.lib import translate
|
|||||||
from openlp.core.lib.ui import critical_error_message_box
|
from openlp.core.lib.ui import critical_error_message_box
|
||||||
from openlp.plugins.bibles.forms.booknamedialog import \
|
from openlp.plugins.bibles.forms.booknamedialog import \
|
||||||
Ui_BookNameDialog
|
Ui_BookNameDialog
|
||||||
|
from openlp.plugins.bibles.lib import BibleStrings
|
||||||
from openlp.plugins.bibles.lib.db import BiblesResourcesDB
|
from openlp.plugins.bibles.lib.db import BiblesResourcesDB
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -54,6 +56,8 @@ class BookNameForm(QDialog, Ui_BookNameDialog):
|
|||||||
QDialog.__init__(self, parent)
|
QDialog.__init__(self, parent)
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.customSignals()
|
self.customSignals()
|
||||||
|
self.book_names = BibleStrings().BookNames
|
||||||
|
self.book_id = False
|
||||||
|
|
||||||
def customSignals(self):
|
def customSignals(self):
|
||||||
"""
|
"""
|
||||||
@ -97,7 +101,8 @@ class BookNameForm(QDialog, Ui_BookNameDialog):
|
|||||||
and item[u'testament_id'] == 3:
|
and item[u'testament_id'] == 3:
|
||||||
addBook = False
|
addBook = False
|
||||||
if addBook:
|
if addBook:
|
||||||
self.correspondingComboBox.addItem(item[u'name'])
|
self.correspondingComboBox.addItem(
|
||||||
|
self.book_names[item[u'abbreviation']])
|
||||||
|
|
||||||
def exec_(self, name, books, maxbooks):
|
def exec_(self, name, books, maxbooks):
|
||||||
self.books = books
|
self.books = books
|
||||||
@ -120,4 +125,13 @@ class BookNameForm(QDialog, Ui_BookNameDialog):
|
|||||||
self.correspondingComboBox.setFocus()
|
self.correspondingComboBox.setFocus()
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
|
cor_book = unicode(self.correspondingComboBox.currentText())
|
||||||
|
for character in u'\\.^$*+?{}[]()':
|
||||||
|
cor_book = cor_book.replace(character, u'\\' + character)
|
||||||
|
books = filter(lambda key:
|
||||||
|
re.match(cor_book, unicode(self.book_names[key]), re.UNICODE),
|
||||||
|
self.book_names.keys())
|
||||||
|
books = filter(None, map(BiblesResourcesDB.get_book, books))
|
||||||
|
if books:
|
||||||
|
self.book_id = books[0][u'id']
|
||||||
return QDialog.accept(self)
|
return QDialog.accept(self)
|
||||||
|
181
openlp/plugins/bibles/forms/editbibledialog.py
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2012 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan #
|
||||||
|
# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, #
|
||||||
|
# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias #
|
||||||
|
# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
|
||||||
|
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# This program is free software; you can redistribute it and/or modify it #
|
||||||
|
# under the terms of the GNU General Public License as published by the Free #
|
||||||
|
# Software Foundation; version 2 of the License. #
|
||||||
|
# #
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||||
|
# more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License along #
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||||
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
|
from openlp.core.lib import build_icon, translate
|
||||||
|
from openlp.core.lib.ui import create_button_box
|
||||||
|
from openlp.plugins.bibles.lib import LanguageSelection, BibleStrings
|
||||||
|
from openlp.plugins.bibles.lib.db import BiblesResourcesDB
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_EditBibleDialog(object):
|
||||||
|
def setupUi(self, editBibleDialog):
|
||||||
|
editBibleDialog.setObjectName(u'editBibleDialog')
|
||||||
|
editBibleDialog.resize(520, 400)
|
||||||
|
editBibleDialog.setWindowIcon(
|
||||||
|
build_icon(u':/icon/openlp-logo-16x16.png'))
|
||||||
|
editBibleDialog.setModal(True)
|
||||||
|
self.dialogLayout = QtGui.QVBoxLayout(editBibleDialog)
|
||||||
|
self.dialogLayout.setSpacing(8)
|
||||||
|
self.dialogLayout.setContentsMargins(8, 8, 8, 8)
|
||||||
|
self.dialogLayout.setObjectName(u'dialogLayout')
|
||||||
|
self.bibleTabWidget = QtGui.QTabWidget(editBibleDialog)
|
||||||
|
self.bibleTabWidget.setObjectName(u'BibleTabWidget')
|
||||||
|
# Meta tab
|
||||||
|
self.metaTab = QtGui.QWidget()
|
||||||
|
self.metaTab.setObjectName(u'metaTab')
|
||||||
|
self.metaTabLayout = QtGui.QVBoxLayout(self.metaTab)
|
||||||
|
self.metaTabLayout.setObjectName(u'metaTabLayout')
|
||||||
|
self.licenseDetailsGroupBox = QtGui.QGroupBox(self.metaTab)
|
||||||
|
self.licenseDetailsGroupBox.setObjectName(u'licenseDetailsGroupBox')
|
||||||
|
self.licenseDetailsLayout = QtGui.QFormLayout(
|
||||||
|
self.licenseDetailsGroupBox)
|
||||||
|
self.licenseDetailsLayout.setObjectName(u'licenseDetailsLayout')
|
||||||
|
self.versionNameLabel = QtGui.QLabel(self.licenseDetailsGroupBox)
|
||||||
|
self.versionNameLabel.setObjectName(u'versionNameLabel')
|
||||||
|
self.versionNameEdit = QtGui.QLineEdit(self.licenseDetailsGroupBox)
|
||||||
|
self.versionNameEdit.setObjectName(u'versionNameEdit')
|
||||||
|
self.versionNameLabel.setBuddy(self.versionNameEdit)
|
||||||
|
self.licenseDetailsLayout.addRow(self.versionNameLabel,
|
||||||
|
self.versionNameEdit)
|
||||||
|
self.copyrightLabel = QtGui.QLabel(self.licenseDetailsGroupBox)
|
||||||
|
self.copyrightLabel.setObjectName(u'copyrightLabel')
|
||||||
|
self.copyrightEdit = QtGui.QLineEdit(self.licenseDetailsGroupBox)
|
||||||
|
self.copyrightEdit.setObjectName(u'copyrightEdit')
|
||||||
|
self.copyrightLabel.setBuddy(self.copyrightEdit)
|
||||||
|
self.licenseDetailsLayout.addRow(self.copyrightLabel,
|
||||||
|
self.copyrightEdit)
|
||||||
|
self.permissionsLabel = QtGui.QLabel(self.licenseDetailsGroupBox)
|
||||||
|
self.permissionsLabel.setObjectName(u'permissionsLabel')
|
||||||
|
self.permissionsEdit = QtGui.QLineEdit(self.licenseDetailsGroupBox)
|
||||||
|
self.permissionsEdit.setObjectName(u'permissionsEdit')
|
||||||
|
self.permissionsLabel.setBuddy(self.permissionsEdit)
|
||||||
|
self.licenseDetailsLayout.addRow(self.permissionsLabel,
|
||||||
|
self.permissionsEdit)
|
||||||
|
self.metaTabLayout.addWidget(self.licenseDetailsGroupBox)
|
||||||
|
self.languageSelectionGroupBox = QtGui.QGroupBox(self.metaTab)
|
||||||
|
self.languageSelectionGroupBox.setObjectName(
|
||||||
|
u'languageSelectionGroupBox')
|
||||||
|
self.languageSelectionLayout = QtGui.QVBoxLayout(
|
||||||
|
self.languageSelectionGroupBox)
|
||||||
|
self.languageSelectionLabel = QtGui.QLabel(
|
||||||
|
self.languageSelectionGroupBox)
|
||||||
|
self.languageSelectionLabel.setObjectName(u'languageSelectionLabel')
|
||||||
|
self.languageSelectionComboBox = QtGui.QComboBox(
|
||||||
|
self.languageSelectionGroupBox)
|
||||||
|
self.languageSelectionComboBox.setObjectName(
|
||||||
|
u'languageSelectionComboBox')
|
||||||
|
self.languageSelectionComboBox.addItems([u'', u'', u'', u''])
|
||||||
|
self.languageSelectionLayout.addWidget(self.languageSelectionLabel)
|
||||||
|
self.languageSelectionLayout.addWidget(self.languageSelectionComboBox)
|
||||||
|
self.metaTabLayout.addWidget(self.languageSelectionGroupBox)
|
||||||
|
self.metaTabLayout.addStretch()
|
||||||
|
self.bibleTabWidget.addTab(self.metaTab, u'')
|
||||||
|
# Book name tab
|
||||||
|
self.bookNameTab = QtGui.QWidget()
|
||||||
|
self.bookNameTab.setObjectName(u'bookNameTab')
|
||||||
|
self.bookNameTabLayout = QtGui.QVBoxLayout(self.bookNameTab)
|
||||||
|
self.bookNameTabLayout.setObjectName(u'bookNameTabLayout')
|
||||||
|
self.bookNameNotice = QtGui.QLabel(self.bookNameTab)
|
||||||
|
self.bookNameNotice.setObjectName(u'bookNameNotice')
|
||||||
|
self.bookNameNotice.setWordWrap(True)
|
||||||
|
self.bookNameTabLayout.addWidget(self.bookNameNotice)
|
||||||
|
self.scrollArea = QtGui.QScrollArea(self.bookNameTab)
|
||||||
|
self.scrollArea.setWidgetResizable(True)
|
||||||
|
self.scrollArea.setObjectName(u'scrollArea')
|
||||||
|
self.scrollArea.setHorizontalScrollBarPolicy(
|
||||||
|
QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
|
self.bookNameWidget = QtGui.QWidget(self.scrollArea)
|
||||||
|
self.bookNameWidget.setObjectName(u'bookNameWidget')
|
||||||
|
self.bookNameWidgetLayout = QtGui.QFormLayout(self.bookNameWidget)
|
||||||
|
self.bookNameWidgetLayout.setObjectName(u'bookNameWidgetLayout')
|
||||||
|
self.bookNameLabel = {}
|
||||||
|
self.bookNameEdit= {}
|
||||||
|
for book in BiblesResourcesDB.get_books():
|
||||||
|
self.bookNameLabel[book[u'abbreviation']] = QtGui.QLabel(
|
||||||
|
self.bookNameWidget)
|
||||||
|
self.bookNameLabel[book[u'abbreviation']].setObjectName(
|
||||||
|
u'bookNameLabel[%s]' % book[u'abbreviation'])
|
||||||
|
self.bookNameEdit[book[u'abbreviation']] = QtGui.QLineEdit(
|
||||||
|
self.bookNameWidget)
|
||||||
|
self.bookNameEdit[book[u'abbreviation']].setObjectName(
|
||||||
|
u'bookNameEdit[%s]' % book[u'abbreviation'])
|
||||||
|
self.bookNameWidgetLayout.addRow(
|
||||||
|
self.bookNameLabel[book[u'abbreviation']],
|
||||||
|
self.bookNameEdit[book[u'abbreviation']])
|
||||||
|
self.scrollArea.setWidget(self.bookNameWidget)
|
||||||
|
self.bookNameTabLayout.addWidget(self.scrollArea)
|
||||||
|
self.bookNameTabLayout.addStretch()
|
||||||
|
self.bibleTabWidget.addTab(self.bookNameTab, u'')
|
||||||
|
# Last few bits
|
||||||
|
self.dialogLayout.addWidget(self.bibleTabWidget)
|
||||||
|
self.buttonBox = create_button_box(editBibleDialog, u'buttonBox',
|
||||||
|
[u'cancel', u'save'])
|
||||||
|
self.dialogLayout.addWidget(self.buttonBox)
|
||||||
|
self.retranslateUi(editBibleDialog)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(editBibleDialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, editBibleDialog):
|
||||||
|
self.book_names = BibleStrings().BookNames
|
||||||
|
editBibleDialog.setWindowTitle(
|
||||||
|
translate('BiblesPlugin.EditBibleForm', 'Bible Editor'))
|
||||||
|
# Meta tab
|
||||||
|
self.bibleTabWidget.setTabText(
|
||||||
|
self.bibleTabWidget.indexOf(self.metaTab),
|
||||||
|
translate('SongsPlugin.EditBibleForm', 'Meta Data'))
|
||||||
|
self.licenseDetailsGroupBox.setTitle(
|
||||||
|
translate('BiblesPlugin.EditBibleForm', 'License Details'))
|
||||||
|
self.versionNameLabel.setText(
|
||||||
|
translate('BiblesPlugin.EditBibleForm', 'Version name:'))
|
||||||
|
self.copyrightLabel.setText(
|
||||||
|
translate('BiblesPlugin.EditBibleForm', 'Copyright:'))
|
||||||
|
self.permissionsLabel.setText(
|
||||||
|
translate('BiblesPlugin.EditBibleForm', 'Permissions:'))
|
||||||
|
self.languageSelectionGroupBox.setTitle(translate(
|
||||||
|
'BiblesPlugin.EditBibleForm', 'Default Bible Language'))
|
||||||
|
self.languageSelectionLabel.setText(
|
||||||
|
translate('BiblesPlugin.EditBibleForm',
|
||||||
|
'Book name language in search field, search results and on '
|
||||||
|
'display:'))
|
||||||
|
self.languageSelectionComboBox.setItemText(0,
|
||||||
|
translate('BiblesPlugin.EditBibleForm', 'Global Settings'))
|
||||||
|
self.languageSelectionComboBox.setItemText(LanguageSelection.Bible + 1,
|
||||||
|
translate('BiblesPlugin.EditBibleForm', 'Bible Language'))
|
||||||
|
self.languageSelectionComboBox.setItemText(
|
||||||
|
LanguageSelection.Application + 1,
|
||||||
|
translate('BiblesPlugin.EditBibleForm', 'Application Language'))
|
||||||
|
self.languageSelectionComboBox.setItemText(
|
||||||
|
LanguageSelection.English + 1,
|
||||||
|
translate('BiblesPlugin.EditBibleForm', 'English'))
|
||||||
|
# Book name tab
|
||||||
|
self.bibleTabWidget.setTabText(
|
||||||
|
self.bibleTabWidget.indexOf(self.bookNameTab),
|
||||||
|
translate('SongsPlugin.EditBibleForm', 'Custom Book Names'))
|
||||||
|
for book in BiblesResourcesDB.get_books():
|
||||||
|
self.bookNameLabel[book[u'abbreviation']].setText(
|
||||||
|
u'%s:' % unicode(self.book_names[book[u'abbreviation']]))
|
211
openlp/plugins/bibles/forms/editbibleform.py
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2012 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan #
|
||||||
|
# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, #
|
||||||
|
# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias #
|
||||||
|
# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
|
||||||
|
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# This program is free software; you can redistribute it and/or modify it #
|
||||||
|
# under the terms of the GNU General Public License as published by the Free #
|
||||||
|
# Software Foundation; version 2 of the License. #
|
||||||
|
# #
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||||
|
# more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License along #
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||||
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import re
|
||||||
|
|
||||||
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
|
from openlp.core.lib import Receiver, translate
|
||||||
|
from openlp.core.lib.ui import UiStrings, critical_error_message_box
|
||||||
|
from editbibledialog import Ui_EditBibleDialog
|
||||||
|
from openlp.plugins.bibles.lib import BibleStrings
|
||||||
|
from openlp.plugins.bibles.lib.db import BiblesResourcesDB
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog):
|
||||||
|
"""
|
||||||
|
Class to manage the editing of a bible
|
||||||
|
"""
|
||||||
|
log.info(u'%s EditBibleForm loaded', __name__)
|
||||||
|
|
||||||
|
def __init__(self, mediaitem, parent, manager):
|
||||||
|
"""
|
||||||
|
Constructor
|
||||||
|
"""
|
||||||
|
QtGui.QDialog.__init__(self, parent)
|
||||||
|
self.mediaitem = mediaitem
|
||||||
|
self.book_names = BibleStrings().BookNames
|
||||||
|
self.setupUi(self)
|
||||||
|
self.manager = manager
|
||||||
|
|
||||||
|
def loadBible(self, bible):
|
||||||
|
"""
|
||||||
|
Loads a bible.
|
||||||
|
|
||||||
|
``bible``
|
||||||
|
The name of the bible.
|
||||||
|
"""
|
||||||
|
log.debug(u'Load Bible')
|
||||||
|
self.bible = bible
|
||||||
|
self.versionNameEdit.setText(
|
||||||
|
self.manager.get_meta_data(self.bible, u'name').value)
|
||||||
|
self.copyrightEdit.setText(
|
||||||
|
self.manager.get_meta_data(self.bible, u'copyright').value)
|
||||||
|
self.permissionsEdit.setText(
|
||||||
|
self.manager.get_meta_data(self.bible, u'permissions').value)
|
||||||
|
book_name_language = self.manager.get_meta_data(self.bible,
|
||||||
|
u'book_name_language')
|
||||||
|
if book_name_language and book_name_language.value != u'None':
|
||||||
|
self.languageSelectionComboBox.setCurrentIndex(
|
||||||
|
int(book_name_language.value) + 1)
|
||||||
|
self.books = {}
|
||||||
|
self.webbible = self.manager.get_meta_data(self.bible,
|
||||||
|
u'download_source')
|
||||||
|
if self.webbible:
|
||||||
|
self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm',
|
||||||
|
'This is a Web Download Bible.\nIt is not possible to '
|
||||||
|
'customize the Book Names.'))
|
||||||
|
self.scrollArea.hide()
|
||||||
|
else:
|
||||||
|
self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm',
|
||||||
|
'To use the customized book names, "Bible language" must be '
|
||||||
|
'selected on the Meta Data tab or, if "Global settings" is '
|
||||||
|
'selected, on the Bible page in Configure OpenLP.'))
|
||||||
|
for book in BiblesResourcesDB.get_books():
|
||||||
|
self.books[book[u'abbreviation']] = self.manager.get_book_by_id(
|
||||||
|
self.bible, book[u'id'])
|
||||||
|
if self.books[book[u'abbreviation']] and not self.webbible:
|
||||||
|
self.bookNameEdit[book[u'abbreviation']].setText(
|
||||||
|
self.books[book[u'abbreviation']].name)
|
||||||
|
else:
|
||||||
|
# It is nessecary to remove the Widget otherwise there still
|
||||||
|
# exists the vertical spacing in QFormLayout
|
||||||
|
self.bookNameWidgetLayout.removeWidget(
|
||||||
|
self.bookNameLabel[book[u'abbreviation']])
|
||||||
|
self.bookNameLabel[book[u'abbreviation']].hide()
|
||||||
|
self.bookNameWidgetLayout.removeWidget(
|
||||||
|
self.bookNameEdit[book[u'abbreviation']])
|
||||||
|
self.bookNameEdit[book[u'abbreviation']].hide()
|
||||||
|
|
||||||
|
def reject(self):
|
||||||
|
"""
|
||||||
|
Exit Dialog and do not save
|
||||||
|
"""
|
||||||
|
log.debug(u'BibleEditForm.reject')
|
||||||
|
self.bible = None
|
||||||
|
QtGui.QDialog.reject(self)
|
||||||
|
|
||||||
|
def accept(self):
|
||||||
|
"""
|
||||||
|
Exit Dialog and save data
|
||||||
|
"""
|
||||||
|
log.debug(u'BibleEditForm.accept')
|
||||||
|
version = unicode(self.versionNameEdit.text())
|
||||||
|
copyright = unicode(self.copyrightEdit.text())
|
||||||
|
permissions = unicode(self.permissionsEdit.text())
|
||||||
|
book_name_language = self.languageSelectionComboBox.currentIndex() - 1
|
||||||
|
if book_name_language == -1:
|
||||||
|
book_name_language = None
|
||||||
|
if not self.validateMeta(version, copyright):
|
||||||
|
return
|
||||||
|
if not self.webbible:
|
||||||
|
custom_names = {}
|
||||||
|
for abbr, book in self.books.iteritems():
|
||||||
|
if book:
|
||||||
|
custom_names[abbr] = unicode(self.bookNameEdit[abbr].text())
|
||||||
|
if book.name != custom_names[abbr]:
|
||||||
|
if not self.validateBook(custom_names[abbr], abbr):
|
||||||
|
return
|
||||||
|
Receiver.send_message(u'openlp_process_events')
|
||||||
|
Receiver.send_message(u'cursor_busy')
|
||||||
|
self.manager.save_meta_data(self.bible, version, copyright, permissions,
|
||||||
|
book_name_language)
|
||||||
|
if not self.webbible:
|
||||||
|
for abbr, book in self.books.iteritems():
|
||||||
|
if book:
|
||||||
|
if book.name != custom_names[abbr]:
|
||||||
|
book.name = custom_names[abbr]
|
||||||
|
self.manager.update_book(self.bible, book)
|
||||||
|
self.bible = None
|
||||||
|
Receiver.send_message(u'cursor_normal')
|
||||||
|
QtGui.QDialog.accept(self)
|
||||||
|
|
||||||
|
def validateMeta(self, name, copyright):
|
||||||
|
"""
|
||||||
|
Validate the Meta before saving.
|
||||||
|
"""
|
||||||
|
if not name:
|
||||||
|
self.versionNameEdit.setFocus()
|
||||||
|
critical_error_message_box(UiStrings().EmptyField,
|
||||||
|
translate('BiblesPlugin.BibleEditForm',
|
||||||
|
'You need to specify a version name for your Bible.'))
|
||||||
|
return False
|
||||||
|
elif not copyright:
|
||||||
|
self.copyrightEdit.setFocus()
|
||||||
|
critical_error_message_box(UiStrings().EmptyField,
|
||||||
|
translate('BiblesPlugin.BibleEditForm',
|
||||||
|
'You need to set a copyright for your Bible. '
|
||||||
|
'Bibles in the Public Domain need to be marked as such.'))
|
||||||
|
return False
|
||||||
|
elif self.manager.exists(name) and \
|
||||||
|
self.manager.get_meta_data(self.bible, u'name').value != \
|
||||||
|
name:
|
||||||
|
self.versionNameEdit.setFocus()
|
||||||
|
critical_error_message_box(
|
||||||
|
translate('BiblesPlugin.BibleEditForm', 'Bible Exists'),
|
||||||
|
translate('BiblesPlugin.BibleEditForm',
|
||||||
|
'This Bible already exists. Please import '
|
||||||
|
'a different Bible or first delete the existing one.'))
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def validateBook(self, new_book_name, abbreviation):
|
||||||
|
"""
|
||||||
|
Validate a book.
|
||||||
|
"""
|
||||||
|
book_regex = re.compile(u'[\d]*[^\d]+$')
|
||||||
|
if not new_book_name:
|
||||||
|
self.bookNameEdit[abbreviation].setFocus()
|
||||||
|
critical_error_message_box(UiStrings().EmptyField,
|
||||||
|
unicode(translate('BiblesPlugin.BibleEditForm',
|
||||||
|
'You need to specify a book name for "%s".')) %
|
||||||
|
self.book_names[abbreviation])
|
||||||
|
return False
|
||||||
|
elif not book_regex.match(new_book_name):
|
||||||
|
self.bookNameEdit[abbreviation].setFocus()
|
||||||
|
critical_error_message_box(UiStrings().EmptyField,
|
||||||
|
unicode(translate('BiblesPlugin.BibleEditForm',
|
||||||
|
'The book name "%s" is not correct.\nNumbers can only be used '
|
||||||
|
'at the beginning and must\nbe followed by one or more '
|
||||||
|
'non-numeric characters.')) % new_book_name)
|
||||||
|
return False
|
||||||
|
for abbr, book in self.books.iteritems():
|
||||||
|
if book:
|
||||||
|
if abbr == abbreviation:
|
||||||
|
continue
|
||||||
|
if unicode(self.bookNameEdit[abbr].text()) == new_book_name:
|
||||||
|
self.bookNameEdit[abbreviation].setFocus()
|
||||||
|
critical_error_message_box(
|
||||||
|
translate('BiblesPlugin.BibleEditForm',
|
||||||
|
'Duplicate Book Name'),
|
||||||
|
unicode(translate('BiblesPlugin.BibleEditForm',
|
||||||
|
'The Book Name "%s" has been entered more than once.'))
|
||||||
|
% new_book_name)
|
||||||
|
return False
|
||||||
|
return True
|
@ -88,7 +88,7 @@ class BibleStrings(object):
|
|||||||
"""
|
"""
|
||||||
These strings should need a good reason to be retranslated elsewhere.
|
These strings should need a good reason to be retranslated elsewhere.
|
||||||
"""
|
"""
|
||||||
self.Booknames = {
|
self.BookNames = {
|
||||||
u'Gen': translate('BiblesPlugin', 'Genesis'),
|
u'Gen': translate('BiblesPlugin', 'Genesis'),
|
||||||
u'Exod': translate('BiblesPlugin', 'Exodus'),
|
u'Exod': translate('BiblesPlugin', 'Exodus'),
|
||||||
u'Lev': translate('BiblesPlugin', 'Leviticus'),
|
u'Lev': translate('BiblesPlugin', 'Leviticus'),
|
||||||
@ -355,7 +355,7 @@ def parse_reference(reference, bible, language_selection, book_ref_id=False):
|
|||||||
log.debug(u'Matched reference %s' % reference)
|
log.debug(u'Matched reference %s' % reference)
|
||||||
book = match.group(u'book')
|
book = match.group(u'book')
|
||||||
if not book_ref_id:
|
if not book_ref_id:
|
||||||
booknames = BibleStrings().Booknames
|
book_names = BibleStrings().BookNames
|
||||||
# escape reserved characters
|
# escape reserved characters
|
||||||
book_escaped = book
|
book_escaped = book
|
||||||
for character in u'\\.^$*+?{}[]()':
|
for character in u'\\.^$*+?{}[]()':
|
||||||
@ -369,7 +369,7 @@ def parse_reference(reference, bible, language_selection, book_ref_id=False):
|
|||||||
book_ref_id = db_book.book_reference_id
|
book_ref_id = db_book.book_reference_id
|
||||||
elif language_selection == LanguageSelection.Application:
|
elif language_selection == LanguageSelection.Application:
|
||||||
books = filter(lambda key:
|
books = filter(lambda key:
|
||||||
regex_book.match(unicode(booknames[key])), booknames.keys())
|
regex_book.match(unicode(book_names[key])), book_names.keys())
|
||||||
books = filter(None, map(BiblesResourcesDB.get_book, books))
|
books = filter(None, map(BiblesResourcesDB.get_book, books))
|
||||||
for value in books:
|
for value in books:
|
||||||
if bible.get_book_by_book_ref_id(value[u'id']):
|
if bible.get_book_by_book_ref_id(value[u'id']):
|
||||||
@ -386,7 +386,7 @@ def parse_reference(reference, bible, language_selection, book_ref_id=False):
|
|||||||
if bible.get_book_by_book_ref_id(value[u'id']):
|
if bible.get_book_by_book_ref_id(value[u'id']):
|
||||||
book_ref_id = value[u'id']
|
book_ref_id = value[u'id']
|
||||||
break
|
break
|
||||||
elif bible.get_book_by_book_ref_id(book_ref_id):
|
elif not bible.get_book_by_book_ref_id(book_ref_id):
|
||||||
book_ref_id = False
|
book_ref_id = False
|
||||||
ranges = match.group(u'ranges')
|
ranges = match.group(u'ranges')
|
||||||
range_list = get_reference_match(u'range_separator').split(ranges)
|
range_list = get_reference_match(u'range_separator').split(ranges)
|
||||||
|
@ -276,15 +276,16 @@ class BiblesTab(SettingsTab):
|
|||||||
'end marks may be defined.\nThey have to be separated by a '
|
'end marks may be defined.\nThey have to be separated by a '
|
||||||
'vertical bar "|".\nPlease clear this edit line to use the '
|
'vertical bar "|".\nPlease clear this edit line to use the '
|
||||||
'default value.'))
|
'default value.'))
|
||||||
self.languageSelectionGroupBox.setTitle(translate('BiblesPlugin.BiblesTab',
|
self.languageSelectionGroupBox.setTitle(translate(
|
||||||
'Default Search Field Language'))
|
'BiblesPlugin.BiblesTab', 'Default Bible Language'))
|
||||||
self.languageSelectionLabel.setText(translate('BiblesPlugin.BiblesTab',
|
self.languageSelectionLabel.setText(translate('BiblesPlugin.BiblesTab',
|
||||||
'Book name language in search field:'))
|
'Book name language in search field,\nsearch results and on '
|
||||||
|
'display:'))
|
||||||
self.languageSelectionComboBox.setItemText(LanguageSelection.Bible,
|
self.languageSelectionComboBox.setItemText(LanguageSelection.Bible,
|
||||||
translate('BiblesPlugin.BiblesTab', 'Bible language'))
|
translate('BiblesPlugin.BiblesTab', 'Bible Language'))
|
||||||
self.languageSelectionComboBox.setItemText(
|
self.languageSelectionComboBox.setItemText(
|
||||||
LanguageSelection.Application,
|
LanguageSelection.Application,
|
||||||
translate('BiblesPlugin.BiblesTab', 'Application language'))
|
translate('BiblesPlugin.BiblesTab', 'Application Language'))
|
||||||
self.languageSelectionComboBox.setItemText(LanguageSelection.English,
|
self.languageSelectionComboBox.setItemText(LanguageSelection.English,
|
||||||
translate('BiblesPlugin.BiblesTab', 'English'))
|
translate('BiblesPlugin.BiblesTab', 'English'))
|
||||||
|
|
||||||
@ -482,7 +483,7 @@ class BiblesTab(SettingsTab):
|
|||||||
self.getGreyTextPalette(False))
|
self.getGreyTextPalette(False))
|
||||||
self.endSeparatorCheckBox.setChecked(True)
|
self.endSeparatorCheckBox.setChecked(True)
|
||||||
self.language_selection = settings.value(
|
self.language_selection = settings.value(
|
||||||
u'bookname language', QtCore.QVariant(0)).toInt()[0]
|
u'book name language', QtCore.QVariant(0)).toInt()[0]
|
||||||
self.languageSelectionComboBox.setCurrentIndex(self.language_selection)
|
self.languageSelectionComboBox.setCurrentIndex(self.language_selection)
|
||||||
settings.endGroup()
|
settings.endGroup()
|
||||||
|
|
||||||
@ -495,7 +496,7 @@ class BiblesTab(SettingsTab):
|
|||||||
QtCore.QVariant(self.display_style))
|
QtCore.QVariant(self.display_style))
|
||||||
settings.setValue(u'verse layout style',
|
settings.setValue(u'verse layout style',
|
||||||
QtCore.QVariant(self.layout_style))
|
QtCore.QVariant(self.layout_style))
|
||||||
settings.setValue(u'bookname language',
|
settings.setValue(u'book name language',
|
||||||
QtCore.QVariant(self.language_selection))
|
QtCore.QVariant(self.language_selection))
|
||||||
settings.setValue(u'second bibles', QtCore.QVariant(self.second_bibles))
|
settings.setValue(u'second bibles', QtCore.QVariant(self.second_bibles))
|
||||||
settings.setValue(u'bible theme', QtCore.QVariant(self.bible_theme))
|
settings.setValue(u'bible theme', QtCore.QVariant(self.bible_theme))
|
||||||
|
@ -39,6 +39,7 @@ from openlp.core.lib import Receiver, translate
|
|||||||
from openlp.core.lib.db import BaseModel, init_db, Manager
|
from openlp.core.lib.db import BaseModel, init_db, Manager
|
||||||
from openlp.core.lib.ui import critical_error_message_box
|
from openlp.core.lib.ui import critical_error_message_box
|
||||||
from openlp.core.utils import AppLocation, clean_filename
|
from openlp.core.utils import AppLocation, clean_filename
|
||||||
|
import upgrade
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -147,7 +148,7 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
self.file = clean_filename(self.name) + u'.sqlite'
|
self.file = clean_filename(self.name) + u'.sqlite'
|
||||||
if u'file' in kwargs:
|
if u'file' in kwargs:
|
||||||
self.file = kwargs[u'file']
|
self.file = kwargs[u'file']
|
||||||
Manager.__init__(self, u'bibles', init_schema, self.file)
|
Manager.__init__(self, u'bibles', init_schema, self.file, upgrade)
|
||||||
if u'file' in kwargs:
|
if u'file' in kwargs:
|
||||||
self.get_name()
|
self.get_name()
|
||||||
if u'path' in kwargs:
|
if u'path' in kwargs:
|
||||||
@ -167,7 +168,7 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
"""
|
"""
|
||||||
Returns the version name of the Bible.
|
Returns the version name of the Bible.
|
||||||
"""
|
"""
|
||||||
version_name = self.get_object(BibleMeta, u'Version')
|
version_name = self.get_object(BibleMeta, u'name')
|
||||||
self.name = version_name.value if version_name else None
|
self.name = version_name.value if version_name else None
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
@ -182,7 +183,6 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
The actual Qt wizard form.
|
The actual Qt wizard form.
|
||||||
"""
|
"""
|
||||||
self.wizard = wizard
|
self.wizard = wizard
|
||||||
self.create_meta(u'dbversion', u'2')
|
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def create_book(self, name, bk_ref_id, testament=1):
|
def create_book(self, name, bk_ref_id, testament=1):
|
||||||
@ -205,6 +205,16 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
self.save_object(book)
|
self.save_object(book)
|
||||||
return book
|
return book
|
||||||
|
|
||||||
|
def update_book(self, book):
|
||||||
|
"""
|
||||||
|
Update a book in the database.
|
||||||
|
|
||||||
|
``book``
|
||||||
|
The book object
|
||||||
|
"""
|
||||||
|
log.debug(u'BibleDB.update_book("%s")', book.name)
|
||||||
|
return self.save_object(book)
|
||||||
|
|
||||||
def delete_book(self, db_book):
|
def delete_book(self, db_book):
|
||||||
"""
|
"""
|
||||||
Delete a book from the database.
|
Delete a book from the database.
|
||||||
@ -271,9 +281,9 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
self.session.add(verse)
|
self.session.add(verse)
|
||||||
return verse
|
return verse
|
||||||
|
|
||||||
def create_meta(self, key, value):
|
def save_meta(self, key, value):
|
||||||
"""
|
"""
|
||||||
Utility method to save BibleMeta objects in a Bible database.
|
Utility method to save or update BibleMeta objects in a Bible database.
|
||||||
|
|
||||||
``key``
|
``key``
|
||||||
The key for this instance.
|
The key for this instance.
|
||||||
@ -284,6 +294,11 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
if not isinstance(value, unicode):
|
if not isinstance(value, unicode):
|
||||||
value = unicode(value)
|
value = unicode(value)
|
||||||
log.debug(u'BibleDB.save_meta("%s/%s")', key, value)
|
log.debug(u'BibleDB.save_meta("%s/%s")', key, value)
|
||||||
|
meta = self.get_object(BibleMeta, key)
|
||||||
|
if meta:
|
||||||
|
meta.value = value
|
||||||
|
self.save_object(meta)
|
||||||
|
else:
|
||||||
self.save_object(BibleMeta.populate(key=key, value=value))
|
self.save_object(BibleMeta.populate(key=key, value=value))
|
||||||
|
|
||||||
def get_book(self, book):
|
def get_book(self, book):
|
||||||
@ -317,6 +332,7 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
def get_book_ref_id_by_name(self, book, maxbooks, language_id=None):
|
def get_book_ref_id_by_name(self, book, maxbooks, language_id=None):
|
||||||
log.debug(u'BibleDB.get_book_ref_id_by_name:("%s", "%s")', book,
|
log.debug(u'BibleDB.get_book_ref_id_by_name:("%s", "%s")', book,
|
||||||
language_id)
|
language_id)
|
||||||
|
book_id = None
|
||||||
if BiblesResourcesDB.get_book(book, True):
|
if BiblesResourcesDB.get_book(book, True):
|
||||||
book_temp = BiblesResourcesDB.get_book(book, True)
|
book_temp = BiblesResourcesDB.get_book(book, True)
|
||||||
book_id = book_temp[u'id']
|
book_id = book_temp[u'id']
|
||||||
@ -326,26 +342,13 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
book_id = AlternativeBookNamesDB.get_book_reference_id(book)
|
book_id = AlternativeBookNamesDB.get_book_reference_id(book)
|
||||||
else:
|
else:
|
||||||
from openlp.plugins.bibles.forms import BookNameForm
|
from openlp.plugins.bibles.forms import BookNameForm
|
||||||
book_ref = None
|
|
||||||
book_name = BookNameForm(self.wizard)
|
book_name = BookNameForm(self.wizard)
|
||||||
if book_name.exec_(book, self.get_books(), maxbooks):
|
if book_name.exec_(book, self.get_books(), maxbooks):
|
||||||
book_ref = unicode(
|
book_id = book_name.book_id
|
||||||
book_name.correspondingComboBox.currentText())
|
|
||||||
if not book_ref:
|
|
||||||
return None
|
|
||||||
else:
|
|
||||||
book_temp = BiblesResourcesDB.get_book(book_ref)
|
|
||||||
if book_temp:
|
|
||||||
book_id = book_temp[u'id']
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
if book_id:
|
if book_id:
|
||||||
AlternativeBookNamesDB.create_alternative_book_name(
|
AlternativeBookNamesDB.create_alternative_book_name(
|
||||||
book, book_id, language_id)
|
book, book_id, language_id)
|
||||||
if book_id:
|
|
||||||
return book_id
|
return book_id
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_verses(self, reference_list, show_error=True):
|
def get_verses(self, reference_list, show_error=True):
|
||||||
"""
|
"""
|
||||||
@ -471,7 +474,7 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
return False
|
return False
|
||||||
language = BiblesResourcesDB.get_language(language)
|
language = BiblesResourcesDB.get_language(language)
|
||||||
language_id = language[u'id']
|
language_id = language[u'id']
|
||||||
self.create_meta(u'language_id', language_id)
|
self.save_meta(u'language_id', language_id)
|
||||||
return language_id
|
return language_id
|
||||||
|
|
||||||
def is_old_database(self):
|
def is_old_database(self):
|
||||||
@ -480,7 +483,7 @@ class BibleDB(QtCore.QObject, Manager):
|
|||||||
prior to 1.9.6.
|
prior to 1.9.6.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
columns = self.session.query(Book).all()
|
self.session.query(Book).all()
|
||||||
except:
|
except:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
@ -547,16 +550,13 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
|
|||||||
log.debug(u'BiblesResourcesDB.get_books()')
|
log.debug(u'BiblesResourcesDB.get_books()')
|
||||||
books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, '
|
books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, '
|
||||||
u'abbreviation, chapters FROM book_reference ORDER BY id')
|
u'abbreviation, chapters FROM book_reference ORDER BY id')
|
||||||
return [
|
return [{
|
||||||
{
|
|
||||||
u'id': book[0],
|
u'id': book[0],
|
||||||
u'testament_id': book[1],
|
u'testament_id': book[1],
|
||||||
u'name': unicode(book[2]),
|
u'name': unicode(book[2]),
|
||||||
u'abbreviation': unicode(book[3]),
|
u'abbreviation': unicode(book[3]),
|
||||||
u'chapters': book[4]
|
u'chapters': book[4]
|
||||||
}
|
} for book in books]
|
||||||
for book in books
|
|
||||||
]
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_book(name, lower=False):
|
def get_book(name, lower=False):
|
||||||
@ -598,7 +598,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
|
|||||||
Return the books which include string.
|
Return the books which include string.
|
||||||
|
|
||||||
``string``
|
``string``
|
||||||
The string to search for in the booknames or abbreviations.
|
The string to search for in the book names or abbreviations.
|
||||||
"""
|
"""
|
||||||
log.debug(u'BiblesResourcesDB.get_book_like("%s")', string)
|
log.debug(u'BiblesResourcesDB.get_book_like("%s")', string)
|
||||||
if not isinstance(string, unicode):
|
if not isinstance(string, unicode):
|
||||||
@ -608,16 +608,13 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
|
|||||||
u'LOWER(name) LIKE ? OR LOWER(abbreviation) LIKE ?',
|
u'LOWER(name) LIKE ? OR LOWER(abbreviation) LIKE ?',
|
||||||
(u'%' + string.lower() + u'%', u'%' + string.lower() + u'%'))
|
(u'%' + string.lower() + u'%', u'%' + string.lower() + u'%'))
|
||||||
if books:
|
if books:
|
||||||
return [
|
return [{
|
||||||
{
|
|
||||||
u'id': book[0],
|
u'id': book[0],
|
||||||
u'testament_id': book[1],
|
u'testament_id': book[1],
|
||||||
u'name': unicode(book[2]),
|
u'name': unicode(book[2]),
|
||||||
u'abbreviation': unicode(book[3]),
|
u'abbreviation': unicode(book[3]),
|
||||||
u'chapters': book[4]
|
u'chapters': book[4]
|
||||||
}
|
} for book in books]
|
||||||
for book in books
|
|
||||||
]
|
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -744,16 +741,13 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
|
|||||||
u'language_id, download_source_id FROM webbibles WHERE '
|
u'language_id, download_source_id FROM webbibles WHERE '
|
||||||
u'download_source_id = ?', (source[u'id'],))
|
u'download_source_id = ?', (source[u'id'],))
|
||||||
if bibles:
|
if bibles:
|
||||||
return [
|
return [{
|
||||||
{
|
|
||||||
u'id': bible[0],
|
u'id': bible[0],
|
||||||
u'name': bible[1],
|
u'name': bible[1],
|
||||||
u'abbreviation': bible[2],
|
u'abbreviation': bible[2],
|
||||||
u'language_id': bible[3],
|
u'language_id': bible[3],
|
||||||
u'download_source_id': bible[4]
|
u'download_source_id': bible[4]
|
||||||
}
|
} for bible in bibles]
|
||||||
for bible in bibles
|
|
||||||
]
|
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -847,14 +841,11 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
|
|||||||
languages = BiblesResourcesDB.run_sql(u'SELECT id, name, code FROM '
|
languages = BiblesResourcesDB.run_sql(u'SELECT id, name, code FROM '
|
||||||
u'language ORDER by name')
|
u'language ORDER by name')
|
||||||
if languages:
|
if languages:
|
||||||
return [
|
return [{
|
||||||
{
|
|
||||||
u'id': language[0],
|
u'id': language[0],
|
||||||
u'name': unicode(language[1]),
|
u'name': unicode(language[1]),
|
||||||
u'code': unicode(language[2])
|
u'code': unicode(language[2])
|
||||||
}
|
} for language in languages]
|
||||||
for language in languages
|
|
||||||
]
|
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -1033,7 +1024,7 @@ class OldBibleDB(QtCore.QObject, Manager):
|
|||||||
Returns the version name of the Bible.
|
Returns the version name of the Bible.
|
||||||
"""
|
"""
|
||||||
version_name = self.run_sql(u'SELECT value FROM '
|
version_name = self.run_sql(u'SELECT value FROM '
|
||||||
u'metadata WHERE key = "Version"')
|
u'metadata WHERE key = "name"')
|
||||||
if version_name:
|
if version_name:
|
||||||
self.name = version_name[0][0]
|
self.name = version_name[0][0]
|
||||||
else:
|
else:
|
||||||
@ -1047,13 +1038,10 @@ class OldBibleDB(QtCore.QObject, Manager):
|
|||||||
metadata = self.run_sql(u'SELECT key, value FROM metadata '
|
metadata = self.run_sql(u'SELECT key, value FROM metadata '
|
||||||
u'ORDER BY rowid')
|
u'ORDER BY rowid')
|
||||||
if metadata:
|
if metadata:
|
||||||
return [
|
return [{
|
||||||
{
|
|
||||||
u'key': unicode(meta[0]),
|
u'key': unicode(meta[0]),
|
||||||
u'value': unicode(meta[1])
|
u'value': unicode(meta[1])
|
||||||
}
|
} for meta in metadata]
|
||||||
for meta in metadata
|
|
||||||
]
|
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -1085,13 +1073,10 @@ class OldBibleDB(QtCore.QObject, Manager):
|
|||||||
"""
|
"""
|
||||||
books = self.run_sql(u'SELECT name, id FROM book ORDER BY id')
|
books = self.run_sql(u'SELECT name, id FROM book ORDER BY id')
|
||||||
if books:
|
if books:
|
||||||
return [
|
return [{
|
||||||
{
|
|
||||||
u'name': unicode(book[0]),
|
u'name': unicode(book[0]),
|
||||||
u'id':int(book[1])
|
u'id':int(book[1])
|
||||||
}
|
} for book in books]
|
||||||
for book in books
|
|
||||||
]
|
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -1102,15 +1087,12 @@ class OldBibleDB(QtCore.QObject, Manager):
|
|||||||
verses = self.run_sql(u'SELECT book_id, chapter, verse, text FROM '
|
verses = self.run_sql(u'SELECT book_id, chapter, verse, text FROM '
|
||||||
u'verse WHERE book_id = ? ORDER BY id', (book_id, ))
|
u'verse WHERE book_id = ? ORDER BY id', (book_id, ))
|
||||||
if verses:
|
if verses:
|
||||||
return [
|
return [{
|
||||||
{
|
|
||||||
u'book_id': int(verse[0]),
|
u'book_id': int(verse[0]),
|
||||||
u'chapter': int(verse[1]),
|
u'chapter': int(verse[1]),
|
||||||
u'verse': int(verse[2]),
|
u'verse': int(verse[2]),
|
||||||
u'text': unicode(verse[3])
|
u'text': unicode(verse[3])
|
||||||
}
|
} for verse in verses]
|
||||||
for verse in verses
|
|
||||||
]
|
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -49,28 +49,28 @@ class BGExtract(object):
|
|||||||
"""
|
"""
|
||||||
Extract verses from BibleGateway
|
Extract verses from BibleGateway
|
||||||
"""
|
"""
|
||||||
def __init__(self, proxyurl=None):
|
def __init__(self, proxy_url=None):
|
||||||
log.debug(u'BGExtract.init("%s")', proxyurl)
|
log.debug(u'BGExtract.init("%s")', proxy_url)
|
||||||
self.proxyurl = proxyurl
|
self.proxy_url = proxy_url
|
||||||
socket.setdefaulttimeout(30)
|
socket.setdefaulttimeout(30)
|
||||||
|
|
||||||
def get_bible_chapter(self, version, bookname, chapter):
|
def get_bible_chapter(self, version, book_name, chapter):
|
||||||
"""
|
"""
|
||||||
Access and decode Bibles via the BibleGateway website.
|
Access and decode Bibles via the BibleGateway website.
|
||||||
|
|
||||||
``version``
|
``version``
|
||||||
The version of the Bible like 31 for New International version.
|
The version of the Bible like 31 for New International version.
|
||||||
|
|
||||||
``bookname``
|
``book_name``
|
||||||
Name of the Book.
|
Name of the Book.
|
||||||
|
|
||||||
``chapter``
|
``chapter``
|
||||||
Chapter number.
|
Chapter number.
|
||||||
"""
|
"""
|
||||||
log.debug(u'BGExtract.get_bible_chapter("%s", "%s", "%s")', version,
|
log.debug(u'BGExtract.get_bible_chapter("%s", "%s", "%s")', version,
|
||||||
bookname, chapter)
|
book_name, chapter)
|
||||||
urlbookname = urllib.quote(bookname.encode("utf-8"))
|
url_book_name = urllib.quote(book_name.encode("utf-8"))
|
||||||
url_params = u'search=%s+%s&version=%s' % (urlbookname, chapter,
|
url_params = u'search=%s+%s&version=%s' % (url_book_name, chapter,
|
||||||
version)
|
version)
|
||||||
cleaner = [(re.compile(' |<br />|\'\+\''), lambda match: '')]
|
cleaner = [(re.compile(' |<br />|\'\+\''), lambda match: '')]
|
||||||
soup = get_soup_for_bible_ref(
|
soup = get_soup_for_bible_ref(
|
||||||
@ -120,7 +120,7 @@ class BGExtract(object):
|
|||||||
clean_verse_num = int(str(raw_verse_num))
|
clean_verse_num = int(str(raw_verse_num))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
log.warn(u'Illegal verse number in %s %s %s:%s',
|
log.warn(u'Illegal verse number in %s %s %s:%s',
|
||||||
version, bookname, chapter, unicode(raw_verse_num))
|
version, book_name, chapter, unicode(raw_verse_num))
|
||||||
if clean_verse_num:
|
if clean_verse_num:
|
||||||
verse_text = raw_verse_num.next
|
verse_text = raw_verse_num.next
|
||||||
part = raw_verse_num.next.next
|
part = raw_verse_num.next.next
|
||||||
@ -138,7 +138,7 @@ class BGExtract(object):
|
|||||||
log.debug(u'No content found in the BibleGateway response.')
|
log.debug(u'No content found in the BibleGateway response.')
|
||||||
send_error_message(u'parse')
|
send_error_message(u'parse')
|
||||||
return None
|
return None
|
||||||
return SearchResults(bookname, chapter, verse_list)
|
return SearchResults(book_name, chapter, verse_list)
|
||||||
|
|
||||||
def get_books_from_http(self, version):
|
def get_books_from_http(self, version):
|
||||||
"""
|
"""
|
||||||
@ -195,30 +195,30 @@ class BSExtract(object):
|
|||||||
"""
|
"""
|
||||||
Extract verses from Bibleserver.com
|
Extract verses from Bibleserver.com
|
||||||
"""
|
"""
|
||||||
def __init__(self, proxyurl=None):
|
def __init__(self, proxy_url=None):
|
||||||
log.debug(u'BSExtract.init("%s")', proxyurl)
|
log.debug(u'BSExtract.init("%s")', proxy_url)
|
||||||
self.proxyurl = proxyurl
|
self.proxy_url = proxy_url
|
||||||
socket.setdefaulttimeout(30)
|
socket.setdefaulttimeout(30)
|
||||||
|
|
||||||
def get_bible_chapter(self, version, bookname, chapter):
|
def get_bible_chapter(self, version, book_name, chapter):
|
||||||
"""
|
"""
|
||||||
Access and decode bibles via Bibleserver mobile website
|
Access and decode bibles via Bibleserver mobile website
|
||||||
|
|
||||||
``version``
|
``version``
|
||||||
The version of the bible like NIV for New International Version
|
The version of the bible like NIV for New International Version
|
||||||
|
|
||||||
``bookname``
|
``book_name``
|
||||||
Text name of bible book e.g. Genesis, 1. John, 1John or Offenbarung
|
Text name of bible book e.g. Genesis, 1. John, 1John or Offenbarung
|
||||||
|
|
||||||
``chapter``
|
``chapter``
|
||||||
Chapter number
|
Chapter number
|
||||||
"""
|
"""
|
||||||
log.debug(u'BSExtract.get_bible_chapter("%s", "%s", "%s")', version,
|
log.debug(u'BSExtract.get_bible_chapter("%s", "%s", "%s")', version,
|
||||||
bookname, chapter)
|
book_name, chapter)
|
||||||
urlversion = urllib.quote(version.encode("utf-8"))
|
url_version = urllib.quote(version.encode("utf-8"))
|
||||||
urlbookname = urllib.quote(bookname.encode("utf-8"))
|
url_book_name = urllib.quote(book_name.encode("utf-8"))
|
||||||
chapter_url = u'http://m.bibleserver.com/text/%s/%s%d' % \
|
chapter_url = u'http://m.bibleserver.com/text/%s/%s%d' % \
|
||||||
(urlversion, urlbookname, chapter)
|
(url_version, url_book_name, chapter)
|
||||||
header = (u'Accept-Language', u'en')
|
header = (u'Accept-Language', u'en')
|
||||||
soup = get_soup_for_bible_ref(chapter_url, header)
|
soup = get_soup_for_bible_ref(chapter_url, header)
|
||||||
if not soup:
|
if not soup:
|
||||||
@ -236,7 +236,7 @@ class BSExtract(object):
|
|||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
versenumber = int(verse_number.sub(r'\3', verse[u'class']))
|
versenumber = int(verse_number.sub(r'\3', verse[u'class']))
|
||||||
verses[versenumber] = verse.contents[1].rstrip(u'\n')
|
verses[versenumber] = verse.contents[1].rstrip(u'\n')
|
||||||
return SearchResults(bookname, chapter, verses)
|
return SearchResults(book_name, chapter, verses)
|
||||||
|
|
||||||
def get_books_from_http(self, version):
|
def get_books_from_http(self, version):
|
||||||
"""
|
"""
|
||||||
@ -268,72 +268,72 @@ class CWExtract(object):
|
|||||||
"""
|
"""
|
||||||
Extract verses from CrossWalk/BibleStudyTools
|
Extract verses from CrossWalk/BibleStudyTools
|
||||||
"""
|
"""
|
||||||
def __init__(self, proxyurl=None):
|
def __init__(self, proxy_url=None):
|
||||||
log.debug(u'CWExtract.init("%s")', proxyurl)
|
log.debug(u'CWExtract.init("%s")', proxy_url)
|
||||||
self.proxyurl = proxyurl
|
self.proxy_url = proxy_url
|
||||||
socket.setdefaulttimeout(30)
|
socket.setdefaulttimeout(30)
|
||||||
|
|
||||||
def get_bible_chapter(self, version, bookname, chapter):
|
def get_bible_chapter(self, version, book_name, chapter):
|
||||||
"""
|
"""
|
||||||
Access and decode bibles via the Crosswalk website
|
Access and decode bibles via the Crosswalk website
|
||||||
|
|
||||||
``version``
|
``version``
|
||||||
The version of the Bible like niv for New International Version
|
The version of the Bible like niv for New International Version
|
||||||
|
|
||||||
``bookname``
|
``book_name``
|
||||||
Text name of in english e.g. 'gen' for Genesis
|
Text name of in english e.g. 'gen' for Genesis
|
||||||
|
|
||||||
``chapter``
|
``chapter``
|
||||||
Chapter number
|
Chapter number
|
||||||
"""
|
"""
|
||||||
log.debug(u'CWExtract.get_bible_chapter("%s", "%s", "%s")', version,
|
log.debug(u'CWExtract.get_bible_chapter("%s", "%s", "%s")', version,
|
||||||
bookname, chapter)
|
book_name, chapter)
|
||||||
urlbookname = bookname.replace(u' ', u'-')
|
url_book_name = book_name.replace(u' ', u'-')
|
||||||
urlbookname = urlbookname.lower()
|
url_book_name = url_book_name.lower()
|
||||||
urlbookname = urllib.quote(urlbookname.encode("utf-8"))
|
url_book_name = urllib.quote(url_book_name.encode("utf-8"))
|
||||||
chapter_url = u'http://www.biblestudytools.com/%s/%s/%s.html' % \
|
chapter_url = u'http://www.biblestudytools.com/%s/%s/%s.html' % \
|
||||||
(version, urlbookname, chapter)
|
(version, url_book_name, chapter)
|
||||||
soup = get_soup_for_bible_ref(chapter_url)
|
soup = get_soup_for_bible_ref(chapter_url)
|
||||||
if not soup:
|
if not soup:
|
||||||
return None
|
return None
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
htmlverses = soup.findAll(u'span', u'versetext')
|
html_verses = soup.findAll(u'span', u'versetext')
|
||||||
if not htmlverses:
|
if not html_verses:
|
||||||
log.error(u'No verses found in the CrossWalk response.')
|
log.error(u'No verses found in the CrossWalk response.')
|
||||||
send_error_message(u'parse')
|
send_error_message(u'parse')
|
||||||
return None
|
return None
|
||||||
verses = {}
|
verses = {}
|
||||||
reduce_spaces = re.compile(r'[ ]{2,}')
|
reduce_spaces = re.compile(r'[ ]{2,}')
|
||||||
fix_punctuation = re.compile(r'[ ]+([.,;])')
|
fix_punctuation = re.compile(r'[ ]+([.,;])')
|
||||||
for verse in htmlverses:
|
for verse in html_verses:
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
versenumber = int(verse.contents[0].contents[0])
|
verse_number = int(verse.contents[0].contents[0])
|
||||||
versetext = u''
|
verse_text = u''
|
||||||
for part in verse.contents:
|
for part in verse.contents:
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
if isinstance(part, NavigableString):
|
if isinstance(part, NavigableString):
|
||||||
versetext = versetext + part
|
verse_text = verse_text + part
|
||||||
elif part and part.attrMap and \
|
elif part and part.attrMap and \
|
||||||
(part.attrMap[u'class'] == u'WordsOfChrist' or \
|
(part.attrMap[u'class'] == u'WordsOfChrist' or \
|
||||||
part.attrMap[u'class'] == u'strongs'):
|
part.attrMap[u'class'] == u'strongs'):
|
||||||
for subpart in part.contents:
|
for subpart in part.contents:
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
if isinstance(subpart, NavigableString):
|
if isinstance(subpart, NavigableString):
|
||||||
versetext = versetext + subpart
|
verse_text = verse_text + subpart
|
||||||
elif subpart and subpart.attrMap and \
|
elif subpart and subpart.attrMap and \
|
||||||
subpart.attrMap[u'class'] == u'strongs':
|
subpart.attrMap[u'class'] == u'strongs':
|
||||||
for subsub in subpart.contents:
|
for subsub in subpart.contents:
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
if isinstance(subsub, NavigableString):
|
if isinstance(subsub, NavigableString):
|
||||||
versetext = versetext + subsub
|
verse_text = verse_text + subsub
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
# Fix up leading and trailing spaces, multiple spaces, and spaces
|
# Fix up leading and trailing spaces, multiple spaces, and spaces
|
||||||
# between text and , and .
|
# between text and , and .
|
||||||
versetext = versetext.strip(u'\n\r\t ')
|
verse_text = verse_text.strip(u'\n\r\t ')
|
||||||
versetext = reduce_spaces.sub(u' ', versetext)
|
verse_text = reduce_spaces.sub(u' ', verse_text)
|
||||||
versetext = fix_punctuation.sub(r'\1', versetext)
|
verse_text = fix_punctuation.sub(r'\1', verse_text)
|
||||||
verses[versenumber] = versetext
|
verses[verse_number] = verse_text
|
||||||
return SearchResults(bookname, chapter, verses)
|
return SearchResults(book_name, chapter, verses)
|
||||||
|
|
||||||
def get_books_from_http(self, version):
|
def get_books_from_http(self, version):
|
||||||
"""
|
"""
|
||||||
@ -401,16 +401,16 @@ class HTTPBible(BibleDB):
|
|||||||
self.wizard.incrementProgressBar(unicode(translate(
|
self.wizard.incrementProgressBar(unicode(translate(
|
||||||
'BiblesPlugin.HTTPBible',
|
'BiblesPlugin.HTTPBible',
|
||||||
'Registering Bible and loading books...')))
|
'Registering Bible and loading books...')))
|
||||||
self.create_meta(u'download source', self.download_source)
|
self.save_meta(u'download_source', self.download_source)
|
||||||
self.create_meta(u'download name', self.download_name)
|
self.save_meta(u'download_name', self.download_name)
|
||||||
if self.proxy_server:
|
if self.proxy_server:
|
||||||
self.create_meta(u'proxy server', self.proxy_server)
|
self.save_meta(u'proxy_server', self.proxy_server)
|
||||||
if self.proxy_username:
|
if self.proxy_username:
|
||||||
# Store the proxy userid.
|
# Store the proxy userid.
|
||||||
self.create_meta(u'proxy username', self.proxy_username)
|
self.save_meta(u'proxy_username', self.proxy_username)
|
||||||
if self.proxy_password:
|
if self.proxy_password:
|
||||||
# Store the proxy password.
|
# Store the proxy password.
|
||||||
self.create_meta(u'proxy password', self.proxy_password)
|
self.save_meta(u'proxy_password', self.proxy_password)
|
||||||
if self.download_source.lower() == u'crosswalk':
|
if self.download_source.lower() == u'crosswalk':
|
||||||
handler = CWExtract(self.proxy_server)
|
handler = CWExtract(self.proxy_server)
|
||||||
elif self.download_source.lower() == u'biblegateway':
|
elif self.download_source.lower() == u'biblegateway':
|
||||||
@ -429,7 +429,7 @@ class HTTPBible(BibleDB):
|
|||||||
self.download_source.lower())
|
self.download_source.lower())
|
||||||
if bible[u'language_id']:
|
if bible[u'language_id']:
|
||||||
language_id = bible[u'language_id']
|
language_id = bible[u'language_id']
|
||||||
self.create_meta(u'language_id', language_id)
|
self.save_meta(u'language_id', language_id)
|
||||||
else:
|
else:
|
||||||
language_id = self.get_language(bible_name)
|
language_id = self.get_language(bible_name)
|
||||||
if not language_id:
|
if not language_id:
|
||||||
@ -499,10 +499,10 @@ class HTTPBible(BibleDB):
|
|||||||
## if it was there. By reusing the returned book name
|
## if it was there. By reusing the returned book name
|
||||||
## we get a correct book. For example it is possible
|
## we get a correct book. For example it is possible
|
||||||
## to request ac and get Acts back.
|
## to request ac and get Acts back.
|
||||||
bookname = search_results.book
|
book_name = search_results.book
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
# Check to see if book/chapter exists.
|
# Check to see if book/chapter exists.
|
||||||
db_book = self.get_book(bookname)
|
db_book = self.get_book(book_name)
|
||||||
self.create_chapter(db_book.id, search_results.chapter,
|
self.create_chapter(db_book.id, search_results.chapter,
|
||||||
search_results.verselist)
|
search_results.verselist)
|
||||||
Receiver.send_message(u'openlp_process_events')
|
Receiver.send_message(u'openlp_process_events')
|
||||||
|
@ -31,7 +31,6 @@ import os
|
|||||||
from PyQt4 import QtCore
|
from PyQt4 import QtCore
|
||||||
|
|
||||||
from openlp.core.lib import Receiver, SettingsManager, translate
|
from openlp.core.lib import Receiver, SettingsManager, translate
|
||||||
from openlp.core.lib.ui import critical_error_message_box
|
|
||||||
from openlp.core.utils import AppLocation, delete_file
|
from openlp.core.utils import AppLocation, delete_file
|
||||||
from openlp.plugins.bibles.lib import parse_reference, \
|
from openlp.plugins.bibles.lib import parse_reference, \
|
||||||
get_reference_separator, LanguageSelection
|
get_reference_separator, LanguageSelection
|
||||||
@ -141,7 +140,8 @@ class BibleManager(object):
|
|||||||
BibleDB class.
|
BibleDB class.
|
||||||
"""
|
"""
|
||||||
log.debug(u'Reload bibles')
|
log.debug(u'Reload bibles')
|
||||||
files = SettingsManager.get_files(self.settingsSection, self.suffix)
|
files = SettingsManager.get_files(self.settingsSection,
|
||||||
|
self.suffix)
|
||||||
if u'alternative_book_names.sqlite' in files:
|
if u'alternative_book_names.sqlite' in files:
|
||||||
files.remove(u'alternative_book_names.sqlite')
|
files.remove(u'alternative_book_names.sqlite')
|
||||||
log.debug(u'Bible Files %s', files)
|
log.debug(u'Bible Files %s', files)
|
||||||
@ -164,12 +164,12 @@ class BibleManager(object):
|
|||||||
self.db_cache[name] = bible
|
self.db_cache[name] = bible
|
||||||
# Look to see if lazy load bible exists and get create getter.
|
# Look to see if lazy load bible exists and get create getter.
|
||||||
source = self.db_cache[name].get_object(BibleMeta,
|
source = self.db_cache[name].get_object(BibleMeta,
|
||||||
u'download source')
|
u'download_source')
|
||||||
if source:
|
if source:
|
||||||
download_name = self.db_cache[name].get_object(BibleMeta,
|
download_name = self.db_cache[name].get_object(BibleMeta,
|
||||||
u'download name').value
|
u'download_name').value
|
||||||
meta_proxy = self.db_cache[name].get_object(BibleMeta,
|
meta_proxy = self.db_cache[name].get_object(BibleMeta,
|
||||||
u'proxy url')
|
u'proxy_server')
|
||||||
web_bible = HTTPBible(self.parent, path=self.path,
|
web_bible = HTTPBible(self.parent, path=self.path,
|
||||||
file=filename, download_source=source.value,
|
file=filename, download_source=source.value,
|
||||||
download_name=download_name)
|
download_name=download_name)
|
||||||
@ -204,6 +204,27 @@ class BibleManager(object):
|
|||||||
self.db_cache[name] = importer
|
self.db_cache[name] = importer
|
||||||
return importer
|
return importer
|
||||||
|
|
||||||
|
def delete_bible(self, name):
|
||||||
|
"""
|
||||||
|
Delete a bible completly.
|
||||||
|
|
||||||
|
``name``
|
||||||
|
The name of the bible.
|
||||||
|
"""
|
||||||
|
log.debug(u'BibleManager.delete_bible("%s")', name)
|
||||||
|
files = SettingsManager.get_files(self.settingsSection,
|
||||||
|
self.suffix)
|
||||||
|
if u'alternative_book_names.sqlite' in files:
|
||||||
|
files.remove(u'alternative_book_names.sqlite')
|
||||||
|
for filename in files:
|
||||||
|
bible = BibleDB(self.parent, path=self.path, file=filename)
|
||||||
|
# Remove the bible files
|
||||||
|
if name == bible.get_name():
|
||||||
|
bible.session.close()
|
||||||
|
if delete_file(os.path.join(self.path, filename)):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def get_bibles(self):
|
def get_bibles(self):
|
||||||
"""
|
"""
|
||||||
Returns a dict with all available Bibles.
|
Returns a dict with all available Bibles.
|
||||||
@ -309,6 +330,10 @@ class BibleManager(object):
|
|||||||
'Import Wizard to install one or more Bibles.')
|
'Import Wizard to install one or more Bibles.')
|
||||||
})
|
})
|
||||||
return None
|
return None
|
||||||
|
language_selection = self.get_meta_data(bible, u'book_name_language')
|
||||||
|
if language_selection:
|
||||||
|
language_selection = int(language_selection.value)
|
||||||
|
if language_selection is None or language_selection == -1:
|
||||||
language_selection = QtCore.QSettings().value(
|
language_selection = QtCore.QSettings().value(
|
||||||
self.settingsSection + u'/bookname language',
|
self.settingsSection + u'/bookname language',
|
||||||
QtCore.QVariant(0)).toInt()[0]
|
QtCore.QVariant(0)).toInt()[0]
|
||||||
@ -344,6 +369,22 @@ class BibleManager(object):
|
|||||||
})
|
})
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def get_language_selection(self, bible):
|
||||||
|
"""
|
||||||
|
Returns the language selection of a bible.
|
||||||
|
|
||||||
|
``bible``
|
||||||
|
Unicode. The Bible to get the language selection from.
|
||||||
|
"""
|
||||||
|
log.debug(u'BibleManager.get_language_selection("%s")', bible)
|
||||||
|
language_selection = self.get_meta_data(bible, u'book_name_language')
|
||||||
|
if language_selection and language_selection.value != u'None':
|
||||||
|
return int(language_selection.value)
|
||||||
|
if language_selection is None or language_selection.value == u'None':
|
||||||
|
return QtCore.QSettings().value(
|
||||||
|
self.settingsSection + u'/bookname language',
|
||||||
|
QtCore.QVariant(0)).toInt()[0]
|
||||||
|
|
||||||
def verse_search(self, bible, second_bible, text):
|
def verse_search(self, bible, second_bible, text):
|
||||||
"""
|
"""
|
||||||
Does a verse search for the given bible and text.
|
Does a verse search for the given bible and text.
|
||||||
@ -369,11 +410,11 @@ class BibleManager(object):
|
|||||||
return None
|
return None
|
||||||
# Check if the bible or second_bible is a web bible.
|
# Check if the bible or second_bible is a web bible.
|
||||||
webbible = self.db_cache[bible].get_object(BibleMeta,
|
webbible = self.db_cache[bible].get_object(BibleMeta,
|
||||||
u'download source')
|
u'download_source')
|
||||||
second_webbible = u''
|
second_webbible = u''
|
||||||
if second_bible:
|
if second_bible:
|
||||||
second_webbible = self.db_cache[second_bible].get_object(BibleMeta,
|
second_webbible = self.db_cache[second_bible].get_object(BibleMeta,
|
||||||
u'download source')
|
u'download_source')
|
||||||
if webbible or second_webbible:
|
if webbible or second_webbible:
|
||||||
Receiver.send_message(u'openlp_information_message', {
|
Receiver.send_message(u'openlp_information_message', {
|
||||||
u'title': translate('BiblesPlugin.BibleManager',
|
u'title': translate('BiblesPlugin.BibleManager',
|
||||||
@ -390,21 +431,24 @@ class BibleManager(object):
|
|||||||
'Scripture Reference Error'),
|
'Scripture Reference Error'),
|
||||||
u'message': translate('BiblesPlugin.BibleManager',
|
u'message': translate('BiblesPlugin.BibleManager',
|
||||||
'You did not enter a search keyword.\n'
|
'You did not enter a search keyword.\n'
|
||||||
'You can separate different keywords by a space to search for '
|
'You can separate different keywords by a space to '
|
||||||
'all of your keywords and you can separate them by a comma to '
|
'search for all of your keywords and you can separate '
|
||||||
'search for one of them.')
|
'them by a comma to search for one of them.')
|
||||||
})
|
})
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def save_meta_data(self, bible, version, copyright, permissions):
|
def save_meta_data(self, bible, version, copyright, permissions,
|
||||||
|
book_name_language=None):
|
||||||
"""
|
"""
|
||||||
Saves the bibles meta data.
|
Saves the bibles meta data.
|
||||||
"""
|
"""
|
||||||
log.debug(u'save_meta data %s,%s, %s,%s',
|
log.debug(u'save_meta data %s, %s, %s, %s',
|
||||||
bible, version, copyright, permissions)
|
bible, version, copyright, permissions)
|
||||||
self.db_cache[bible].create_meta(u'Version', version)
|
self.db_cache[bible].save_meta(u'name', version)
|
||||||
self.db_cache[bible].create_meta(u'Copyright', copyright)
|
self.db_cache[bible].save_meta(u'copyright', copyright)
|
||||||
self.db_cache[bible].create_meta(u'Permissions', permissions)
|
self.db_cache[bible].save_meta(u'permissions', permissions)
|
||||||
|
self.db_cache[bible].save_meta(u'book_name_language',
|
||||||
|
book_name_language)
|
||||||
|
|
||||||
def get_meta_data(self, bible, key):
|
def get_meta_data(self, bible, key):
|
||||||
"""
|
"""
|
||||||
@ -413,6 +457,13 @@ class BibleManager(object):
|
|||||||
log.debug(u'get_meta %s,%s', bible, key)
|
log.debug(u'get_meta %s,%s', bible, key)
|
||||||
return self.db_cache[bible].get_object(BibleMeta, key)
|
return self.db_cache[bible].get_object(BibleMeta, key)
|
||||||
|
|
||||||
|
def update_book(self, bible, book):
|
||||||
|
"""
|
||||||
|
Update a book of the bible.
|
||||||
|
"""
|
||||||
|
log.debug(u'BibleManager.update_book("%s", "%s")', bible, book.name)
|
||||||
|
self.db_cache[bible].update_book(book)
|
||||||
|
|
||||||
def exists(self, name):
|
def exists(self, name):
|
||||||
"""
|
"""
|
||||||
Check cache to see if new bible.
|
Check cache to see if new bible.
|
||||||
|
@ -36,9 +36,10 @@ from openlp.core.lib.searchedit import SearchEdit
|
|||||||
from openlp.core.lib.ui import UiStrings, set_case_insensitive_completer, \
|
from openlp.core.lib.ui import UiStrings, set_case_insensitive_completer, \
|
||||||
create_horizontal_adjusting_combo_box, critical_error_message_box, \
|
create_horizontal_adjusting_combo_box, critical_error_message_box, \
|
||||||
find_and_set_in_combo_box, build_icon
|
find_and_set_in_combo_box, build_icon
|
||||||
from openlp.plugins.bibles.forms import BibleImportForm
|
from openlp.plugins.bibles.forms import BibleImportForm, EditBibleForm
|
||||||
from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \
|
from openlp.plugins.bibles.lib import LayoutStyle, DisplayStyle, \
|
||||||
VerseReferenceList, get_reference_separator, LanguageSelection, BibleStrings
|
VerseReferenceList, get_reference_separator, LanguageSelection, \
|
||||||
|
BibleStrings
|
||||||
from openlp.plugins.bibles.lib.db import BiblesResourcesDB
|
from openlp.plugins.bibles.lib.db import BiblesResourcesDB
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -63,7 +64,7 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.unlockIcon = build_icon(u':/bibles/bibles_search_unlock.png')
|
self.unlockIcon = build_icon(u':/bibles/bibles_search_unlock.png')
|
||||||
MediaManagerItem.__init__(self, parent, plugin, icon)
|
MediaManagerItem.__init__(self, parent, plugin, icon)
|
||||||
# Place to store the search results for both bibles.
|
# Place to store the search results for both bibles.
|
||||||
self.settings = self.plugin.settings_tab
|
self.settings = self.plugin.settingsTab
|
||||||
self.quickPreviewAllowed = True
|
self.quickPreviewAllowed = True
|
||||||
self.hasSearch = True
|
self.hasSearch = True
|
||||||
self.search_results = {}
|
self.search_results = {}
|
||||||
@ -109,8 +110,8 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
MediaManagerItem.requiredIcons(self)
|
MediaManagerItem.requiredIcons(self)
|
||||||
self.hasImportIcon = True
|
self.hasImportIcon = True
|
||||||
self.hasNewIcon = False
|
self.hasNewIcon = False
|
||||||
self.hasEditIcon = False
|
self.hasEditIcon = True
|
||||||
self.hasDeleteIcon = False
|
self.hasDeleteIcon = True
|
||||||
self.addToServiceItem = False
|
self.addToServiceItem = False
|
||||||
|
|
||||||
def addSearchTab(self, prefix, name):
|
def addSearchTab(self, prefix, name):
|
||||||
@ -199,6 +200,8 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.quickLayout.addWidget(
|
self.quickLayout.addWidget(
|
||||||
self.quickSearchLabel, 0, 0, QtCore.Qt.AlignRight)
|
self.quickSearchLabel, 0, 0, QtCore.Qt.AlignRight)
|
||||||
self.quickSearchEdit = SearchEdit(self.quickTab)
|
self.quickSearchEdit = SearchEdit(self.quickTab)
|
||||||
|
self.quickSearchEdit.setSizePolicy(
|
||||||
|
QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Fixed)
|
||||||
self.quickSearchEdit.setObjectName(u'quickSearchEdit')
|
self.quickSearchEdit.setObjectName(u'quickSearchEdit')
|
||||||
self.quickSearchLabel.setBuddy(self.quickSearchEdit)
|
self.quickSearchLabel.setBuddy(self.quickSearchEdit)
|
||||||
self.quickLayout.addWidget(self.quickSearchEdit, 0, 1, 1, 2)
|
self.quickLayout.addWidget(self.quickSearchEdit, 0, 1, 1, 2)
|
||||||
@ -244,9 +247,9 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.addSearchFields(u'advanced', UiStrings().Advanced)
|
self.addSearchFields(u'advanced', UiStrings().Advanced)
|
||||||
# Combo Boxes
|
# Combo Boxes
|
||||||
QtCore.QObject.connect(self.quickVersionComboBox,
|
QtCore.QObject.connect(self.quickVersionComboBox,
|
||||||
QtCore.SIGNAL(u'activated(int)'), self.onQuickVersionComboBox)
|
QtCore.SIGNAL(u'activated(int)'), self.updateAutoCompleter)
|
||||||
QtCore.QObject.connect(self.quickSecondComboBox,
|
QtCore.QObject.connect(self.quickSecondComboBox,
|
||||||
QtCore.SIGNAL(u'activated(int)'), self.onQuickSecondComboBox)
|
QtCore.SIGNAL(u'activated(int)'), self.updateAutoCompleter)
|
||||||
QtCore.QObject.connect(self.advancedVersionComboBox,
|
QtCore.QObject.connect(self.advancedVersionComboBox,
|
||||||
QtCore.SIGNAL(u'activated(int)'), self.onAdvancedVersionComboBox)
|
QtCore.SIGNAL(u'activated(int)'), self.onAdvancedVersionComboBox)
|
||||||
QtCore.QObject.connect(self.advancedSecondComboBox,
|
QtCore.QObject.connect(self.advancedSecondComboBox,
|
||||||
@ -350,10 +353,6 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
log.debug(u'bible manager initialise')
|
log.debug(u'bible manager initialise')
|
||||||
self.plugin.manager.media = self
|
self.plugin.manager.media = self
|
||||||
self.loadBibles()
|
self.loadBibles()
|
||||||
bible = QtCore.QSettings().value(
|
|
||||||
self.settingsSection + u'/quick bible', QtCore.QVariant(
|
|
||||||
self.quickVersionComboBox.currentText())).toString()
|
|
||||||
find_and_set_in_combo_box(self.quickVersionComboBox, bible)
|
|
||||||
self.quickSearchEdit.setSearchTypes([
|
self.quickSearchEdit.setSearchTypes([
|
||||||
(BibleSearch.Reference, u':/bibles/bibles_search_reference.png',
|
(BibleSearch.Reference, u':/bibles/bibles_search_reference.png',
|
||||||
translate('BiblesPlugin.MediaItem', 'Scripture Reference'),
|
translate('BiblesPlugin.MediaItem', 'Scripture Reference'),
|
||||||
@ -379,14 +378,13 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.advancedSecondComboBox.addItem(u'')
|
self.advancedSecondComboBox.addItem(u'')
|
||||||
# Get all bibles and sort the list.
|
# Get all bibles and sort the list.
|
||||||
bibles = self.plugin.manager.get_bibles().keys()
|
bibles = self.plugin.manager.get_bibles().keys()
|
||||||
|
bibles = filter(None, bibles)
|
||||||
bibles.sort(cmp=locale.strcoll)
|
bibles.sort(cmp=locale.strcoll)
|
||||||
# Load the bibles into the combo boxes.
|
# Load the bibles into the combo boxes.
|
||||||
for bible in bibles:
|
self.quickVersionComboBox.addItems(bibles)
|
||||||
if bible:
|
self.quickSecondComboBox.addItems(bibles)
|
||||||
self.quickVersionComboBox.addItem(bible)
|
self.advancedVersionComboBox.addItems(bibles)
|
||||||
self.quickSecondComboBox.addItem(bible)
|
self.advancedSecondComboBox.addItems(bibles)
|
||||||
self.advancedVersionComboBox.addItem(bible)
|
|
||||||
self.advancedSecondComboBox.addItem(bible)
|
|
||||||
# set the default value
|
# set the default value
|
||||||
bible = QtCore.QSettings().value(
|
bible = QtCore.QSettings().value(
|
||||||
self.settingsSection + u'/advanced bible',
|
self.settingsSection + u'/advanced bible',
|
||||||
@ -396,6 +394,10 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
self.initialiseAdvancedBible(unicode(bible))
|
self.initialiseAdvancedBible(unicode(bible))
|
||||||
elif len(bibles):
|
elif len(bibles):
|
||||||
self.initialiseAdvancedBible(bibles[0])
|
self.initialiseAdvancedBible(bibles[0])
|
||||||
|
bible = QtCore.QSettings().value(
|
||||||
|
self.settingsSection + u'/quick bible', QtCore.QVariant(
|
||||||
|
self.quickVersionComboBox.currentText())).toString()
|
||||||
|
find_and_set_in_combo_box(self.quickVersionComboBox, bible)
|
||||||
|
|
||||||
def reloadBibles(self, process=False):
|
def reloadBibles(self, process=False):
|
||||||
log.debug(u'Reloading Bibles')
|
log.debug(u'Reloading Bibles')
|
||||||
@ -430,10 +432,8 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
book_data = book_data_temp
|
book_data = book_data_temp
|
||||||
self.advancedBookComboBox.clear()
|
self.advancedBookComboBox.clear()
|
||||||
first = True
|
first = True
|
||||||
language_selection = QtCore.QSettings().value(
|
language_selection = self.plugin.manager.get_language_selection(bible)
|
||||||
self.settingsSection + u'/bookname language',
|
book_names = BibleStrings().BookNames
|
||||||
QtCore.QVariant(0)).toInt()[0]
|
|
||||||
booknames = BibleStrings().Booknames
|
|
||||||
for book in book_data:
|
for book in book_data:
|
||||||
row = self.advancedBookComboBox.count()
|
row = self.advancedBookComboBox.count()
|
||||||
if language_selection == LanguageSelection.Bible:
|
if language_selection == LanguageSelection.Bible:
|
||||||
@ -442,7 +442,7 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
data = BiblesResourcesDB.get_book_by_id(
|
data = BiblesResourcesDB.get_book_by_id(
|
||||||
book[u'book_reference_id'])
|
book[u'book_reference_id'])
|
||||||
self.advancedBookComboBox.addItem(
|
self.advancedBookComboBox.addItem(
|
||||||
booknames[data[u'abbreviation']])
|
book_names[data[u'abbreviation']])
|
||||||
elif language_selection == LanguageSelection.English:
|
elif language_selection == LanguageSelection.English:
|
||||||
data = BiblesResourcesDB.get_book_by_id(
|
data = BiblesResourcesDB.get_book_by_id(
|
||||||
book[u'book_reference_id'])
|
book[u'book_reference_id'])
|
||||||
@ -504,18 +504,17 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
secondbook.book_reference_id:
|
secondbook.book_reference_id:
|
||||||
book_data_temp.append(book)
|
book_data_temp.append(book)
|
||||||
book_data = book_data_temp
|
book_data = book_data_temp
|
||||||
language_selection = QtCore.QSettings().value(
|
language_selection = self.plugin.manager.get_language_selection(
|
||||||
self.settingsSection + u'/bookname language',
|
bible)
|
||||||
QtCore.QVariant(0)).toInt()[0]
|
|
||||||
if language_selection == LanguageSelection.Bible:
|
if language_selection == LanguageSelection.Bible:
|
||||||
books = [book.name + u' ' for book in book_data]
|
books = [book.name + u' ' for book in book_data]
|
||||||
elif language_selection == LanguageSelection.Application:
|
elif language_selection == LanguageSelection.Application:
|
||||||
booknames = BibleStrings().Booknames
|
book_names = BibleStrings().BookNames
|
||||||
for book in book_data:
|
for book in book_data:
|
||||||
data = BiblesResourcesDB.get_book_by_id(
|
data = BiblesResourcesDB.get_book_by_id(
|
||||||
book.book_reference_id)
|
book.book_reference_id)
|
||||||
books.append(unicode(
|
books.append(unicode(
|
||||||
booknames[data[u'abbreviation']]) + u' ')
|
book_names[data[u'abbreviation']]) + u' ')
|
||||||
elif language_selection == LanguageSelection.English:
|
elif language_selection == LanguageSelection.English:
|
||||||
for book in book_data:
|
for book in book_data:
|
||||||
data = BiblesResourcesDB.get_book_by_id(
|
data = BiblesResourcesDB.get_book_by_id(
|
||||||
@ -524,12 +523,6 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
books.sort(cmp=locale.strcoll)
|
books.sort(cmp=locale.strcoll)
|
||||||
set_case_insensitive_completer(books, self.quickSearchEdit)
|
set_case_insensitive_completer(books, self.quickSearchEdit)
|
||||||
|
|
||||||
def onQuickVersionComboBox(self):
|
|
||||||
self.updateAutoCompleter()
|
|
||||||
|
|
||||||
def onQuickSecondComboBox(self):
|
|
||||||
self.updateAutoCompleter()
|
|
||||||
|
|
||||||
def onImportClick(self):
|
def onImportClick(self):
|
||||||
if not hasattr(self, u'import_wizard'):
|
if not hasattr(self, u'import_wizard'):
|
||||||
self.import_wizard = BibleImportForm(self, self.plugin.manager,
|
self.import_wizard = BibleImportForm(self, self.plugin.manager,
|
||||||
@ -538,6 +531,34 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
if self.import_wizard.exec_():
|
if self.import_wizard.exec_():
|
||||||
self.reloadBibles()
|
self.reloadBibles()
|
||||||
|
|
||||||
|
def onEditClick(self):
|
||||||
|
if self.quickTab.isVisible():
|
||||||
|
bible = unicode(self.quickVersionComboBox.currentText())
|
||||||
|
elif self.advancedTab.isVisible():
|
||||||
|
bible = unicode(self.advancedVersionComboBox.currentText())
|
||||||
|
if bible:
|
||||||
|
self.editBibleForm = EditBibleForm(self, self.plugin.formParent,
|
||||||
|
self.plugin.manager)
|
||||||
|
self.editBibleForm.loadBible(bible)
|
||||||
|
if self.editBibleForm.exec_():
|
||||||
|
self.reloadBibles()
|
||||||
|
|
||||||
|
def onDeleteClick(self):
|
||||||
|
if self.quickTab.isVisible():
|
||||||
|
bible = unicode(self.quickVersionComboBox.currentText())
|
||||||
|
elif self.advancedTab.isVisible():
|
||||||
|
bible = unicode(self.advancedVersionComboBox.currentText())
|
||||||
|
if bible:
|
||||||
|
if QtGui.QMessageBox.question(self, UiStrings().ConfirmDelete,
|
||||||
|
unicode(translate('BiblesPlugin.MediaItem',
|
||||||
|
'Are you sure you want to delete "%s"?')) % bible,
|
||||||
|
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
|
||||||
|
QtGui.QMessageBox.No),
|
||||||
|
QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No:
|
||||||
|
return
|
||||||
|
self.plugin.manager.delete_bible(bible)
|
||||||
|
self.reloadBibles()
|
||||||
|
|
||||||
def onSearchTabBarCurrentChanged(self, index):
|
def onSearchTabBarCurrentChanged(self, index):
|
||||||
if index == 0:
|
if index == 0:
|
||||||
self.advancedTab.setVisible(False)
|
self.advancedTab.setVisible(False)
|
||||||
@ -785,24 +806,36 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
further action is saved for/in each row.
|
further action is saved for/in each row.
|
||||||
"""
|
"""
|
||||||
verse_separator = get_reference_separator(u'sep_v_display')
|
verse_separator = get_reference_separator(u'sep_v_display')
|
||||||
version = self.plugin.manager.get_meta_data(bible, u'Version').value
|
version = self.plugin.manager.get_meta_data(bible, u'name').value
|
||||||
copyright = self.plugin.manager.get_meta_data(bible, u'Copyright').value
|
copyright = self.plugin.manager.get_meta_data(bible, u'copyright').value
|
||||||
permissions = \
|
permissions = \
|
||||||
self.plugin.manager.get_meta_data(bible, u'Permissions').value
|
self.plugin.manager.get_meta_data(bible, u'permissions').value
|
||||||
second_version = u''
|
second_version = u''
|
||||||
second_copyright = u''
|
second_copyright = u''
|
||||||
second_permissions = u''
|
second_permissions = u''
|
||||||
if second_bible:
|
if second_bible:
|
||||||
second_version = self.plugin.manager.get_meta_data(
|
second_version = self.plugin.manager.get_meta_data(
|
||||||
second_bible, u'Version').value
|
second_bible, u'name').value
|
||||||
second_copyright = self.plugin.manager.get_meta_data(
|
second_copyright = self.plugin.manager.get_meta_data(
|
||||||
second_bible, u'Copyright').value
|
second_bible, u'copyright').value
|
||||||
second_permissions = self.plugin.manager.get_meta_data(
|
second_permissions = self.plugin.manager.get_meta_data(
|
||||||
second_bible, u'Permissions').value
|
second_bible, u'permissions').value
|
||||||
items = []
|
items = []
|
||||||
|
language_selection = self.plugin.manager.get_language_selection(bible)
|
||||||
for count, verse in enumerate(search_results):
|
for count, verse in enumerate(search_results):
|
||||||
|
if language_selection == LanguageSelection.Bible:
|
||||||
|
book = verse.book.name
|
||||||
|
elif language_selection == LanguageSelection.Application:
|
||||||
|
book_names = BibleStrings().Booknames
|
||||||
|
data = BiblesResourcesDB.get_book_by_id(
|
||||||
|
verse.book.book_reference_id)
|
||||||
|
book = unicode(book_names[data[u'abbreviation']])
|
||||||
|
elif language_selection == LanguageSelection.English:
|
||||||
|
data = BiblesResourcesDB.get_book_by_id(
|
||||||
|
verse.book.book_reference_id)
|
||||||
|
book = data[u'name']
|
||||||
data = {
|
data = {
|
||||||
'book': QtCore.QVariant(verse.book.name),
|
'book': QtCore.QVariant(book),
|
||||||
'chapter': QtCore.QVariant(verse.chapter),
|
'chapter': QtCore.QVariant(verse.chapter),
|
||||||
'verse': QtCore.QVariant(verse.verse),
|
'verse': QtCore.QVariant(verse.verse),
|
||||||
'bible': QtCore.QVariant(bible),
|
'bible': QtCore.QVariant(bible),
|
||||||
@ -824,12 +857,11 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
log.exception(u'The second_search_results does not have as '
|
log.exception(u'The second_search_results does not have as '
|
||||||
'many verses as the search_results.')
|
'many verses as the search_results.')
|
||||||
break
|
break
|
||||||
bible_text = u'%s %d%s%d (%s, %s)' % (verse.book.name,
|
bible_text = u'%s %d%s%d (%s, %s)' % (book, verse.chapter,
|
||||||
verse.chapter, verse_separator, verse.verse, version,
|
verse_separator, verse.verse, version, second_version)
|
||||||
second_version)
|
|
||||||
else:
|
else:
|
||||||
bible_text = u'%s %d%s%d (%s)' % (verse.book.name,
|
bible_text = u'%s %d%s%d (%s)' % (book, verse.chapter,
|
||||||
verse.chapter, verse_separator, verse.verse, version)
|
verse_separator, verse.verse, version)
|
||||||
bible_verse = QtGui.QListWidgetItem(bible_text)
|
bible_verse = QtGui.QListWidgetItem(bible_text)
|
||||||
bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(data))
|
bible_verse.setData(QtCore.Qt.UserRole, QtCore.QVariant(data))
|
||||||
items.append(bible_verse)
|
items.append(bible_verse)
|
||||||
@ -998,7 +1030,6 @@ class BibleMediaItem(MediaManagerItem):
|
|||||||
# last verse of the chapter or the current verse is not the
|
# last verse of the chapter or the current verse is not the
|
||||||
# first one of the chapter.
|
# first one of the chapter.
|
||||||
return True
|
return True
|
||||||
else:
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def formatVerse(self, old_chapter, chapter, verse):
|
def formatVerse(self, old_chapter, chapter, verse):
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
|
||||||
import logging
|
import logging
|
||||||
import chardet
|
import chardet
|
||||||
import codecs
|
import codecs
|
||||||
@ -51,8 +50,6 @@ class OSISBible(BibleDB):
|
|||||||
log.debug(self.__class__.__name__)
|
log.debug(self.__class__.__name__)
|
||||||
BibleDB.__init__(self, parent, **kwargs)
|
BibleDB.__init__(self, parent, **kwargs)
|
||||||
self.filename = kwargs[u'filename']
|
self.filename = kwargs[u'filename']
|
||||||
fbibles = None
|
|
||||||
self.books = {}
|
|
||||||
self.language_regex = re.compile(r'<language.*>(.*?)</language>')
|
self.language_regex = re.compile(r'<language.*>(.*?)</language>')
|
||||||
self.verse_regex = re.compile(
|
self.verse_regex = re.compile(
|
||||||
r'<verse osisID="([a-zA-Z0-9 ]*).([0-9]*).([0-9]*)">(.*?)</verse>')
|
r'<verse osisID="([a-zA-Z0-9 ]*).([0-9]*).([0-9]*)">(.*?)</verse>')
|
||||||
@ -75,16 +72,6 @@ class OSISBible(BibleDB):
|
|||||||
filepath = os.path.join(
|
filepath = os.path.join(
|
||||||
AppLocation.get_directory(AppLocation.PluginsDir), u'bibles',
|
AppLocation.get_directory(AppLocation.PluginsDir), u'bibles',
|
||||||
u'resources', u'osisbooks.csv')
|
u'resources', u'osisbooks.csv')
|
||||||
try:
|
|
||||||
fbibles = open(filepath, u'r')
|
|
||||||
for line in fbibles:
|
|
||||||
book = line.split(u',')
|
|
||||||
self.books[book[0]] = (book[1].strip(), book[2].strip())
|
|
||||||
except IOError:
|
|
||||||
log.exception(u'OSIS bible import failed')
|
|
||||||
finally:
|
|
||||||
if fbibles:
|
|
||||||
fbibles.close()
|
|
||||||
|
|
||||||
def do_import(self, bible_name=None):
|
def do_import(self, bible_name=None):
|
||||||
"""
|
"""
|
||||||
@ -102,6 +89,8 @@ class OSISBible(BibleDB):
|
|||||||
try:
|
try:
|
||||||
detect_file = open(self.filename, u'r')
|
detect_file = open(self.filename, u'r')
|
||||||
details = chardet.detect(detect_file.read(1048576))
|
details = chardet.detect(detect_file.read(1048576))
|
||||||
|
detect_file.seek(0)
|
||||||
|
lines_in_file = int(len(detect_file.readlines()))
|
||||||
except IOError:
|
except IOError:
|
||||||
log.exception(u'Failed to detect OSIS file encoding')
|
log.exception(u'Failed to detect OSIS file encoding')
|
||||||
return
|
return
|
||||||
@ -112,6 +101,17 @@ class OSISBible(BibleDB):
|
|||||||
osis = codecs.open(self.filename, u'r', details['encoding'])
|
osis = codecs.open(self.filename, u'r', details['encoding'])
|
||||||
repl = replacement
|
repl = replacement
|
||||||
language_id = False
|
language_id = False
|
||||||
|
# Decide if the bible propably contains only NT or AT and NT or
|
||||||
|
# AT, NT and Apocrypha
|
||||||
|
if lines_in_file < 11500:
|
||||||
|
book_count = 27
|
||||||
|
chapter_count = 260
|
||||||
|
elif lines_in_file < 34200:
|
||||||
|
book_count = 66
|
||||||
|
chapter_count = 1188
|
||||||
|
else:
|
||||||
|
book_count = 67
|
||||||
|
chapter_count = 1336
|
||||||
for file_record in osis:
|
for file_record in osis:
|
||||||
if self.stop_import_flag:
|
if self.stop_import_flag:
|
||||||
break
|
break
|
||||||
@ -123,7 +123,7 @@ class OSISBible(BibleDB):
|
|||||||
language_match.group(1))
|
language_match.group(1))
|
||||||
if language:
|
if language:
|
||||||
language_id = language[u'id']
|
language_id = language[u'id']
|
||||||
self.create_meta(u'language_id', language_id)
|
self.save_meta(u'language_id', language_id)
|
||||||
continue
|
continue
|
||||||
match = self.verse_regex.search(file_record)
|
match = self.verse_regex.search(file_record)
|
||||||
if match:
|
if match:
|
||||||
@ -135,36 +135,32 @@ class OSISBible(BibleDB):
|
|||||||
% self.filename)
|
% self.filename)
|
||||||
return False
|
return False
|
||||||
match_count += 1
|
match_count += 1
|
||||||
book = match.group(1)
|
book = unicode(match.group(1))
|
||||||
chapter = int(match.group(2))
|
chapter = int(match.group(2))
|
||||||
verse = int(match.group(3))
|
verse = int(match.group(3))
|
||||||
verse_text = match.group(4)
|
verse_text = match.group(4)
|
||||||
if not db_book or db_book.name != self.books[book][0]:
|
book_ref_id = self.get_book_ref_id_by_name(book, book_count,
|
||||||
log.debug(u'New book: "%s"' % self.books[book][0])
|
language_id)
|
||||||
book_ref_id = self.get_book_ref_id_by_name(unicode(
|
|
||||||
self.books[book][0]), 67, language_id)
|
|
||||||
if not book_ref_id:
|
if not book_ref_id:
|
||||||
log.exception(u'Importing books from "%s" '\
|
log.exception(u'Importing books from "%s" failed' %
|
||||||
'failed' % self.filename)
|
self.filename)
|
||||||
return False
|
return False
|
||||||
book_details = BiblesResourcesDB.get_book_by_id(
|
book_details = BiblesResourcesDB.get_book_by_id(book_ref_id)
|
||||||
book_ref_id)
|
if not db_book or db_book.name != book_details[u'name']:
|
||||||
|
log.debug(u'New book: "%s"' % book_details[u'name'])
|
||||||
db_book = self.create_book(
|
db_book = self.create_book(
|
||||||
unicode(self.books[book][0]),
|
book_details[u'name'],
|
||||||
book_ref_id,
|
book_ref_id,
|
||||||
book_details[u'testament_id'])
|
book_details[u'testament_id'])
|
||||||
if last_chapter == 0:
|
if last_chapter == 0:
|
||||||
if book == u'Gen':
|
self.wizard.progressBar.setMaximum(chapter_count)
|
||||||
self.wizard.progressBar.setMaximum(1188)
|
|
||||||
else:
|
|
||||||
self.wizard.progressBar.setMaximum(260)
|
|
||||||
if last_chapter != chapter:
|
if last_chapter != chapter:
|
||||||
if last_chapter != 0:
|
if last_chapter != 0:
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
self.wizard.incrementProgressBar(unicode(translate(
|
self.wizard.incrementProgressBar(unicode(translate(
|
||||||
'BiblesPlugin.OsisImport', 'Importing %s %s...',
|
'BiblesPlugin.OsisImport', 'Importing %s %s...',
|
||||||
'Importing <book name> <chapter>...')) %
|
'Importing <book name> <chapter>...')) %
|
||||||
(self.books[match.group(1)][0], chapter))
|
(book_details[u'name'], chapter))
|
||||||
last_chapter = chapter
|
last_chapter = chapter
|
||||||
# All of this rigmarol below is because the mod2osis
|
# All of this rigmarol below is because the mod2osis
|
||||||
# tool from the Sword library embeds XML in the OSIS
|
# tool from the Sword library embeds XML in the OSIS
|
||||||
|
191
openlp/plugins/bibles/lib/upgrade.py
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2012 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan #
|
||||||
|
# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, #
|
||||||
|
# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias #
|
||||||
|
# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
|
||||||
|
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# This program is free software; you can redistribute it and/or modify it #
|
||||||
|
# under the terms of the GNU General Public License as published by the Free #
|
||||||
|
# Software Foundation; version 2 of the License. #
|
||||||
|
# #
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||||
|
# more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License along #
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||||
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
|
###############################################################################
|
||||||
|
"""
|
||||||
|
The :mod:`upgrade` module provides a way for the database and schema that is the
|
||||||
|
backend for the Bibles plugin
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from sqlalchemy import Table, func, select, insert
|
||||||
|
|
||||||
|
__version__ = 1
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def upgrade_setup(metadata):
|
||||||
|
"""
|
||||||
|
Set up the latest revision all tables, with reflection, needed for the
|
||||||
|
upgrade process. If you want to drop a table, you need to remove it from
|
||||||
|
here, and add it to your upgrade function.
|
||||||
|
"""
|
||||||
|
# Don't define the "metadata" table, as the upgrade mechanism already
|
||||||
|
# defines it.
|
||||||
|
tables = {
|
||||||
|
u'book': Table(u'book', metadata, autoload=True),
|
||||||
|
u'verse': Table(u'verse', metadata, autoload=True)
|
||||||
|
}
|
||||||
|
return tables
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade_1(session, metadata, tables):
|
||||||
|
"""
|
||||||
|
Version 1 upgrade.
|
||||||
|
|
||||||
|
This upgrade renames a number of keys to a single naming convention..
|
||||||
|
"""
|
||||||
|
metadata_table = metadata.tables[u'metadata']
|
||||||
|
# Copy "Version" to "name" ("version" used by upgrade system)
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
session.execute(insert(metadata_table).values(
|
||||||
|
key=u'name',
|
||||||
|
value=select(
|
||||||
|
[metadata_table.c.value],
|
||||||
|
metadata_table.c.key == u'Version'
|
||||||
|
).as_scalar()
|
||||||
|
))
|
||||||
|
# Copy "Copyright" to "copyright"
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
session.execute(insert(metadata_table).values(
|
||||||
|
key=u'copyright',
|
||||||
|
value=select(
|
||||||
|
[metadata_table.c.value],
|
||||||
|
metadata_table.c.key == u'Copyright'
|
||||||
|
).as_scalar()
|
||||||
|
))
|
||||||
|
# Copy "Permissions" to "permissions"
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
session.execute(insert(metadata_table).values(
|
||||||
|
key=u'permissions',
|
||||||
|
value=select(
|
||||||
|
[metadata_table.c.value],
|
||||||
|
metadata_table.c.key == u'Permissions'
|
||||||
|
).as_scalar()
|
||||||
|
))
|
||||||
|
# Copy "Bookname language" to "book_name_language"
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
value_count = session.execute(
|
||||||
|
select(
|
||||||
|
[func.count(metadata_table.c.value)],
|
||||||
|
metadata_table.c.key == u'Bookname language'
|
||||||
|
)
|
||||||
|
).scalar()
|
||||||
|
if value_count > 0:
|
||||||
|
session.execute(insert(metadata_table).values(
|
||||||
|
key=u'book_name_language',
|
||||||
|
value=select(
|
||||||
|
[metadata_table.c.value],
|
||||||
|
metadata_table.c.key == u'Bookname language'
|
||||||
|
).as_scalar()
|
||||||
|
))
|
||||||
|
# Copy "download source" to "download_source"
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
value_count = session.execute(
|
||||||
|
select(
|
||||||
|
[func.count(metadata_table.c.value)],
|
||||||
|
metadata_table.c.key == u'download source'
|
||||||
|
)
|
||||||
|
).scalar()
|
||||||
|
log.debug(u'download source: %s', value_count)
|
||||||
|
if value_count > 0:
|
||||||
|
session.execute(insert(metadata_table).values(
|
||||||
|
key=u'download_source',
|
||||||
|
value=select(
|
||||||
|
[metadata_table.c.value],
|
||||||
|
metadata_table.c.key == u'download source'
|
||||||
|
).as_scalar()
|
||||||
|
))
|
||||||
|
# Copy "download name" to "download_name"
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
value_count = session.execute(
|
||||||
|
select(
|
||||||
|
[func.count(metadata_table.c.value)],
|
||||||
|
metadata_table.c.key == u'download name'
|
||||||
|
)
|
||||||
|
).scalar()
|
||||||
|
log.debug(u'download name: %s', value_count)
|
||||||
|
if value_count > 0:
|
||||||
|
session.execute(insert(metadata_table).values(
|
||||||
|
key=u'download_name',
|
||||||
|
value=select(
|
||||||
|
[metadata_table.c.value],
|
||||||
|
metadata_table.c.key == u'download name'
|
||||||
|
).as_scalar()
|
||||||
|
))
|
||||||
|
# Copy "proxy server" to "proxy_server"
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
value_count = session.execute(
|
||||||
|
select(
|
||||||
|
[func.count(metadata_table.c.value)],
|
||||||
|
metadata_table.c.key == u'proxy server'
|
||||||
|
)
|
||||||
|
).scalar()
|
||||||
|
log.debug(u'proxy server: %s', value_count)
|
||||||
|
if value_count > 0:
|
||||||
|
session.execute(insert(metadata_table).values(
|
||||||
|
key=u'proxy_server',
|
||||||
|
value=select(
|
||||||
|
[metadata_table.c.value],
|
||||||
|
metadata_table.c.key == u'proxy server'
|
||||||
|
).as_scalar()
|
||||||
|
))
|
||||||
|
# Copy "proxy username" to "proxy_username"
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
value_count = session.execute(
|
||||||
|
select(
|
||||||
|
[func.count(metadata_table.c.value)],
|
||||||
|
metadata_table.c.key == u'proxy username'
|
||||||
|
)
|
||||||
|
).scalar()
|
||||||
|
log.debug(u'proxy username: %s', value_count)
|
||||||
|
if value_count > 0:
|
||||||
|
session.execute(insert(metadata_table).values(
|
||||||
|
key=u'proxy_username',
|
||||||
|
value=select(
|
||||||
|
[metadata_table.c.value],
|
||||||
|
metadata_table.c.key == u'proxy username'
|
||||||
|
).as_scalar()
|
||||||
|
))
|
||||||
|
# Copy "proxy password" to "proxy_password"
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
value_count = session.execute(
|
||||||
|
select(
|
||||||
|
[func.count(metadata_table.c.value)],
|
||||||
|
metadata_table.c.key == u'proxy password'
|
||||||
|
)
|
||||||
|
).scalar()
|
||||||
|
log.debug(u'proxy password: %s', value_count)
|
||||||
|
if value_count > 0:
|
||||||
|
session.execute(insert(metadata_table).values(
|
||||||
|
key=u'proxy_password',
|
||||||
|
value=select(
|
||||||
|
[metadata_table.c.value],
|
||||||
|
metadata_table.c.key == u'proxy password'
|
||||||
|
).as_scalar()
|
||||||
|
))
|
||||||
|
# TODO: Clean up in a subsequent release of OpenLP (like 2.0 final)
|
||||||
|
#session.execute(delete(metadata_table)\
|
||||||
|
# .where(metadata_table.c.key == u'dbversion'))
|
||||||
|
session.commit()
|
@ -1,76 +0,0 @@
|
|||||||
Gen,Genesis,Gen
|
|
||||||
Exod,Exodus,Exod
|
|
||||||
Lev,Leviticus,Lev
|
|
||||||
Num,Numbers,Num
|
|
||||||
Deut,Deuteronomy,Deut
|
|
||||||
Josh,Joshua,Josh
|
|
||||||
Judg,Judges,Judg
|
|
||||||
Ruth,Ruth,Ruth
|
|
||||||
1Sam,1 Samuel,1Sam
|
|
||||||
2Sam,2 Samuel,2Sam
|
|
||||||
1Kgs,1 Kings,1Kgs
|
|
||||||
2Kgs,2 Kings,2Kgs
|
|
||||||
1Chr,1 Chronicles,1Chr
|
|
||||||
2Chr,2 Chronicles,2Chr
|
|
||||||
Ezra,Ezra,Ezra
|
|
||||||
Neh,Nehemiah,Neh
|
|
||||||
Esth,Esther,Esth
|
|
||||||
Job,Job,Job
|
|
||||||
Ps,Psalms,Ps
|
|
||||||
Prov,Proverbs,Prov
|
|
||||||
Eccl,Ecclesiastes,Eccl
|
|
||||||
Song,Song of Songs,Song
|
|
||||||
Isa,Isaiah,Isa
|
|
||||||
Jer,Jeremiah,Jer
|
|
||||||
Lam,Lamentations,Lam
|
|
||||||
Ezek,Ezekiel,Ezek
|
|
||||||
Dan,Daniel,Dan
|
|
||||||
Hos,Hosea,Hos
|
|
||||||
Joel,Joel,Joel
|
|
||||||
Amos,Amos,Amos
|
|
||||||
Obad,Obad,Obad
|
|
||||||
Jonah,Jonah,Jonah
|
|
||||||
Mic,Micah,Mic
|
|
||||||
Nah,Naham,Nah
|
|
||||||
Hab,Habakkuk,Hab
|
|
||||||
Zeph,Zephaniah,Zeph
|
|
||||||
Hag,Haggai,Hag
|
|
||||||
Zech,Zechariah,Zech
|
|
||||||
Mal,Malachi,Mal
|
|
||||||
Matt,Matthew,Matt
|
|
||||||
Mark,Mark,Mark
|
|
||||||
Luke,Luke,Luke
|
|
||||||
John,John,John
|
|
||||||
Acts,Acts,Acts
|
|
||||||
Rom,Romans,Rom
|
|
||||||
1Cor,1 Corinthians,1Cor
|
|
||||||
2Cor,2 Corinthians,2Cor
|
|
||||||
Gal,Galatians,Gal
|
|
||||||
Eph,Ephesians,Eph
|
|
||||||
Phil,Philippians,Phil
|
|
||||||
Col,Colossians,Col
|
|
||||||
1Thess,1 Thessalonians,1Thess
|
|
||||||
2Thess,2 Thessalonians,2Thess
|
|
||||||
1Tim,1 Timothy,1Tim
|
|
||||||
2Tim,2 Timothy,2Tim
|
|
||||||
Titus,Titus,Titus
|
|
||||||
Phlm,Philemon,Phlm
|
|
||||||
Heb,Hebrews,Heb
|
|
||||||
Jas,James,Jas
|
|
||||||
1Pet,1 Peter,1Pet
|
|
||||||
2Pet,2 Peter,2Pet
|
|
||||||
1John,1 John,1John
|
|
||||||
2John,2 John,2John
|
|
||||||
3John,3 John,3John
|
|
||||||
Jude,Jude,Jude
|
|
||||||
Rev,Revelation,Rev
|
|
||||||
Jdt,Judith,Jdt
|
|
||||||
Wis,Wisdom,Wis
|
|
||||||
Tob,Tobit,Tob
|
|
||||||
Sir,Sirach,Sir
|
|
||||||
Bar,Baruch,Bar
|
|
||||||
1Macc,1 Maccabees,1Macc
|
|
||||||
2Macc,2 Maccabees,2Macc
|
|
||||||
AddDan,Rest of Daniel,AddDan
|
|
||||||
AddEsth,Rest of Esther,AddEsth
|
|
||||||
PrMan,Prayer of Manasses,PrMan
|
|
|
@ -50,8 +50,8 @@ class CustomPlugin(Plugin):
|
|||||||
CustomMediaItem, CustomTab)
|
CustomMediaItem, CustomTab)
|
||||||
self.weight = -5
|
self.weight = -5
|
||||||
self.manager = Manager(u'custom', init_schema)
|
self.manager = Manager(u'custom', init_schema)
|
||||||
self.icon_path = u':/plugins/plugin_custom.png'
|
self.iconPath = u':/plugins/plugin_custom.png'
|
||||||
self.icon = build_icon(self.icon_path)
|
self.icon = build_icon(self.iconPath)
|
||||||
|
|
||||||
def about(self):
|
def about(self):
|
||||||
about_text = translate('CustomPlugin', '<strong>Custom Slide Plugin'
|
about_text = translate('CustomPlugin', '<strong>Custom Slide Plugin'
|
||||||
|
@ -77,7 +77,7 @@ class EditCustomSlideForm(QtGui.QDialog, Ui_CustomSlideEditDialog):
|
|||||||
|
|
||||||
def onSplitButtonClicked(self):
|
def onSplitButtonClicked(self):
|
||||||
"""
|
"""
|
||||||
Adds a virtual split at cursor.
|
Adds an optional split at cursor.
|
||||||
"""
|
"""
|
||||||
self.insertSingleLineTextAtCursor(u'[---]')
|
self.insertSingleLineTextAtCursor(u'[---]')
|
||||||
self.slideTextEdit.setFocus()
|
self.slideTextEdit.setFocus()
|
||||||
|
@ -57,7 +57,7 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
def __init__(self, parent, plugin, icon):
|
def __init__(self, parent, plugin, icon):
|
||||||
self.IconPath = u'custom/custom'
|
self.IconPath = u'custom/custom'
|
||||||
MediaManagerItem.__init__(self, parent, plugin, icon)
|
MediaManagerItem.__init__(self, parent, plugin, icon)
|
||||||
self.edit_custom_form = EditCustomForm(self, self.plugin.formparent,
|
self.edit_custom_form = EditCustomForm(self, self.plugin.formParent,
|
||||||
self.plugin.manager)
|
self.plugin.manager)
|
||||||
self.singleServiceItem = False
|
self.singleServiceItem = False
|
||||||
self.quickPreviewAllowed = True
|
self.quickPreviewAllowed = True
|
||||||
|
@ -42,8 +42,8 @@ class ImagePlugin(Plugin):
|
|||||||
Plugin.__init__(self, u'images', plugin_helpers, ImageMediaItem,
|
Plugin.__init__(self, u'images', plugin_helpers, ImageMediaItem,
|
||||||
ImageTab)
|
ImageTab)
|
||||||
self.weight = -7
|
self.weight = -7
|
||||||
self.icon_path = u':/plugins/plugin_images.png'
|
self.iconPath = u':/plugins/plugin_images.png'
|
||||||
self.icon = build_icon(self.icon_path)
|
self.icon = build_icon(self.iconPath)
|
||||||
QtCore.QObject.connect(Receiver.get_receiver(),
|
QtCore.QObject.connect(Receiver.get_receiver(),
|
||||||
QtCore.SIGNAL(u'image_updated'), self.image_updated)
|
QtCore.SIGNAL(u'image_updated'), self.image_updated)
|
||||||
|
|
||||||
|
@ -105,26 +105,30 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
'You must select an image to delete.')):
|
'You must select an image to delete.')):
|
||||||
row_list = [item.row() for item in self.listView.selectedIndexes()]
|
row_list = [item.row() for item in self.listView.selectedIndexes()]
|
||||||
row_list.sort(reverse=True)
|
row_list.sort(reverse=True)
|
||||||
|
Receiver.send_message(u'cursor_busy')
|
||||||
|
self.plugin.formParent.displayProgressBar(len(row_list))
|
||||||
for row in row_list:
|
for row in row_list:
|
||||||
text = self.listView.item(row)
|
text = self.listView.item(row)
|
||||||
if text:
|
if text:
|
||||||
delete_file(os.path.join(self.servicePath,
|
delete_file(os.path.join(self.servicePath,
|
||||||
unicode(text.text())))
|
unicode(text.text())))
|
||||||
self.listView.takeItem(row)
|
self.listView.takeItem(row)
|
||||||
|
self.plugin.formParent.incrementProgressBar()
|
||||||
SettingsManager.set_list(self.settingsSection,
|
SettingsManager.set_list(self.settingsSection,
|
||||||
u'images', self.getFileList())
|
u'images', self.getFileList())
|
||||||
|
self.plugin.formParent.finishedProgressBar()
|
||||||
|
Receiver.send_message(u'cursor_normal')
|
||||||
self.listView.blockSignals(False)
|
self.listView.blockSignals(False)
|
||||||
|
|
||||||
def loadList(self, images, initialLoad=False):
|
def loadList(self, images, initialLoad=False):
|
||||||
if not initialLoad:
|
if not initialLoad:
|
||||||
self.plugin.formparent.displayProgressBar(len(images))
|
Receiver.send_message(u'cursor_busy')
|
||||||
|
self.plugin.formParent.displayProgressBar(len(images))
|
||||||
# Sort the themes by its filename considering language specific
|
# Sort the themes by its filename considering language specific
|
||||||
# characters. lower() is needed for windows!
|
# characters. lower() is needed for windows!
|
||||||
images.sort(cmp=locale.strcoll,
|
images.sort(cmp=locale.strcoll,
|
||||||
key=lambda filename: os.path.split(unicode(filename))[1].lower())
|
key=lambda filename: os.path.split(unicode(filename))[1].lower())
|
||||||
for imageFile in images:
|
for imageFile in images:
|
||||||
if not initialLoad:
|
|
||||||
self.plugin.formparent.incrementProgressBar()
|
|
||||||
filename = os.path.split(unicode(imageFile))[1]
|
filename = os.path.split(unicode(imageFile))[1]
|
||||||
thumb = os.path.join(self.servicePath, filename)
|
thumb = os.path.join(self.servicePath, filename)
|
||||||
if not os.path.exists(unicode(imageFile)):
|
if not os.path.exists(unicode(imageFile)):
|
||||||
@ -140,7 +144,10 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(imageFile))
|
item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(imageFile))
|
||||||
self.listView.addItem(item_name)
|
self.listView.addItem(item_name)
|
||||||
if not initialLoad:
|
if not initialLoad:
|
||||||
self.plugin.formparent.finishedProgressBar()
|
self.plugin.formParent.incrementProgressBar()
|
||||||
|
if not initialLoad:
|
||||||
|
self.plugin.formParent.finishedProgressBar()
|
||||||
|
Receiver.send_message(u'cursor_normal')
|
||||||
|
|
||||||
def generateSlideData(self, service_item, item=None, xmlVersion=False,
|
def generateSlideData(self, service_item, item=None, xmlVersion=False,
|
||||||
remote=False):
|
remote=False):
|
||||||
|
@ -41,8 +41,8 @@ class MediaPlugin(Plugin):
|
|||||||
Plugin.__init__(self, u'media', plugin_helpers,
|
Plugin.__init__(self, u'media', plugin_helpers,
|
||||||
MediaMediaItem)
|
MediaMediaItem)
|
||||||
self.weight = -6
|
self.weight = -6
|
||||||
self.icon_path = u':/plugins/plugin_media.png'
|
self.iconPath = u':/plugins/plugin_media.png'
|
||||||
self.icon = build_icon(self.icon_path)
|
self.icon = build_icon(self.iconPath)
|
||||||
# passed with drag and drop messages
|
# passed with drag and drop messages
|
||||||
self.dnd_id = u'Media'
|
self.dnd_id = u'Media'
|
||||||
self.audio_extensions_list = \
|
self.audio_extensions_list = \
|
||||||
@ -59,8 +59,8 @@ class MediaPlugin(Plugin):
|
|||||||
Create the settings Tab
|
Create the settings Tab
|
||||||
"""
|
"""
|
||||||
visible_name = self.getString(StringContent.VisibleName)
|
visible_name = self.getString(StringContent.VisibleName)
|
||||||
self.settings_tab = MediaTab(parent, self.name, visible_name[u'title'],
|
self.settingsTab = MediaTab(parent, self.name, visible_name[u'title'],
|
||||||
self.mediaController.mediaPlayers, self.icon_path)
|
self.mediaController.mediaPlayers, self.iconPath)
|
||||||
|
|
||||||
def about(self):
|
def about(self):
|
||||||
about_text = translate('MediaPlugin', '<strong>Media Plugin</strong>'
|
about_text = translate('MediaPlugin', '<strong>Media Plugin</strong>'
|
||||||
@ -142,6 +142,6 @@ class MediaPlugin(Plugin):
|
|||||||
self.mediaController.mediaPlayers[u'phonon'].isActive = True
|
self.mediaController.mediaPlayers[u'phonon'].isActive = True
|
||||||
settings.setValue(u'players', \
|
settings.setValue(u'players', \
|
||||||
QtCore.QVariant(u','.join(new_players)))
|
QtCore.QVariant(u','.join(new_players)))
|
||||||
self.settings_tab.load()
|
self.settingsTab.load()
|
||||||
settings.remove(u'use phonon')
|
settings.remove(u'use phonon')
|
||||||
settings.endGroup()
|
settings.endGroup()
|
||||||
|
@ -42,6 +42,9 @@ import time
|
|||||||
if os.name == u'nt':
|
if os.name == u'nt':
|
||||||
from win32com.client import Dispatch
|
from win32com.client import Dispatch
|
||||||
import pywintypes
|
import pywintypes
|
||||||
|
# Declare an empty exception to match the exception imported from UNO
|
||||||
|
class ErrorCodeIOException(Exception):
|
||||||
|
pass
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
import uno
|
import uno
|
||||||
@ -339,7 +342,6 @@ class ImpressDocument(PresentationDocument):
|
|||||||
Returns true if a presentation is loaded
|
Returns true if a presentation is loaded
|
||||||
"""
|
"""
|
||||||
log.debug(u'is loaded OpenOffice')
|
log.debug(u'is loaded OpenOffice')
|
||||||
#print "is_loaded "
|
|
||||||
if self.presentation is None or self.document is None:
|
if self.presentation is None or self.document is None:
|
||||||
log.debug("is_loaded: no presentation or document")
|
log.debug("is_loaded: no presentation or document")
|
||||||
return False
|
return False
|
||||||
@ -357,14 +359,9 @@ class ImpressDocument(PresentationDocument):
|
|||||||
Returns true if a presentation is active and running
|
Returns true if a presentation is active and running
|
||||||
"""
|
"""
|
||||||
log.debug(u'is active OpenOffice')
|
log.debug(u'is active OpenOffice')
|
||||||
#print "is_active "
|
|
||||||
if not self.is_loaded():
|
if not self.is_loaded():
|
||||||
#print "False "
|
|
||||||
return False
|
return False
|
||||||
#print "self.con ", self.control
|
return self.control is not None
|
||||||
if self.control is None:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def unblank_screen(self):
|
def unblank_screen(self):
|
||||||
"""
|
"""
|
||||||
|
@ -165,14 +165,15 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
titles = [os.path.split(file)[1] for file in currlist]
|
titles = [os.path.split(file)[1] for file in currlist]
|
||||||
Receiver.send_message(u'cursor_busy')
|
Receiver.send_message(u'cursor_busy')
|
||||||
if not initialLoad:
|
if not initialLoad:
|
||||||
self.plugin.formparent.displayProgressBar(len(files))
|
Receiver.send_message(u'cursor_busy')
|
||||||
|
self.plugin.formParent.displayProgressBar(len(files))
|
||||||
# Sort the themes by its filename considering language specific
|
# Sort the themes by its filename considering language specific
|
||||||
# characters. lower() is needed for windows!
|
# characters. lower() is needed for windows!
|
||||||
files.sort(cmp=locale.strcoll,
|
files.sort(cmp=locale.strcoll,
|
||||||
key=lambda filename: os.path.split(unicode(filename))[1].lower())
|
key=lambda filename: os.path.split(unicode(filename))[1].lower())
|
||||||
for file in files:
|
for file in files:
|
||||||
if not initialLoad:
|
if not initialLoad:
|
||||||
self.plugin.formparent.incrementProgressBar()
|
self.plugin.formParent.incrementProgressBar()
|
||||||
if currlist.count(file) > 0:
|
if currlist.count(file) > 0:
|
||||||
continue
|
continue
|
||||||
filename = os.path.split(unicode(file))[1]
|
filename = os.path.split(unicode(file))[1]
|
||||||
@ -216,7 +217,8 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
self.listView.addItem(item_name)
|
self.listView.addItem(item_name)
|
||||||
Receiver.send_message(u'cursor_normal')
|
Receiver.send_message(u'cursor_normal')
|
||||||
if not initialLoad:
|
if not initialLoad:
|
||||||
self.plugin.formparent.finishedProgressBar()
|
self.plugin.formParent.finishedProgressBar()
|
||||||
|
Receiver.send_message(u'cursor_normal')
|
||||||
|
|
||||||
def onDeleteClick(self):
|
def onDeleteClick(self):
|
||||||
"""
|
"""
|
||||||
@ -226,6 +228,8 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
items = self.listView.selectedIndexes()
|
items = self.listView.selectedIndexes()
|
||||||
row_list = [item.row() for item in items]
|
row_list = [item.row() for item in items]
|
||||||
row_list.sort(reverse=True)
|
row_list.sort(reverse=True)
|
||||||
|
Receiver.send_message(u'cursor_busy')
|
||||||
|
self.plugin.formParent.displayProgressBar(len(row_list))
|
||||||
for item in items:
|
for item in items:
|
||||||
filepath = unicode(item.data(
|
filepath = unicode(item.data(
|
||||||
QtCore.Qt.UserRole).toString())
|
QtCore.Qt.UserRole).toString())
|
||||||
@ -233,6 +237,9 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
doc = self.controllers[cidx].add_document(filepath)
|
doc = self.controllers[cidx].add_document(filepath)
|
||||||
doc.presentation_deleted()
|
doc.presentation_deleted()
|
||||||
doc.close_presentation()
|
doc.close_presentation()
|
||||||
|
self.plugin.formParent.incrementProgressBar()
|
||||||
|
self.plugin.formParent.finishedProgressBar()
|
||||||
|
Receiver.send_message(u'cursor_normal')
|
||||||
for row in row_list:
|
for row in row_list:
|
||||||
self.listView.takeItem(row)
|
self.listView.takeItem(row)
|
||||||
SettingsManager.set_list(self.settingsSection,
|
SettingsManager.set_list(self.settingsSection,
|
||||||
@ -256,13 +263,13 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
service_item.add_capability(ItemCapabilities.ProvidesOwnDisplay)
|
service_item.add_capability(ItemCapabilities.ProvidesOwnDisplay)
|
||||||
service_item.add_capability(ItemCapabilities.HasDetailedTitleDisplay)
|
service_item.add_capability(ItemCapabilities.HasDetailedTitleDisplay)
|
||||||
shortname = service_item.shortname
|
shortname = service_item.shortname
|
||||||
if shortname:
|
if not shortname:
|
||||||
|
return False
|
||||||
for bitem in items:
|
for bitem in items:
|
||||||
filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
|
filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
|
||||||
if os.path.exists(filename):
|
if os.path.exists(filename):
|
||||||
if shortname == self.Automatic:
|
if shortname == self.Automatic:
|
||||||
service_item.shortname = \
|
service_item.shortname = self.findControllerByType(filename)
|
||||||
self.findControllerByType(filename)
|
|
||||||
if not service_item.shortname:
|
if not service_item.shortname:
|
||||||
return False
|
return False
|
||||||
controller = self.controllers[service_item.shortname]
|
controller = self.controllers[service_item.shortname]
|
||||||
@ -287,18 +294,17 @@ class PresentationMediaItem(MediaManagerItem):
|
|||||||
'Missing Presentation'),
|
'Missing Presentation'),
|
||||||
unicode(translate(
|
unicode(translate(
|
||||||
'PresentationPlugin.MediaItem',
|
'PresentationPlugin.MediaItem',
|
||||||
'The Presentation %s is incomplete,'
|
'The presentation %s is incomplete,'
|
||||||
' please reload.')) % filename)
|
' please reload.')) % filename)
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
# File is no longer present
|
# File is no longer present
|
||||||
|
if not remote:
|
||||||
critical_error_message_box(
|
critical_error_message_box(
|
||||||
translate('PresentationPlugin.MediaItem',
|
translate('PresentationPlugin.MediaItem',
|
||||||
'Missing Presentation'),
|
'Missing Presentation'),
|
||||||
unicode(translate('PresentationPlugin.MediaItem',
|
unicode(translate('PresentationPlugin.MediaItem',
|
||||||
'The Presentation %s no longer exists.')) % filename)
|
'The presentation %s no longer exists.')) % filename)
|
||||||
return False
|
|
||||||
else:
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def findControllerByType(self, filename):
|
def findControllerByType(self, filename):
|
||||||
|
@ -54,16 +54,16 @@ class PresentationPlugin(Plugin):
|
|||||||
self.controllers = {}
|
self.controllers = {}
|
||||||
Plugin.__init__(self, u'presentations', plugin_helpers)
|
Plugin.__init__(self, u'presentations', plugin_helpers)
|
||||||
self.weight = -8
|
self.weight = -8
|
||||||
self.icon_path = u':/plugins/plugin_presentations.png'
|
self.iconPath = u':/plugins/plugin_presentations.png'
|
||||||
self.icon = build_icon(self.icon_path)
|
self.icon = build_icon(self.iconPath)
|
||||||
|
|
||||||
def createSettingsTab(self, parent):
|
def createSettingsTab(self, parent):
|
||||||
"""
|
"""
|
||||||
Create the settings Tab
|
Create the settings Tab
|
||||||
"""
|
"""
|
||||||
visible_name = self.getString(StringContent.VisibleName)
|
visible_name = self.getString(StringContent.VisibleName)
|
||||||
self.settings_tab = PresentationTab(parent, self.name,
|
self.settingsTab = PresentationTab(parent, self.name,
|
||||||
visible_name[u'title'], self.controllers, self.icon_path)
|
visible_name[u'title'], self.controllers, self.iconPath)
|
||||||
|
|
||||||
def initialise(self):
|
def initialise(self):
|
||||||
"""
|
"""
|
||||||
@ -99,7 +99,7 @@ class PresentationPlugin(Plugin):
|
|||||||
Create the Media Manager List
|
Create the Media Manager List
|
||||||
"""
|
"""
|
||||||
self.mediaItem = PresentationMediaItem(
|
self.mediaItem = PresentationMediaItem(
|
||||||
self.mediadock.media_dock, self, self.icon, self.controllers)
|
self.mediaDock.media_dock, self, self.icon, self.controllers)
|
||||||
|
|
||||||
def registerControllers(self, controller):
|
def registerControllers(self, controller):
|
||||||
"""
|
"""
|
||||||
@ -134,10 +134,7 @@ class PresentationPlugin(Plugin):
|
|||||||
for controller_class in controller_classes:
|
for controller_class in controller_classes:
|
||||||
controller = controller_class(self)
|
controller = controller_class(self)
|
||||||
self.registerControllers(controller)
|
self.registerControllers(controller)
|
||||||
if self.controllers:
|
return bool(self.controllers)
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def about(self):
|
def about(self):
|
||||||
"""
|
"""
|
||||||
|
BIN
openlp/plugins/remotes/html/images/ajax-loader.gif
Normal file
After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 503 B After Width: | Height: | Size: 340 B |
BIN
openlp/plugins/remotes/html/images/favicon.ico
Normal file
After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.6 KiB |
@ -31,6 +31,7 @@
|
|||||||
<title>${app_title}</title>
|
<title>${app_title}</title>
|
||||||
<link rel="stylesheet" href="/files/jquery.mobile.css" />
|
<link rel="stylesheet" href="/files/jquery.mobile.css" />
|
||||||
<link rel="stylesheet" href="/files/openlp.css" />
|
<link rel="stylesheet" href="/files/openlp.css" />
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="/files/images/favicon.ico">
|
||||||
<script type="text/javascript" src="/files/jquery.js"></script>
|
<script type="text/javascript" src="/files/jquery.js"></script>
|
||||||
<script type="text/javascript" src="/files/openlp.js"></script>
|
<script type="text/javascript" src="/files/openlp.js"></script>
|
||||||
<script type="text/javascript" src="/files/jquery.mobile.js"></script>
|
<script type="text/javascript" src="/files/jquery.mobile.js"></script>
|
||||||
@ -39,7 +40,7 @@
|
|||||||
"go_live": "${go_live}",
|
"go_live": "${go_live}",
|
||||||
"add_to_service": "${add_to_service}",
|
"add_to_service": "${add_to_service}",
|
||||||
"no_results": "${no_results}",
|
"no_results": "${no_results}",
|
||||||
"back": "${back}"
|
"home": "${home}"
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
@ -58,71 +59,79 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="page" id="service-manager">
|
<div data-role="page" id="service-manager">
|
||||||
<div data-role="header">
|
<div data-role="header" data-position="fixed">
|
||||||
<a href="#home" data-role="button" data-icon="home" data-iconpos="notext">${back}</a>
|
<a href="#home" data-role="button" data-icon="home" data-iconpos="left">${home}</a>
|
||||||
<h1>${service_manager}</h1>
|
<h1>${service_manager}</h1>
|
||||||
<a href="#" id="service-refresh" data-role="button" data-icon="refresh">${refresh}</a>
|
<a href="#" id="service-refresh" data-role="button" data-icon="refresh">${refresh}</a>
|
||||||
</div>
|
<div data-role="navbar">
|
||||||
<div class="ui-bar ui-bar-b">
|
<ul>
|
||||||
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
<li><a href="#service-manager" data-theme="e">Service</a></li>
|
||||||
<a href="#" id="service-top-blank" data-role="button" data-icon="blank">${blank}</a>
|
<li><a href="#slide-controller">Slides</a></li>
|
||||||
<a href="#" id="service-top-unblank" data-role="button" data-icon="unblank">${show}</a>
|
<li><a href="#alerts">Alerts</a></li>
|
||||||
</div>
|
<li><a href="#search">Search</a></li>
|
||||||
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
</ul>
|
||||||
<a href="#" id="service-top-previous" data-role="button" data-icon="arrow-l">${prev}</a>
|
|
||||||
<a href="#" id="service-top-next" data-role="button" data-icon="arrow-r" data-iconpos="right">${next}</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<ul data-role="listview" data-inset="true">
|
<ul data-role="listview" data-inset="true">
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="footer" data-theme="b" class="ui-bar">
|
<div data-role="footer" data-theme="b" class="ui-bar" data-position="fixed">
|
||||||
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
||||||
<a href="#" id="service-btm-blank" data-role="button" data-icon="blank">${blank}</a>
|
<a href="#" id="service-blank" data-role="button" data-icon="blank">${blank}</a>
|
||||||
<a href="#" id="service-btm-unblank" data-role="button" data-icon="unblank">${show}</a>
|
<a href="#" id="service-theme" data-role="button">${theme}</a>
|
||||||
|
<a href="#" id="service-desktop" data-role="button">${desktop}</a>
|
||||||
|
<a href="#" id="service-show" data-role="button" data-icon="unblank" data-iconpos="right">${show}</a>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
||||||
<a href="#" id="service-btm-previous" data-role="button" data-icon="arrow-l">${prev}</a>
|
<a href="#" id="service-previous" data-role="button" data-icon="arrow-l">${prev}</a>
|
||||||
<a href="#" id="service-btm-next" data-role="button" data-icon="arrow-r" data-iconpos="right">${next}</a>
|
<a href="#" id="service-next" data-role="button" data-icon="arrow-r" data-iconpos="right">${next}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="page" id="slide-controller">
|
<div data-role="page" id="slide-controller">
|
||||||
<div data-role="header">
|
<div data-role="header" data-position="fixed">
|
||||||
<a href="#home" data-role="button" data-icon="home" data-iconpos="notext">${back}</a>
|
<a href="#home" data-role="button" data-icon="home" data-iconpos="left">${home}</a>
|
||||||
<h1>${slide_controller}</h1>
|
<h1>${slide_controller}</h1>
|
||||||
<a href="#" id="controller-refresh" data-role="button" data-icon="refresh">${refresh}</a>
|
<a href="#" id="controller-refresh" data-role="button" data-icon="refresh">${refresh}</a>
|
||||||
</div>
|
<div data-role="navbar">
|
||||||
<div class="ui-bar ui-bar-b">
|
<ul>
|
||||||
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
<li><a href="#service-manager">Service</a></li>
|
||||||
<a href="#" id="controller-top-blank" data-role="button" data-icon="blank">${blank}</a>
|
<li><a href="#slide-controller" data-theme="e">Slides</a></li>
|
||||||
<a href="#" id="controller-top-unblank" data-role="button" data-icon="unblank">${show}</a>
|
<li><a href="#alerts">Alerts</a></li>
|
||||||
</div>
|
<li><a href="#search">Search</a></li>
|
||||||
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
</ul>
|
||||||
<a href="#" id="controller-top-previous" data-role="button" data-icon="arrow-l">${prev}</a>
|
|
||||||
<a href="#" id="controller-top-next" data-role="button" data-icon="arrow-r" data-iconpos="right">${next}</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<ul data-role="listview" data-inset="true">
|
<ul data-role="listview" data-inset="true">
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="footer" data-theme="b" class="ui-bar">
|
<div data-role="footer" data-theme="b" class="ui-bar" data-position="fixed">
|
||||||
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
||||||
<a href="#" id="controller-btm-blank" data-role="button" data-icon="blank">${blank}</a>
|
<a href="#" id="controller-blank" data-role="button" data-icon="blank">${blank}</a>
|
||||||
<a href="#" id="controller-btm-unblank" data-role="button" data-icon="unblank">${show}</a>
|
<a href="#" id="controller-theme" data-role="button">${theme}</a>
|
||||||
|
<a href="#" id="controller-desktop" data-role="button">${desktop}</a>
|
||||||
|
<a href="#" id="controller-show" data-role="button" data-icon="unblank" data-iconpos="right">${show}</a>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
<div data-role="controlgroup" data-type="horizontal" style="float: left;">
|
||||||
<a href="#" id="controller-btm-previous" data-role="button" data-icon="arrow-l">${prev}</a>
|
<a href="#" id="controller-previous" data-role="button" data-icon="arrow-l">${prev}</a>
|
||||||
<a href="#" id="controller-btm-next" data-role="button" data-icon="arrow-r" data-iconpos="right">${next}</a>
|
<a href="#" id="controller-next" data-role="button" data-icon="arrow-r" data-iconpos="right">${next}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="page" id="alerts">
|
<div data-role="page" id="alerts">
|
||||||
<div data-role="header">
|
<div data-role="header">
|
||||||
<a href="#home" data-role="button" data-icon="home" data-iconpos="notext">${back}</a>
|
<a href="#home" data-role="button" data-icon="home" data-iconpos="left">${home}</a>
|
||||||
<h1>${alerts}</h1>
|
<h1>${alerts}</h1>
|
||||||
|
<div data-role="navbar">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#service-manager">Service</a></li>
|
||||||
|
<li><a href="#slide-controller">Slides</a></li>
|
||||||
|
<li><a href="#alerts" data-theme="e">Alerts</a></li>
|
||||||
|
<li><a href="#search">Search</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div data-role="fieldcontain">
|
<div data-role="fieldcontain">
|
||||||
@ -133,9 +142,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="page" id="search">
|
<div data-role="page" id="search">
|
||||||
<div data-role="header">
|
<div data-role="header" data-position="fixed">
|
||||||
<a href="#home" data-role="button" data-icon="home" data-iconpos="notext">${back}</a>
|
<a href="#home" data-role="button" data-icon="home" data-iconpos="left">${home}</a>
|
||||||
<h1>${search}</h1>
|
<h1>${search}</h1>
|
||||||
|
<div data-role="navbar">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#service-manager">Service</a></li>
|
||||||
|
<li><a href="#slide-controller">Slides</a></li>
|
||||||
|
<li><a href="#alerts">Alerts</a></li>
|
||||||
|
<li><a href="#search" data-theme="e">Search</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
<div data-role="fieldcontain">
|
<div data-role="fieldcontain">
|
||||||
@ -158,6 +175,7 @@
|
|||||||
<input type="hidden" id="selected-item" value="" />
|
<input type="hidden" id="selected-item" value="" />
|
||||||
<a href="#" id="go-live" data-role="button">${go_live}</a>
|
<a href="#" id="go-live" data-role="button">${go_live}</a>
|
||||||
<a href="#" id="add-to-service" data-role="button">${add_to_service}</a>
|
<a href="#" id="add-to-service" data-role="button">${add_to_service}</a>
|
||||||
|
<a href="#" id="add-and-go-to-service" data-role="button">${add_and_go_to_service}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
8
openlp/plugins/remotes/html/jquery.js
vendored
@ -1,179 +1,177 @@
|
|||||||
/*!
|
/*! jQuery Mobile v1.1.0 db342b1f315c282692791aa870455901fdb46a55 jquerymobile.com | jquery.org/license */
|
||||||
* jQuery Mobile v1.0rc2
|
(function(D,s,k){typeof define==="function"&&define.amd?define(["jquery"],function(a){k(a,D,s);return a.mobile}):k(D.jQuery,D,s)})(this,document,function(D,s,k){(function(a,c,b,e){function f(a){for(;a&&typeof a.originalEvent!=="undefined";)a=a.originalEvent;return a}function d(b){for(var d={},f,g;b;){f=a.data(b,t);for(g in f)if(f[g])d[g]=d.hasVirtualBinding=true;b=b.parentNode}return d}function g(){y&&(clearTimeout(y),y=0);y=setTimeout(function(){F=y=0;C.length=0;z=false;G=true},a.vmouse.resetTimerDuration)}
|
||||||
* http://jquerymobile.com/
|
function h(b,d,g){var c,h;if(!(h=g&&g[b])){if(g=!g)a:{for(g=d.target;g;){if((h=a.data(g,t))&&(!b||h[b]))break a;g=g.parentNode}g=null}h=g}if(h){c=d;var g=c.type,z,j;c=a.Event(c);c.type=b;h=c.originalEvent;z=a.event.props;g.search(/^(mouse|click)/)>-1&&(z=w);if(h)for(j=z.length;j;)b=z[--j],c[b]=h[b];if(g.search(/mouse(down|up)|click/)>-1&&!c.which)c.which=1;if(g.search(/^touch/)!==-1&&(b=f(h),g=b.touches,b=b.changedTouches,g=g&&g.length?g[0]:b&&b.length?b[0]:e))for(h=0,len=u.length;h<len;h++)b=u[h],
|
||||||
*
|
c[b]=g[b];a(d.target).trigger(c)}return c}function j(b){var d=a.data(b.target,x);if(!z&&(!F||F!==d))if(d=h("v"+b.type,b))d.isDefaultPrevented()&&b.preventDefault(),d.isPropagationStopped()&&b.stopPropagation(),d.isImmediatePropagationStopped()&&b.stopImmediatePropagation()}function o(b){var g=f(b).touches,c;if(g&&g.length===1&&(c=b.target,g=d(c),g.hasVirtualBinding))F=L++,a.data(c,x,F),y&&(clearTimeout(y),y=0),A=G=false,c=f(b).touches[0],s=c.pageX,E=c.pageY,h("vmouseover",b,g),h("vmousedown",b,g)}
|
||||||
* Copyright 2011, jQuery Project
|
function m(a){G||(A||h("vmousecancel",a,d(a.target)),A=true,g())}function p(b){if(!G){var c=f(b).touches[0],e=A,z=a.vmouse.moveDistanceThreshold;A=A||Math.abs(c.pageX-s)>z||Math.abs(c.pageY-E)>z;flags=d(b.target);A&&!e&&h("vmousecancel",b,flags);h("vmousemove",b,flags);g()}}function l(a){if(!G){G=true;var b=d(a.target),c;h("vmouseup",a,b);if(!A&&(c=h("vclick",a,b))&&c.isDefaultPrevented())c=f(a).changedTouches[0],C.push({touchID:F,x:c.clientX,y:c.clientY}),z=true;h("vmouseout",a,b);A=false;g()}}function r(b){var b=
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
a.data(b,t),d;if(b)for(d in b)if(b[d])return true;return false}function n(){}function k(b){var d=b.substr(1);return{setup:function(){r(this)||a.data(this,t,{});a.data(this,t)[b]=true;v[b]=(v[b]||0)+1;v[b]===1&&H.bind(d,j);a(this).bind(d,n);if(K)v.touchstart=(v.touchstart||0)+1,v.touchstart===1&&H.bind("touchstart",o).bind("touchend",l).bind("touchmove",p).bind("scroll",m)},teardown:function(){--v[b];v[b]||H.unbind(d,j);K&&(--v.touchstart,v.touchstart||H.unbind("touchstart",o).unbind("touchmove",p).unbind("touchend",
|
||||||
* http://jquery.org/license
|
l).unbind("scroll",m));var f=a(this),g=a.data(this,t);g&&(g[b]=false);f.unbind(d,n);r(this)||f.removeData(t)}}}var t="virtualMouseBindings",x="virtualTouchID",c="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),u="clientX clientY pageX pageY screenX screenY".split(" "),w=a.event.props.concat(a.event.mouseHooks?a.event.mouseHooks.props:[]),v={},y=0,s=0,E=0,A=false,C=[],z=false,G=false,K="addEventListener"in b,H=a(b),L=1,F=0;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,
|
||||||
*/
|
resetTimerDuration:1500};for(var I=0;I<c.length;I++)a.event.special[c[I]]=k(c[I]);K&&b.addEventListener("click",function(b){var d=C.length,f=b.target,g,c,e,h,z;if(d){g=b.clientX;c=b.clientY;threshold=a.vmouse.clickDistanceThreshold;for(e=f;e;){for(h=0;h<d;h++)if(z=C[h],e===f&&Math.abs(z.x-g)<threshold&&Math.abs(z.y-c)<threshold||a.data(e,x)===z.touchID){b.preventDefault();b.stopPropagation();return}e=e.parentNode}}},true)})(jQuery,s,k);(function(a,c,b){function e(a){a=a||location.href;return"#"+a.replace(/^[^#]*#?(.*)$/,
|
||||||
(function(a,e){if(a.cleanData){var b=a.cleanData;a.cleanData=function(f){for(var c=0,h;(h=f[c])!=null;c++)a(h).triggerHandler("remove");b(f)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){a(this).triggerHandler("remove")});return d.call(a(this),b,c)})}}a.widget=function(b,c,h){var d=b.split(".")[0],e,b=b.split(".")[1];e=d+"-"+b;if(!h)h=c,c=a.Widget;a.expr[":"][e]=function(c){return!!a.data(c,
|
"$1")}var f="hashchange",d=k,g,h=a.event.special,j=d.documentMode,o="on"+f in c&&(j===b||j>7);a.fn[f]=function(a){return a?this.bind(f,a):this.trigger(f)};a.fn[f].delay=50;h[f]=a.extend(h[f],{setup:function(){if(o)return false;a(g.start)},teardown:function(){if(o)return false;a(g.stop)}});g=function(){function g(){var b=e(),d=t(r);if(b!==r)k(r=b,d),a(c).trigger(f);else if(d!==r)location.href=location.href.replace(/#.*/,"")+d;j=setTimeout(g,a.fn[f].delay)}var h={},j,r=e(),n=function(a){return a},k=
|
||||||
b)};a[d]=a[d]||{};a[d][b]=function(a,b){arguments.length&&this._createWidget(a,b)};c=new c;c.options=a.extend(true,{},c.options);a[d][b].prototype=a.extend(true,c,{namespace:d,widgetName:b,widgetEventPrefix:a[d][b].prototype.widgetEventPrefix||b,widgetBaseClass:e},h);a.widget.bridge(b,a[d][b])};a.widget.bridge=function(b,c){a.fn[b]=function(d){var g=typeof d==="string",i=Array.prototype.slice.call(arguments,1),k=this,d=!g&&i.length?a.extend.apply(null,[true,d].concat(i)):d;if(g&&d.charAt(0)==="_")return k;
|
n,t=n;h.start=function(){j||g()};h.stop=function(){j&&clearTimeout(j);j=b};a.browser.msie&&!o&&function(){var b,c;h.start=function(){if(!b)c=(c=a.fn[f].src)&&c+e(),b=a('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){c||k(e());g()}).attr("src",c||"javascript:0").insertAfter("body")[0].contentWindow,d.onpropertychange=function(){try{if(event.propertyName==="title")b.document.title=d.title}catch(a){}}};h.stop=n;t=function(){return e(b.location.href)};k=function(g,c){var e=b.document,
|
||||||
g?this.each(function(){var c=a.data(this,b);if(!c)throw"cannot call methods on "+b+" prior to initialization; attempted to call method '"+d+"'";if(!a.isFunction(c[d]))throw"no such method '"+d+"' for "+b+" widget instance";var g=c[d].apply(c,i);if(g!==c&&g!==e)return k=g,false}):this.each(function(){var e=a.data(this,b);e?e.option(d||{})._init():a.data(this,b,new c(d,this))});return k}};a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",
|
h=a.fn[f].domain;if(g!==c)e.title=d.title,e.open(),h&&e.write('<script>document.domain="'+h+'"<\/script>'),e.close(),b.location.hash=g}}();return h}()})(jQuery,this);(function(a,c){if(a.cleanData){var b=a.cleanData;a.cleanData=function(f){for(var d=0,g;(g=f[d])!=null;d++)a(g).triggerHandler("remove");b(f)}}else{var e=a.fn.remove;a.fn.remove=function(b,d){return this.each(function(){d||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){a(this).triggerHandler("remove")});return e.call(a(this),
|
||||||
options:{disabled:false},_createWidget:function(b,c){a.data(c,this.widgetName,this);this.element=a(c);this.options=a.extend(true,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){var b={};a.metadata&&(b=a.metadata.get(element)[this.widgetName]);return b},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);
|
b,d)})}}a.widget=function(b,d,g){var c=b.split(".")[0],e,b=b.split(".")[1];e=c+"-"+b;if(!g)g=d,d=a.Widget;a.expr[":"][e]=function(d){return!!a.data(d,b)};a[c]=a[c]||{};a[c][b]=function(a,b){arguments.length&&this._createWidget(a,b)};d=new d;d.options=a.extend(true,{},d.options);a[c][b].prototype=a.extend(true,d,{namespace:c,widgetName:b,widgetEventPrefix:a[c][b].prototype.widgetEventPrefix||b,widgetBaseClass:e},g);a.widget.bridge(b,a[c][b])};a.widget.bridge=function(b,d){a.fn[b]=function(g){var e=
|
||||||
this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(b,c){var d=b;if(arguments.length===0)return a.extend({},this.options);if(typeof b==="string"){if(c===e)return this.options[b];d={};d[b]=c}this._setOptions(d);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b;a==="disabled"&&
|
typeof g==="string",j=Array.prototype.slice.call(arguments,1),o=this,g=!e&&j.length?a.extend.apply(null,[true,g].concat(j)):g;if(e&&g.charAt(0)==="_")return o;e?this.each(function(){var d=a.data(this,b);if(!d)throw"cannot call methods on "+b+" prior to initialization; attempted to call method '"+g+"'";if(!a.isFunction(d[g]))throw"no such method '"+g+"' for "+b+" widget instance";var e=d[g].apply(d,j);if(e!==d&&e!==c)return o=e,false}):this.each(function(){var c=a.data(this,b);c?c.option(g||{})._init():
|
||||||
this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(b,c,d){var e=this.options[b],c=a.Event(c);c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase();d=d||{};if(c.originalEvent)for(var b=a.event.props.length,i;b;)i=a.event.props[--b],c[i]=c.originalEvent[i];this.element.trigger(c,
|
a.data(this,b,new d(g,this))});return o}};a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(b,d){a.data(d,this.widgetName,this);this.element=a(d);this.options=a.extend(true,{},this.options,this._getCreateOptions(),b);var g=this;this.element.bind("remove."+this.widgetName,function(){g.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){var b=
|
||||||
d);return!(a.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
|
{};a.metadata&&(b=a.metadata.get(element)[this.widgetName]);return b},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(b,d){var g=b;if(arguments.length===0)return a.extend({},this.options);if(typeof b==="string"){if(d===c)return this.options[b];
|
||||||
(function(a,e){a.widget("mobile.widget",{_createWidget:function(){a.Widget.prototype._createWidget.apply(this,arguments);this._trigger("init")},_getCreateOptions:function(){var b=this.element,d={};a.each(this.options,function(a){var c=b.jqmData(a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()}));c!==e&&(d[a]=c)});return d},enhanceWithin:function(b){var d=a(b).closest(":jqmData(role='page')").data("page"),d=d&&d.keepNativeSelector()||"";a(this.options.initSelector,b).not(d)[this.widgetName]()}})})(jQuery);
|
g={};g[b]=d}this._setOptions(g);return this},_setOptions:function(b){var d=this;a.each(b,function(a,b){d._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b;a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(b,d,g){var c=this.options[b],d=a.Event(d);
|
||||||
(function(a){a(window);var e=a("html");a.mobile.media=function(){var b={},d=a("<div id='jquery-mediatest'>"),f=a("<body>").append(d);return function(a){if(!(a in b)){var h=document.createElement("style"),g="@media "+a+" { #jquery-mediatest { position:absolute; } }";h.type="text/css";h.styleSheet?h.styleSheet.cssText=g:h.appendChild(document.createTextNode(g));e.prepend(f).prepend(h);b[a]=d.css("position")==="absolute";f.add(h).remove()}return b[a]}}()})(jQuery);
|
d.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase();g=g||{};if(d.originalEvent)for(var b=a.event.props.length,e;b;)e=a.event.props[--b],d[e]=d.originalEvent[e];this.element.trigger(d,g);return!(a.isFunction(c)&&c.call(this.element[0],d,g)===false||d.isDefaultPrevented())}}})(jQuery);(function(a,c){a.widget("mobile.widget",{_createWidget:function(){a.Widget.prototype._createWidget.apply(this,arguments);this._trigger("init")},_getCreateOptions:function(){var b=this.element,
|
||||||
(function(a,e){function b(a){var b=a.charAt(0).toUpperCase()+a.substr(1),a=(a+" "+c.join(b+" ")+b).split(" "),d;for(d in a)if(f[a[d]]!==e)return true}var d=a("<body>").prependTo("html"),f=d[0].style,c=["Webkit","Moz","O"],h="palmGetResource"in window,g=window.operamini&&{}.toString.call(window.operamini)==="[object OperaMini]",i=window.blackberry;a.mobile.browser={};a.mobile.browser.ie=function(){for(var a=3,b=document.createElement("div"),c=b.all||[];b.innerHTML="<\!--[if gt IE "+ ++a+"]><br><![endif]--\>",
|
e={};a.each(this.options,function(a){var d=b.jqmData(a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()}));d!==c&&(e[a]=d)});return e},enhanceWithin:function(b,c){this.enhance(a(this.options.initSelector,a(b)),c)},enhance:function(b,c){var f,d=a(b),d=a.mobile.enhanceable(d);c&&d.length&&(f=(f=a.mobile.closestPageData(d))&&f.keepNativeSelector()||"",d=d.not(f));d[this.widgetName]()},raise:function(a){throw"Widget ["+this.widgetName+"]: "+a;}})})(jQuery);(function(a,c){var b={};a.mobile=a.extend({},
|
||||||
c[0];);return a>4?a:!a}();a.extend(a.support,{orientation:"orientation"in window&&"onorientationchange"in window,touch:"ontouchend"in document,cssTransitions:"WebKitTransitionEvent"in window,pushState:"pushState"in history&&"replaceState"in history,mediaquery:a.mobile.media("only all"),cssPseudoElement:!!b("content"),touchOverflow:!!b("overflowScrolling"),boxShadow:!!b("boxShadow")&&!i,scrollTop:("pageXOffset"in window||"scrollTop"in document.documentElement||"scrollTop"in d[0])&&!h&&!g,dynamicBaseTag:function(){var b=
|
{version:"1.1.0",ns:"",subPageUrlKey:"ui-page",activePageClass:"ui-page-active",activeBtnClass:"ui-btn-active",focusClass:"ui-focus",ajaxEnabled:true,hashListeningEnabled:true,linkBindingEnabled:true,defaultPageTransition:"fade",maxTransitionWidth:false,minScrollBack:250,touchOverflowEnabled:false,defaultDialogTransition:"pop",loadingMessage:"loading",pageLoadErrorMessage:"Error Loading Page",loadingMessageTextVisible:false,loadingMessageTheme:"a",pageLoadErrorMessageTheme:"e",autoInitializePage:true,
|
||||||
location.protocol+"//"+location.host+location.pathname+"ui-dir/",c=a("head base"),f=null,e="",h;c.length?e=c.attr("href"):c=f=a("<base>",{href:b}).appendTo("head");h=a("<a href='testurl' />").prependTo(d)[0].href;c[0].href=e||location.pathname;f&&f.remove();return h.indexOf(b)===0}()});d.remove();h=function(){var a=window.navigator.userAgent;return a.indexOf("Nokia")>-1&&(a.indexOf("Symbian/3")>-1||a.indexOf("Series60/5")>-1)&&a.indexOf("AppleWebKit")>-1&&a.match(/(BrowserNG|NokiaBrowser)\/7\.[0-3]/)}();
|
pushStateEnabled:true,ignoreContentEnabled:false,orientationChangeEnabled:true,buttonMarkup:{hoverDelay:200},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91},silentScroll:function(b){if(a.type(b)!==
|
||||||
a.mobile.ajaxBlacklist=window.blackberry&&!window.WebKitPoint||g||h;h&&a(function(){a("head link[rel='stylesheet']").attr("rel","alternate stylesheet").attr("rel","stylesheet")});a.support.boxShadow||a("html").addClass("ui-mobile-nosupport-boxshadow")})(jQuery);
|
"number")b=a.mobile.defaultHomeScroll;a.event.special.scrollstart.enabled=false;setTimeout(function(){c.scrollTo(0,b);a(k).trigger("silentscroll",{x:0,y:b})},20);setTimeout(function(){a.event.special.scrollstart.enabled=true},150)},nsNormalizeDict:b,nsNormalize:function(d){return!d?void 0:b[d]||(b[d]=a.camelCase(a.mobile.ns+d))},getInheritedTheme:function(a,b){for(var c=a[0],e="",f=/ui-(bar|body|overlay)-([a-z])\b/,m,p;c;){m=c.className||"";if((p=f.exec(m))&&(e=p[2]))break;c=c.parentNode}return e||
|
||||||
(function(a,e,b,d){function f(a){for(;a&&typeof a.originalEvent!=="undefined";)a=a.originalEvent;return a}function c(b){for(var c={},f,d;b;){f=a.data(b,n);for(d in f)if(f[d])c[d]=c.hasVirtualBinding=true;b=b.parentNode}return c}function h(){v&&(clearTimeout(v),v=0);v=setTimeout(function(){E=v=0;u.length=0;D=false;y=true},a.vmouse.resetTimerDuration)}function g(b,c,r){var e,h;if(!(h=r&&r[b])){if(r=!r)a:{for(r=c.target;r;){if((h=a.data(r,n))&&(!b||h[b]))break a;r=r.parentNode}r=null}h=r}if(h){e=c;var r=
|
b||"a"},closestPageData:function(a){return a.closest(':jqmData(role="page"), :jqmData(role="dialog")').data("page")},enhanceable:function(a){return this.haveParents(a,"enhance")},hijackable:function(a){return this.haveParents(a,"ajax")},haveParents:function(b,c){if(!a.mobile.ignoreContentEnabled)return b;for(var e=b.length,f=a(),o,m,p,l=0;l<e;l++){m=b.eq(l);p=false;for(o=b[l];o;){if((o.getAttribute?o.getAttribute("data-"+a.mobile.ns+c):"")==="false"){p=true;break}o=o.parentNode}p||(f=f.add(m))}return f}},
|
||||||
e.type,j,g;e=a.Event(e);e.type=b;h=e.originalEvent;j=a.event.props;if(h)for(g=j.length;g;)b=j[--g],e[b]=h[b];if(r.search(/mouse(down|up)|click/)>-1&&!e.which)e.which=1;if(r.search(/^touch/)!==-1&&(b=f(h),r=b.touches,b=b.changedTouches,r=r&&r.length?r[0]:b&&b.length?b[0]:d))for(h=0,len=z.length;h<len;h++)b=z[h],e[b]=r[b];a(c.target).trigger(e)}return e}function i(b){var c=a.data(b.target,A);if(!D&&(!E||E!==c))if(c=g("v"+b.type,b))c.isDefaultPrevented()&&b.preventDefault(),c.isPropagationStopped()&&
|
a.mobile);a.fn.jqmData=function(b,c){var f;typeof b!="undefined"&&(b&&(b=a.mobile.nsNormalize(b)),f=this.data.apply(this,arguments.length<2?[b]:[b,c]));return f};a.jqmData=function(b,c,f){var e;typeof c!="undefined"&&(e=a.data(b,c?a.mobile.nsNormalize(c):c,f));return e};a.fn.jqmRemoveData=function(b){return this.removeData(a.mobile.nsNormalize(b))};a.jqmRemoveData=function(b,c){return a.removeData(b,a.mobile.nsNormalize(c))};a.fn.removeWithDependents=function(){a.removeWithDependents(this)};a.removeWithDependents=
|
||||||
b.stopPropagation(),c.isImmediatePropagationStopped()&&b.stopImmediatePropagation()}function k(b){var d=f(b).touches,e;if(d&&d.length===1&&(e=b.target,d=c(e),d.hasVirtualBinding))E=r++,a.data(e,A,E),v&&(clearTimeout(v),v=0),w=y=false,e=f(b).touches[0],x=e.pageX,t=e.pageY,g("vmouseover",b,d),g("vmousedown",b,d)}function l(a){y||(w||g("vmousecancel",a,c(a.target)),w=true,h())}function o(b){if(!y){var d=f(b).touches[0],r=w,e=a.vmouse.moveDistanceThreshold;w=w||Math.abs(d.pageX-x)>e||Math.abs(d.pageY-
|
function(b){b=a(b);(b.jqmData("dependents")||a()).remove();b.remove()};a.fn.addDependents=function(b){a.addDependents(a(this),b)};a.addDependents=function(b,c){var f=a(b).jqmData("dependents")||a();a(b).jqmData("dependents",a.merge(f,c))};a.fn.getEncodedText=function(){return a("<div/>").text(a(this).text()).html()};a.fn.jqmEnhanceable=function(){return a.mobile.enhanceable(this)};a.fn.jqmHijackable=function(){return a.mobile.hijackable(this)};var e=a.find,f=/:jqmData\(([^)]*)\)/g;a.find=function(b,
|
||||||
t)>e;flags=c(b.target);w&&!r&&g("vmousecancel",b,flags);g("vmousemove",b,flags);h()}}function m(a){if(!y){y=true;var b=c(a.target),d;g("vmouseup",a,b);if(!w&&(d=g("vclick",a,b))&&d.isDefaultPrevented())d=f(a).changedTouches[0],u.push({touchID:E,x:d.clientX,y:d.clientY}),D=true;g("vmouseout",a,b);w=false;h()}}function p(b){var b=a.data(b,n),c;if(b)for(c in b)if(b[c])return true;return false}function j(){}function q(b){var c=b.substr(1);return{setup:function(){p(this)||a.data(this,n,{});a.data(this,
|
c,h,j){b=b.replace(f,"[data-"+(a.mobile.ns||"")+"$1]");return e.call(this,b,c,h,j)};a.extend(a.find,e);a.find.matches=function(b,c){return a.find(b,null,null,c)};a.find.matchesSelector=function(b,c){return a.find(c,null,null,[b]).length>0}})(jQuery,this);(function(a){a(s);var c=a("html");a.mobile.media=function(){var b={},e=a("<div id='jquery-mediatest'>"),f=a("<body>").append(e);return function(a){if(!(a in b)){var g=k.createElement("style"),h="@media "+a+" { #jquery-mediatest { position:absolute; } }";
|
||||||
n)[b]=true;s[b]=(s[b]||0)+1;s[b]===1&&B.bind(c,i);a(this).bind(c,j);if(C)s.touchstart=(s.touchstart||0)+1,s.touchstart===1&&B.bind("touchstart",k).bind("touchend",m).bind("touchmove",o).bind("scroll",l)},teardown:function(){--s[b];s[b]||B.unbind(c,i);C&&(--s.touchstart,s.touchstart||B.unbind("touchstart",k).unbind("touchmove",o).unbind("touchend",m).unbind("scroll",l));var d=a(this),f=a.data(this,n);f&&(f[b]=false);d.unbind(c,j);p(this)||d.removeData(n)}}}var n="virtualMouseBindings",A="virtualTouchID",
|
g.type="text/css";g.styleSheet?g.styleSheet.cssText=h:g.appendChild(k.createTextNode(h));c.prepend(f).prepend(g);b[a]=e.css("position")==="absolute";f.add(g).remove()}return b[a]}}()})(jQuery);(function(a,c){function b(a){var b=a.charAt(0).toUpperCase()+a.substr(1),a=(a+" "+g.join(b+" ")+b).split(" "),f;for(f in a)if(d[a[f]]!==c)return true}function e(a,b,c){var d=k.createElement("div"),c=c?[c]:g,f;for(i=0;i<c.length;i++){var e=c[i],h="-"+e.charAt(0).toLowerCase()+e.substr(1)+"-"+a+": "+b+";",e=e.charAt(0).toUpperCase()+
|
||||||
e="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),z="clientX clientY pageX pageY screenX screenY".split(" "),s={},v=0,x=0,t=0,w=false,u=[],D=false,y=false,C="addEventListener"in b,B=a(b),r=1,E=0;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(var F=0;F<e.length;F++)a.event.special[e[F]]=q(e[F]);C&&b.addEventListener("click",function(b){var c=u.length,d=b.target,f,r,e,h,j;if(c){f=b.clientX;r=b.clientY;threshold=a.vmouse.clickDistanceThreshold;
|
e.substr(1)+(a.charAt(0).toUpperCase()+a.substr(1));d.setAttribute("style",h);d.style[e]&&(f=true)}return!!f}var f=a("<body>").prependTo("html"),d=f[0].style,g=["Webkit","Moz","O"],h="palmGetResource"in s,j=s.operamini&&{}.toString.call(s.operamini)==="[object OperaMini]",o=s.blackberry;a.extend(a.mobile,{browser:{}});a.mobile.browser.ie=function(){for(var a=3,b=k.createElement("div"),c=b.all||[];b.innerHTML="<\!--[if gt IE "+ ++a+"]><br><![endif]--\>",c[0];);return a>4?a:!a}();a.extend(a.support,
|
||||||
for(e=d;e;){for(h=0;h<c;h++)if(j=u[h],e===d&&Math.abs(j.x-f)<threshold&&Math.abs(j.y-r)<threshold||a.data(e,A)===j.touchID){b.preventDefault();b.stopPropagation();return}e=e.parentNode}}},true)})(jQuery,window,document);
|
{orientation:"orientation"in s&&"onorientationchange"in s,touch:"ontouchend"in k,cssTransitions:"WebKitTransitionEvent"in s||e("transition","height 100ms linear"),pushState:"pushState"in history&&"replaceState"in history,mediaquery:a.mobile.media("only all"),cssPseudoElement:!!b("content"),touchOverflow:!!b("overflowScrolling"),cssTransform3d:e("perspective","10px","moz")||a.mobile.media("(-"+g.join("-transform-3d),(-")+"-transform-3d),(transform-3d)"),boxShadow:!!b("boxShadow")&&!o,scrollTop:("pageXOffset"in
|
||||||
(function(a,e,b){function d(b,c,d){var f=d.type;d.type=c;a.event.handle.call(b,d);d.type=f}a.each("touchstart touchmove touchend orientationchange throttledresize tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(b,c){a.fn[c]=function(a){return a?this.bind(c,a):this.trigger(c)};a.attrFn[c]=true});var f=a.support.touch,c=f?"touchstart":"mousedown",h=f?"touchend":"mouseup",g=f?"touchmove":"mousemove";a.event.special.scrollstart={enabled:true,setup:function(){function b(a,
|
s||"scrollTop"in k.documentElement||"scrollTop"in f[0])&&!h&&!j,dynamicBaseTag:function(){var b=location.protocol+"//"+location.host+location.pathname+"ui-dir/",c=a("head base"),d=null,e="",g;c.length?e=c.attr("href"):c=d=a("<base>",{href:b}).appendTo("head");g=a("<a href='testurl' />").prependTo(f)[0].href;c[0].href=e||location.pathname;d&&d.remove();return g.indexOf(b)===0}()});f.remove();h=function(){var a=s.navigator.userAgent;return a.indexOf("Nokia")>-1&&(a.indexOf("Symbian/3")>-1||a.indexOf("Series60/5")>
|
||||||
e){f=e;d(c,f?"scrollstart":"scrollstop",a)}var c=this,f,e;a(c).bind("touchmove scroll",function(c){a.event.special.scrollstart.enabled&&(f||b(c,true),clearTimeout(e),e=setTimeout(function(){b(c,false)},50))})}};a.event.special.tap={setup:function(){var b=this,c=a(b);c.bind("vmousedown",function(f){function e(){clearTimeout(q)}function h(){e();c.unbind("vclick",g).unbind("vmouseup",e).unbind("vmousecancel",h)}function g(a){h();j==a.target&&d(b,"tap",a)}if(f.which&&f.which!==1)return false;var j=f.target,
|
-1)&&a.indexOf("AppleWebKit")>-1&&a.match(/(BrowserNG|NokiaBrowser)\/7\.[0-3]/)}();a.mobile.gradeA=function(){return a.support.mediaquery||a.mobile.browser.ie&&a.mobile.browser.ie>=7};a.mobile.ajaxBlacklist=s.blackberry&&!s.WebKitPoint||j||h;h&&a(function(){a("head link[rel='stylesheet']").attr("rel","alternate stylesheet").attr("rel","stylesheet")});a.support.boxShadow||a("html").addClass("ui-mobile-nosupport-boxshadow")})(jQuery);(function(a,c,b){function e(b,c,d){var f=d.type;d.type=c;a.event.handle.call(b,
|
||||||
q;c.bind("vmousecancel",h).bind("vmouseup",e).bind("vclick",g);q=setTimeout(function(){d(b,"taphold",a.Event("taphold"))},750)})}};a.event.special.swipe={scrollSupressionThreshold:10,durationThreshold:1E3,horizontalDistanceThreshold:30,verticalDistanceThreshold:75,setup:function(){var d=a(this);d.bind(c,function(c){function f(b){if(m){var c=b.originalEvent.touches?b.originalEvent.touches[0]:b;p={time:(new Date).getTime(),coords:[c.pageX,c.pageY]};Math.abs(m.coords[0]-p.coords[0])>a.event.special.swipe.scrollSupressionThreshold&&
|
d);d.type=f}a.each("touchstart touchmove touchend orientationchange throttledresize tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(b,c){a.fn[c]=function(a){return a?this.bind(c,a):this.trigger(c)};a.attrFn[c]=true});var f=a.support.touch,d=f?"touchstart":"mousedown",g=f?"touchend":"mouseup",h=f?"touchmove":"mousemove";a.event.special.scrollstart={enabled:true,setup:function(){function b(a,f){d=f;e(c,d?"scrollstart":"scrollstop",a)}var c=this,d,f;a(c).bind("touchmove scroll",
|
||||||
b.preventDefault()}}var e=c.originalEvent.touches?c.originalEvent.touches[0]:c,m={time:(new Date).getTime(),coords:[e.pageX,e.pageY],origin:a(c.target)},p;d.bind(g,f).one(h,function(){d.unbind(g,f);m&&p&&p.time-m.time<a.event.special.swipe.durationThreshold&&Math.abs(m.coords[0]-p.coords[0])>a.event.special.swipe.horizontalDistanceThreshold&&Math.abs(m.coords[1]-p.coords[1])<a.event.special.swipe.verticalDistanceThreshold&&m.origin.trigger("swipe").trigger(m.coords[0]>p.coords[0]?"swipeleft":"swiperight");
|
function(c){a.event.special.scrollstart.enabled&&(d||b(c,true),clearTimeout(f),f=setTimeout(function(){b(c,false)},50))})}};a.event.special.tap={setup:function(){var b=this,c=a(b);c.bind("vmousedown",function(d){function f(){clearTimeout(q)}function g(){f();c.unbind("vclick",h).unbind("vmouseup",f);a(k).unbind("vmousecancel",g)}function h(a){g();n==a.target&&e(b,"tap",a)}if(d.which&&d.which!==1)return false;var n=d.target,q;c.bind("vmouseup",f).bind("vclick",h);a(k).bind("vmousecancel",g);q=setTimeout(function(){e(b,
|
||||||
m=p=b})})}};(function(a,b){function c(){var a=f();a!==e&&(e=a,d.trigger("orientationchange"))}var d=a(b),f,e;a.event.special.orientationchange={setup:function(){if(a.support.orientation&&a.mobile.orientationChangeEnabled)return false;e=f();d.bind("throttledresize",c)},teardown:function(){if(a.support.orientation&&a.mobile.orientationChangeEnabled)return false;d.unbind("throttledresize",c)},add:function(a){var b=a.handler;a.handler=function(a){a.orientation=f();return b.apply(this,arguments)}}};a.event.special.orientationchange.orientation=
|
"taphold",a.Event("taphold",{target:n}))},750)})}};a.event.special.swipe={scrollSupressionThreshold:10,durationThreshold:1E3,horizontalDistanceThreshold:30,verticalDistanceThreshold:75,setup:function(){var c=a(this);c.bind(d,function(d){function f(b){if(l){var c=b.originalEvent.touches?b.originalEvent.touches[0]:b;k={time:(new Date).getTime(),coords:[c.pageX,c.pageY]};Math.abs(l.coords[0]-k.coords[0])>a.event.special.swipe.scrollSupressionThreshold&&b.preventDefault()}}var e=d.originalEvent.touches?
|
||||||
f=function(){var c=true,c=document.documentElement;return(c=a.support.orientation?b.orientation%180==0:c&&c.clientWidth/c.clientHeight<1.1)?"portrait":"landscape"}})(jQuery,e);(function(){a.event.special.throttledresize={setup:function(){a(this).bind("resize",b)},teardown:function(){a(this).unbind("resize",b)}};var b=function(){f=(new Date).getTime();e=f-c;e>=250?(c=f,a(this).trigger("throttledresize")):(d&&clearTimeout(d),d=setTimeout(b,250-e))},c=0,d,f,e})();a.each({scrollstop:"scrollstart",taphold:"tap",
|
d.originalEvent.touches[0]:d,l={time:(new Date).getTime(),coords:[e.pageX,e.pageY],origin:a(d.target)},k;c.bind(h,f).one(g,function(){c.unbind(h,f);l&&k&&k.time-l.time<a.event.special.swipe.durationThreshold&&Math.abs(l.coords[0]-k.coords[0])>a.event.special.swipe.horizontalDistanceThreshold&&Math.abs(l.coords[1]-k.coords[1])<a.event.special.swipe.verticalDistanceThreshold&&l.origin.trigger("swipe").trigger(l.coords[0]>k.coords[0]?"swipeleft":"swiperight");l=k=b})})}};(function(a,b){function c(){var a=
|
||||||
swipeleft:"swipe",swiperight:"swipe"},function(b,c){a.event.special[b]={setup:function(){a(this).bind(c,a.noop)}}})})(jQuery,this);
|
f();a!==e&&(e=a,d.trigger("orientationchange"))}var d=a(b),f,e,g,h,t={0:true,180:true};if(a.support.orientation&&(g=b.innerWidth||a(b).width(),h=b.innerHeight||a(b).height(),g=g>h&&g-h>50,h=t[b.orientation],g&&h||!g&&!h))t={"-90":true,90:true};a.event.special.orientationchange={setup:function(){if(a.support.orientation&&a.mobile.orientationChangeEnabled)return false;e=f();d.bind("throttledresize",c)},teardown:function(){if(a.support.orientation&&a.mobile.orientationChangeEnabled)return false;d.unbind("throttledresize",
|
||||||
(function(a,e,b){function d(a){a=a||location.href;return"#"+a.replace(/^[^#]*#?(.*)$/,"$1")}var f="hashchange",c=document,h,g=a.event.special,i=c.documentMode,k="on"+f in e&&(i===b||i>7);a.fn[f]=function(a){return a?this.bind(f,a):this.trigger(f)};a.fn[f].delay=50;g[f]=a.extend(g[f],{setup:function(){if(k)return false;a(h.start)},teardown:function(){if(k)return false;a(h.stop)}});h=function(){function h(){var b=d(),c=n(p);if(b!==p)q(p=b,c),a(e).trigger(f);else if(c!==p)location.href=location.href.replace(/#.*/,
|
c)},add:function(a){var b=a.handler;a.handler=function(a){a.orientation=f();return b.apply(this,arguments)}}};a.event.special.orientationchange.orientation=f=function(){var c=true,c=k.documentElement;return(c=a.support.orientation?t[b.orientation]:c&&c.clientWidth/c.clientHeight<1.1)?"portrait":"landscape"}})(jQuery,c);(function(){a.event.special.throttledresize={setup:function(){a(this).bind("resize",b)},teardown:function(){a(this).unbind("resize",b)}};var b=function(){f=(new Date).getTime();g=f-
|
||||||
"")+c;i=setTimeout(h,a.fn[f].delay)}var g={},i,p=d(),j=function(a){return a},q=j,n=j;g.start=function(){i||h()};g.stop=function(){i&&clearTimeout(i);i=b};a.browser.msie&&!k&&function(){var b,e;g.start=function(){if(!b)e=(e=a.fn[f].src)&&e+d(),b=a('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){e||q(d());h()}).attr("src",e||"javascript:0").insertAfter("body")[0].contentWindow,c.onpropertychange=function(){try{if(event.propertyName==="title")b.document.title=c.title}catch(a){}}};
|
c;g>=250?(c=f,a(this).trigger("throttledresize")):(d&&clearTimeout(d),d=setTimeout(b,250-g))},c=0,d,f,g})();a.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe",swiperight:"swipe"},function(b,c){a.event.special[b]={setup:function(){a(this).bind(c,a.noop)}}})})(jQuery,this);(function(a){a.widget("mobile.page",a.mobile.widget,{options:{theme:"c",domCache:false,keepNativeDefault:":jqmData(role='none'), :jqmData(role='nojs')"},_create:function(){var a=this;if(a._trigger("beforecreate")===
|
||||||
g.stop=j;n=function(){return d(b.location.href)};q=function(d,e){var h=b.document,g=a.fn[f].domain;if(d!==e)h.title=c.title,h.open(),g&&h.write('<script>document.domain="'+g+'"<\/script>'),h.close(),b.location.hash=d}}();return g}()})(jQuery,this);
|
false)return false;a.element.attr("tabindex","0").addClass("ui-page ui-body-"+a.options.theme).bind("pagebeforehide",function(){a.removeContainerBackground()}).bind("pagebeforeshow",function(){a.setContainerBackground()})},removeContainerBackground:function(){a.mobile.pageContainer.removeClass("ui-overlay-"+a.mobile.getInheritedTheme(this.element.parent()))},setContainerBackground:function(c){this.options.theme&&a.mobile.pageContainer.addClass("ui-overlay-"+(c||this.options.theme))},keepNativeSelector:function(){var c=
|
||||||
(function(a){a.widget("mobile.page",a.mobile.widget,{options:{theme:"c",domCache:false,keepNativeDefault:":jqmData(role='none'), :jqmData(role='nojs')"},_create:function(){this._trigger("beforecreate");this.element.attr("tabindex","0").addClass("ui-page ui-body-"+this.options.theme)},keepNativeSelector:function(){var e=this.options;return e.keepNative&&a.trim(e.keepNative)&&e.keepNative!==e.keepNativeDefault?[e.keepNative,e.keepNativeDefault].join(", "):e.keepNativeDefault}})})(jQuery);
|
this.options;return c.keepNative&&a.trim(c.keepNative)&&c.keepNative!==c.keepNativeDefault?[c.keepNative,c.keepNativeDefault].join(", "):c.keepNativeDefault}})})(jQuery);(function(a,c,b){var e=function(d){d===b&&(d=true);return function(b,f,e,o){var k=new a.Deferred,p=f?" reverse":"",l=a.mobile.urlHistory.getActive().lastScroll||a.mobile.defaultHomeScroll,r=a.mobile.getScreenHeight(),n=a.mobile.maxTransitionWidth!==false&&a(c).width()>a.mobile.maxTransitionWidth,q=!a.support.cssTransitions||n||!b||
|
||||||
(function(a,e){var b={};a.extend(a.mobile,{ns:"",subPageUrlKey:"ui-page",activePageClass:"ui-page-active",activeBtnClass:"ui-btn-active",ajaxEnabled:true,hashListeningEnabled:true,linkBindingEnabled:true,defaultPageTransition:"slide",minScrollBack:250,defaultDialogTransition:"pop",loadingMessage:"loading",pageLoadErrorMessage:"Error Loading Page",autoInitializePage:true,pushStateEnabled:true,orientationChangeEnabled:true,gradeA:function(){return a.support.mediaquery||a.mobile.browser.ie&&a.mobile.browser.ie>=
|
b==="none",t=function(){a.mobile.pageContainer.toggleClass("ui-mobile-viewport-transitioning viewport-"+b)},x=function(){a.event.special.scrollstart.enabled=false;c.scrollTo(0,l);setTimeout(function(){a.event.special.scrollstart.enabled=true},150)},u=function(){o.removeClass(a.mobile.activePageClass+" out in reverse "+b).height("")},n=function(){o&&d&&u();e.addClass(a.mobile.activePageClass);a.mobile.focusPage(e);e.height(r+l);x();q||e.animationComplete(w);e.addClass(b+" in"+p);q&&w()},w=function(){d||
|
||||||
7},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91},silentScroll:function(b){if(a.type(b)!=="number")b=a.mobile.defaultHomeScroll;a.event.special.scrollstart.enabled=false;
|
o&&u();e.removeClass("out in reverse "+b).height("");t();a(c).scrollTop()!==l&&x();k.resolve(b,f,e,o,true)};t();o&&!q?(d?o.animationComplete(n):n(),o.height(r+a(c).scrollTop()).addClass(b+" out"+p)):n();return k.promise()}},f=e(),e=e(false);a.mobile.defaultTransitionHandler=f;a.mobile.transitionHandlers={"default":a.mobile.defaultTransitionHandler,sequential:f,simultaneous:e};a.mobile.transitionFallbacks={}})(jQuery,this);(function(a,c){function b(b){r&&(!r.closest(".ui-page-active").length||b)&&
|
||||||
setTimeout(function(){e.scrollTo(0,b);a(document).trigger("silentscroll",{x:0,y:b})},20);setTimeout(function(){a.event.special.scrollstart.enabled=true},150)},nsNormalizeDict:b,nsNormalize:function(c){return!c?void 0:b[c]||(b[c]=a.camelCase(a.mobile.ns+c))},getInheritedTheme:function(a,b){for(var d=a[0],f="",e=/ui-(bar|body)-([a-z])\b/,l,o;d;){l=d.className||"";if((o=e.exec(l))&&(f=o[2]))break;d=d.parentNode}return f||b||"a"}});a.fn.jqmData=function(b,d){var f;typeof b!="undefined"&&(f=this.data(b?
|
r.removeClass(a.mobile.activeBtnClass);r=null}function e(){t=false;q.length>0&&a.mobile.changePage.apply(null,q.pop())}function f(b,c,d,f){c&&c.data("page")._trigger("beforehide",null,{nextPage:b});b.data("page")._trigger("beforeshow",null,{prevPage:c||a("")});a.mobile.hidePageLoadingMsg();d&&!a.support.cssTransform3d&&a.mobile.transitionFallbacks[d]&&(d=a.mobile.transitionFallbacks[d]);d=(a.mobile.transitionHandlers[d||"default"]||a.mobile.defaultTransitionHandler)(d,f,b,c);d.done(function(){c&&
|
||||||
a.mobile.nsNormalize(b):b,d));return f};a.jqmData=function(b,d,f){var e;typeof d!="undefined"&&(e=a.data(b,d?a.mobile.nsNormalize(d):d,f));return e};a.fn.jqmRemoveData=function(b){return this.removeData(a.mobile.nsNormalize(b))};a.jqmRemoveData=function(b,d){return a.removeData(b,a.mobile.nsNormalize(d))};a.fn.removeWithDependents=function(){a.removeWithDependents(this)};a.removeWithDependents=function(b){b=a(b);(b.jqmData("dependents")||a()).remove();b.remove()};a.fn.addDependents=function(b){a.addDependents(a(this),
|
c.data("page")._trigger("hide",null,{nextPage:b});b.data("page")._trigger("show",null,{prevPage:c||a("")})});return d}function d(){return s.innerHeight||a(s).height()}function g(){var b=a("."+a.mobile.activePageClass),c=parseFloat(b.css("padding-top")),f=parseFloat(b.css("padding-bottom"));b.css("min-height",d()-c-f)}function h(b,c){c&&b.attr("data-"+a.mobile.ns+"role",c);b.page()}function j(a){for(;a;){if(typeof a.nodeName==="string"&&a.nodeName.toLowerCase()=="a")break;a=a.parentNode}return a}function o(b){var b=
|
||||||
b)};a.addDependents=function(b,d){var f=a(b).jqmData("dependents")||a();a(b).jqmData("dependents",a.merge(f,d))};a.fn.getEncodedText=function(){return a("<div/>").text(a(this).text()).html()};var d=a.find,f=/:jqmData\(([^)]*)\)/g;a.find=function(b,e,g,i){b=b.replace(f,"[data-"+(a.mobile.ns||"")+"$1]");return d.call(this,b,e,g,i)};a.extend(a.find,d);a.find.matches=function(b,d){return a.find(b,null,null,d)};a.find.matchesSelector=function(b,d){return a.find(d,null,null,[b]).length>0}})(jQuery,this);
|
a(b).closest(".ui-page").jqmData("url"),c=v.hrefNoHash;if(!b||!l.isPath(b))b=c;return l.makeUrlAbsolute(b,c)}var m=a(s);a("html");var p=a("head"),l={urlParseRE:/^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,parseUrl:function(b){if(a.type(b)==="object")return b;b=l.urlParseRE.exec(b||"")||[];return{href:b[0]||"",hrefNoHash:b[1]||"",hrefNoSearch:b[2]||"",domain:b[3]||"",
|
||||||
(function(a,e){function b(a){var b=a.find(".ui-title:eq(0)");b.length?b.focus():a.focus()}function d(b){q&&(!q.closest(".ui-page-active").length||b)&&q.removeClass(a.mobile.activeBtnClass);q=null}function f(){z=false;A.length>0&&a.mobile.changePage.apply(null,A.pop())}function c(c,d,f,e){var g=a.mobile.urlHistory.getActive(),j=a.support.touchOverflow&&a.mobile.touchOverflowEnabled,i=g.lastScroll||(j?0:a.mobile.defaultHomeScroll),g=h();window.scrollTo(0,a.mobile.defaultHomeScroll);d&&d.data("page")._trigger("beforehide",
|
protocol:b[4]||"",doubleSlash:b[5]||"",authority:b[6]||"",username:b[8]||"",password:b[9]||"",host:b[10]||"",hostname:b[11]||"",port:b[12]||"",pathname:b[13]||"",directory:b[14]||"",filename:b[15]||"",search:b[16]||"",hash:b[17]||""}},makePathAbsolute:function(a,b){if(a&&a.charAt(0)==="/")return a;for(var a=a||"",c=(b=b?b.replace(/^\/|(\/[^\/]*|[^\/]+)$/g,""):"")?b.split("/"):[],d=a.split("/"),f=0;f<d.length;f++){var e=d[f];switch(e){case ".":break;case "..":c.length&&c.pop();break;default:c.push(e)}}return"/"+
|
||||||
null,{nextPage:c});j||c.height(g+i);c.data("page")._trigger("beforeshow",null,{prevPage:d||a("")});a.mobile.hidePageLoadingMsg();j&&i&&(c.addClass("ui-mobile-pre-transition"),b(c),c.is(".ui-native-fixed")?c.find(".ui-content").scrollTop(i):c.scrollTop(i));f=(a.mobile.transitionHandlers[f||"none"]||a.mobile.defaultTransitionHandler)(f,e,c,d);f.done(function(){j||(c.height(""),b(c));j||a.mobile.silentScroll(i);d&&(j||d.height(""),d.data("page")._trigger("hide",null,{nextPage:c}));c.data("page")._trigger("show",
|
c.join("/")},isSameDomain:function(a,b){return l.parseUrl(a).domain===l.parseUrl(b).domain},isRelativeUrl:function(a){return l.parseUrl(a).protocol===""},isAbsoluteUrl:function(a){return l.parseUrl(a).protocol!==""},makeUrlAbsolute:function(a,b){if(!l.isRelativeUrl(a))return a;var c=l.parseUrl(a),d=l.parseUrl(b),f=c.protocol||d.protocol,e=c.protocol?c.doubleSlash:c.doubleSlash||d.doubleSlash,g=c.authority||d.authority,h=c.pathname!=="",j=l.makePathAbsolute(c.pathname||d.filename,d.pathname);return f+
|
||||||
null,{prevPage:d||a("")})});return f}function h(){var b=a.event.special.orientationchange.orientation()==="portrait",c=b?screen.availHeight:screen.availWidth,b=Math.max(b?480:320,a(window).height());return Math.min(c,b)}function g(){(!a.support.touchOverflow||!a.mobile.touchOverflowEnabled)&&a("."+a.mobile.activePageClass).css("min-height",h())}function i(b,c){c&&b.attr("data-"+a.mobile.ns+"role",c);b.page()}function k(a){for(;a;){if(typeof a.nodeName==="string"&&a.nodeName.toLowerCase()=="a")break;
|
e+g+j+(c.search||!h&&d.search||"")+c.hash},addSearchParams:function(b,c){var d=l.parseUrl(b),f=typeof c==="object"?a.param(c):c,e=d.search||"?";return d.hrefNoSearch+e+(e.charAt(e.length-1)!=="?"?"&":"")+f+(d.hash||"")},convertUrlToDataUrl:function(a){var b=l.parseUrl(a);if(l.isEmbeddedPage(b))return b.hash.split(x)[0].replace(/^#/,"");else if(l.isSameDomain(b,v))return b.hrefNoHash.replace(v.domain,"");return a},get:function(a){if(a===c)a=location.hash;return l.stripHash(a).replace(/[^\/]*\.[^\/*]+$/,
|
||||||
a=a.parentNode}return a}function l(b){var b=a(b).closest(".ui-page").jqmData("url"),c=t.hrefNoHash;if(!b||!j.isPath(b))b=c;return j.makeUrlAbsolute(b,c)}var o=a(window),m=a("html"),p=a("head"),j={urlParseRE:/^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,parseUrl:function(b){if(a.type(b)==="object")return b;b=j.urlParseRE.exec(b||"")||[];return{href:b[0]||"",hrefNoHash:b[1]||
|
"")},getFilePath:function(b){var c="&"+a.mobile.subPageUrlKey;return b&&b.split(c)[0].split(x)[0]},set:function(a){location.hash=a},isPath:function(a){return/\//.test(a)},clean:function(a){return a.replace(v.domain,"")},stripHash:function(a){return a.replace(/^#/,"")},cleanHash:function(a){return l.stripHash(a.replace(/\?.*$/,"").replace(x,""))},isExternal:function(a){a=l.parseUrl(a);return a.protocol&&a.domain!==w.domain?true:false},hasProtocol:function(a){return/^(:?\w+:)/.test(a)},isFirstPageUrl:function(b){var b=
|
||||||
"",hrefNoSearch:b[2]||"",domain:b[3]||"",protocol:b[4]||"",doubleSlash:b[5]||"",authority:b[6]||"",username:b[8]||"",password:b[9]||"",host:b[10]||"",hostname:b[11]||"",port:b[12]||"",pathname:b[13]||"",directory:b[14]||"",filename:b[15]||"",search:b[16]||"",hash:b[17]||""}},makePathAbsolute:function(a,b){if(a&&a.charAt(0)==="/")return a;for(var a=a||"",c=(b=b?b.replace(/^\/|(\/[^\/]*|[^\/]+)$/g,""):"")?b.split("/"):[],d=a.split("/"),f=0;f<d.length;f++){var e=d[f];switch(e){case ".":break;case "..":c.length&&
|
l.parseUrl(l.makeUrlAbsolute(b,v)),d=a.mobile.firstPage,d=d&&d[0]?d[0].id:c;return(b.hrefNoHash===w.hrefNoHash||y&&b.hrefNoHash===v.hrefNoHash)&&(!b.hash||b.hash==="#"||d&&b.hash.replace(/^#/,"")===d)},isEmbeddedPage:function(a){a=l.parseUrl(a);return a.protocol!==""?a.hash&&(a.hrefNoHash===w.hrefNoHash||y&&a.hrefNoHash===v.hrefNoHash):/^#/.test(a.href)}},r=null,n={stack:[],activeIndex:0,getActive:function(){return n.stack[n.activeIndex]},getPrev:function(){return n.stack[n.activeIndex-1]},getNext:function(){return n.stack[n.activeIndex+
|
||||||
c.pop();break;default:c.push(e)}}return"/"+c.join("/")},isSameDomain:function(a,b){return j.parseUrl(a).domain===j.parseUrl(b).domain},isRelativeUrl:function(a){return j.parseUrl(a).protocol===""},isAbsoluteUrl:function(a){return j.parseUrl(a).protocol!==""},makeUrlAbsolute:function(a,b){if(!j.isRelativeUrl(a))return a;var c=j.parseUrl(a),d=j.parseUrl(b),f=c.protocol||d.protocol,e=c.protocol?c.doubleSlash:c.doubleSlash||d.doubleSlash,h=c.authority||d.authority,g=c.pathname!=="",i=j.makePathAbsolute(c.pathname||
|
1]},addNew:function(a,b,c,d,f){n.getNext()&&n.clearForward();n.stack.push({url:a,transition:b,title:c,pageUrl:d,role:f});n.activeIndex=n.stack.length-1},clearForward:function(){n.stack=n.stack.slice(0,n.activeIndex+1)},directHashChange:function(b){var d,f,e;this.getActive();a.each(n.stack,function(a,c){b.currentUrl===c.url&&(d=a<n.activeIndex,f=!d,e=a)});this.activeIndex=e!==c?e:this.activeIndex;d?(b.either||b.isBack)(true):f&&(b.either||b.isForward)(false)},ignoreNextHashChange:false},q=[],t=false,
|
||||||
d.filename,d.pathname);return f+e+h+i+(c.search||!g&&d.search||"")+c.hash},addSearchParams:function(b,c){var d=j.parseUrl(b),f=typeof c==="object"?a.param(c):c,e=d.search||"?";return d.hrefNoSearch+e+(e.charAt(e.length-1)!=="?"?"&":"")+f+(d.hash||"")},convertUrlToDataUrl:function(a){var b=j.parseUrl(a);if(j.isEmbeddedPage(b))return b.hash.split(s)[0].replace(/^#/,"");else if(j.isSameDomain(b,t))return b.hrefNoHash.replace(t.domain,"");return a},get:function(a){if(a===e)a=location.hash;return j.stripHash(a).replace(/[^\/]*\.[^\/*]+$/,
|
x="&ui-state=dialog",u=p.children("base"),w=l.parseUrl(location.href),v=u.length?l.parseUrl(l.makeUrlAbsolute(u.attr("href"),w.href)):w,y=w.hrefNoHash!==v.hrefNoHash,B=a.support.dynamicBaseTag?{element:u.length?u:a("<base>",{href:v.hrefNoHash}).prependTo(p),set:function(a){B.element.attr("href",l.makeUrlAbsolute(a,v))},reset:function(){B.element.attr("href",v.hrefNoHash)}}:c;a.mobile.focusPage=function(a){var b=a.find("[autofocus]"),c=a.find(".ui-title:eq(0)");b.length?b.focus():c.length?c.focus():
|
||||||
"")},getFilePath:function(b){var c="&"+a.mobile.subPageUrlKey;return b&&b.split(c)[0].split(s)[0]},set:function(a){location.hash=a},isPath:function(a){return/\//.test(a)},clean:function(a){return a.replace(t.domain,"")},stripHash:function(a){return a.replace(/^#/,"")},cleanHash:function(a){return j.stripHash(a.replace(/\?.*$/,"").replace(s,""))},isExternal:function(a){a=j.parseUrl(a);return a.protocol&&a.domain!==x.domain?true:false},hasProtocol:function(a){return/^(:?\w+:)/.test(a)},isFirstPageUrl:function(b){var b=
|
a.focus()};var E=true,A,C;A=function(){if(E){var b=a.mobile.urlHistory.getActive();if(b){var c=m.scrollTop();b.lastScroll=c<a.mobile.minScrollBack?a.mobile.defaultHomeScroll:c}}};C=function(){setTimeout(A,100)};m.bind(a.support.pushState?"popstate":"hashchange",function(){E=false});m.one(a.support.pushState?"popstate":"hashchange",function(){E=true});m.one("pagecontainercreate",function(){a.mobile.pageContainer.bind("pagechange",function(){E=true;m.unbind("scrollstop",C);m.bind("scrollstop",C)})});
|
||||||
j.parseUrl(j.makeUrlAbsolute(b,t)),c=a.mobile.firstPage,c=c&&c[0]?c[0].id:e;return(b.hrefNoHash===x.hrefNoHash||w&&b.hrefNoHash===t.hrefNoHash)&&(!b.hash||b.hash==="#"||c&&b.hash.replace(/^#/,"")===c)},isEmbeddedPage:function(a){a=j.parseUrl(a);return a.protocol!==""?a.hash&&(a.hrefNoHash===x.hrefNoHash||w&&a.hrefNoHash===t.hrefNoHash):/^#/.test(a.href)}},q=null,n={stack:[],activeIndex:0,getActive:function(){return n.stack[n.activeIndex]},getPrev:function(){return n.stack[n.activeIndex-1]},getNext:function(){return n.stack[n.activeIndex+
|
m.bind("scrollstop",C);a.mobile.getScreenHeight=d;a.fn.animationComplete=function(b){return a.support.cssTransitions?a(this).one("webkitAnimationEnd animationend",b):(setTimeout(b,0),a(this))};a.mobile.path=l;a.mobile.base=B;a.mobile.urlHistory=n;a.mobile.dialogHashKey=x;a.mobile.allowCrossDomainPages=false;a.mobile.getDocumentUrl=function(b){return b?a.extend({},w):w.href};a.mobile.getDocumentBase=function(b){return b?a.extend({},v):v.href};a.mobile._bindPageRemove=function(){var b=a(this);!b.data("page").options.domCache&&
|
||||||
1]},addNew:function(a,b,c,d,f){n.getNext()&&n.clearForward();n.stack.push({url:a,transition:b,title:c,pageUrl:d,role:f});n.activeIndex=n.stack.length-1},clearForward:function(){n.stack=n.stack.slice(0,n.activeIndex+1)},directHashChange:function(b){var c,d,f;this.getActive();a.each(n.stack,function(a,e){b.currentUrl===e.url&&(c=a<n.activeIndex,d=!c,f=a)});this.activeIndex=f!==e?f:this.activeIndex;c?(b.either||b.isBack)(true):d&&(b.either||b.isForward)(false)},ignoreNextHashChange:false},A=[],z=false,
|
b.is(":jqmData(external-page='true')")&&b.bind("pagehide.remove",function(){var b=a(this),c=new a.Event("pageremove");b.trigger(c);c.isDefaultPrevented()||b.removeWithDependents()})};a.mobile.loadPage=function(b,d){var f=a.Deferred(),e=a.extend({},a.mobile.loadPage.defaults,d),g=null,j=null,k=l.makeUrlAbsolute(b,a.mobile.activePage&&o(a.mobile.activePage)||v.hrefNoHash);if(e.data&&e.type==="get")k=l.addSearchParams(k,e.data),e.data=c;if(e.data&&e.type==="post")e.reloadPage=true;var u=l.getFilePath(k),
|
||||||
s="&ui-state=dialog",v=p.children("base"),x=j.parseUrl(location.href),t=v.length?j.parseUrl(j.makeUrlAbsolute(v.attr("href"),x.href)):x,w=x.hrefNoHash!==t.hrefNoHash,u=a.support.dynamicBaseTag?{element:v.length?v:a("<base>",{href:t.hrefNoHash}).prependTo(p),set:function(a){u.element.attr("href",j.makeUrlAbsolute(a,t))},reset:function(){u.element.attr("href",t.hrefNoHash)}}:e,D=true,y,C,B;y=function(){var b=o;a.support.touchOverflow&&a.mobile.touchOverflowEnabled&&(b=a(".ui-page-active"),b=b.is(".ui-native-fixed")?
|
n=l.convertUrlToDataUrl(k);e.pageContainer=e.pageContainer||a.mobile.pageContainer;g=e.pageContainer.children(":jqmData(url='"+n+"')");g.length===0&&n&&!l.isPath(n)&&(g=e.pageContainer.children("#"+n).attr("data-"+a.mobile.ns+"url",n));if(g.length===0)if(a.mobile.firstPage&&l.isFirstPageUrl(u))a.mobile.firstPage.parent().length&&(g=a(a.mobile.firstPage));else if(l.isEmbeddedPage(u))return f.reject(k,d),f.promise();B&&B.reset();if(g.length){if(!e.reloadPage)return h(g,e.role),f.resolve(k,d,g),f.promise();
|
||||||
b.find(".ui-content"):b);return b};C=function(b){if(D){var c=a.mobile.urlHistory.getActive();if(c)b=b&&b.scrollTop(),c.lastScroll=b<a.mobile.minScrollBack?a.mobile.defaultHomeScroll:b}};B=function(){setTimeout(C,100,a(this))};o.bind(a.support.pushState?"popstate":"hashchange",function(){D=false});o.one(a.support.pushState?"popstate":"hashchange",function(){D=true});o.one("pagecontainercreate",function(){a.mobile.pageContainer.bind("pagechange",function(){var a=y();D=true;a.unbind("scrollstop",B);
|
j=g}var m=e.pageContainer,x=new a.Event("pagebeforeload"),p={url:b,absUrl:k,dataUrl:n,deferred:f,options:e};m.trigger(x,p);if(x.isDefaultPrevented())return f.promise();if(e.showLoadMsg)var r=setTimeout(function(){a.mobile.showPageLoadingMsg()},e.loadMsgDelay);!a.mobile.allowCrossDomainPages&&!l.isSameDomain(w,k)?f.reject(k,d):a.ajax({url:u,type:e.type,data:e.data,dataType:"html",success:function(c,o,m){var x=a("<div></div>"),v=c.match(/<title[^>]*>([^<]*)/)&&RegExp.$1,w=RegExp("\\bdata-"+a.mobile.ns+
|
||||||
a.bind("scrollstop",B)})});y().bind("scrollstop",B);a.mobile.getScreenHeight=h;a.fn.animationComplete=function(b){return a.support.cssTransitions?a(this).one("webkitAnimationEnd",b):(setTimeout(b,0),a(this))};a.mobile.path=j;a.mobile.base=u;a.mobile.urlHistory=n;a.mobile.dialogHashKey=s;a.mobile.noneTransitionHandler=function(b,c,d,f){f&&f.removeClass(a.mobile.activePageClass);d.addClass(a.mobile.activePageClass);return a.Deferred().resolve(b,c,d,f).promise()};a.mobile.defaultTransitionHandler=a.mobile.noneTransitionHandler;
|
"url=[\"']?([^\"'>]*)[\"']?");RegExp("(<[^>]+\\bdata-"+a.mobile.ns+"role=[\"']?page[\"']?[^>]*>)").test(c)&&RegExp.$1&&w.test(RegExp.$1)&&RegExp.$1&&(b=u=l.getFilePath(RegExp.$1));B&&B.set(u);x.get(0).innerHTML=c;g=x.find(":jqmData(role='page'), :jqmData(role='dialog')").first();g.length||(g=a("<div data-"+a.mobile.ns+"role='page'>"+c.split(/<\/?body[^>]*>/gmi)[1]+"</div>"));v&&!g.jqmData("title")&&(~v.indexOf("&")&&(v=a("<div>"+v+"</div>").text()),g.jqmData("title",v));if(!a.support.dynamicBaseTag){var q=
|
||||||
a.mobile.transitionHandlers={none:a.mobile.defaultTransitionHandler};a.mobile.allowCrossDomainPages=false;a.mobile.getDocumentUrl=function(b){return b?a.extend({},x):x.href};a.mobile.getDocumentBase=function(b){return b?a.extend({},t):t.href};a.mobile._bindPageRemove=function(){var b=a(this);!b.data("page").options.domCache&&b.is(":jqmData(external-page='true')")&&b.bind("pagehide.remove",function(){var b=a(this),c=new a.Event("pageremove");b.trigger(c);c.isDefaultPrevented()||b.removeWithDependents()})};
|
l.get(u);g.find("[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]").each(function(){var b=a(this).is("[href]")?"href":a(this).is("[src]")?"src":"action",c=a(this).attr(b),c=c.replace(location.protocol+"//"+location.host+location.pathname,"");/^(\w+:|#|\/)/.test(c)||a(this).attr(b,q+c)})}g.attr("data-"+a.mobile.ns+"url",l.convertUrlToDataUrl(u)).attr("data-"+a.mobile.ns+"external-page",true).appendTo(e.pageContainer);g.one("pagecreate",a.mobile._bindPageRemove);h(g,e.role);k.indexOf("&"+
|
||||||
a.mobile.loadPage=function(b,c){var d=a.Deferred(),f=a.extend({},a.mobile.loadPage.defaults,c),h=null,g=null,m=j.makeUrlAbsolute(b,a.mobile.activePage&&l(a.mobile.activePage)||t.hrefNoHash);if(f.data&&f.type==="get")m=j.addSearchParams(m,f.data),f.data=e;if(f.data&&f.type==="post")f.reloadPage=true;var s=j.getFilePath(m),p=j.convertUrlToDataUrl(m);f.pageContainer=f.pageContainer||a.mobile.pageContainer;h=f.pageContainer.children(":jqmData(url='"+p+"')");h.length===0&&p&&!j.isPath(p)&&(h=f.pageContainer.children("#"+
|
a.mobile.subPageUrlKey)>-1&&(g=e.pageContainer.children(":jqmData(url='"+n+"')"));e.showLoadMsg&&(clearTimeout(r),a.mobile.hidePageLoadingMsg());p.xhr=m;p.textStatus=o;p.page=g;e.pageContainer.trigger("pageload",p);f.resolve(k,d,g,j)},error:function(b,c,g){B&&B.set(l.get());p.xhr=b;p.textStatus=c;p.errorThrown=g;b=new a.Event("pageloadfailed");e.pageContainer.trigger(b,p);b.isDefaultPrevented()||(e.showLoadMsg&&(clearTimeout(r),a.mobile.hidePageLoadingMsg(),a.mobile.showPageLoadingMsg(a.mobile.pageLoadErrorMessageTheme,
|
||||||
p).attr("data-"+a.mobile.ns+"url",p));if(h.length===0)if(a.mobile.firstPage&&j.isFirstPageUrl(s))a.mobile.firstPage.parent().length&&(h=a(a.mobile.firstPage));else if(j.isEmbeddedPage(s))return d.reject(m,c),d.promise();u&&u.reset();if(h.length){if(!f.reloadPage)return i(h,f.role),d.resolve(m,c,h),d.promise();g=h}var n=f.pageContainer,k=new a.Event("pagebeforeload"),q={url:b,absUrl:m,dataUrl:p,deferred:d,options:f};n.trigger(k,q);if(k.isDefaultPrevented())return d.promise();if(f.showLoadMsg)var v=
|
a.mobile.pageLoadErrorMessage,true),setTimeout(a.mobile.hidePageLoadingMsg,1500)),f.reject(k,d))}});return f.promise()};a.mobile.loadPage.defaults={type:"get",data:c,reloadPage:false,role:c,showLoadMsg:false,pageContainer:c,loadMsgDelay:50};a.mobile.changePage=function(d,g){if(t)q.unshift(arguments);else{var j=a.extend({},a.mobile.changePage.defaults,g);j.pageContainer=j.pageContainer||a.mobile.pageContainer;j.fromPage=j.fromPage||a.mobile.activePage;var u=j.pageContainer,o=new a.Event("pagebeforechange"),
|
||||||
setTimeout(function(){a.mobile.showPageLoadingMsg()},f.loadMsgDelay);!a.mobile.allowCrossDomainPages&&!j.isSameDomain(x,m)?d.reject(m,c):a.ajax({url:s,type:f.type,data:f.data,dataType:"html",success:function(e,n,k){var o=a("<div></div>"),l=e.match(/<title[^>]*>([^<]*)/)&&RegExp.$1,t=RegExp("\\bdata-"+a.mobile.ns+"url=[\"']?([^\"'>]*)[\"']?");RegExp("(<[^>]+\\bdata-"+a.mobile.ns+"role=[\"']?page[\"']?[^>]*>)").test(e)&&RegExp.$1&&t.test(RegExp.$1)&&RegExp.$1&&(b=s=j.getFilePath(RegExp.$1));u&&u.set(s);
|
m={toPage:d,options:j};u.trigger(o,m);if(!o.isDefaultPrevented())if(d=m.toPage,t=true,typeof d=="string")a.mobile.loadPage(d,j).done(function(b,c,d,e){t=false;c.duplicateCachedPage=e;a.mobile.changePage(d,c)}).fail(function(){t=false;b(true);e();j.pageContainer.trigger("pagechangefailed",m)});else{if(d[0]===a.mobile.firstPage[0]&&!j.dataUrl)j.dataUrl=w.hrefNoHash;var o=j.fromPage,p=j.dataUrl&&l.convertUrlToDataUrl(j.dataUrl)||d.jqmData("url"),v=p;l.getFilePath(p);var r=n.getActive(),s=n.activeIndex===
|
||||||
o.get(0).innerHTML=e;h=o.find(":jqmData(role='page'), :jqmData(role='dialog')").first();h.length||(h=a("<div data-"+a.mobile.ns+"role='page'>"+e.split(/<\/?body[^>]*>/gmi)[1]+"</div>"));l&&!h.jqmData("title")&&(~l.indexOf("&")&&(l=a("<div>"+l+"</div>").text()),h.jqmData("title",l));if(!a.support.dynamicBaseTag){var x=j.get(s);h.find("[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]").each(function(){var b=a(this).is("[href]")?"href":a(this).is("[src]")?"src":"action",c=a(this).attr(b),
|
0,y=0,B=k.title,A=j.role==="dialog"||d.jqmData("role")==="dialog";if(o&&o[0]===d[0]&&!j.allowSamePageTransition)t=false,u.trigger("pagechange",m);else{h(d,j.role);j.fromHashChange&&n.directHashChange({currentUrl:p,isBack:function(){y=-1},isForward:function(){y=1}});try{k.activeElement&&k.activeElement.nodeName.toLowerCase()!="body"?a(k.activeElement).blur():a("input:focus, textarea:focus, select:focus").blur()}catch(E){}A&&r&&(p=(r.url||"")+x);if(j.changeHash!==false&&p)n.ignoreNextHashChange=true,
|
||||||
c=c.replace(location.protocol+"//"+location.host+location.pathname,"");/^(\w+:|#|\/)/.test(c)||a(this).attr(b,x+c)})}h.attr("data-"+a.mobile.ns+"url",j.convertUrlToDataUrl(s)).attr("data-"+a.mobile.ns+"external-page",true).appendTo(f.pageContainer);h.one("pagecreate",a.mobile._bindPageRemove);i(h,f.role);m.indexOf("&"+a.mobile.subPageUrlKey)>-1&&(h=f.pageContainer.children(":jqmData(url='"+p+"')"));f.showLoadMsg&&(clearTimeout(v),a.mobile.hidePageLoadingMsg());q.xhr=k;q.textStatus=n;q.page=h;f.pageContainer.trigger("pageload",
|
l.set(p);var C=!r?B:d.jqmData("title")||d.children(":jqmData(role='header')").find(".ui-title").getEncodedText();C&&B==k.title&&(B=C);d.jqmData("title")||d.jqmData("title",B);j.transition=j.transition||(y&&!s?r.transition:c)||(A?a.mobile.defaultDialogTransition:a.mobile.defaultPageTransition);y||n.addNew(p,j.transition,B,v,j.role);k.title=n.getActive().title;a.mobile.activePage=d;j.reverse=j.reverse||y<0;f(d,o,j.transition,j.reverse).done(function(c,f,g,h,l){b();j.duplicateCachedPage&&j.duplicateCachedPage.remove();
|
||||||
q);d.resolve(m,c,h,g)},error:function(b,e,h){u&&u.set(j.get());q.xhr=b;q.textStatus=e;q.errorThrown=h;b=new a.Event("pageloadfailed");f.pageContainer.trigger(b,q);b.isDefaultPrevented()||(f.showLoadMsg&&(clearTimeout(v),a.mobile.hidePageLoadingMsg(),a("<div class='ui-loader ui-overlay-shadow ui-body-e ui-corner-all'><h1>"+a.mobile.pageLoadErrorMessage+"</h1></div>").css({display:"block",opacity:0.96,top:o.scrollTop()+100}).appendTo(f.pageContainer).delay(800).fadeOut(400,function(){a(this).remove()})),
|
l||a.mobile.focusPage(d);e();u.trigger("pagechange",m)})}}}};a.mobile.changePage.defaults={transition:c,reverse:false,changeHash:true,fromHashChange:false,role:c,duplicateCachedPage:c,pageContainer:c,showLoadMsg:true,dataUrl:c,fromPage:c,allowSamePageTransition:false};a.mobile._registerInternalEvents=function(){a(k).delegate("form","submit",function(b){var c=a(this);if(a.mobile.ajaxEnabled&&!c.is(":jqmData(ajax='false')")&&c.jqmHijackable().length){var d=c.attr("method"),e=c.attr("target"),f=c.attr("action");
|
||||||
d.reject(m,c))}});return d.promise()};a.mobile.loadPage.defaults={type:"get",data:e,reloadPage:false,role:e,showLoadMsg:false,pageContainer:e,loadMsgDelay:50};a.mobile.changePage=function(b,h){if(z)A.unshift(arguments);else{var g=a.extend({},a.mobile.changePage.defaults,h);g.pageContainer=g.pageContainer||a.mobile.pageContainer;g.fromPage=g.fromPage||a.mobile.activePage;var p=g.pageContainer,k=new a.Event("pagebeforechange"),q={toPage:b,options:g};p.trigger(k,q);if(!k.isDefaultPrevented())if(b=q.toPage,
|
if(!f&&(f=o(c),f===v.hrefNoHash))f=w.hrefNoSearch;f=l.makeUrlAbsolute(f,o(c));!l.isExternal(f)&&!e&&(a.mobile.changePage(f,{type:d&&d.length&&d.toLowerCase()||"get",data:c.serialize(),transition:c.jqmData("transition"),direction:c.jqmData("direction"),reloadPage:true}),b.preventDefault())}});a(k).bind("vclick",function(c){if(!(c.which>1)&&a.mobile.linkBindingEnabled&&(c=j(c.target),a(c).jqmHijackable().length&&c&&l.parseUrl(c.getAttribute("href")||"#").hash!=="#"))b(true),r=a(c).closest(".ui-btn").not(".ui-disabled"),
|
||||||
z=true,typeof b=="string")a.mobile.loadPage(b,g).done(function(b,c,d,f){z=false;c.duplicateCachedPage=f;a.mobile.changePage(d,c)}).fail(function(){z=false;d(true);f();g.pageContainer.trigger("pagechangefailed",q)});else{if(b[0]===a.mobile.firstPage[0]&&!g.dataUrl)g.dataUrl=x.hrefNoHash;var k=g.fromPage,l=g.dataUrl&&j.convertUrlToDataUrl(g.dataUrl)||b.jqmData("url"),v=l;j.getFilePath(l);var o=n.getActive(),t=n.activeIndex===0,w=0,u=document.title,y=g.role==="dialog"||b.jqmData("role")==="dialog";if(k&&
|
r.addClass(a.mobile.activeBtnClass),a("."+a.mobile.activePageClass+" .ui-btn").not(c).blur(),a(c).jqmData("href",a(c).attr("href")).attr("href","#")});a(k).bind("click",function(d){if(a.mobile.linkBindingEnabled){var f=j(d.target),e=a(f),g;if(f&&!(d.which>1)&&e.jqmHijackable().length){g=function(){s.setTimeout(function(){b(true)},200)};e.jqmData("href")&&e.attr("href",e.jqmData("href"));if(e.is(":jqmData(rel='back')"))return s.history.back(),false;var h=o(e),f=l.makeUrlAbsolute(e.attr("href")||"#",
|
||||||
k[0]===b[0]&&!g.allowSamePageTransition)z=false,p.trigger("pagechange",q);else{i(b,g.role);g.fromHashChange&&n.directHashChange({currentUrl:l,isBack:function(){w=-1},isForward:function(){w=1}});try{document.activeElement&&document.activeElement.nodeName.toLowerCase()!="body"?a(document.activeElement).blur():a("input:focus, textarea:focus, select:focus").blur()}catch(B){}y&&o&&(l=(o.url||"")+s);if(g.changeHash!==false&&l)n.ignoreNextHashChange=true,j.set(l);var C=!o?u:b.jqmData("title")||b.children(":jqmData(role='header')").find(".ui-title").getEncodedText();
|
h);if(!a.mobile.ajaxEnabled&&!l.isEmbeddedPage(f))g();else{if(f.search("#")!=-1)if(f=f.replace(/[^#]*#/,""))f=l.isPath(f)?l.makeUrlAbsolute(f,h):l.makeUrlAbsolute("#"+f,w.hrefNoHash);else{d.preventDefault();return}var h=e.is("[rel='external']")||e.is(":jqmData(ajax='false')")||e.is("[target]"),k=a.mobile.allowCrossDomainPages&&w.protocol==="file:"&&f.search(/^https?:/)!=-1;h||l.isExternal(f)&&!k?g():(g=e.jqmData("transition"),h=(h=e.jqmData("direction"))&&h==="reverse"||e.jqmData("back"),e=e.attr("data-"+
|
||||||
C&&u==document.title&&(u=C);b.jqmData("title")||b.jqmData("title",u);g.transition=g.transition||(w&&!t?o.transition:e)||(y?a.mobile.defaultDialogTransition:a.mobile.defaultPageTransition);w||n.addNew(l,g.transition,u,v,g.role);document.title=n.getActive().title;a.mobile.activePage=b;g.reverse=g.reverse||w<0;c(b,k,g.transition,g.reverse).done(function(){d();g.duplicateCachedPage&&g.duplicateCachedPage.remove();m.removeClass("ui-mobile-rendering");f();p.trigger("pagechange",q)})}}}};a.mobile.changePage.defaults=
|
a.mobile.ns+"rel")||c,a.mobile.changePage(f,{transition:g,reverse:h,role:e}),d.preventDefault())}}}});a(k).delegate(".ui-page","pageshow.prefetch",function(){var b=[];a(this).find("a:jqmData(prefetch)").each(function(){var c=a(this),d=c.attr("href");d&&a.inArray(d,b)===-1&&(b.push(d),a.mobile.loadPage(d,{role:c.attr("data-"+a.mobile.ns+"rel")}))})});a.mobile._handleHashChange=function(b){var d=l.stripHash(b),f={transition:a.mobile.urlHistory.stack.length===0?"none":c,changeHash:false,fromHashChange:true};
|
||||||
{transition:e,reverse:false,changeHash:true,fromHashChange:false,role:e,duplicateCachedPage:e,pageContainer:e,showLoadMsg:true,dataUrl:e,fromPage:e,allowSamePageTransition:false};a.mobile._registerInternalEvents=function(){a("form").live("submit",function(b){var c=a(this);if(a.mobile.ajaxEnabled&&!c.is(":jqmData(ajax='false')")){var d=c.attr("method"),f=c.attr("target"),e=c.attr("action");if(!e&&(e=l(c),e===t.hrefNoHash))e=x.hrefNoSearch;e=j.makeUrlAbsolute(e,l(c));!j.isExternal(e)&&!f&&(a.mobile.changePage(e,
|
if(!a.mobile.hashListeningEnabled||n.ignoreNextHashChange)n.ignoreNextHashChange=false;else{if(n.stack.length>1&&d.indexOf(x)>-1)if(a.mobile.activePage.is(".ui-dialog"))n.directHashChange({currentUrl:d,either:function(b){var c=a.mobile.urlHistory.getActive();d=c.pageUrl;a.extend(f,{role:c.role,transition:c.transition,reverse:b})}});else{n.directHashChange({currentUrl:d,isBack:function(){s.history.back()},isForward:function(){s.history.forward()}});return}d?(d=typeof d==="string"&&!l.isPath(d)?l.makeUrlAbsolute("#"+
|
||||||
{type:d&&d.length&&d.toLowerCase()||"get",data:c.serialize(),transition:c.jqmData("transition"),direction:c.jqmData("direction"),reloadPage:true}),b.preventDefault())}});a(document).bind("vclick",function(b){if(!(b.which>1)&&a.mobile.linkBindingEnabled&&(b=k(b.target))&&j.parseUrl(b.getAttribute("href")||"#").hash!=="#")d(true),q=a(b).closest(".ui-btn").not(".ui-disabled"),q.addClass(a.mobile.activeBtnClass),a("."+a.mobile.activePageClass+" .ui-btn").not(b).blur()});a(document).bind("click",function(b){if(a.mobile.linkBindingEnabled){var c=
|
d,v):d,a.mobile.changePage(d,f)):a.mobile.changePage(a.mobile.firstPage,f)}};m.bind("hashchange",function(){a.mobile._handleHashChange(location.hash)});a(k).bind("pageshow",g);a(s).bind("throttledresize",g)}})(jQuery);(function(a,c){var b={},e=a(c),f=a.mobile.path.parseUrl(location.href);a.extend(b,{initialFilePath:f.pathname+f.search,initialHref:f.hrefNoHash,state:function(){return{hash:location.hash||"#"+b.initialFilePath,title:k.title,initialHref:b.initialHref}},resetUIKeys:function(b){var c="&"+
|
||||||
k(b.target);if(c&&!(b.which>1)){var f=a(c),h=function(){window.setTimeout(function(){d(true)},200)};if(f.is(":jqmData(rel='back')"))return window.history.back(),false;var g=l(f),c=j.makeUrlAbsolute(f.attr("href")||"#",g);if(!a.mobile.ajaxEnabled&&!j.isEmbeddedPage(c))h();else{if(c.search("#")!=-1)if(c=c.replace(/[^#]*#/,""))c=j.isPath(c)?j.makeUrlAbsolute(c,g):j.makeUrlAbsolute("#"+c,x.hrefNoHash);else{b.preventDefault();return}var g=f.is("[rel='external']")||f.is(":jqmData(ajax='false')")||f.is("[target]"),
|
a.mobile.subPageUrlKey,f=b.indexOf(a.mobile.dialogHashKey);f>-1?b=b.slice(0,f)+"#"+b.slice(f):b.indexOf(c)>-1&&(b=b.split(c).join("#"+c));return b},hashValueAfterReset:function(c){c=b.resetUIKeys(c);return a.mobile.path.parseUrl(c).hash},nextHashChangePrevented:function(c){a.mobile.urlHistory.ignoreNextHashChange=c;b.onHashChangeDisabled=c},onHashChange:function(){if(!b.onHashChangeDisabled){var c,f;c=location.hash;var e=a.mobile.path.isPath(c),j=e?location.href:a.mobile.getDocumentUrl();c=e?c.replace("#",
|
||||||
i=a.mobile.allowCrossDomainPages&&x.protocol==="file:"&&c.search(/^https?:/)!=-1;g||j.isExternal(c)&&!i?h():(h=f.jqmData("transition"),g=(g=f.jqmData("direction"))&&g==="reverse"||f.jqmData("back"),f=f.attr("data-"+a.mobile.ns+"rel")||e,a.mobile.changePage(c,{transition:h,reverse:g,role:f}),b.preventDefault())}}}});a(".ui-page").live("pageshow.prefetch",function(){var b=[];a(this).find("a:jqmData(prefetch)").each(function(){var c=a(this),f=c.attr("href");f&&a.inArray(f,b)===-1&&(b.push(f),a.mobile.loadPage(f,
|
""):c;f=b.state();c=a.mobile.path.makeUrlAbsolute(c,j);e&&(c=b.resetUIKeys(c));history.replaceState(f,k.title,c)}},onPopState:function(c){var c=c.originalEvent.state,f,h;if(c){f=b.hashValueAfterReset(a.mobile.urlHistory.getActive().url);h=b.hashValueAfterReset(c.hash.replace("#",""));if(f=f!==h)e.one("hashchange.pushstate",function(){b.nextHashChangePrevented(false)});b.nextHashChangePrevented(false);a.mobile._handleHashChange(c.hash);f&&b.nextHashChangePrevented(true)}},init:function(){e.bind("hashchange",
|
||||||
{role:c.attr("data-"+a.mobile.ns+"rel")}))})});a.mobile._handleHashChange=function(b){var c=j.stripHash(b),f={transition:a.mobile.urlHistory.stack.length===0?"none":e,changeHash:false,fromHashChange:true};if(!a.mobile.hashListeningEnabled||n.ignoreNextHashChange)n.ignoreNextHashChange=false;else{if(n.stack.length>1&&c.indexOf(s)>-1)if(a.mobile.activePage.is(".ui-dialog"))n.directHashChange({currentUrl:c,either:function(b){var d=a.mobile.urlHistory.getActive();c=d.pageUrl;a.extend(f,{role:d.role,transition:d.transition,
|
b.onHashChange);e.bind("popstate",b.onPopState);location.hash===""&&history.replaceState(b.state(),k.title,location.href)}});a(function(){a.mobile.pushStateEnabled&&a.support.pushState&&b.init()})})(jQuery,this);jQuery.mobile.transitionFallbacks.pop="fade";(function(a){a.mobile.transitionHandlers.slide=a.mobile.transitionHandlers.simultaneous;a.mobile.transitionFallbacks.slide="fade"})(jQuery,this);jQuery.mobile.transitionFallbacks.slidedown="fade";jQuery.mobile.transitionFallbacks.slideup="fade";
|
||||||
reverse:b})}});else{n.directHashChange({currentUrl:c,isBack:function(){window.history.back()},isForward:function(){window.history.forward()}});return}c?(c=typeof c==="string"&&!j.isPath(c)?j.makeUrlAbsolute("#"+c,t):c,a.mobile.changePage(c,f)):a.mobile.changePage(a.mobile.firstPage,f)}};o.bind("hashchange",function(){a.mobile._handleHashChange(location.hash)});a(document).bind("pageshow",g);a(window).bind("throttledresize",g)}})(jQuery);
|
jQuery.mobile.transitionFallbacks.flip="fade";jQuery.mobile.transitionFallbacks.flow="fade";jQuery.mobile.transitionFallbacks.turn="fade";(function(a){a.mobile.page.prototype.options.degradeInputs={color:false,date:false,datetime:false,"datetime-local":false,email:false,month:false,number:false,range:"number",search:"text",tel:false,time:false,url:false,week:false};a(k).bind("pagecreate create",function(c){var b=a.mobile.closestPageData(a(c.target)),e;if(b)e=b.options,a(c.target).find("input").not(b.keepNativeSelector()).each(function(){var b=
|
||||||
(function(a,e){var b={},d=a(e),f=a.mobile.path.parseUrl(location.href);a.extend(b,{initialFilePath:f.pathname+f.search,initialHref:f.hrefNoHash,hashchangeFired:false,state:function(){return{hash:location.hash||"#"+b.initialFilePath,title:document.title,initialHref:b.initialHref}},resetUIKeys:function(b){var f="&"+a.mobile.subPageUrlKey,d=b.indexOf(a.mobile.dialogHashKey);d>-1?b=b.slice(0,d)+"#"+b.slice(d):b.indexOf(f)>-1&&(b=b.split(f).join("#"+f));return b},nextHashChangePrevented:function(c){a.mobile.urlHistory.ignoreNextHashChange=
|
a(this),c=this.getAttribute("type"),g=e.degradeInputs[c]||"text";if(e.degradeInputs[c]){var h=a("<div>").html(b.clone()).html(),j=h.indexOf(" type=")>-1;b.replaceWith(h.replace(j?/\s+type=["']?\w+['"]?/:/\/?>/,' type="'+g+'" data-'+a.mobile.ns+'type="'+c+'"'+(j?"":">")))}})})})(jQuery);(function(a,c){a.widget("mobile.dialog",a.mobile.widget,{options:{closeBtnText:"Close",overlayTheme:"a",initSelector:":jqmData(role='dialog')"},_create:function(){var b=this,c=this.element,f=a("<a href='#' data-"+a.mobile.ns+
|
||||||
c;b.onHashChangeDisabled=c},onHashChange:function(){if(!b.onHashChangeDisabled){var c,f;c=location.hash;var d=a.mobile.path.isPath(c),e=d?location.href:a.mobile.getDocumentUrl();c=d?c.replace("#",""):c;f=b.state();c=a.mobile.path.makeUrlAbsolute(c,e);d&&(c=b.resetUIKeys(c));history.replaceState(f,document.title,c)}},onPopState:function(c){var f=c.originalEvent.state;f&&(b.nextHashChangePrevented(true),setTimeout(function(){b.nextHashChangePrevented(false);a.mobile._handleHashChange(f.hash)},100))},
|
"icon='delete' data-"+a.mobile.ns+"iconpos='notext'>"+this.options.closeBtnText+"</a>"),d=a("<div/>",{role:"dialog","class":"ui-dialog-contain ui-corner-all ui-overlay-shadow"});c.addClass("ui-dialog ui-overlay-"+this.options.overlayTheme);c.wrapInner(d).children().find(":jqmData(role='header')").prepend(f).end().children(":first-child").addClass("ui-corner-top").end().children(":last-child").addClass("ui-corner-bottom");f.bind("click",function(){b.close()});c.bind("vclick submit",function(b){var b=
|
||||||
init:function(){d.bind("hashchange",b.onHashChange);d.bind("popstate",b.onPopState);location.hash===""&&history.replaceState(b.state(),document.title,location.href)}});a(function(){a.mobile.pushStateEnabled&&a.support.pushState&&b.init()})})(jQuery,this);
|
a(b.target).closest(b.type==="vclick"?"a":"form"),c;b.length&&!b.jqmData("transition")&&(c=a.mobile.urlHistory.getActive()||{},b.attr("data-"+a.mobile.ns+"transition",c.transition||a.mobile.defaultDialogTransition).attr("data-"+a.mobile.ns+"direction","reverse"))}).bind("pagehide",function(){a(this).find("."+a.mobile.activeBtnClass).removeClass(a.mobile.activeBtnClass)}).bind("pagebeforeshow",function(){b.options.overlayTheme&&b.element.page("removeContainerBackground").page("setContainerBackground",
|
||||||
(function(a){function e(b,d,f,c){var e=new a.Deferred,g=d?" reverse":"",i="ui-mobile-viewport-transitioning viewport-"+b;f.animationComplete(function(){f.add(c).removeClass("out in reverse "+b);c&&c[0]!==f[0]&&c.removeClass(a.mobile.activePageClass);f.parent().removeClass(i);e.resolve(b,d,f,c)});f.parent().addClass(i);c&&c.addClass(b+" out"+g);f.addClass(a.mobile.activePageClass+" "+b+" in"+g);return e.promise()}a.mobile.css3TransitionHandler=e;if(a.mobile.defaultTransitionHandler===a.mobile.noneTransitionHandler)a.mobile.defaultTransitionHandler=
|
b.options.overlayTheme)})},close:function(){c.history.back()}});a(k).delegate(a.mobile.dialog.prototype.options.initSelector,"pagecreate",function(){a.mobile.dialog.prototype.enhance(this)})})(jQuery,this);(function(a){a.fn.fieldcontain=function(){return this.addClass("ui-field-contain ui-body ui-br")};a(k).bind("pagecreate create",function(c){a(":jqmData(role='fieldcontain')",c.target).jqmEnhanceable().fieldcontain()})})(jQuery);(function(a){a.fn.grid=function(c){return this.each(function(){var b=
|
||||||
e})(jQuery,this);
|
a(this),e=a.extend({grid:null},c),f=b.children(),d={solo:1,a:2,b:3,c:4,d:5},e=e.grid;if(!e)if(f.length<=5)for(var g in d)d[g]===f.length&&(e=g);else e="a";d=d[e];b.addClass("ui-grid-"+e);f.filter(":nth-child("+d+"n+1)").addClass("ui-block-a");d>1&&f.filter(":nth-child("+d+"n+2)").addClass("ui-block-b");d>2&&f.filter(":nth-child(3n+3)").addClass("ui-block-c");d>3&&f.filter(":nth-child(4n+4)").addClass("ui-block-d");d>4&&f.filter(":nth-child(5n+5)").addClass("ui-block-e")})}})(jQuery);(function(a){a(k).bind("pagecreate create",
|
||||||
(function(a){a.mobile.page.prototype.options.degradeInputs={color:false,date:false,datetime:false,"datetime-local":false,email:false,month:false,number:false,range:"number",search:"text",tel:false,time:false,url:false,week:false};a(document).bind("pagecreate create",function(e){var b=a(e.target).closest(':jqmData(role="page")').data("page"),d;if(b)d=b.options,a(e.target).find("input").not(b.keepNativeSelector()).each(function(){var b=a(this),c=this.getAttribute("type"),e=d.degradeInputs[c]||"text";
|
function(c){a(":jqmData(role='nojs')",c.target).addClass("ui-nojs")})})(jQuery);(function(a,c){function b(a){for(var b;a;){if((b=typeof a.className==="string"&&a.className+" ")&&b.indexOf("ui-btn ")>-1&&b.indexOf("ui-disabled ")<0)break;a=a.parentNode}return a}a.fn.buttonMarkup=function(b){for(var b=b&&a.type(b)=="object"?b:{},d=0;d<this.length;d++){var g=this.eq(d),h=g[0],j=a.extend({},a.fn.buttonMarkup.defaults,{icon:b.icon!==c?b.icon:g.jqmData("icon"),iconpos:b.iconpos!==c?b.iconpos:g.jqmData("iconpos"),
|
||||||
if(d.degradeInputs[c]){var g=a("<div>").html(b.clone()).html(),i=g.indexOf(" type=")>-1;b.replaceWith(g.replace(i?/\s+type=["']?\w+['"]?/:/\/?>/,' type="'+e+'" data-'+a.mobile.ns+'type="'+c+'"'+(i?"":">")))}})})})(jQuery);
|
theme:b.theme!==c?b.theme:g.jqmData("theme")||a.mobile.getInheritedTheme(g,"c"),inline:b.inline!==c?b.inline:g.jqmData("inline"),shadow:b.shadow!==c?b.shadow:g.jqmData("shadow"),corners:b.corners!==c?b.corners:g.jqmData("corners"),iconshadow:b.iconshadow!==c?b.iconshadow:g.jqmData("iconshadow"),mini:b.mini!==c?b.mini:g.jqmData("mini")},b),o="ui-btn-inner",m,p,l,r,n,q;a.each(j,function(b,c){h.setAttribute("data-"+a.mobile.ns+b,c);g.jqmData(b,c)});(q=a.data(h.tagName==="INPUT"||h.tagName==="BUTTON"?
|
||||||
(function(a,e){a.widget("mobile.dialog",a.mobile.widget,{options:{closeBtnText:"Close",overlayTheme:"a",initSelector:":jqmData(role='dialog')"},_create:function(){var b=this,d=this.element,f=a("<a href='#' data-"+a.mobile.ns+"icon='delete' data-"+a.mobile.ns+"iconpos='notext'>"+this.options.closeBtnText+"</a>");d.addClass("ui-overlay-"+this.options.overlayTheme);d.attr("role","dialog").addClass("ui-dialog").find(":jqmData(role='header')").addClass("ui-corner-top ui-overlay-shadow").prepend(f).end().find(":jqmData(role='content'),:jqmData(role='footer')").addClass("ui-overlay-shadow").last().addClass("ui-corner-bottom");
|
h.parentNode:h,"buttonElements"))?(h=q.outer,g=a(h),l=q.inner,r=q.text,a(q.icon).remove(),q.icon=null):(l=k.createElement(j.wrapperEls),r=k.createElement(j.wrapperEls));n=j.icon?k.createElement("span"):null;e&&!q&&e();if(!j.theme)j.theme=a.mobile.getInheritedTheme(g,"c");m="ui-btn ui-btn-up-"+j.theme;m+=j.inline?" ui-btn-inline":"";m+=j.shadow?" ui-shadow":"";m+=j.corners?" ui-btn-corner-all":"";j.mini!==c&&(m+=j.mini?" ui-mini":" ui-fullsize");j.inline!==c&&(m+=j.inline===false?" ui-btn-block":" ui-btn-inline");
|
||||||
f.bind("vclick",function(){b.close()});d.bind("vclick submit",function(b){var b=a(b.target).closest(b.type==="vclick"?"a":"form"),f;b.length&&!b.jqmData("transition")&&(f=a.mobile.urlHistory.getActive()||{},b.attr("data-"+a.mobile.ns+"transition",f.transition||a.mobile.defaultDialogTransition).attr("data-"+a.mobile.ns+"direction","reverse"))}).bind("pagehide",function(){a(this).find("."+a.mobile.activeBtnClass).removeClass(a.mobile.activeBtnClass)})},close:function(){e.history.back()}});a(a.mobile.dialog.prototype.options.initSelector).live("pagecreate",
|
if(j.icon)j.icon="ui-icon-"+j.icon,j.iconpos=j.iconpos||"left",p="ui-icon "+j.icon,j.iconshadow&&(p+=" ui-icon-shadow");j.iconpos&&(m+=" ui-btn-icon-"+j.iconpos,j.iconpos=="notext"&&!g.attr("title")&&g.attr("title",g.getEncodedText()));o+=j.corners?" ui-btn-corner-all":"";j.iconpos&&j.iconpos==="notext"&&!g.attr("title")&&g.attr("title",g.getEncodedText());q&&g.removeClass(q.bcls||"");g.removeClass("ui-link").addClass(m);l.className=o;r.className="ui-btn-text";q||l.appendChild(r);if(n&&(n.className=
|
||||||
function(){a(this).dialog()})})(jQuery,this);
|
p,!q||!q.icon))n.appendChild(k.createTextNode("\u00a0")),l.appendChild(n);for(;h.firstChild&&!q;)r.appendChild(h.firstChild);q||h.appendChild(l);q={bcls:m,outer:h,inner:l,text:r,icon:n};a.data(h,"buttonElements",q);a.data(l,"buttonElements",q);a.data(r,"buttonElements",q);n&&a.data(n,"buttonElements",q)}return this};a.fn.buttonMarkup.defaults={corners:true,shadow:true,iconshadow:true,wrapperEls:"span"};var e=function(){var c=a.mobile.buttonMarkup.hoverDelay,d,g;a(k).bind({"vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart":function(e){var j,
|
||||||
(function(a){a.mobile.page.prototype.options.backBtnText="Back";a.mobile.page.prototype.options.addBackBtn=false;a.mobile.page.prototype.options.backBtnTheme=null;a.mobile.page.prototype.options.headerTheme="a";a.mobile.page.prototype.options.footerTheme="a";a.mobile.page.prototype.options.contentTheme=null;a(":jqmData(role='page'), :jqmData(role='dialog')").live("pagecreate",function(){var e=a(this),b=e.data("page").options,d=e.jqmData("role"),f=b.theme;a(":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')",
|
k=a(b(e.target)),e=e.type;if(k.length)if(j=k.attr("data-"+a.mobile.ns+"theme"),e==="vmousedown")a.support.touch?d=setTimeout(function(){k.removeClass("ui-btn-up-"+j).addClass("ui-btn-down-"+j)},c):k.removeClass("ui-btn-up-"+j).addClass("ui-btn-down-"+j);else if(e==="vmousecancel"||e==="vmouseup")k.removeClass("ui-btn-down-"+j).addClass("ui-btn-up-"+j);else if(e==="vmouseover"||e==="focus")a.support.touch?g=setTimeout(function(){k.removeClass("ui-btn-up-"+j).addClass("ui-btn-hover-"+j)},c):k.removeClass("ui-btn-up-"+
|
||||||
this).each(function(){var c=a(this),e=c.jqmData("role"),g=c.jqmData("theme"),i=g||b.contentTheme||d==="dialog"&&f,k;c.addClass("ui-"+e);if(e==="header"||e==="footer"){var l=g||(e==="header"?b.headerTheme:b.footerTheme)||f;c.addClass("ui-bar-"+l).attr("role",e==="header"?"banner":"contentinfo");g=c.children("a");i=g.hasClass("ui-btn-left");k=g.hasClass("ui-btn-right");i=i||g.eq(0).not(".ui-btn-right").addClass("ui-btn-left").length;k||g.eq(1).addClass("ui-btn-right");b.addBackBtn&&e==="header"&&a(".ui-page").length>
|
j).addClass("ui-btn-hover-"+j);else if(e==="vmouseout"||e==="blur"||e==="scrollstart")k.removeClass("ui-btn-hover-"+j+" ui-btn-down-"+j).addClass("ui-btn-up-"+j),d&&clearTimeout(d),g&&clearTimeout(g)},"focusin focus":function(c){a(b(c.target)).addClass(a.mobile.focusClass)},"focusout blur":function(c){a(b(c.target)).removeClass(a.mobile.focusClass)}});e=null};a(k).bind("pagecreate create",function(b){a(":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a",
|
||||||
1&&c.jqmData("url")!==a.mobile.path.stripHash(location.hash)&&!i&&a("<a href='#' class='ui-btn-left' data-"+a.mobile.ns+"rel='back' data-"+a.mobile.ns+"icon='arrow-l'>"+b.backBtnText+"</a>").attr("data-"+a.mobile.ns+"theme",b.backBtnTheme||l).prependTo(c);c.children("h1, h2, h3, h4, h5, h6").addClass("ui-title").attr({tabindex:"0",role:"heading","aria-level":"1"})}else e==="content"&&(i&&c.addClass("ui-body-"+i),c.attr("role","main"))})})})(jQuery);
|
b.target).not(".ui-btn, :jqmData(role='none'), :jqmData(role='nojs')").buttonMarkup()})})(jQuery);(function(a){a.mobile.page.prototype.options.backBtnText="Back";a.mobile.page.prototype.options.addBackBtn=false;a.mobile.page.prototype.options.backBtnTheme=null;a.mobile.page.prototype.options.headerTheme="a";a.mobile.page.prototype.options.footerTheme="a";a.mobile.page.prototype.options.contentTheme=null;a(k).delegate(":jqmData(role='page'), :jqmData(role='dialog')","pagecreate",function(){var c=a(this),
|
||||||
(function(a){a.widget("mobile.collapsible",a.mobile.widget,{options:{expandCueText:" click to expand contents",collapseCueText:" click to collapse contents",collapsed:true,heading:"h1,h2,h3,h4,h5,h6,legend",theme:null,contentTheme:null,iconTheme:"d",initSelector:":jqmData(role='collapsible')"},_create:function(){var e=this.element,b=this.options,d=e.addClass("ui-collapsible"),f=e.children(b.heading).first(),c=d.wrapInner("<div class='ui-collapsible-content'></div>").find(".ui-collapsible-content"),
|
b=c.data("page").options,e=c.jqmData("role"),f=b.theme;a(":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')",this).jqmEnhanceable().each(function(){var d=a(this),g=d.jqmData("role"),h=d.jqmData("theme"),j=h||b.contentTheme||e==="dialog"&&f,k;d.addClass("ui-"+g);if(g==="header"||g==="footer"){var m=h||(g==="header"?b.headerTheme:b.footerTheme)||f;d.addClass("ui-bar-"+m).attr("role",g==="header"?"banner":"contentinfo");g==="header"&&(h=d.children("a"),k=h.hasClass("ui-btn-left"),
|
||||||
h=e.closest(":jqmData(role='collapsible-set')").addClass("ui-collapsible-set"),e=h.children(":jqmData(role='collapsible')");f.is("legend")&&(f=a("<div role='heading'>"+f.html()+"</div>").insertBefore(f),f.next().remove());if(h.length){if(!b.theme)b.theme=h.jqmData("theme");if(!b.contentTheme)b.contentTheme=h.jqmData("content-theme")}c.addClass(b.contentTheme?"ui-body-"+b.contentTheme:"");f.insertBefore(c).addClass("ui-collapsible-heading").append("<span class='ui-collapsible-heading-status'></span>").wrapInner("<a href='#' class='ui-collapsible-heading-toggle'></a>").find("a").first().buttonMarkup({shadow:false,
|
j=h.hasClass("ui-btn-right"),k=k||h.eq(0).not(".ui-btn-right").addClass("ui-btn-left").length,j||h.eq(1).addClass("ui-btn-right"));b.addBackBtn&&g==="header"&&a(".ui-page").length>1&&c.jqmData("url")!==a.mobile.path.stripHash(location.hash)&&!k&&a("<a href='#' class='ui-btn-left' data-"+a.mobile.ns+"rel='back' data-"+a.mobile.ns+"icon='arrow-l'>"+b.backBtnText+"</a>").attr("data-"+a.mobile.ns+"theme",b.backBtnTheme||m).prependTo(d);d.children("h1, h2, h3, h4, h5, h6").addClass("ui-title").attr({role:"heading",
|
||||||
corners:false,iconPos:"left",icon:"plus",theme:b.theme});h.length?(h.jqmData("collapsiblebound")||h.jqmData("collapsiblebound",true).bind("expand",function(b){a(b.target).closest(".ui-collapsible").siblings(".ui-collapsible").trigger("collapse")}),e.first().find("a").first().addClass("ui-corner-top").find(".ui-btn-inner").addClass("ui-corner-top"),e.last().jqmData("collapsible-last",true).find("a").first().addClass("ui-corner-bottom").find(".ui-btn-inner").addClass("ui-corner-bottom"),d.jqmData("collapsible-last")&&
|
"aria-level":"1"})}else g==="content"&&(j&&d.addClass("ui-body-"+j),d.attr("role","main"))})})})(jQuery);(function(a){a.widget("mobile.collapsible",a.mobile.widget,{options:{expandCueText:" click to expand contents",collapseCueText:" click to collapse contents",collapsed:true,heading:"h1,h2,h3,h4,h5,h6,legend",theme:null,contentTheme:null,iconTheme:"d",mini:false,initSelector:":jqmData(role='collapsible')"},_create:function(){var c=this.element,b=this.options,e=c.addClass("ui-collapsible"),f=c.children(b.heading).first(),
|
||||||
f.find("a").first().add(f.find(".ui-btn-inner")).addClass("ui-corner-bottom")):f.find("a").first().add(f.find(".ui-btn-inner")).addClass("ui-corner-top ui-corner-bottom");d.bind("expand collapse",function(e){if(!e.isDefaultPrevented()){e.preventDefault();var i=a(this),e=e.type==="collapse",k=b.contentTheme;f.toggleClass("ui-collapsible-heading-collapsed",e).find(".ui-collapsible-heading-status").text(e?b.expandCueText:b.collapseCueText).end().find(".ui-icon").toggleClass("ui-icon-minus",!e).toggleClass("ui-icon-plus",
|
d=e.wrapInner("<div class='ui-collapsible-content'></div>").find(".ui-collapsible-content"),g=c.closest(":jqmData(role='collapsible-set')").addClass("ui-collapsible-set");f.is("legend")&&(f=a("<div role='heading'>"+f.html()+"</div>").insertBefore(f),f.next().remove());if(g.length){if(!b.theme)b.theme=g.jqmData("theme")||a.mobile.getInheritedTheme(g,"c");if(!b.contentTheme)b.contentTheme=g.jqmData("content-theme");if(!b.iconPos)b.iconPos=g.jqmData("iconpos");if(!b.mini)b.mini=g.jqmData("mini")}d.addClass(b.contentTheme?
|
||||||
e);i.toggleClass("ui-collapsible-collapsed",e);c.toggleClass("ui-collapsible-content-collapsed",e).attr("aria-hidden",e);if(k&&(!h.length||d.jqmData("collapsible-last")))f.find("a").first().add(f.find(".ui-btn-inner")).toggleClass("ui-corner-bottom",e),c.toggleClass("ui-corner-bottom",!e);c.trigger("updatelayout")}}).trigger(b.collapsed?"collapse":"expand");f.bind("click",function(a){var b=f.is(".ui-collapsible-heading-collapsed")?"expand":"collapse";d.trigger(b);a.preventDefault()})}});a(document).bind("pagecreate create",
|
"ui-body-"+b.contentTheme:"");f.insertBefore(d).addClass("ui-collapsible-heading").append("<span class='ui-collapsible-heading-status'></span>").wrapInner("<a href='#' class='ui-collapsible-heading-toggle'></a>").find("a").first().buttonMarkup({shadow:false,corners:false,iconpos:c.jqmData("iconpos")||b.iconPos||"left",icon:"plus",mini:b.mini,theme:b.theme}).add(".ui-btn-inner",c).addClass("ui-corner-top ui-corner-bottom");e.bind("expand collapse",function(c){if(!c.isDefaultPrevented()){c.preventDefault();
|
||||||
function(e){a(a.mobile.collapsible.prototype.options.initSelector,e.target).collapsible()})})(jQuery);(function(a){a.fn.fieldcontain=function(){return this.addClass("ui-field-contain ui-body ui-br")};a(document).bind("pagecreate create",function(e){a(":jqmData(role='fieldcontain')",e.target).fieldcontain()})})(jQuery);
|
var j=a(this),c=c.type==="collapse",k=b.contentTheme;f.toggleClass("ui-collapsible-heading-collapsed",c).find(".ui-collapsible-heading-status").text(c?b.expandCueText:b.collapseCueText).end().find(".ui-icon").toggleClass("ui-icon-minus",!c).toggleClass("ui-icon-plus",c);j.toggleClass("ui-collapsible-collapsed",c);d.toggleClass("ui-collapsible-content-collapsed",c).attr("aria-hidden",c);if(k&&(!g.length||e.jqmData("collapsible-last")))f.find("a").first().add(f.find(".ui-btn-inner")).toggleClass("ui-corner-bottom",
|
||||||
(function(a){a.fn.grid=function(e){return this.each(function(){var b=a(this),d=a.extend({grid:null},e),f=b.children(),c={solo:1,a:2,b:3,c:4,d:5},d=d.grid;if(!d)if(f.length<=5)for(var h in c)c[h]===f.length&&(d=h);else d="a";c=c[d];b.addClass("ui-grid-"+d);f.filter(":nth-child("+c+"n+1)").addClass("ui-block-a");c>1&&f.filter(":nth-child("+c+"n+2)").addClass("ui-block-b");c>2&&f.filter(":nth-child(3n+3)").addClass("ui-block-c");c>3&&f.filter(":nth-child(4n+4)").addClass("ui-block-d");c>4&&f.filter(":nth-child(5n+5)").addClass("ui-block-e")})}})(jQuery);
|
c),d.toggleClass("ui-corner-bottom",!c);d.trigger("updatelayout")}}).trigger(b.collapsed?"collapse":"expand");f.bind("click",function(a){var b=f.is(".ui-collapsible-heading-collapsed")?"expand":"collapse";e.trigger(b);a.preventDefault()})}});a(k).bind("pagecreate create",function(c){a.mobile.collapsible.prototype.enhanceWithin(c.target)})})(jQuery);(function(a,c){a.widget("mobile.collapsibleset",a.mobile.widget,{options:{initSelector:":jqmData(role='collapsible-set')"},_create:function(){var b=this.element.addClass("ui-collapsible-set"),
|
||||||
(function(a,e){a.widget("mobile.navbar",a.mobile.widget,{options:{iconpos:"top",grid:null,initSelector:":jqmData(role='navbar')"},_create:function(){var b=this.element,d=b.find("a"),f=d.filter(":jqmData(icon)").length?this.options.iconpos:e;b.addClass("ui-navbar").attr("role","navigation").find("ul").grid({grid:this.options.grid});f||b.addClass("ui-navbar-noicons");d.buttonMarkup({corners:false,shadow:false,iconpos:f});b.delegate("a","vclick",function(){d.not(".ui-state-persist").removeClass(a.mobile.activeBtnClass);
|
e=this.options;if(!e.theme)e.theme=a.mobile.getInheritedTheme(b,"c");if(!e.contentTheme)e.contentTheme=b.jqmData("content-theme");if(!e.corners)e.corners=b.jqmData("corners")===c?true:false;b.jqmData("collapsiblebound")||b.jqmData("collapsiblebound",true).bind("expand collapse",function(b){var c=b.type==="collapse",b=a(b.target).closest(".ui-collapsible"),e=b.data("collapsible");e.options.contentTheme&&b.jqmData("collapsible-last")&&(b.find(e.options.heading).first().find("a").first().add(".ui-btn-inner").toggleClass("ui-corner-bottom",
|
||||||
a(this).addClass(a.mobile.activeBtnClass)})}});a(document).bind("pagecreate create",function(b){a(a.mobile.navbar.prototype.options.initSelector,b.target).navbar()})})(jQuery);
|
c),b.find(".ui-collapsible-content").toggleClass("ui-corner-bottom",!c))}).bind("expand",function(b){a(b.target).closest(".ui-collapsible").siblings(".ui-collapsible").trigger("collapse")})},_init:function(){this.refresh()},refresh:function(){var b=this.options,c=this.element.children(":jqmData(role='collapsible')");a.mobile.collapsible.prototype.enhance(c.not(".ui-collapsible"));c.each(function(){a(this).find(a.mobile.collapsible.prototype.options.heading).find("a").first().add(".ui-btn-inner").removeClass("ui-corner-top ui-corner-bottom")});
|
||||||
(function(a){var e={};a.widget("mobile.listview",a.mobile.widget,{options:{theme:null,countTheme:"c",headerTheme:"b",dividerTheme:"b",splitIcon:"arrow-r",splitTheme:"b",inset:false,initSelector:":jqmData(role='listview')"},_create:function(){var a=this;a.element.addClass(function(d,f){return f+" ui-listview "+(a.options.inset?" ui-listview-inset ui-corner-all ui-shadow ":"")});a.refresh(true)},_removeCorners:function(a,d){a=a.add(a.find(".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb"));d==="top"?a.removeClass("ui-corner-top ui-corner-tr ui-corner-tl"):
|
c.first().find("a").first().addClass(b.corners?"ui-corner-top":"").find(".ui-btn-inner").addClass("ui-corner-top");c.last().jqmData("collapsible-last",true).find("a").first().addClass(b.corners?"ui-corner-bottom":"").find(".ui-btn-inner").addClass("ui-corner-bottom")}});a(k).bind("pagecreate create",function(b){a.mobile.collapsibleset.prototype.enhanceWithin(b.target)})})(jQuery);(function(a,c){a.widget("mobile.navbar",a.mobile.widget,{options:{iconpos:"top",grid:null,initSelector:":jqmData(role='navbar')"},
|
||||||
d==="bottom"?a.removeClass("ui-corner-bottom ui-corner-br ui-corner-bl"):a.removeClass("ui-corner-top ui-corner-tr ui-corner-tl ui-corner-bottom ui-corner-br ui-corner-bl")},_refreshCorners:function(a){var d,f;this.options.inset&&(d=this.element.children("li"),f=a?d.not(".ui-screen-hidden"):d.filter(":visible"),this._removeCorners(d),d=f.first().addClass("ui-corner-top"),d.add(d.find(".ui-btn-inner").not(".ui-li-link-alt span:first-child")).addClass("ui-corner-top").end().find(".ui-li-link-alt, .ui-li-link-alt span:first-child").addClass("ui-corner-tr").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-tl"),
|
_create:function(){var b=this.element,e=b.find("a"),f=e.filter(":jqmData(icon)").length?this.options.iconpos:c;b.addClass("ui-navbar").attr("role","navigation").find("ul").jqmEnhanceable().grid({grid:this.options.grid});f||b.addClass("ui-navbar-noicons");e.buttonMarkup({corners:false,shadow:false,inline:true,iconpos:f});b.delegate("a","vclick",function(b){a(b.target).hasClass("ui-disabled")||(e.removeClass(a.mobile.activeBtnClass),a(this).addClass(a.mobile.activeBtnClass))});b.closest(".ui-page").bind("pagebeforeshow",
|
||||||
f=f.last().addClass("ui-corner-bottom"),f.add(f.find(".ui-btn-inner")).find(".ui-li-link-alt").addClass("ui-corner-br").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-bl"));a||this.element.trigger("updatelayout")},_findFirstElementByTagName:function(a,d,f,c){var e={};for(e[f]=e[c]=true;a;){if(e[a.nodeName])return a;a=a[d]}return null},_getChildrenByTagName:function(b,d,f){var c=[],e={};e[d]=e[f]=true;for(b=b.firstChild;b;)e[b.nodeName]&&c.push(b),b=b.nextSibling;return a(c)},_addThumbClasses:function(b){var d,
|
function(){e.filter(".ui-state-persist").addClass(a.mobile.activeBtnClass)})}});a(k).bind("pagecreate create",function(b){a.mobile.navbar.prototype.enhanceWithin(b.target)})})(jQuery);(function(a){var c={};a.widget("mobile.listview",a.mobile.widget,{options:{theme:null,countTheme:"c",headerTheme:"b",dividerTheme:"b",splitIcon:"arrow-r",splitTheme:"b",mini:false,inset:false,initSelector:":jqmData(role='listview')"},_create:function(){var a="";a+=this.options.inset?" ui-listview-inset ui-corner-all ui-shadow ":
|
||||||
f,c=b.length;for(d=0;d<c;d++)f=a(this._findFirstElementByTagName(b[d].firstChild,"nextSibling","img","IMG")),f.length&&(f.addClass("ui-li-thumb"),a(this._findFirstElementByTagName(f[0].parentNode,"parentNode","li","LI")).addClass(f.is(".ui-li-icon")?"ui-li-has-icon":"ui-li-has-thumb"))},refresh:function(b){this.parentPage=this.element.closest(".ui-page");this._createSubPages();var d=this.options,f=this.element,c=f.jqmData("dividertheme")||d.dividerTheme,e=f.jqmData("splittheme"),g=f.jqmData("spliticon"),
|
"";a+=this.element.jqmData("mini")||this.options.mini===true?" ui-mini":"";this.element.addClass(function(c,f){return f+" ui-listview "+a});this.refresh(true)},_removeCorners:function(a,c){a=a.add(a.find(".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb"));c==="top"?a.removeClass("ui-corner-top ui-corner-tr ui-corner-tl"):c==="bottom"?a.removeClass("ui-corner-bottom ui-corner-br ui-corner-bl"):a.removeClass("ui-corner-top ui-corner-tr ui-corner-tl ui-corner-bottom ui-corner-br ui-corner-bl")},_refreshCorners:function(a){var c,
|
||||||
i=this._getChildrenByTagName(f[0],"li","LI"),k=a.support.cssPseudoElement||!a.nodeName(f[0],"ol")?0:1,l={},o,m,p,j,q;k&&f.find(".ui-li-dec").remove();if(!d.theme)d.theme=a.mobile.getInheritedTheme(this.element,"c");for(var n=0,A=i.length;n<A;n++){o=i.eq(n);m="ui-li";if(b||!o.hasClass("ui-li"))p=o.jqmData("theme")||d.theme,j=this._getChildrenByTagName(o[0],"a","A"),j.length?(q=o.jqmData("icon"),o.buttonMarkup({wrapperEls:"div",shadow:false,corners:false,iconpos:"right",icon:j.length>1||q===false?false:
|
f;this.options.inset&&(c=this.element.children("li"),f=a?c.not(".ui-screen-hidden"):c.filter(":visible"),this._removeCorners(c),c=f.first().addClass("ui-corner-top"),c.add(c.find(".ui-btn-inner").not(".ui-li-link-alt span:first-child")).addClass("ui-corner-top").end().find(".ui-li-link-alt, .ui-li-link-alt span:first-child").addClass("ui-corner-tr").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-tl"),f=f.last().addClass("ui-corner-bottom"),f.add(f.find(".ui-btn-inner")).find(".ui-li-link-alt").addClass("ui-corner-br").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-bl"));
|
||||||
q||"arrow-r",theme:p}),q!=false&&j.length==1&&o.addClass("ui-li-has-arrow"),j.first().addClass("ui-link-inherit"),j.length>1&&(m+=" ui-li-has-alt",j=j.last(),q=e||j.jqmData("theme")||d.splitTheme,j.appendTo(o).attr("title",j.getEncodedText()).addClass("ui-li-link-alt").empty().buttonMarkup({shadow:false,corners:false,theme:p,icon:false,iconpos:false}).find(".ui-btn-inner").append(a(document.createElement("span")).buttonMarkup({shadow:true,corners:true,theme:q,iconpos:"notext",icon:g||j.jqmData("icon")||
|
a||this.element.trigger("updatelayout")},_findFirstElementByTagName:function(a,c,f,d){var g={};for(g[f]=g[d]=true;a;){if(g[a.nodeName])return a;a=a[c]}return null},_getChildrenByTagName:function(b,c,f){var d=[],g={};g[c]=g[f]=true;for(b=b.firstChild;b;)g[b.nodeName]&&d.push(b),b=b.nextSibling;return a(d)},_addThumbClasses:function(b){var c,f,d=b.length;for(c=0;c<d;c++)f=a(this._findFirstElementByTagName(b[c].firstChild,"nextSibling","img","IMG")),f.length&&(f.addClass("ui-li-thumb"),a(this._findFirstElementByTagName(f[0].parentNode,
|
||||||
d.splitIcon})))):o.jqmData("role")==="list-divider"?(m+=" ui-li-divider ui-btn ui-bar-"+c,o.attr("role","heading"),k&&(k=1)):m+=" ui-li-static ui-body-"+p;k&&m.indexOf("ui-li-divider")<0&&(p=o.is(".ui-li-static:first")?o:o.find(".ui-link-inherit"),p.addClass("ui-li-jsnumbering").prepend("<span class='ui-li-dec'>"+k++ +". </span>"));l[m]||(l[m]=[]);l[m].push(o[0])}for(m in l)a(l[m]).addClass(m).children(".ui-btn-inner").addClass(m);f.find("h1, h2, h3, h4, h5, h6").addClass("ui-li-heading").end().find("p, dl").addClass("ui-li-desc").end().find(".ui-li-aside").each(function(){var b=
|
"parentNode","li","LI")).addClass(f.is(".ui-li-icon")?"ui-li-has-icon":"ui-li-has-thumb"))},refresh:function(b){this.parentPage=this.element.closest(".ui-page");this._createSubPages();var c=this.options,f=this.element,d=f.jqmData("dividertheme")||c.dividerTheme,g=f.jqmData("splittheme"),h=f.jqmData("spliticon"),j=this._getChildrenByTagName(f[0],"li","LI"),o=a.support.cssPseudoElement||!a.nodeName(f[0],"ol")?0:1,m={},p,l,r,n,q,t,x;o&&f.find(".ui-li-dec").remove();if(!c.theme)c.theme=a.mobile.getInheritedTheme(this.element,
|
||||||
a(this);b.prependTo(b.parent())}).end().find(".ui-li-count").each(function(){a(this).closest("li").addClass("ui-li-has-count")}).addClass("ui-btn-up-"+(f.jqmData("counttheme")||this.options.countTheme)+" ui-btn-corner-all");this._addThumbClasses(i);this._addThumbClasses(f.find(".ui-link-inherit"));this._refreshCorners(b)},_idStringEscape:function(a){return a.replace(/[^a-zA-Z0-9]/g,"-")},_createSubPages:function(){var b=this.element,d=b.closest(".ui-page"),f=d.jqmData("url"),c=f||d[0][a.expando],
|
"c");for(var u=0,w=j.length;u<w;u++){p=j.eq(u);l="ui-li";if(b||!p.hasClass("ui-li"))r=p.jqmData("theme")||c.theme,n=this._getChildrenByTagName(p[0],"a","A"),n.length?(t=p.jqmData("icon"),p.buttonMarkup({wrapperEls:"div",shadow:false,corners:false,iconpos:"right",icon:n.length>1||t===false?false:t||"arrow-r",theme:r}),t!=false&&n.length==1&&p.addClass("ui-li-has-arrow"),n.first().removeClass("ui-link").addClass("ui-link-inherit"),n.length>1&&(l+=" ui-li-has-alt",n=n.last(),q=g||n.jqmData("theme")||
|
||||||
h=b.attr("id"),g=this.options,i="data-"+a.mobile.ns,k=this,l=d.find(":jqmData(role='footer')").jqmData("id"),o;typeof e[c]==="undefined"&&(e[c]=-1);h=h||++e[c];a(b.find("li>ul, li>ol").toArray().reverse()).each(function(c){var d=a(this),e=d.attr("id")||h+"-"+c,c=d.parent(),k=a(d.prevAll().toArray().reverse()),k=k.length?k:a("<span>"+a.trim(c.contents()[0].nodeValue)+"</span>"),n=k.first().getEncodedText(),e=(f||"")+"&"+a.mobile.subPageUrlKey+"="+e,A=d.jqmData("theme")||g.theme,z=d.jqmData("counttheme")||
|
c.splitTheme,x=n.jqmData("icon"),n.appendTo(p).attr("title",n.getEncodedText()).addClass("ui-li-link-alt").empty().buttonMarkup({shadow:false,corners:false,theme:r,icon:false,iconpos:false}).find(".ui-btn-inner").append(a(k.createElement("span")).buttonMarkup({shadow:true,corners:true,theme:q,iconpos:"notext",icon:x||t||h||c.splitIcon})))):p.jqmData("role")==="list-divider"?(l+=" ui-li-divider ui-bar-"+d,p.attr("role","heading"),o&&(o=1)):l+=" ui-li-static ui-body-"+r;o&&l.indexOf("ui-li-divider")<
|
||||||
b.jqmData("counttheme")||g.countTheme;o=true;d.detach().wrap("<div "+i+"role='page' "+i+"url='"+e+"' "+i+"theme='"+A+"' "+i+"count-theme='"+z+"'><div "+i+"role='content'></div></div>").parent().before("<div "+i+"role='header' "+i+"theme='"+g.headerTheme+"'><div class='ui-title'>"+n+"</div></div>").after(l?a("<div "+i+"role='footer' "+i+"id='"+l+"'>"):"").parent().appendTo(a.mobile.pageContainer).page();d=c.find("a:first");d.length||(d=a("<a/>").html(k||n).prependTo(c.empty()));d.attr("href","#"+e)}).listview();
|
0&&(r=p.is(".ui-li-static:first")?p:p.find(".ui-link-inherit"),r.addClass("ui-li-jsnumbering").prepend("<span class='ui-li-dec'>"+o++ +". </span>"));m[l]||(m[l]=[]);m[l].push(p[0])}for(l in m)a(m[l]).addClass(l).children(".ui-btn-inner").addClass(l);f.find("h1, h2, h3, h4, h5, h6").addClass("ui-li-heading").end().find("p, dl").addClass("ui-li-desc").end().find(".ui-li-aside").each(function(){var b=a(this);b.prependTo(b.parent())}).end().find(".ui-li-count").each(function(){a(this).closest("li").addClass("ui-li-has-count")}).addClass("ui-btn-up-"+
|
||||||
o&&d.is(":jqmData(external-page='true')")&&d.data("page").options.domCache===false&&d.unbind("pagehide.remove").bind("pagehide.remove",function(b,c){var e=c.nextPage;c.nextPage&&(e=e.jqmData("url"),e.indexOf(f+"&"+a.mobile.subPageUrlKey)!==0&&(k.childPages().remove(),d.remove()))})},childPages:function(){var b=this.parentPage.jqmData("url");return a(":jqmData(url^='"+b+"&"+a.mobile.subPageUrlKey+"')")}});a(document).bind("pagecreate create",function(b){a(a.mobile.listview.prototype.options.initSelector,
|
(f.jqmData("counttheme")||this.options.countTheme)+" ui-btn-corner-all");this._addThumbClasses(j);this._addThumbClasses(f.find(".ui-link-inherit"));this._refreshCorners(b)},_idStringEscape:function(a){return a.replace(/[^a-zA-Z0-9]/g,"-")},_createSubPages:function(){var b=this.element,e=b.closest(".ui-page"),f=e.jqmData("url"),d=f||e[0][a.expando],g=b.attr("id"),h=this.options,j="data-"+a.mobile.ns,k=this,m=e.find(":jqmData(role='footer')").jqmData("id"),p;typeof c[d]==="undefined"&&(c[d]=-1);g=g||
|
||||||
b.target).listview()})})(jQuery);
|
++c[d];a(b.find("li>ul, li>ol").toArray().reverse()).each(function(c){var d=a(this),e=d.attr("id")||g+"-"+c,c=d.parent(),k=a(d.prevAll().toArray().reverse()),k=k.length?k:a("<span>"+a.trim(c.contents()[0].nodeValue)+"</span>"),o=k.first().getEncodedText(),e=(f||"")+"&"+a.mobile.subPageUrlKey+"="+e,x=d.jqmData("theme")||h.theme,u=d.jqmData("counttheme")||b.jqmData("counttheme")||h.countTheme;p=true;d.detach().wrap("<div "+j+"role='page' "+j+"url='"+e+"' "+j+"theme='"+x+"' "+j+"count-theme='"+u+"'><div "+
|
||||||
(function(a){a.mobile.listview.prototype.options.filter=false;a.mobile.listview.prototype.options.filterPlaceholder="Filter items...";a.mobile.listview.prototype.options.filterTheme="c";a.mobile.listview.prototype.options.filterCallback=function(a,b){return a.toLowerCase().indexOf(b)===-1};a(":jqmData(role='listview')").live("listviewcreate",function(){var e=a(this),b=e.data("listview");if(b.options.filter){var d=a("<form>",{"class":"ui-listview-filter ui-bar-"+b.options.filterTheme,role:"search"});
|
j+"role='content'></div></div>").parent().before("<div "+j+"role='header' "+j+"theme='"+h.headerTheme+"'><div class='ui-title'>"+o+"</div></div>").after(m?a("<div "+j+"role='footer' "+j+"id='"+m+"'>"):"").parent().appendTo(a.mobile.pageContainer).page();d=c.find("a:first");d.length||(d=a("<a/>").html(k||o).prependTo(c.empty()));d.attr("href","#"+e)}).listview();p&&e.is(":jqmData(external-page='true')")&&e.data("page").options.domCache===false&&e.unbind("pagehide.remove").bind("pagehide.remove",function(b,
|
||||||
a("<input>",{placeholder:b.options.filterPlaceholder}).attr("data-"+a.mobile.ns+"type","search").jqmData("lastval","").bind("keyup change",function(){var d=a(this),c=this.value.toLowerCase(),h=null,h=d.jqmData("lastval")+"",g=false,i="";d.jqmData("lastval",c);i=c.substr(0,h.length-1).replace(h,"");h=c.length<h.length||i.length!=c.length-h.length?e.children():e.children(":not(.ui-screen-hidden)");if(c){for(var k=h.length-1;k>=0;k--)d=a(h[k]),i=d.jqmData("filtertext")||d.text(),d.is("li:jqmData(role=list-divider)")?
|
c){var d=c.nextPage;c.nextPage&&(d=d.jqmData("url"),d.indexOf(f+"&"+a.mobile.subPageUrlKey)!==0&&(k.childPages().remove(),e.remove()))})},childPages:function(){var b=this.parentPage.jqmData("url");return a(":jqmData(url^='"+b+"&"+a.mobile.subPageUrlKey+"')")}});a(k).bind("pagecreate create",function(b){a.mobile.listview.prototype.enhanceWithin(b.target)})})(jQuery);(function(a,c){a.widget("mobile.checkboxradio",a.mobile.widget,{options:{theme:null,initSelector:"input[type='checkbox'],input[type='radio']"},
|
||||||
(d.toggleClass("ui-filter-hidequeue",!g),g=false):b.options.filterCallback(i,c)?d.toggleClass("ui-filter-hidequeue",true):g=true;h.filter(":not(.ui-filter-hidequeue)").toggleClass("ui-screen-hidden",false);h.filter(".ui-filter-hidequeue").toggleClass("ui-screen-hidden",true).toggleClass("ui-filter-hidequeue",false)}else h.toggleClass("ui-screen-hidden",false);b._refreshCorners()}).appendTo(d).textinput();a(this).jqmData("inset")&&d.addClass("ui-listview-filter-inset");d.bind("submit",function(){return false}).insertBefore(e)}})})(jQuery);
|
_create:function(){var b=this,e=this.element,f=a(e).closest("label"),d=f.length?f:a(e).closest("form,fieldset,:jqmData(role='page'),:jqmData(role='dialog')").find("label").filter("[for='"+e[0].id+"']"),g=e[0].type,f=e.jqmData("mini")||e.closest("form,fieldset").jqmData("mini"),h=g+"-on",j=g+"-off",o=e.parents(":jqmData(type='horizontal')").length?c:j,m=e.jqmData("iconpos")||e.closest("form,fieldset").jqmData("iconpos");if(!(g!=="checkbox"&&g!=="radio")){a.extend(this,{label:d,inputtype:g,checkedClass:"ui-"+
|
||||||
(function(a){a(document).bind("pagecreate create",function(e){a(":jqmData(role='nojs')",e.target).addClass("ui-nojs")})})(jQuery);
|
h+(o?"":" "+a.mobile.activeBtnClass),uncheckedClass:"ui-"+j,checkedicon:"ui-icon-"+h,uncheckedicon:"ui-icon-"+j});if(!this.options.theme)this.options.theme=a.mobile.getInheritedTheme(this.element,"c");d.buttonMarkup({theme:this.options.theme,icon:o,shadow:false,mini:f,iconpos:m});f=k.createElement("div");f.className="ui-"+g;e.add(d).wrapAll(f);d.bind({vmouseover:function(b){a(this).parent().is(".ui-disabled")&&b.stopPropagation()},vclick:function(a){if(e.is(":disabled"))a.preventDefault();else return b._cacheVals(),
|
||||||
(function(a,e){a.widget("mobile.checkboxradio",a.mobile.widget,{options:{theme:null,initSelector:"input[type='checkbox'],input[type='radio']"},_create:function(){var b=this,d=this.element,f=d.closest("form,fieldset,:jqmData(role='page')").find("label[for='"+d[0].id+"']"),c=d.attr("type"),h=c+"-on",g=c+"-off",i=d.parents(":jqmData(type='horizontal')").length?e:g;if(!(c!=="checkbox"&&c!=="radio")){a.extend(this,{label:f,inputtype:c,checkedClass:"ui-"+h+(i?"":" "+a.mobile.activeBtnClass),uncheckedClass:"ui-"+
|
e.prop("checked",g==="radio"&&true||!e.prop("checked")),e.triggerHandler("click"),b._getInputSet().not(e).prop("checked",false),b._updateAll(),false}});e.bind({vmousedown:function(){b._cacheVals()},vclick:function(){var c=a(this);c.is(":checked")?(c.prop("checked",true),b._getInputSet().not(c).prop("checked",false)):c.prop("checked",false);b._updateAll()},focus:function(){d.addClass(a.mobile.focusClass)},blur:function(){d.removeClass(a.mobile.focusClass)}});this.refresh()}},_cacheVals:function(){this._getInputSet().each(function(){a(this).jqmData("cacheVal",
|
||||||
g,checkedicon:"ui-icon-"+h,uncheckedicon:"ui-icon-"+g});if(!this.options.theme)this.options.theme=this.element.jqmData("theme");f.buttonMarkup({theme:this.options.theme,icon:i,shadow:false});d.add(f).wrapAll("<div class='ui-"+c+"'></div>");f.bind({vmouseover:function(b){a(this).parent().is(".ui-disabled")&&b.stopPropagation()},vclick:function(a){if(d.is(":disabled"))a.preventDefault();else return b._cacheVals(),d.prop("checked",c==="radio"&&true||!d.prop("checked")),d.triggerHandler("click"),b._getInputSet().not(d).prop("checked",
|
this.checked)})},_getInputSet:function(){return this.inputtype==="checkbox"?this.element:this.element.closest("form,fieldset,:jqmData(role='page')").find("input[name='"+this.element[0].name+"'][type='"+this.inputtype+"']")},_updateAll:function(){var b=this;this._getInputSet().each(function(){var c=a(this);(this.checked||b.inputtype==="checkbox")&&c.trigger("change")}).checkboxradio("refresh")},refresh:function(){var a=this.element[0],c=this.label,f=c.find(".ui-icon");a.checked?(c.addClass(this.checkedClass).removeClass(this.uncheckedClass),
|
||||||
false),b._updateAll(),false}});d.bind({vmousedown:function(){b._cacheVals()},vclick:function(){var c=a(this);c.is(":checked")?(c.prop("checked",true),b._getInputSet().not(c).prop("checked",false)):c.prop("checked",false);b._updateAll()},focus:function(){f.addClass("ui-focus")},blur:function(){f.removeClass("ui-focus")}});this.refresh()}},_cacheVals:function(){this._getInputSet().each(function(){var b=a(this);b.jqmData("cacheVal",b.is(":checked"))})},_getInputSet:function(){return this.inputtype==
|
f.addClass(this.checkedicon).removeClass(this.uncheckedicon)):(c.removeClass(this.checkedClass).addClass(this.uncheckedClass),f.removeClass(this.checkedicon).addClass(this.uncheckedicon));a.disabled?this.disable():this.enable()},disable:function(){this.element.prop("disabled",true).parent().addClass("ui-disabled")},enable:function(){this.element.prop("disabled",false).parent().removeClass("ui-disabled")}});a(k).bind("pagecreate create",function(b){a.mobile.checkboxradio.prototype.enhanceWithin(b.target,
|
||||||
"checkbox"?this.element:this.element.closest("form,fieldset,:jqmData(role='page')").find("input[name='"+this.element.attr("name")+"'][type='"+this.inputtype+"']")},_updateAll:function(){var b=this;this._getInputSet().each(function(){var d=a(this);(d.is(":checked")||b.inputtype==="checkbox")&&d.trigger("change")}).checkboxradio("refresh")},refresh:function(){var b=this.element,d=this.label,f=d.find(".ui-icon");a(b[0]).prop("checked")?(d.addClass(this.checkedClass).removeClass(this.uncheckedClass),
|
true)})})(jQuery);(function(a,c){a.widget("mobile.button",a.mobile.widget,{options:{theme:null,icon:null,iconpos:null,inline:false,corners:true,shadow:true,iconshadow:true,initSelector:"button, [type='button'], [type='submit'], [type='reset'], [type='image']",mini:false},_create:function(){var b=this.element,e,f=this.options,d;d="";var g;if(b[0].tagName==="A")!b.hasClass("ui-btn")&&b.buttonMarkup();else{if(!this.options.theme)this.options.theme=a.mobile.getInheritedTheme(this.element,"c");~b[0].className.indexOf("ui-btn-left")&&
|
||||||
f.addClass(this.checkedicon).removeClass(this.uncheckedicon)):(d.removeClass(this.checkedClass).addClass(this.uncheckedClass),f.removeClass(this.checkedicon).addClass(this.uncheckedicon));b.is(":disabled")?this.disable():this.enable()},disable:function(){this.element.prop("disabled",true).parent().addClass("ui-disabled")},enable:function(){this.element.prop("disabled",false).parent().removeClass("ui-disabled")}});a(document).bind("pagecreate create",function(b){a.mobile.checkboxradio.prototype.enhanceWithin(b.target)})})(jQuery);
|
(d="ui-btn-left");~b[0].className.indexOf("ui-btn-right")&&(d="ui-btn-right");e=this.button=a("<div></div>").text(b.text()||b.val()).insertBefore(b).buttonMarkup({theme:f.theme,icon:f.icon,iconpos:f.iconpos,inline:f.inline,corners:f.corners,shadow:f.shadow,iconshadow:f.iconshadow,mini:f.mini}).addClass(d).append(b.addClass("ui-btn-hidden"));f=b.attr("type");d=b.attr("name");f!=="button"&&f!=="reset"&&d&&b.bind("vclick",function(){g===c&&(g=a("<input>",{type:"hidden",name:b.attr("name"),value:b.attr("value")}).insertBefore(b),
|
||||||
(function(a,e){a.widget("mobile.button",a.mobile.widget,{options:{theme:null,icon:null,iconpos:null,inline:null,corners:true,shadow:true,iconshadow:true,initSelector:"button, [type='button'], [type='submit'], [type='reset'], [type='image']"},_create:function(){var b=this.element,d=this.options,f,c;this.button=a("<div></div>").text(b.text()||b.val()).insertBefore(b).buttonMarkup({theme:d.theme,icon:d.icon,iconpos:d.iconpos,inline:d.inline,corners:d.corners,shadow:d.shadow,iconshadow:d.iconshadow}).append(b.addClass("ui-btn-hidden"));
|
a(k).one("submit",function(){g.remove();g=c}))});b.bind({focus:function(){e.addClass(a.mobile.focusClass)},blur:function(){e.removeClass(a.mobile.focusClass)}});this.refresh()}},enable:function(){this.element.attr("disabled",false);this.button.removeClass("ui-disabled").attr("aria-disabled",false);return this._setOption("disabled",false)},disable:function(){this.element.attr("disabled",true);this.button.addClass("ui-disabled").attr("aria-disabled",true);return this._setOption("disabled",true)},refresh:function(){var b=
|
||||||
d=b.attr("type");f=b.attr("name");d!=="button"&&d!=="reset"&&f&&b.bind("vclick",function(){c===e&&(c=a("<input>",{type:"hidden",name:b.attr("name"),value:b.attr("value")}).insertBefore(b),a(document).one("submit",function(){c.remove();c=e}))});this.refresh()},enable:function(){this.element.attr("disabled",false);this.button.removeClass("ui-disabled").attr("aria-disabled",false);return this._setOption("disabled",false)},disable:function(){this.element.attr("disabled",true);this.button.addClass("ui-disabled").attr("aria-disabled",
|
this.element;b.prop("disabled")?this.disable():this.enable();a(this.button.data("buttonElements").text).text(b.text()||b.val())}});a(k).bind("pagecreate create",function(b){a.mobile.button.prototype.enhanceWithin(b.target,true)})})(jQuery);(function(a){a.fn.controlgroup=function(c){function b(a,b){a.removeClass("ui-btn-corner-all ui-shadow").eq(0).addClass(b[0]).end().last().addClass(b[1]).addClass("ui-controlgroup-last")}return this.each(function(){var e=a(this),f=a.extend({direction:e.jqmData("type")||
|
||||||
true);return this._setOption("disabled",true)},refresh:function(){var a=this.element;a.prop("disabled")?this.disable():this.enable();this.button.data("textWrapper").text(a.text()||a.val())}});a(document).bind("pagecreate create",function(b){a.mobile.button.prototype.enhanceWithin(b.target)})})(jQuery);
|
"vertical",shadow:false,excludeInvisible:true,mini:e.jqmData("mini")},c),d=e.children("legend"),g=f.direction=="horizontal"?["ui-corner-left","ui-corner-right"]:["ui-corner-top","ui-corner-bottom"];e.find("input").first().attr("type");d.length&&(e.wrapInner("<div class='ui-controlgroup-controls'></div>"),a("<div role='heading' class='ui-controlgroup-label'>"+d.html()+"</div>").insertBefore(e.children(0)),d.remove());e.addClass("ui-corner-all ui-controlgroup ui-controlgroup-"+f.direction);b(e.find(".ui-btn"+
|
||||||
(function(a,e){a.widget("mobile.slider",a.mobile.widget,{options:{theme:null,trackTheme:null,disabled:false,initSelector:"input[type='range'], :jqmData(type='range'), :jqmData(role='slider')"},_create:function(){var b=this,d=this.element,f=a.mobile.getInheritedTheme(d,"c"),c=this.options.theme||f,h=this.options.trackTheme||f,g=d[0].nodeName.toLowerCase(),f=g=="select"?"ui-slider-switch":"",i=d.attr("id"),k=i+"-label",i=a("[for='"+i+"']").attr("id",k),l=function(){return g=="input"?parseFloat(d.val()):
|
(f.excludeInvisible?":visible":"")).not(".ui-slider-handle"),g);b(e.find(".ui-btn-inner"),g);f.shadow&&e.addClass("ui-shadow");f.mini&&e.addClass("ui-mini")})}})(jQuery);(function(a){a(k).bind("pagecreate create",function(c){a(c.target).find("a").jqmEnhanceable().not(".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')").addClass("ui-link")})})(jQuery);(function(a){var c=a("meta[name=viewport]"),b=c.attr("content"),e=b+",maximum-scale=1, user-scalable=no",f=b+",maximum-scale=10, user-scalable=yes",
|
||||||
d[0].selectedIndex},o=g=="input"?parseFloat(d.attr("min")):0,m=g=="input"?parseFloat(d.attr("max")):d.find("option").length-1,p=window.parseFloat(d.attr("step")||1),j=a("<div class='ui-slider "+f+" ui-btn-down-"+h+" ui-btn-corner-all' role='application'></div>"),q=a("<a href='#' class='ui-slider-handle'></a>").appendTo(j).buttonMarkup({corners:true,theme:c,shadow:true}).attr({role:"slider","aria-valuemin":o,"aria-valuemax":m,"aria-valuenow":l(),"aria-valuetext":l(),title:l(),"aria-labelledby":k});
|
d=/(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test(b);a.mobile.zoom=a.extend({},{enabled:!d,locked:false,disable:function(b){if(!d&&!a.mobile.zoom.locked)c.attr("content",e),a.mobile.zoom.enabled=false,a.mobile.zoom.locked=b||false},enable:function(b){if(!d&&(!a.mobile.zoom.locked||b===true))c.attr("content",f),a.mobile.zoom.enabled=true,a.mobile.zoom.locked=false},restore:function(){if(!d)c.attr("content",b),a.mobile.zoom.enabled=true}})})(jQuery);(function(a){a.widget("mobile.textinput",
|
||||||
a.extend(this,{slider:j,handle:q,dragging:false,beforeStart:null,userModified:false,mouseMoved:false});g=="select"&&(j.wrapInner("<div class='ui-slider-inneroffset'></div>"),q.addClass("ui-slider-handle-snapping"),d.find("option"),d.find("option").each(function(b){var c=!b?"b":"a",d=!b?"right":"left",b=!b?" ui-btn-down-"+h:" "+a.mobile.activeBtnClass;a("<div class='ui-slider-labelbg ui-slider-labelbg-"+c+b+" ui-btn-corner-"+d+"'></div>").prependTo(j);a("<span class='ui-slider-label ui-slider-label-"+
|
a.mobile.widget,{options:{theme:null,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])",
|
||||||
c+b+" ui-btn-corner-"+d+"' role='img'>"+a(this).getEncodedText()+"</span>").prependTo(q)}));i.addClass("ui-slider");d.addClass(g==="input"?"ui-slider-input":"ui-slider-switch").change(function(){b.mouseMoved||b.refresh(l(),true)}).keyup(function(){b.refresh(l(),true,true)}).blur(function(){b.refresh(l(),true)});a(document).bind("vmousemove",function(a){if(b.dragging)return b.mouseMoved=true,g==="select"&&q.removeClass("ui-slider-handle-snapping"),b.refresh(a),b.userModified=b.beforeStart!==d[0].selectedIndex,
|
clearSearchButtonText:"clear text"},_create:function(){var c=this.element,b=this.options,e=b.theme||a.mobile.getInheritedTheme(this.element,"c"),f=" ui-body-"+e,d=c.jqmData("mini")==true,g=d?" ui-mini":"",h,j;a("label[for='"+c.attr("id")+"']").addClass("ui-input-text");h=c.addClass("ui-input-text ui-body-"+e);typeof c[0].autocorrect!=="undefined"&&!a.support.touchOverflow&&(c[0].setAttribute("autocorrect","off"),c[0].setAttribute("autocomplete","off"));c.is("[type='search'],:jqmData(type='search')")?
|
||||||
false});j.bind("vmousedown",function(a){b.dragging=true;b.userModified=false;b.mouseMoved=false;if(g==="select")b.beforeStart=d[0].selectedIndex;b.refresh(a);return false});j.add(document).bind("vmouseup",function(){if(b.dragging)return b.dragging=false,g==="select"&&(q.addClass("ui-slider-handle-snapping"),b.mouseMoved?b.userModified?b.refresh(b.beforeStart==0?1:0):b.refresh(b.beforeStart):b.refresh(b.beforeStart==0?1:0)),b.mouseMoved=false});j.insertAfter(d);this.handle.bind("vmousedown",function(){a(this).focus()}).bind("vclick",
|
(h=c.wrap("<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield"+f+g+"'></div>").parent(),j=a("<a href='#' class='ui-input-clear' title='"+b.clearSearchButtonText+"'>"+b.clearSearchButtonText+"</a>").bind("click",function(a){c.val("").focus().trigger("change");j.addClass("ui-input-clear-hidden");a.preventDefault()}).appendTo(h).buttonMarkup({icon:"delete",iconpos:"notext",corners:true,shadow:true,mini:d}),e=function(){setTimeout(function(){j.toggleClass("ui-input-clear-hidden",
|
||||||
false);this.handle.bind("keydown",function(c){var d=l();if(!b.options.disabled){switch(c.keyCode){case a.mobile.keyCode.HOME:case a.mobile.keyCode.END:case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:if(c.preventDefault(),!b._keySliding)b._keySliding=true,a(this).addClass("ui-state-active")}switch(c.keyCode){case a.mobile.keyCode.HOME:b.refresh(o);break;case a.mobile.keyCode.END:b.refresh(m);
|
!c.val())},0)},e(),c.bind("paste cut keyup focus change blur",e)):c.addClass("ui-corner-all ui-shadow-inset"+f+g);c.focus(function(){h.addClass(a.mobile.focusClass)}).blur(function(){h.removeClass(a.mobile.focusClass)}).bind("focus",function(){b.preventFocusZoom&&a.mobile.zoom.disable(true)}).bind("blur",function(){b.preventFocusZoom&&a.mobile.zoom.enable(true)});if(c.is("textarea")){var o=function(){var a=c[0].scrollHeight;c[0].clientHeight<a&&c.height(a+15)},m;c.keyup(function(){clearTimeout(m);
|
||||||
break;case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:b.refresh(d+p);break;case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:b.refresh(d-p)}}}).keyup(function(){if(b._keySliding)b._keySliding=false,a(this).removeClass("ui-state-active")});this.refresh(e,e,true)},refresh:function(a,d,f){(this.options.disabled||this.element.attr("disabled"))&&this.disable();var c=this.element,e,g=c[0].nodeName.toLowerCase(),i=g==="input"?parseFloat(c.attr("min")):
|
m=setTimeout(o,100)});a(k).one("pagechange",o);a.trim(c.val())&&a(s).load(o)}},disable:function(){(this.element.attr("disabled",true).is("[type='search'],:jqmData(type='search')")?this.element.parent():this.element).addClass("ui-disabled")},enable:function(){(this.element.attr("disabled",false).is("[type='search'],:jqmData(type='search')")?this.element.parent():this.element).removeClass("ui-disabled")}});a(k).bind("pagecreate create",function(c){a.mobile.textinput.prototype.enhanceWithin(c.target,
|
||||||
0,k=g==="input"?parseFloat(c.attr("max")):c.find("option").length-1;if(typeof a==="object"){if(!this.dragging||a.pageX<this.slider.offset().left-8||a.pageX>this.slider.offset().left+this.slider.width()+8)return;e=Math.round((a.pageX-this.slider.offset().left)/this.slider.width()*100)}else a==null&&(a=g==="input"?parseFloat(c.val()):c[0].selectedIndex),e=(parseFloat(a)-i)/(k-i)*100;if(!isNaN(e)&&(e<0&&(e=0),e>100&&(e=100),a=Math.round(e/100*(k-i))+i,a<i&&(a=i),a>k&&(a=k),this.handle.css("left",e+"%"),
|
true)})})(jQuery);(function(a){a.mobile.listview.prototype.options.filter=false;a.mobile.listview.prototype.options.filterPlaceholder="Filter items...";a.mobile.listview.prototype.options.filterTheme="c";a.mobile.listview.prototype.options.filterCallback=function(a,b){return a.toLowerCase().indexOf(b)===-1};a(k).delegate(":jqmData(role='listview')","listviewcreate",function(){var c=a(this),b=c.data("listview");if(b.options.filter){var e=a("<form>",{"class":"ui-listview-filter ui-bar-"+b.options.filterTheme,
|
||||||
this.handle.attr({"aria-valuenow":g==="input"?a:c.find("option").eq(a).attr("value"),"aria-valuetext":g==="input"?a:c.find("option").eq(a).getEncodedText(),title:a}),g==="select"&&(a===0?this.slider.addClass("ui-slider-switch-a").removeClass("ui-slider-switch-b"):this.slider.addClass("ui-slider-switch-b").removeClass("ui-slider-switch-a")),!f))f=false,g==="input"?(f=c.val()!==a,c.val(a)):(f=c[0].selectedIndex!==a,c[0].selectedIndex=a),!d&&f&&c.trigger("change")},enable:function(){this.element.attr("disabled",
|
role:"search"});a("<input>",{placeholder:b.options.filterPlaceholder}).attr("data-"+a.mobile.ns+"type","search").jqmData("lastval","").bind("keyup change",function(){var e=a(this),d=this.value.toLowerCase(),g=null,g=e.jqmData("lastval")+"",h=false,j="";e.jqmData("lastval",d);g=d.length<g.length||d.indexOf(g)!==0?c.children():c.children(":not(.ui-screen-hidden)");if(d){for(var k=g.length-1;k>=0;k--)e=a(g[k]),j=e.jqmData("filtertext")||e.text(),e.is("li:jqmData(role=list-divider)")?(e.toggleClass("ui-filter-hidequeue",
|
||||||
false);this.slider.removeClass("ui-disabled").attr("aria-disabled",false);return this._setOption("disabled",false)},disable:function(){this.element.attr("disabled",true);this.slider.addClass("ui-disabled").attr("aria-disabled",true);return this._setOption("disabled",true)}});a(document).bind("pagecreate create",function(b){a.mobile.slider.prototype.enhanceWithin(b.target)})})(jQuery);
|
!h),h=false):b.options.filterCallback(j,d)?e.toggleClass("ui-filter-hidequeue",true):h=true;g.filter(":not(.ui-filter-hidequeue)").toggleClass("ui-screen-hidden",false);g.filter(".ui-filter-hidequeue").toggleClass("ui-screen-hidden",true).toggleClass("ui-filter-hidequeue",false)}else g.toggleClass("ui-screen-hidden",false);b._refreshCorners()}).appendTo(e).textinput();b.options.inset&&e.addClass("ui-listview-filter-inset");e.bind("submit",function(){return false}).insertBefore(c)}})})(jQuery);(function(a,
|
||||||
(function(a){a.widget("mobile.textinput",a.mobile.widget,{options:{theme:null,initSelector:"input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])"},_create:function(){var e=this.element,
|
c){a.widget("mobile.slider",a.mobile.widget,{options:{theme:null,trackTheme:null,disabled:false,initSelector:"input[type='range'], :jqmData(type='range'), :jqmData(role='slider')",mini:false},_create:function(){var b=this,e=this.element,f=a.mobile.getInheritedTheme(e,"c"),d=this.options.theme||f,f=this.options.trackTheme||f,g=e[0].nodeName.toLowerCase(),h=g=="select"?"ui-slider-switch":"",j=e.attr("id"),o=j+"-label",j=a("[for='"+j+"']").attr("id",o),m=function(){return g=="input"?parseFloat(e.val()):
|
||||||
b=this.options.theme||a.mobile.getInheritedTheme(this.element,"c"),d=" ui-body-"+b,f,c;a("label[for='"+e.attr("id")+"']").addClass("ui-input-text");f=e.addClass("ui-input-text ui-body-"+b);typeof e[0].autocorrect!=="undefined"&&!a.support.touchOverflow&&(e[0].setAttribute("autocorrect","off"),e[0].setAttribute("autocomplete","off"));e.is("[type='search'],:jqmData(type='search')")?(f=e.wrap("<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield"+d+"'></div>").parent(),
|
e[0].selectedIndex},p=g=="input"?parseFloat(e.attr("min")):0,l=g=="input"?parseFloat(e.attr("max")):e.find("option").length-1,r=s.parseFloat(e.attr("step")||1),n=this.options.inline||e.jqmData("inline")==true?" ui-slider-inline":"",q=this.options.mini||e.jqmData("mini")?" ui-slider-mini":"",t=k.createElement("a"),x=a(t),u=k.createElement("div"),w=a(u),v=e.jqmData("highlight")&&g!="select"?function(){var b=k.createElement("div");b.className="ui-slider-bg ui-btn-active ui-btn-corner-all";return a(b).prependTo(w)}():
|
||||||
c=a("<a href='#' class='ui-input-clear' title='clear text'>clear text</a>").tap(function(a){e.val("").focus();e.trigger("change");c.addClass("ui-input-clear-hidden");a.preventDefault()}).appendTo(f).buttonMarkup({icon:"delete",iconpos:"notext",corners:true,shadow:true}),b=function(){setTimeout(function(){c.toggleClass("ui-input-clear-hidden",!e.val())},0)},b(),e.bind("paste cut keyup focus change blur",b)):e.addClass("ui-corner-all ui-shadow-inset"+d);e.focus(function(){f.addClass("ui-focus")}).blur(function(){f.removeClass("ui-focus")});
|
false;t.setAttribute("href","#");u.setAttribute("role","application");u.className=["ui-slider ",h," ui-btn-down-",f," ui-btn-corner-all",n,q].join("");t.className="ui-slider-handle";u.appendChild(t);x.buttonMarkup({corners:true,theme:d,shadow:true}).attr({role:"slider","aria-valuemin":p,"aria-valuemax":l,"aria-valuenow":m(),"aria-valuetext":m(),title:m(),"aria-labelledby":o});a.extend(this,{slider:w,handle:x,valuebg:v,dragging:false,beforeStart:null,userModified:false,mouseMoved:false});if(g=="select"){d=
|
||||||
if(e.is("textarea")){var h=function(){var a=e[0].scrollHeight;e[0].clientHeight<a&&e.height(a+15)},g;e.keyup(function(){clearTimeout(g);g=setTimeout(h,100)});a.trim(e.val())&&(a(window).load(h),a(document).one("pagechange",h))}},disable:function(){(this.element.attr("disabled",true).is("[type='search'],:jqmData(type='search')")?this.element.parent():this.element).addClass("ui-disabled")},enable:function(){(this.element.attr("disabled",false).is("[type='search'],:jqmData(type='search')")?this.element.parent():
|
k.createElement("div");d.className="ui-slider-inneroffset";h=0;for(o=u.childNodes.length;h<o;h++)d.appendChild(u.childNodes[h]);u.appendChild(d);x.addClass("ui-slider-handle-snapping");u=e.find("option");d=0;for(h=u.length;d<h;d++)o=!d?"b":"a",n=!d?" ui-btn-down-"+f:" "+a.mobile.activeBtnClass,k.createElement("div"),q=k.createElement("span"),q.className=["ui-slider-label ui-slider-label-",o,n," ui-btn-corner-all"].join(""),q.setAttribute("role","img"),q.appendChild(k.createTextNode(u[d].innerHTML)),
|
||||||
this.element).removeClass("ui-disabled")}});a(document).bind("pagecreate create",function(e){a.mobile.textinput.prototype.enhanceWithin(e.target)})})(jQuery);
|
a(q).prependTo(w);b._labels=a(".ui-slider-label",w)}j.addClass("ui-slider");e.addClass(g==="input"?"ui-slider-input":"ui-slider-switch").change(function(){b.mouseMoved||b.refresh(m(),true)}).keyup(function(){b.refresh(m(),true,true)}).blur(function(){b.refresh(m(),true)});a(k).bind("vmousemove",function(a){if(b.dragging)return b.mouseMoved=true,g==="select"&&x.removeClass("ui-slider-handle-snapping"),b.refresh(a),b.userModified=b.beforeStart!==e[0].selectedIndex,false});w.bind("vmousedown",function(a){b.dragging=
|
||||||
(function(a){var e=function(b){var d=b.selectID,f=b.label,c=b.select.closest(".ui-page"),e=a("<div>",{"class":"ui-selectmenu-screen ui-screen-hidden"}).appendTo(c),g=b._selectOptions(),i=b.isMultiple=b.select[0].multiple,k=d+"-button",l=d+"-menu",o=a("<div data-"+a.mobile.ns+"role='dialog' data-"+a.mobile.ns+"theme='"+b.options.theme+"' data-"+a.mobile.ns+"overlay-theme='"+b.options.overlayTheme+"'><div data-"+a.mobile.ns+"role='header'><div class='ui-title'>"+f.getEncodedText()+"</div></div><div data-"+
|
true;b.userModified=false;b.mouseMoved=false;if(g==="select")b.beforeStart=e[0].selectedIndex;b.refresh(a);return false}).bind("vclick",false);w.add(k).bind("vmouseup",function(){if(b.dragging)return b.dragging=false,g==="select"&&(x.addClass("ui-slider-handle-snapping"),b.mouseMoved?b.userModified?b.refresh(b.beforeStart==0?1:0):b.refresh(b.beforeStart):b.refresh(b.beforeStart==0?1:0)),b.mouseMoved=false});w.insertAfter(e);g=="select"&&this.handle.bind({focus:function(){w.addClass(a.mobile.focusClass)},
|
||||||
a.mobile.ns+"role='content'></div></div>").appendTo(a.mobile.pageContainer).page(),m=a("<div>",{"class":"ui-selectmenu ui-selectmenu-hidden ui-overlay-shadow ui-corner-all ui-body-"+b.options.overlayTheme+" "+a.mobile.defaultDialogTransition}).insertAfter(e),p=a("<ul>",{"class":"ui-selectmenu-list",id:l,role:"listbox","aria-labelledby":k}).attr("data-"+a.mobile.ns+"theme",b.options.theme).appendTo(m),j=a("<div>",{"class":"ui-header ui-bar-"+b.options.theme}).prependTo(m),q=a("<h1>",{"class":"ui-title"}).appendTo(j),
|
blur:function(){w.removeClass(a.mobile.focusClass)}});this.handle.bind({vmousedown:function(){a(this).focus()},vclick:false,keydown:function(c){var d=m();if(!b.options.disabled){switch(c.keyCode){case a.mobile.keyCode.HOME:case a.mobile.keyCode.END:case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:if(c.preventDefault(),!b._keySliding)b._keySliding=true,a(this).addClass("ui-state-active")}switch(c.keyCode){case a.mobile.keyCode.HOME:b.refresh(p);
|
||||||
n=a("<a>",{text:b.options.closeText,href:"#","class":"ui-btn-left"}).attr("data-"+a.mobile.ns+"iconpos","notext").attr("data-"+a.mobile.ns+"icon","delete").appendTo(j).buttonMarkup(),A=o.find(".ui-content"),z=o.find(".ui-header a");a.extend(b,{select:b.select,selectID:d,buttonId:k,menuId:l,thisPage:c,menuPage:o,label:f,screen:e,selectOptions:g,isMultiple:i,theme:b.options.theme,listbox:m,list:p,header:j,headerTitle:q,headerClose:n,menuPageContent:A,menuPageClose:z,placeholder:"",build:function(){var b=
|
break;case a.mobile.keyCode.END:b.refresh(l);break;case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:b.refresh(d+r);break;case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:b.refresh(d-r)}}},keyup:function(){if(b._keySliding)b._keySliding=false,a(this).removeClass("ui-state-active")}});this.refresh(c,c,true)},refresh:function(b,c,f){(this.options.disabled||this.element.attr("disabled"))&&this.disable();var d=this.element,g=d[0].nodeName.toLowerCase(),
|
||||||
this;b.refresh();b.select.attr("tabindex","-1").focus(function(){a(this).blur();b.button.focus()});b.button.bind("vclick keydown",function(c){if(c.type=="vclick"||c.keyCode&&(c.keyCode===a.mobile.keyCode.ENTER||c.keyCode===a.mobile.keyCode.SPACE))b.open(),c.preventDefault()});b.list.attr("role","listbox").delegate(".ui-li>a","focusin",function(){a(this).attr("tabindex","0")}).delegate(".ui-li>a","focusout",function(){a(this).attr("tabindex","-1")}).delegate("li:not(.ui-disabled, .ui-li-divider)",
|
h=g==="input"?parseFloat(d.attr("min")):0,j=g==="input"?parseFloat(d.attr("max")):d.find("option").length-1,k=g==="input"&&parseFloat(d.attr("step"))>0?parseFloat(d.attr("step")):1;if(typeof b==="object"){if(!this.dragging||b.pageX<this.slider.offset().left-8||b.pageX>this.slider.offset().left+this.slider.width()+8)return;b=Math.round((b.pageX-this.slider.offset().left)/this.slider.width()*100)}else b==null&&(b=g==="input"?parseFloat(d.val()||0):d[0].selectedIndex),b=(parseFloat(b)-h)/(j-h)*100;if(!isNaN(b)){b<
|
||||||
"click",function(c){var d=b.select[0].selectedIndex,f=b.list.find("li:not(.ui-li-divider)").index(this),e=b._selectOptions().eq(f)[0];e.selected=b.isMultiple?!e.selected:true;b.isMultiple&&a(this).find(".ui-icon").toggleClass("ui-icon-checkbox-on",e.selected).toggleClass("ui-icon-checkbox-off",!e.selected);(b.isMultiple||d!==f)&&b.select.trigger("change");b.isMultiple||b.close();c.preventDefault()}).keydown(function(b){var c=a(b.target),d=c.closest("li");switch(b.keyCode){case 38:return b=d.prev(),
|
0&&(b=0);b>100&&(b=100);var m=b/100*(j-h)+h,p=(m-h)%k;m-=p;Math.abs(p)*2>=k&&(m+=p>0?k:-k);m=parseFloat(m.toFixed(5));m<h&&(m=h);m>j&&(m=j);this.handle.css("left",b+"%");this.handle.attr({"aria-valuenow":g==="input"?m:d.find("option").eq(m).attr("value"),"aria-valuetext":g==="input"?m:d.find("option").eq(m).getEncodedText(),title:g==="input"?m:d.find("option").eq(m).getEncodedText()});this.valuebg&&this.valuebg.css("width",b+"%");if(this._labels){var h=this.handle.width()/this.slider.width()*100,
|
||||||
b.length&&(c.blur().attr("tabindex","-1"),b.find("a").first().focus()),false;case 40:return b=d.next(),b.length&&(c.blur().attr("tabindex","-1"),b.find("a").first().focus()),false;case 13:case 32:return c.trigger("click"),false}});b.menuPage.bind("pagehide",function(){b.list.appendTo(b.listbox);b._focusButton();a.mobile._bindPageRemove.call(b.thisPage)});b.screen.bind("vclick",function(){b.close()});b.headerClose.click(function(){if(b.menuType=="overlay")return b.close(),false});b.thisPage.addDependents(this.menuPage)},
|
l=b&&h+(100-h)*b/100,r=b===100?0:Math.min(h+100-l,100);this._labels.each(function(){var b=a(this).is(".ui-slider-label-a");a(this).width((b?l:r)+"%")})}if(!f)f=false,g==="input"?(f=d.val()!==m,d.val(m)):(f=d[0].selectedIndex!==m,d[0].selectedIndex=m),!c&&f&&d.trigger("change")}},enable:function(){this.element.attr("disabled",false);this.slider.removeClass("ui-disabled").attr("aria-disabled",false);return this._setOption("disabled",false)},disable:function(){this.element.attr("disabled",true);this.slider.addClass("ui-disabled").attr("aria-disabled",
|
||||||
_isRebuildRequired:function(){var a=this.list.find("li");return this._selectOptions().text()!==a.text()},refresh:function(b){var c=this;this._selectOptions();this.selected();var d=this.selectedIndices();(b||this._isRebuildRequired())&&c._buildList();c.setButtonText();c.setButtonCount();c.list.find("li:not(.ui-li-divider)").removeClass(a.mobile.activeBtnClass).attr("aria-selected",false).each(function(b){a.inArray(b,d)>-1&&(b=a(this),b.attr("aria-selected",true),c.isMultiple?b.find(".ui-icon").removeClass("ui-icon-checkbox-off").addClass("ui-icon-checkbox-on"):
|
true);return this._setOption("disabled",true)}});a(k).bind("pagecreate create",function(b){a.mobile.slider.prototype.enhanceWithin(b.target,true)})})(jQuery);(function(a){a.widget("mobile.selectmenu",a.mobile.widget,{options:{theme:null,disabled:false,icon:"arrow-d",iconpos:"right",inline:false,corners:true,shadow:true,iconshadow:true,overlayTheme:"a",hidePlaceholderMenuItems:true,closeText:"Close",nativeMenu:true,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>
|
||||||
b.addClass(a.mobile.activeBtnClass))})},close:function(){if(!this.options.disabled&&this.isOpen)this.menuType=="page"?window.history.back():(this.screen.addClass("ui-screen-hidden"),this.listbox.addClass("ui-selectmenu-hidden").removeAttr("style").removeClass("in"),this.list.appendTo(this.listbox),this._focusButton()),this.isOpen=false},open:function(){if(!this.options.disabled){var b=this,c=b.list.parent().outerHeight(),d=b.list.parent().outerWidth(),f=a(".ui-page-active"),e=a.support.touchOverflow&&
|
-1,initSelector:"select:not(:jqmData(role='slider'))",mini:false},_button:function(){return a("<div/>")},_setDisabled:function(a){this.element.attr("disabled",a);this.button.attr("aria-disabled",a);return this._setOption("disabled",a)},_focusButton:function(){var a=this;setTimeout(function(){a.button.focus()},40)},_selectOptions:function(){return this.select.find("option")},_preExtension:function(){var c="";~this.element[0].className.indexOf("ui-btn-left")&&(c=" ui-btn-left");~this.element[0].className.indexOf("ui-btn-right")&&
|
||||||
a.mobile.touchOverflowEnabled,f=f.is(".ui-native-fixed")?f.find(".ui-content"):f;scrollTop=e?f.scrollTop():a(window).scrollTop();btnOffset=b.button.offset().top;screenHeight=window.innerHeight;screenWidth=window.innerWidth;b.button.addClass(a.mobile.activeBtnClass);setTimeout(function(){b.button.removeClass(a.mobile.activeBtnClass)},300);if(c>screenHeight-80||!a.support.scrollTop){b.thisPage.unbind("pagehide.remove");if(scrollTop==0&&btnOffset>screenHeight)b.thisPage.one("pagehide",function(){a(this).jqmData("lastScroll",
|
(c=" ui-btn-right");this.select=this.element.wrap("<div class='ui-select"+c+"'>");this.selectID=this.select.attr("id");this.label=a("label[for='"+this.selectID+"']").addClass("ui-select");this.isMultiple=this.select[0].multiple;if(!this.options.theme)this.options.theme=a.mobile.getInheritedTheme(this.select,"c")},_create:function(){this._preExtension();this._trigger("beforeCreate");this.button=this._button();var c=this,b=this.options,e=this.button.text(a(this.select[0].options.item(this.select[0].selectedIndex==
|
||||||
btnOffset)});b.menuPage.one("pageshow",function(){a(window).one("silentscroll",function(){b.list.find(a.mobile.activeBtnClass).focus()});b.isOpen=true});b.menuType="page";b.menuPageContent.append(b.list);b.menuPage.find("div .ui-title").text(b.label.text());a.mobile.changePage(b.menuPage,{transition:a.mobile.defaultDialogTransition})}else{b.menuType="overlay";b.screen.height(a(document).height()).removeClass("ui-screen-hidden");var f=btnOffset-scrollTop,h=scrollTop+screenHeight-btnOffset,g=c/2,e=
|
-1?0:this.select[0].selectedIndex)).text()).insertBefore(this.select).buttonMarkup({theme:b.theme,icon:b.icon,iconpos:b.iconpos,inline:b.inline,corners:b.corners,shadow:b.shadow,iconshadow:b.iconshadow,mini:b.mini});b.nativeMenu&&s.opera&&s.opera.version&&this.select.addClass("ui-select-nativeonly");if(this.isMultiple)this.buttonCount=a("<span>").addClass("ui-li-count ui-btn-up-c ui-btn-corner-all").hide().appendTo(e.addClass("ui-li-has-count"));(b.disabled||this.element.attr("disabled"))&&this.disable();
|
||||||
parseFloat(b.list.parent().css("max-width")),c=f>c/2&&h>c/2?btnOffset+b.button.outerHeight()/2-g:f>h?scrollTop+screenHeight-c-30:scrollTop+30;d<e?e=(screenWidth-d)/2:(e=b.button.offset().left+b.button.outerWidth()/2-d/2,e<30?e=30:e+d>screenWidth&&(e=screenWidth-d-30));b.listbox.append(b.list).removeClass("ui-selectmenu-hidden").css({top:c,left:e}).addClass("in");b.list.find(a.mobile.activeBtnClass).focus();b.isOpen=true}}},_buildList:function(){var b=this,c=this.options,d=this.placeholder,f=[],e=
|
this.select.change(function(){c.refresh()});this.build()},build:function(){var c=this;this.select.appendTo(c.button).bind("vmousedown",function(){c.button.addClass(a.mobile.activeBtnClass)}).bind("focus",function(){c.button.addClass(a.mobile.focusClass)}).bind("blur",function(){c.button.removeClass(a.mobile.focusClass)}).bind("focus vmouseover",function(){c.button.trigger("vmouseover")}).bind("vmousemove",function(){c.button.removeClass(a.mobile.activeBtnClass)}).bind("change blur vmouseout",function(){c.button.trigger("vmouseout").removeClass(a.mobile.activeBtnClass)}).bind("change blur",
|
||||||
[],h=b.isMultiple?"checkbox-off":"false";b.list.empty().filter(".ui-listview").listview("destroy");b.select.find("option").each(function(g){var j=a(this),i=j.parent(),m=j.getEncodedText(),p="<a href='#'>"+m+"</a>",k=[],n=[];i.is("optgroup")&&(i=i.attr("label"),a.inArray(i,f)===-1&&(e.push("<li data-"+a.mobile.ns+"role='list-divider'>"+i+"</li>"),f.push(i)));if(!this.getAttribute("value")||m.length==0||j.jqmData("placeholder"))c.hidePlaceholderMenuItems&&k.push("ui-selectmenu-placeholder"),d=b.placeholder=
|
function(){c.button.removeClass("ui-btn-down-"+c.options.theme)});c.button.bind("vmousedown",function(){c.options.preventFocusZoom&&a.mobile.zoom.disable(true)}).bind("mouseup",function(){c.options.preventFocusZoom&&a.mobile.zoom.enable(true)})},selected:function(){return this._selectOptions().filter(":selected")},selectedIndices:function(){var a=this;return this.selected().map(function(){return a._selectOptions().index(this)}).get()},setButtonText:function(){var c=this,b=this.selected();this.button.find(".ui-btn-text").text(function(){return!c.isMultiple?
|
||||||
m;this.disabled&&(k.push("ui-disabled"),n.push("aria-disabled='true'"));e.push("<li data-"+a.mobile.ns+"option-index='"+g+"' data-"+a.mobile.ns+"icon='"+h+"' class='"+k.join(" ")+"' "+n.join(" ")+">"+p+"</li>")});b.list.html(e.join(" "));b.list.find("li").attr({role:"option",tabindex:"-1"}).first().attr("tabindex","0");this.isMultiple||this.headerClose.hide();!this.isMultiple&&!d.length?this.header.hide():this.headerTitle.text(this.placeholder);b.list.listview()},_button:function(){return a("<a>",
|
b.text():b.length?b.map(function(){return a(this).text()}).get().join(", "):c.placeholder})},setButtonCount:function(){var a=this.selected();this.isMultiple&&this.buttonCount[a.length>1?"show":"hide"]().text(a.length)},refresh:function(){this.setButtonText();this.setButtonCount()},open:a.noop,close:a.noop,disable:function(){this._setDisabled(true);this.button.addClass("ui-disabled")},enable:function(){this._setDisabled(false);this.button.removeClass("ui-disabled")}});a(k).bind("pagecreate create",
|
||||||
{href:"#",role:"button",id:this.buttonId,"aria-haspopup":"true","aria-owns":this.menuId})}})};a("select").live("selectmenubeforecreate",function(){var b=a(this).data("selectmenu");b.options.nativeMenu||e(b)})})(jQuery);
|
function(c){a.mobile.selectmenu.prototype.enhanceWithin(c.target,true)})})(jQuery);(function(a){var c=function(b){var c=b.selectID,f=b.label,d=b.select.closest(".ui-page"),g=a("<div>",{"class":"ui-selectmenu-screen ui-screen-hidden"}).appendTo(d),h=b._selectOptions(),j=b.isMultiple=b.select[0].multiple,o=c+"-button",m=c+"-menu",p=a("<div data-"+a.mobile.ns+"role='dialog' data-"+a.mobile.ns+"theme='"+b.options.theme+"' data-"+a.mobile.ns+"overlay-theme='"+b.options.overlayTheme+"'><div data-"+a.mobile.ns+
|
||||||
(function(a){a.widget("mobile.selectmenu",a.mobile.widget,{options:{theme:null,disabled:false,icon:"arrow-d",iconpos:"right",inline:null,corners:true,shadow:true,iconshadow:true,menuPageTheme:"b",overlayTheme:"a",hidePlaceholderMenuItems:true,closeText:"Close",nativeMenu:true,initSelector:"select:not(:jqmData(role='slider'))"},_button:function(){return a("<div/>")},_setDisabled:function(a){this.element.attr("disabled",a);this.button.attr("aria-disabled",a);return this._setOption("disabled",a)},_focusButton:function(){var a=
|
"role='header'><div class='ui-title'>"+f.getEncodedText()+"</div></div><div data-"+a.mobile.ns+"role='content'></div></div>"),l=a("<div>",{"class":"ui-selectmenu ui-selectmenu-hidden ui-overlay-shadow ui-corner-all ui-body-"+b.options.overlayTheme+" "+a.mobile.defaultDialogTransition}).insertAfter(g),r=a("<ul>",{"class":"ui-selectmenu-list",id:m,role:"listbox","aria-labelledby":o}).attr("data-"+a.mobile.ns+"theme",b.options.theme).appendTo(l),n=a("<div>",{"class":"ui-header ui-bar-"+b.options.theme}).prependTo(l),
|
||||||
this;setTimeout(function(){a.button.focus()},40)},_selectOptions:function(){return this.select.find("option")},_preExtension:function(){this.select=this.element.wrap("<div class='ui-select'>");this.selectID=this.select.attr("id");this.label=a("label[for='"+this.selectID+"']").addClass("ui-select");this.isMultiple=this.select[0].multiple;if(!this.options.theme)this.options.theme=a.mobile.getInheritedTheme(this.select,"c")},_create:function(){this._preExtension();this._trigger("beforeCreate");this.button=
|
q=a("<h1>",{"class":"ui-title"}).appendTo(n),t;b.isMultiple&&(t=a("<a>",{text:b.options.closeText,href:"#","class":"ui-btn-left"}).attr("data-"+a.mobile.ns+"iconpos","notext").attr("data-"+a.mobile.ns+"icon","delete").appendTo(n).buttonMarkup());a.extend(b,{select:b.select,selectID:c,buttonId:o,menuId:m,thisPage:d,menuPage:p,label:f,screen:g,selectOptions:h,isMultiple:j,theme:b.options.theme,listbox:l,list:r,header:n,headerTitle:q,headerClose:t,menuPageContent:void 0,menuPageClose:void 0,placeholder:"",
|
||||||
this._button();var e=this,b=this.options,d=this.button.text(a(this.select[0].options.item(this.select[0].selectedIndex==-1?0:this.select[0].selectedIndex)).text()).insertBefore(this.select).buttonMarkup({theme:b.theme,icon:b.icon,iconpos:b.iconpos,inline:b.inline,corners:b.corners,shadow:b.shadow,iconshadow:b.iconshadow});b.nativeMenu&&window.opera&&window.opera.version&&this.select.addClass("ui-select-nativeonly");if(this.isMultiple)this.buttonCount=a("<span>").addClass("ui-li-count ui-btn-up-c ui-btn-corner-all").hide().appendTo(d.addClass("ui-li-has-count"));
|
build:function(){var c=this;c.refresh();c.select.attr("tabindex","-1").focus(function(){a(this).blur();c.button.focus()});c.button.bind("vclick keydown",function(b){if(b.type=="vclick"||b.keyCode&&(b.keyCode===a.mobile.keyCode.ENTER||b.keyCode===a.mobile.keyCode.SPACE))c.open(),b.preventDefault()});c.list.attr("role","listbox").bind("focusin",function(b){a(b.target).attr("tabindex","0").trigger("vmouseover")}).bind("focusout",function(b){a(b.target).attr("tabindex","-1").trigger("vmouseout")}).delegate("li:not(.ui-disabled, .ui-li-divider)",
|
||||||
(b.disabled||this.element.attr("disabled"))&&this.disable();this.select.change(function(){e.refresh()});this.build()},build:function(){var e=this;this.select.appendTo(e.button).bind("vmousedown",function(){e.button.addClass(a.mobile.activeBtnClass)}).bind("focus vmouseover",function(){e.button.trigger("vmouseover")}).bind("vmousemove",function(){e.button.removeClass(a.mobile.activeBtnClass)}).bind("change blur vmouseout",function(){e.button.trigger("vmouseout").removeClass(a.mobile.activeBtnClass)}).bind("change blur",
|
"click",function(b){var d=c.select[0].selectedIndex,e=c.list.find("li:not(.ui-li-divider)").index(this),f=c._selectOptions().eq(e)[0];f.selected=c.isMultiple?!f.selected:true;c.isMultiple&&a(this).find(".ui-icon").toggleClass("ui-icon-checkbox-on",f.selected).toggleClass("ui-icon-checkbox-off",!f.selected);(c.isMultiple||d!==e)&&c.select.trigger("change");c.isMultiple||c.close();b.preventDefault()}).keydown(function(c){var d=a(c.target),e=d.closest("li");switch(c.keyCode){case 38:return c=e.prev().not(".ui-selectmenu-placeholder"),
|
||||||
function(){e.button.removeClass("ui-btn-down-"+e.options.theme)})},selected:function(){return this._selectOptions().filter(":selected")},selectedIndices:function(){var a=this;return this.selected().map(function(){return a._selectOptions().index(this)}).get()},setButtonText:function(){var e=this,b=this.selected();this.button.find(".ui-btn-text").text(function(){return!e.isMultiple?b.text():b.length?b.map(function(){return a(this).text()}).get().join(", "):e.placeholder})},setButtonCount:function(){var a=
|
c.is(".ui-li-divider")&&(c=c.prev()),c.length&&(d.blur().attr("tabindex","-1"),c.addClass("ui-btn-down-"+b.options.theme).find("a").first().focus()),false;case 40:return c=e.next(),c.is(".ui-li-divider")&&(c=c.next()),c.length&&(d.blur().attr("tabindex","-1"),c.addClass("ui-btn-down-"+b.options.theme).find("a").first().focus()),false;case 13:case 32:return d.trigger("click"),false}});c.menuPage.bind("pagehide",function(){c.list.appendTo(c.listbox);c._focusButton();a.mobile._bindPageRemove.call(c.thisPage)});
|
||||||
this.selected();this.isMultiple&&this.buttonCount[a.length>1?"show":"hide"]().text(a.length)},refresh:function(){this.setButtonText();this.setButtonCount()},open:a.noop,close:a.noop,disable:function(){this._setDisabled(true);this.button.addClass("ui-disabled")},enable:function(){this._setDisabled(false);this.button.removeClass("ui-disabled")}});a(document).bind("pagecreate create",function(e){a.mobile.selectmenu.prototype.enhanceWithin(e.target)})})(jQuery);
|
c.screen.bind("vclick",function(){c.close()});c.isMultiple&&c.headerClose.click(function(){if(c.menuType=="overlay")return c.close(),false});c.thisPage.addDependents(this.menuPage)},_isRebuildRequired:function(){var a=this.list.find("li");return this._selectOptions().text()!==a.text()},refresh:function(b){var c=this;this._selectOptions();this.selected();var d=this.selectedIndices();(b||this._isRebuildRequired())&&c._buildList();c.setButtonText();c.setButtonCount();c.list.find("li:not(.ui-li-divider)").removeClass(a.mobile.activeBtnClass).attr("aria-selected",
|
||||||
(function(a,e){function b(b){for(var c;b;){if((c=typeof b.className==="string"&&b.className.split(" "))&&a.inArray("ui-btn",c)>-1&&a.inArray("ui-disabled",c)<0)break;b=b.parentNode}return b}a.fn.buttonMarkup=function(b){for(var b=b||{},c=0;c<this.length;c++){var h=this.eq(c),g=h[0],i=a.extend({},a.fn.buttonMarkup.defaults,{icon:b.icon!==e?b.icon:h.jqmData("icon"),iconpos:b.iconpos!==e?b.iconpos:h.jqmData("iconpos"),theme:b.theme!==e?b.theme:h.jqmData("theme"),inline:b.inline!==e?b.inline:h.jqmData("inline"),
|
false).each(function(b){a.inArray(b,d)>-1&&(b=a(this),b.attr("aria-selected",true),c.isMultiple?b.find(".ui-icon").removeClass("ui-icon-checkbox-off").addClass("ui-icon-checkbox-on"):b.is(".ui-selectmenu-placeholder")?b.next().addClass(a.mobile.activeBtnClass):b.addClass(a.mobile.activeBtnClass))})},close:function(){if(!this.options.disabled&&this.isOpen)this.menuType=="page"?s.history.back():(this.screen.addClass("ui-screen-hidden"),this.listbox.addClass("ui-selectmenu-hidden").removeAttr("style").removeClass("in"),
|
||||||
shadow:b.shadow!==e?b.shadow:h.jqmData("shadow"),corners:b.corners!==e?b.corners:h.jqmData("corners"),iconshadow:b.iconshadow!==e?b.iconshadow:h.jqmData("iconshadow")},b),k="ui-btn-inner",l,o,m=document.createElement(i.wrapperEls),p=document.createElement(i.wrapperEls),j=i.icon?document.createElement("span"):null;d&&d();if(!i.theme)i.theme=a.mobile.getInheritedTheme(h,"c");l="ui-btn ui-btn-up-"+i.theme;i.inline&&(l+=" ui-btn-inline");if(i.icon)i.icon="ui-icon-"+i.icon,i.iconpos=i.iconpos||"left",
|
this.list.appendTo(this.listbox),this._focusButton()),this.isOpen=false},open:function(){function b(){c.list.find("."+a.mobile.activeBtnClass+" a").focus()}if(!this.options.disabled){var c=this,d=a(s),e=c.list.parent(),f=e.outerHeight(),e=e.outerWidth();a(".ui-page-active");var g=d.scrollTop(),j=c.button.offset().top,h=d.height(),d=d.width();c.button.addClass(a.mobile.activeBtnClass);setTimeout(function(){c.button.removeClass(a.mobile.activeBtnClass)},300);if(f>h-80||!a.support.scrollTop){c.menuPage.appendTo(a.mobile.pageContainer).page();
|
||||||
o="ui-icon "+i.icon,i.iconshadow&&(o+=" ui-icon-shadow");i.iconpos&&(l+=" ui-btn-icon-"+i.iconpos,i.iconpos=="notext"&&!h.attr("title")&&h.attr("title",h.getEncodedText()));i.corners&&(l+=" ui-btn-corner-all",k+=" ui-btn-corner-all");i.shadow&&(l+=" ui-shadow");g.setAttribute("data-"+a.mobile.ns+"theme",i.theme);h.addClass(l);m.className=k;m.setAttribute("aria-hidden","true");p.className="ui-btn-text";m.appendChild(p);if(j)j.className=o,m.appendChild(j);for(;g.firstChild;)p.appendChild(g.firstChild);
|
c.menuPageContent=p.find(".ui-content");c.menuPageClose=p.find(".ui-header a");c.thisPage.unbind("pagehide.remove");if(g==0&&j>h)c.thisPage.one("pagehide",function(){a(this).jqmData("lastScroll",j)});c.menuPage.one("pageshow",function(){b();c.isOpen=true});c.menuType="page";c.menuPageContent.append(c.list);c.menuPage.find("div .ui-title").text(c.label.text());a.mobile.changePage(c.menuPage,{transition:a.mobile.defaultDialogTransition})}else{c.menuType="overlay";c.screen.height(a(k).height()).removeClass("ui-screen-hidden");
|
||||||
g.appendChild(m);a.data(g,"textWrapper",a(p))}return this};a.fn.buttonMarkup.defaults={corners:true,shadow:true,iconshadow:true,inline:false,wrapperEls:"span"};var d=function(){a(document).bind({vmousedown:function(d){var d=b(d.target),c;d&&(d=a(d),c=d.attr("data-"+a.mobile.ns+"theme"),d.removeClass("ui-btn-up-"+c).addClass("ui-btn-down-"+c))},"vmousecancel vmouseup":function(d){var d=b(d.target),c;d&&(d=a(d),c=d.attr("data-"+a.mobile.ns+"theme"),d.removeClass("ui-btn-down-"+c).addClass("ui-btn-up-"+
|
var l=j-g,m=g+h-j,n=f/2,o=parseFloat(c.list.parent().css("max-width")),f=l>f/2&&m>f/2?j+c.button.outerHeight()/2-n:l>m?g+h-f-30:g+30;e<o?g=(d-e)/2:(g=c.button.offset().left+c.button.outerWidth()/2-e/2,g<30?g=30:g+e>d&&(g=d-e-30));c.listbox.append(c.list).removeClass("ui-selectmenu-hidden").css({top:f,left:g}).addClass("in");b();c.isOpen=true}}},_buildList:function(){var b=this.options,c=this.placeholder,d=true,e=this.isMultiple?"checkbox-off":"false";this.list.empty().filter(".ui-listview").listview("destroy");
|
||||||
c))},"vmouseover focus":function(d){var d=b(d.target),c;d&&(d=a(d),c=d.attr("data-"+a.mobile.ns+"theme"),d.removeClass("ui-btn-up-"+c).addClass("ui-btn-hover-"+c))},"vmouseout blur":function(d){var d=b(d.target),c;d&&(d=a(d),c=d.attr("data-"+a.mobile.ns+"theme"),d.removeClass("ui-btn-hover-"+c+" ui-btn-down-"+c).addClass("ui-btn-up-"+c))}});d=null};a(document).bind("pagecreate create",function(b){a(":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a",
|
var f=this.select.find("option"),g=f.length,j=this.select[0],h="data-"+a.mobile.ns,l=h+"option-index",m=h+"icon";h+="role";for(var n=k.createDocumentFragment(),o,p=0;p<g;p++){var r=f[p],q=a(r),s=r.parentNode,t=q.text(),D=k.createElement("a"),J=[];D.setAttribute("href","#");D.appendChild(k.createTextNode(t));s!==j&&s.nodeName.toLowerCase()==="optgroup"&&(s=s.getAttribute("label"),s!=o&&(o=k.createElement("li"),o.setAttribute(h,"list-divider"),o.setAttribute("role","option"),o.setAttribute("tabindex",
|
||||||
b.target).not(".ui-btn, :jqmData(role='none'), :jqmData(role='nojs')").buttonMarkup()})})(jQuery);
|
"-1"),o.appendChild(k.createTextNode(s)),n.appendChild(o),o=s));if(d&&(!r.getAttribute("value")||t.length==0||q.jqmData("placeholder")))if(d=false,b.hidePlaceholderMenuItems&&J.push("ui-selectmenu-placeholder"),!c)c=this.placeholder=t;q=k.createElement("li");r.disabled&&(J.push("ui-disabled"),q.setAttribute("aria-disabled",true));q.setAttribute(l,p);q.setAttribute(m,e);q.className=J.join(" ");q.setAttribute("role","option");D.setAttribute("tabindex","-1");q.appendChild(D);n.appendChild(q)}this.list[0].appendChild(n);
|
||||||
(function(a){a.fn.controlgroup=function(e){return this.each(function(){function b(a){a.removeClass("ui-btn-corner-all ui-shadow").eq(0).addClass(h[0]).end().last().addClass(h[1]).addClass("ui-controlgroup-last")}var d=a(this),f=a.extend({direction:d.jqmData("type")||"vertical",shadow:false,excludeInvisible:true},e),c=d.children("legend"),h=f.direction=="horizontal"?["ui-corner-left","ui-corner-right"]:["ui-corner-top","ui-corner-bottom"];d.find("input").first().attr("type");c.length&&(d.wrapInner("<div class='ui-controlgroup-controls'></div>"),
|
!this.isMultiple&&!c.length?this.header.hide():this.headerTitle.text(this.placeholder);this.list.listview()},_button:function(){return a("<a>",{href:"#",role:"button",id:this.buttonId,"aria-haspopup":"true","aria-owns":this.menuId})}})};a(k).bind("selectmenubeforecreate",function(b){b=a(b.target).data("selectmenu");b.options.nativeMenu||c(b)})})(jQuery);(function(a){a.widget("mobile.fixedtoolbar",a.mobile.widget,{options:{visibleOnPageShow:true,disablePageZoom:true,transition:"slide",fullscreen:false,
|
||||||
a("<div role='heading' class='ui-controlgroup-label'>"+c.html()+"</div>").insertBefore(d.children(0)),c.remove());d.addClass("ui-corner-all ui-controlgroup ui-controlgroup-"+f.direction);b(d.find(".ui-btn"+(f.excludeInvisible?":visible":"")));b(d.find(".ui-btn-inner"));f.shadow&&d.addClass("ui-shadow")})};a(document).bind("pagecreate create",function(e){a(":jqmData(role='controlgroup')",e.target).controlgroup({excludeInvisible:false})})})(jQuery);
|
tapToggle:true,tapToggleBlacklist:"a, input, select, textarea, .ui-header-fixed, .ui-footer-fixed",hideDuringFocus:"input, textarea, select",updatePagePadding:true,trackPersistentToolbars:true,supportBlacklist:function(){var a=s,b=navigator.userAgent,e=navigator.platform,f=b.match(/AppleWebKit\/([0-9]+)/),f=!!f&&f[1],d=b.match(/Fennec\/([0-9]+)/),d=!!d&&d[1],g=b.match(/Opera Mobi\/([0-9]+)/),h=!!g&&g[1];return(e.indexOf("iPhone")>-1||e.indexOf("iPad")>-1||e.indexOf("iPod")>-1)&&f&&f<534||a.operamini&&
|
||||||
(function(a){a(document).bind("pagecreate create",function(e){a(e.target).find("a").not(".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')").addClass("ui-link")})})(jQuery);
|
{}.toString.call(a.operamini)==="[object OperaMini]"||g&&h<7458||b.indexOf("Android")>-1&&f&&f<533||d&&d<6||"palmGetResource"in s&&f&&f<534||b.indexOf("MeeGo")>-1&&b.indexOf("NokiaBrowser/8.5.0")>-1?true:false},initSelector:":jqmData(position='fixed')"},_create:function(){var a=this.options,b=this.element,e=b.is(":jqmData(role='header')")?"header":"footer",f=b.closest(".ui-page");a.supportBlacklist()?this.destroy():(b.addClass("ui-"+e+"-fixed"),a.fullscreen?(b.addClass("ui-"+e+"-fullscreen"),f.addClass("ui-page-"+
|
||||||
(function(a,e){a.fn.fixHeaderFooter=function(){return!a.support.scrollTop||a.support.touchOverflow&&a.mobile.touchOverflowEnabled?this:this.each(function(){var b=a(this);b.jqmData("fullscreen")&&b.addClass("ui-page-fullscreen");b.find(".ui-header:jqmData(position='fixed')").addClass("ui-header-fixed ui-fixed-inline fade");b.find(".ui-footer:jqmData(position='fixed')").addClass("ui-footer-fixed ui-fixed-inline fade")})};a.mobile.fixedToolbars=function(){function b(){!i&&g==="overlay"&&(h||a.mobile.fixedToolbars.hide(true),
|
e+"-fullscreen")):f.addClass("ui-page-"+e+"-fixed"),this._addTransitionClass(),this._bindPageEvents(),this._bindToggleHandlers())},_addTransitionClass:function(){var a=this.options.transition;a&&a!=="none"&&(a==="slide"&&(a=this.element.is(".ui-header")?"slidedown":"slideup"),this.element.addClass(a))},_bindPageEvents:function(){var c=this,b=c.options;c.element.closest(".ui-page").bind("pagebeforeshow",function(){b.disablePageZoom&&a.mobile.zoom.disable(true);b.visibleOnPageShow||c.hide(true)}).bind("webkitAnimationStart animationstart updatelayout",
|
||||||
a.mobile.fixedToolbars.startShowTimer())}function d(a){var b=0,c,d;if(a){d=document.body;c=a.offsetParent;for(b=a.offsetTop;a&&a!=d;){b+=a.scrollTop||0;if(a==c)b+=c.offsetTop,c=a.offsetParent;a=a.parentNode}}return b}function f(b){var c=a(window).scrollTop(),e=d(b[0]),f=b.css("top")=="auto"?0:parseFloat(b.css("top")),h=window.innerHeight,g=b.outerHeight(),i=b.parents(".ui-page:not(.ui-page-fullscreen)").length;return b.is(".ui-header-fixed")?(f=c-e+f,f<e&&(f=0),b.css("top",i?f:c)):b.css("top",i?c+
|
function(){b.updatePagePadding&&c.updatePagePadding()}).bind("pageshow",function(){c.updatePagePadding();b.updatePagePadding&&a(s).bind("throttledresize."+c.widgetName,function(){c.updatePagePadding()})}).bind("pagebeforehide",function(e,f){b.disablePageZoom&&a.mobile.zoom.enable(true);b.updatePagePadding&&a(s).unbind("throttledresize."+c.widgetName);if(b.trackPersistentToolbars){var d=a(".ui-footer-fixed:jqmData(id)",this),g=a(".ui-header-fixed:jqmData(id)",this),h=d.length&&f.nextPage&&a(".ui-footer-fixed:jqmData(id='"+
|
||||||
h-g-(e-f):c+h-g)}if(a.support.scrollTop&&(!a.support.touchOverflow||!a.mobile.touchOverflowEnabled)){var c,h,g="inline",i=false,k=null,l=false,o=true;a(function(){var c=a(document),d=a(window);c.bind("vmousedown",function(){o&&(k=g)}).bind("vclick",function(b){o&&!a(b.target).closest("a,input,textarea,select,button,label,.ui-header-fixed,.ui-footer-fixed").length&&!l&&(a.mobile.fixedToolbars.toggle(k),k=null)}).bind("silentscroll",b);(c.scrollTop()===0?d:c).bind("scrollstart",function(){l=true;k===
|
d.jqmData("id")+"')",f.nextPage),j=g.length&&f.nextPage&&a(".ui-header-fixed:jqmData(id='"+g.jqmData("id")+"')",f.nextPage),h=h||a();if(h.length||j.length)h.add(j).appendTo(a.mobile.pageContainer),f.nextPage.one("pageshow",function(){h.add(j).appendTo(this)})}})},_visible:true,updatePagePadding:function(){var a=this.element,b=a.is(".ui-header");this.options.fullscreen||a.closest(".ui-page").css("padding-"+(b?"top":"bottom"),a.outerHeight())},_useTransition:function(c){var b=this.element,e=a(s).scrollTop(),
|
||||||
null&&(k=g);var b=k=="overlay";if(i=b||!!h)a.mobile.fixedToolbars.clearShowTimer(),b&&a.mobile.fixedToolbars.hide(true)}).bind("scrollstop",function(b){a(b.target).closest("a,input,textarea,select,button,label,.ui-header-fixed,.ui-footer-fixed").length||(l=false,i&&(a.mobile.fixedToolbars.startShowTimer(),i=false),k=null)});d.bind("resize updatelayout",b)});a(".ui-page").live("pagebeforeshow",function(b,d){var e=a(b.target).find(":jqmData(role='footer')"),h=e.data("id"),g=d.prevPage,g=g&&g.find(":jqmData(role='footer')"),
|
f=b.height(),d=b.closest(".ui-page").height(),g=a.mobile.getScreenHeight(),b=b.is(":jqmData(role='header')")?"header":"footer";return!c&&(this.options.transition&&this.options.transition!=="none"&&(b==="header"&&!this.options.fullscreen&&e>f||b==="footer"&&!this.options.fullscreen&&e+g<d-f)||this.options.fullscreen)},show:function(a){var b=this.element;this._useTransition(a)?b.removeClass("out ui-fixed-hidden").addClass("in"):b.removeClass("ui-fixed-hidden");this._visible=true},hide:function(a){var b=
|
||||||
g=g.length&&g.jqmData("id")===h;h&&g&&(c=e,f(c.removeClass("fade in out").appendTo(a.mobile.pageContainer)))}).live("pageshow",function(){var b=a(this);c&&c.length&&setTimeout(function(){f(c.appendTo(b).addClass("fade"));c=null},500);a.mobile.fixedToolbars.show(true,this)});a(".ui-collapsible-contain").live("collapse expand",b);return{show:function(b,c){a.mobile.fixedToolbars.clearShowTimer();g="overlay";return(c?a(c):a.mobile.activePage?a.mobile.activePage:a(".ui-page-active")).children(".ui-header-fixed:first, .ui-footer-fixed:not(.ui-footer-duplicate):last").each(function(){var c=
|
this.element,e="out"+(this.options.transition==="slide"?" reverse":"");this._useTransition(a)?b.addClass(e).removeClass("in").animationComplete(function(){b.addClass("ui-fixed-hidden").removeClass(e)}):b.addClass("ui-fixed-hidden").removeClass(e);this._visible=false},toggle:function(){this[this._visible?"hide":"show"]()},_bindToggleHandlers:function(){var c=this,b=c.options;c.element.closest(".ui-page").bind("vclick",function(e){b.tapToggle&&!a(e.target).closest(b.tapToggleBlacklist).length&&c.toggle()}).bind("focusin focusout",
|
||||||
a(this),e=a(window).scrollTop(),h=d(c[0]),g=window.innerHeight,i=c.outerHeight(),e=c.is(".ui-header-fixed")&&e<=h+i||c.is(".ui-footer-fixed")&&h<=e+g;c.addClass("ui-fixed-overlay").removeClass("ui-fixed-inline");!e&&!b&&c.animationComplete(function(){c.removeClass("in")}).addClass("in");f(c)})},hide:function(b){g="inline";return(a.mobile.activePage?a.mobile.activePage:a(".ui-page-active")).children(".ui-header-fixed:first, .ui-footer-fixed:not(.ui-footer-duplicate):last").each(function(){var c=a(this),
|
function(e){if(screen.width<500&&a(e.target).is(b.hideDuringFocus)&&!a(e.target).closest(".ui-header-fixed, .ui-footer-fixed").length)c[e.type==="focusin"&&c._visible?"hide":"show"]()})},destroy:function(){this.element.removeClass("ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden");this.element.closest(".ui-page").removeClass("ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen")}});a(k).bind("pagecreate create",
|
||||||
d=c.css("top"),d=d=="auto"?0:parseFloat(d);c.addClass("ui-fixed-inline").removeClass("ui-fixed-overlay");if(d<0||c.is(".ui-header-fixed")&&d!==0)b?c.css("top",0):c.css("top")!=="auto"&&parseFloat(c.css("top"))!==0&&c.animationComplete(function(){c.removeClass("out reverse").css("top",0)}).addClass("out reverse")})},startShowTimer:function(){a.mobile.fixedToolbars.clearShowTimer();var b=[].slice.call(arguments);h=setTimeout(function(){h=e;a.mobile.fixedToolbars.show.apply(null,b)},100)},clearShowTimer:function(){h&&
|
function(c){a(c.target).jqmData("fullscreen")&&a(a.mobile.fixedtoolbar.prototype.options.initSelector,c.target).not(":jqmData(fullscreen)").jqmData("fullscreen",true);a.mobile.fixedtoolbar.prototype.enhanceWithin(c.target)})})(jQuery);(function(a,c){if(/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1){var b=a.mobile.zoom,e,f,d,g,h;a(c).bind("orientationchange.iosorientationfix",b.enable).bind("devicemotion.iosorientationfix",function(a){e=a.originalEvent;
|
||||||
clearTimeout(h);h=e},toggle:function(b){b&&(g=b);return g==="overlay"?a.mobile.fixedToolbars.hide():a.mobile.fixedToolbars.show()},setTouchToggleEnabled:function(a){o=a}}}}();a(document).bind("pagecreate create",function(b){a(":jqmData(position='fixed')",b.target).length&&a(b.target).each(function(){if(!a.support.scrollTop||a.support.touchOverflow&&a.mobile.touchOverflowEnabled)return this;var b=a(this);b.jqmData("fullscreen")&&b.addClass("ui-page-fullscreen");b.find(".ui-header:jqmData(position='fixed')").addClass("ui-header-fixed ui-fixed-inline fade");
|
h=e.accelerationIncludingGravity;f=Math.abs(h.x);d=Math.abs(h.y);g=Math.abs(h.z);!c.orientation&&(f>7||(g>6&&d<8||g<8&&d>6)&&f>5)?b.enabled&&b.disable():b.enabled||b.enable()})}})(jQuery,this);(function(a,c){function b(){var b=a("."+a.mobile.activeBtnClass).first();h.css({top:a.support.scrollTop&&g.scrollTop()+g.height()/2||b.length&&b.offset().top||100})}function e(){var c=h.offset(),d=g.scrollTop(),f=a.mobile.getScreenHeight();if(c.top<d||c.top-d>f)h.addClass("ui-loader-fakefix"),b(),g.unbind("scroll",
|
||||||
b.find(".ui-footer:jqmData(position='fixed')").addClass("ui-footer-fixed ui-fixed-inline fade")})})})(jQuery);
|
e).bind("scroll",b)}function f(){d.removeClass("ui-mobile-rendering")}var d=a("html");a("head");var g=a(c);a(c.document).trigger("mobileinit");if(a.mobile.gradeA()){if(a.mobile.ajaxBlacklist)a.mobile.ajaxEnabled=false;d.addClass("ui-mobile ui-mobile-rendering");setTimeout(f,5E3);var h=a("<div class='ui-loader'><span class='ui-icon ui-icon-loading'></span><h1></h1></div>");a.extend(a.mobile,{showPageLoadingMsg:function(b,c,f){d.addClass("ui-loading");if(a.mobile.loadingMessage){var k=f||a.mobile.loadingMessageTextVisible;
|
||||||
(function(a){a.mobile.touchOverflowEnabled=false;a.mobile.touchOverflowZoomEnabled=false;a(document).bind("pagecreate",function(e){a.support.touchOverflow&&a.mobile.touchOverflowEnabled&&(e=a(e.target),e.is(":jqmData(role='page')")&&e.each(function(){var b=a(this),d=b.find(":jqmData(role='header'), :jqmData(role='footer')").filter(":jqmData(position='fixed')"),e=b.jqmData("fullscreen"),c=d.length?b.find(".ui-content"):b;b.addClass("ui-mobile-touch-overflow");c.bind("scrollstop",function(){c.scrollTop()>
|
b=b||a.mobile.loadingMessageTheme;h.attr("class","ui-loader ui-corner-all ui-body-"+(b||"a")+" ui-loader-"+(k?"verbose":"default")+(f?" ui-loader-textonly":"")).find("h1").text(c||a.mobile.loadingMessage).end().appendTo(a.mobile.pageContainer);e();g.bind("scroll",e)}},hidePageLoadingMsg:function(){d.removeClass("ui-loading");a.mobile.loadingMessage&&h.removeClass("ui-loader-fakefix");a(c).unbind("scroll",b);a(c).unbind("scroll",e)},initializePage:function(){var b=a(":jqmData(role='page'), :jqmData(role='dialog')");
|
||||||
0&&window.scrollTo(0,a.mobile.defaultHomeScroll)});d.length&&(b.addClass("ui-native-fixed"),e&&(b.addClass("ui-native-fullscreen"),d.addClass("fade in"),a(document).bind("vclick",function(){d.removeClass("ui-native-bars-hidden").toggleClass("in out").animationComplete(function(){a(this).not(".in").addClass("ui-native-bars-hidden")})})))}))})})(jQuery);
|
b.length||(b=a("body").wrapInner("<div data-"+a.mobile.ns+"role='page'></div>").children(0));b.each(function(){var b=a(this);b.jqmData("url")||b.attr("data-"+a.mobile.ns+"url",b.attr("id")||location.pathname+location.search)});a.mobile.firstPage=b.first();a.mobile.pageContainer=b.first().parent().addClass("ui-mobile-viewport");g.trigger("pagecontainercreate");a.mobile.showPageLoadingMsg();f();!a.mobile.hashListeningEnabled||!a.mobile.path.stripHash(location.hash)?a.mobile.changePage(a.mobile.firstPage,
|
||||||
(function(a,e){function b(){var b=a("meta[name='viewport']");b.length?b.attr("content",b.attr("content")+", user-scalable=no"):a("head").prepend("<meta>",{name:"viewport",content:"user-scalable=no"})}var d=a("html");a("head");var f=a(e);a(e.document).trigger("mobileinit");if(a.mobile.gradeA()){if(a.mobile.ajaxBlacklist)a.mobile.ajaxEnabled=false;d.addClass("ui-mobile ui-mobile-rendering");var c=a("<div class='ui-loader ui-body-a ui-corner-all'><span class='ui-icon ui-icon-loading spin'></span><h1></h1></div>");
|
{transition:"none",reverse:true,changeHash:false,fromHashChange:true}):g.trigger("hashchange",[true])}});a.mobile._registerInternalEvents();a(function(){c.scrollTo(0,1);a.mobile.defaultHomeScroll=!a.support.scrollTop||a(c).scrollTop()===1?0:1;a.fn.controlgroup&&a(k).bind("pagecreate create",function(b){a(":jqmData(role='controlgroup')",b.target).jqmEnhanceable().controlgroup({excludeInvisible:false})});a.mobile.autoInitializePage&&a.mobile.initializePage();g.load(a.mobile.silentScroll)})}})(jQuery,
|
||||||
a.extend(a.mobile,{showPageLoadingMsg:function(){if(a.mobile.loadingMessage){var b=a("."+a.mobile.activeBtnClass).first();c.find("h1").text(a.mobile.loadingMessage).end().appendTo(a.mobile.pageContainer).css({top:a.support.scrollTop&&f.scrollTop()+f.height()/2||b.length&&b.offset().top||100})}d.addClass("ui-loading")},hidePageLoadingMsg:function(){d.removeClass("ui-loading")},initializePage:function(){var b=a(":jqmData(role='page')");b.length||(b=a("body").wrapInner("<div data-"+a.mobile.ns+"role='page'></div>").children(0));
|
this)});
|
||||||
b.add(":jqmData(role='dialog')").each(function(){var b=a(this);b.jqmData("url")||b.attr("data-"+a.mobile.ns+"url",b.attr("id")||location.pathname+location.search)});a.mobile.firstPage=b.first();a.mobile.pageContainer=b.first().parent().addClass("ui-mobile-viewport");f.trigger("pagecontainercreate");a.mobile.showPageLoadingMsg();!a.mobile.hashListeningEnabled||!a.mobile.path.stripHash(location.hash)?a.mobile.changePage(a.mobile.firstPage,{transition:"none",reverse:true,changeHash:false,fromHashChange:true}):
|
|
||||||
f.trigger("hashchange",[true])}});a.support.touchOverflow&&a.mobile.touchOverflowEnabled&&!a.mobile.touchOverflowZoomEnabled&&b();a.mobile._registerInternalEvents();a(function(){e.scrollTo(0,1);a.mobile.defaultHomeScroll=!a.support.scrollTop||a(e).scrollTop()===1?0:1;a.mobile.autoInitializePage&&a.mobile.initializePage();f.load(a.mobile.silentScroll)})}})(jQuery,this);
|
|
||||||
|
@ -203,9 +203,17 @@ window.OpenLP = {
|
|||||||
},
|
},
|
||||||
blankDisplay: function (event) {
|
blankDisplay: function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
$.getJSON("/api/display/hide");
|
$.getJSON("/api/display/blank");
|
||||||
},
|
},
|
||||||
unblankDisplay: function (event) {
|
themeDisplay: function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
$.getJSON("/api/display/theme");
|
||||||
|
},
|
||||||
|
desktopDisplay: function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
$.getJSON("/api/display/desktop");
|
||||||
|
},
|
||||||
|
showDisplay: function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
$.getJSON("/api/display/show");
|
$.getJSON("/api/display/show");
|
||||||
},
|
},
|
||||||
@ -238,9 +246,8 @@ window.OpenLP = {
|
|||||||
else {
|
else {
|
||||||
$.each(data.results.items, function (idx, value) {
|
$.each(data.results.items, function (idx, value) {
|
||||||
ul.append($("<li>").append($("<a>").attr("href", "#options")
|
ul.append($("<li>").append($("<a>").attr("href", "#options")
|
||||||
.attr("data-rel", "dialog").attr("data-transition", "pop")
|
.attr("data-rel", "dialog").attr("value", value[0])
|
||||||
.attr("value", value[0]).click(OpenLP.showOptions)
|
.click(OpenLP.showOptions).text(value[1])));
|
||||||
.text(value[1])));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
ul.listview("refresh");
|
ul.listview("refresh");
|
||||||
@ -276,30 +283,53 @@ window.OpenLP = {
|
|||||||
"/api/" + $("#search-plugin").val() + "/add",
|
"/api/" + $("#search-plugin").val() + "/add",
|
||||||
{"data": text},
|
{"data": text},
|
||||||
function () {
|
function () {
|
||||||
history.back();
|
$("#options").dialog("close");
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$("#options").dialog("close");
|
},
|
||||||
|
addAndGoToService: function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
var id = $("#selected-item").val();
|
||||||
|
if (typeof id !== "number") {
|
||||||
|
id = "\"" + id + "\"";
|
||||||
|
}
|
||||||
|
var text = "{\"request\": {\"id\": " + id + "}}";
|
||||||
|
$.getJSON(
|
||||||
|
"/api/" + $("#search-plugin").val() + "/add",
|
||||||
|
{"data": text},
|
||||||
|
function () {
|
||||||
|
//$("#options").dialog("close");
|
||||||
$.mobile.changePage("#service-manager");
|
$.mobile.changePage("#service-manager");
|
||||||
|
}
|
||||||
|
);
|
||||||
},
|
},
|
||||||
escapeString: function (string) {
|
escapeString: function (string) {
|
||||||
return string.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")
|
return string.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Initial jQueryMobile options
|
||||||
|
$(document).bind("mobileinit", function(){
|
||||||
|
$.mobile.defaultDialogTransition = "none";
|
||||||
|
$.mobile.defaultPageTransition = "none";
|
||||||
|
});
|
||||||
// Service Manager
|
// Service Manager
|
||||||
$("#service-manager").live("pagebeforeshow", OpenLP.loadService);
|
$("#service-manager").live("pagebeforeshow", OpenLP.loadService);
|
||||||
$("#service-refresh").live("click", OpenLP.loadService);
|
$("#service-refresh").live("click", OpenLP.loadService);
|
||||||
$("#service-top-next, #service-btm-next").live("click", OpenLP.nextItem);
|
$("#service-next").live("click", OpenLP.nextItem);
|
||||||
$("#service-top-previous, #service-btm-previous").live("click", OpenLP.previousItem);
|
$("#service-previous").live("click", OpenLP.previousItem);
|
||||||
$("#service-top-blank, #service-btm-blank").live("click", OpenLP.blankDisplay);
|
$("#service-blank").live("click", OpenLP.blankDisplay);
|
||||||
$("#service-top-unblank, #service-btm-unblank").live("click", OpenLP.unblankDisplay);
|
$("#service-theme").live("click", OpenLP.themeDisplay);
|
||||||
|
$("#service-desktop").live("click", OpenLP.desktopDisplay);
|
||||||
|
$("#service-show").live("click", OpenLP.showDisplay);
|
||||||
// Slide Controller
|
// Slide Controller
|
||||||
$("#slide-controller").live("pagebeforeshow", OpenLP.loadController);
|
$("#slide-controller").live("pagebeforeshow", OpenLP.loadController);
|
||||||
$("#controller-refresh").live("click", OpenLP.loadController);
|
$("#controller-refresh").live("click", OpenLP.loadController);
|
||||||
$("#controller-top-next, #controller-btm-next").live("click", OpenLP.nextSlide);
|
$("#controller-next").live("click", OpenLP.nextSlide);
|
||||||
$("#controller-top-previous, #controller-btm-previous").live("click", OpenLP.previousSlide);
|
$("#controller-previous").live("click", OpenLP.previousSlide);
|
||||||
$("#controller-top-blank, #controller-btm-blank").live("click", OpenLP.blankDisplay);
|
$("#controller-blank").live("click", OpenLP.blankDisplay);
|
||||||
$("#controller-top-unblank, #controller-btm-unblank").live("click", OpenLP.unblankDisplay);
|
$("#controller-theme").live("click", OpenLP.themeDisplay);
|
||||||
|
$("#controller-desktop").live("click", OpenLP.desktopDisplay);
|
||||||
|
$("#controller-show").live("click", OpenLP.showDisplay);
|
||||||
// Alerts
|
// Alerts
|
||||||
$("#alert-submit").live("click", OpenLP.showAlert);
|
$("#alert-submit").live("click", OpenLP.showAlert);
|
||||||
// Search
|
// Search
|
||||||
@ -312,6 +342,7 @@ $("#search-text").live("keypress", function(event) {
|
|||||||
});
|
});
|
||||||
$("#go-live").live("click", OpenLP.goLive);
|
$("#go-live").live("click", OpenLP.goLive);
|
||||||
$("#add-to-service").live("click", OpenLP.addToService);
|
$("#add-to-service").live("click", OpenLP.addToService);
|
||||||
|
$("#add-and-go-to-service").live("click", OpenLP.addAndGoToService);
|
||||||
// Poll the server twice a second to get any updates.
|
// Poll the server twice a second to get any updates.
|
||||||
$.ajaxSetup({cache: false});
|
$.ajaxSetup({cache: false});
|
||||||
$("#search").live("pageinit", function (event) {
|
$("#search").live("pageinit", function (event) {
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>${stage_title}</title>
|
<title>${stage_title}</title>
|
||||||
<link rel="stylesheet" href="/files/stage.css" />
|
<link rel="stylesheet" href="/files/stage.css" />
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="/files/images/favicon.ico">
|
||||||
<script type="text/javascript" src="/files/jquery.js"></script>
|
<script type="text/javascript" src="/files/jquery.js"></script>
|
||||||
<script type="text/javascript" src="/files/stage.js"></script>
|
<script type="text/javascript" src="/files/stage.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -290,9 +290,11 @@ class HttpConnection(object):
|
|||||||
'Slide Controller'),
|
'Slide Controller'),
|
||||||
'alerts': translate('RemotePlugin.Mobile', 'Alerts'),
|
'alerts': translate('RemotePlugin.Mobile', 'Alerts'),
|
||||||
'search': translate('RemotePlugin.Mobile', 'Search'),
|
'search': translate('RemotePlugin.Mobile', 'Search'),
|
||||||
'back': translate('RemotePlugin.Mobile', 'Back'),
|
'home': translate('RemotePlugin.Mobile', 'Home'),
|
||||||
'refresh': translate('RemotePlugin.Mobile', 'Refresh'),
|
'refresh': translate('RemotePlugin.Mobile', 'Refresh'),
|
||||||
'blank': translate('RemotePlugin.Mobile', 'Blank'),
|
'blank': translate('RemotePlugin.Mobile', 'Blank'),
|
||||||
|
'theme': translate('RemotePlugin.Mobile', 'Theme'),
|
||||||
|
'desktop': translate('RemotePlugin.Mobile', 'Desktop'),
|
||||||
'show': translate('RemotePlugin.Mobile', 'Show'),
|
'show': translate('RemotePlugin.Mobile', 'Show'),
|
||||||
'prev': translate('RemotePlugin.Mobile', 'Prev'),
|
'prev': translate('RemotePlugin.Mobile', 'Prev'),
|
||||||
'next': translate('RemotePlugin.Mobile', 'Next'),
|
'next': translate('RemotePlugin.Mobile', 'Next'),
|
||||||
@ -301,6 +303,8 @@ class HttpConnection(object):
|
|||||||
'go_live': translate('RemotePlugin.Mobile', 'Go Live'),
|
'go_live': translate('RemotePlugin.Mobile', 'Go Live'),
|
||||||
'add_to_service': translate('RemotePlugin.Mobile',
|
'add_to_service': translate('RemotePlugin.Mobile',
|
||||||
'Add to Service'),
|
'Add to Service'),
|
||||||
|
'add_and_go_to_service': translate('RemotePlugin.Mobile',
|
||||||
|
'Add & Go to Service'),
|
||||||
'no_results': translate('RemotePlugin.Mobile', 'No Results'),
|
'no_results': translate('RemotePlugin.Mobile', 'No Results'),
|
||||||
'options': translate('RemotePlugin.Mobile', 'Options')
|
'options': translate('RemotePlugin.Mobile', 'Options')
|
||||||
}
|
}
|
||||||
@ -396,6 +400,7 @@ class HttpConnection(object):
|
|||||||
Poll OpenLP to determine the current slide number and item name.
|
Poll OpenLP to determine the current slide number and item name.
|
||||||
"""
|
"""
|
||||||
result = {
|
result = {
|
||||||
|
u'service': self.parent.plugin.serviceManager.serviceId,
|
||||||
u'slide': self.parent.current_slide or 0,
|
u'slide': self.parent.current_slide or 0,
|
||||||
u'item': self.parent.current_item._uuid \
|
u'item': self.parent.current_item._uuid \
|
||||||
if self.parent.current_item else u'',
|
if self.parent.current_item else u'',
|
||||||
|
@ -41,8 +41,8 @@ class RemotesPlugin(Plugin):
|
|||||||
"""
|
"""
|
||||||
Plugin.__init__(self, u'remotes', plugin_helpers,
|
Plugin.__init__(self, u'remotes', plugin_helpers,
|
||||||
settings_tab_class=RemoteTab)
|
settings_tab_class=RemoteTab)
|
||||||
self.icon_path = u':/plugins/plugin_remote.png'
|
self.iconPath = u':/plugins/plugin_remote.png'
|
||||||
self.icon = build_icon(self.icon_path)
|
self.icon = build_icon(self.iconPath)
|
||||||
self.weight = -1
|
self.weight = -1
|
||||||
self.server = None
|
self.server = None
|
||||||
|
|
||||||
|
@ -377,7 +377,7 @@ class SingleColumnTableWidget(QtGui.QTableWidget):
|
|||||||
"""
|
"""
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
"""
|
"""
|
||||||
Constrctor
|
Constructor
|
||||||
"""
|
"""
|
||||||
QtGui.QTableWidget.__init__(self, parent)
|
QtGui.QTableWidget.__init__(self, parent)
|
||||||
self.horizontalHeader().setVisible(False)
|
self.horizontalHeader().setVisible(False)
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtGui
|
||||||
|
|
||||||
from openlp.core.lib import build_icon, translate, SpellTextEdit
|
from openlp.core.lib import build_icon, translate, SpellTextEdit
|
||||||
from openlp.core.lib.ui import create_button_box, UiStrings
|
from openlp.core.lib.ui import create_button_box, UiStrings
|
||||||
|
@ -57,7 +57,7 @@ class SongImportForm(OpenLPWizard):
|
|||||||
``plugin``
|
``plugin``
|
||||||
The songs plugin.
|
The songs plugin.
|
||||||
"""
|
"""
|
||||||
self.clipboard = plugin.formparent.clipboard
|
self.clipboard = plugin.formParent.clipboard
|
||||||
OpenLPWizard.__init__(self, parent, plugin, u'songImportWizard',
|
OpenLPWizard.__init__(self, parent, plugin, u'songImportWizard',
|
||||||
u':/wizards/wizard_importsong.bmp')
|
u':/wizards/wizard_importsong.bmp')
|
||||||
|
|
||||||
@ -129,6 +129,12 @@ class SongImportForm(OpenLPWizard):
|
|||||||
QtCore.QObject.connect(self.ccliRemoveButton,
|
QtCore.QObject.connect(self.ccliRemoveButton,
|
||||||
QtCore.SIGNAL(u'clicked()'),
|
QtCore.SIGNAL(u'clicked()'),
|
||||||
self.onCCLIRemoveButtonClicked)
|
self.onCCLIRemoveButtonClicked)
|
||||||
|
QtCore.QObject.connect(self.dreamBeamAddButton,
|
||||||
|
QtCore.SIGNAL(u'clicked()'),
|
||||||
|
self.onDreamBeamAddButtonClicked)
|
||||||
|
QtCore.QObject.connect(self.dreamBeamRemoveButton,
|
||||||
|
QtCore.SIGNAL(u'clicked()'),
|
||||||
|
self.onDreamBeamRemoveButtonClicked)
|
||||||
QtCore.QObject.connect(self.songsOfFellowshipAddButton,
|
QtCore.QObject.connect(self.songsOfFellowshipAddButton,
|
||||||
QtCore.SIGNAL(u'clicked()'),
|
QtCore.SIGNAL(u'clicked()'),
|
||||||
self.onSongsOfFellowshipAddButtonClicked)
|
self.onSongsOfFellowshipAddButtonClicked)
|
||||||
@ -201,6 +207,8 @@ class SongImportForm(OpenLPWizard):
|
|||||||
self.addFileSelectItem(u'generic', None, True)
|
self.addFileSelectItem(u'generic', None, True)
|
||||||
# CCLI File import
|
# CCLI File import
|
||||||
self.addFileSelectItem(u'ccli')
|
self.addFileSelectItem(u'ccli')
|
||||||
|
# DreamBeam
|
||||||
|
self.addFileSelectItem(u'dreamBeam')
|
||||||
# EasySlides
|
# EasySlides
|
||||||
self.addFileSelectItem(u'easySlides', single_select=True)
|
self.addFileSelectItem(u'easySlides', single_select=True)
|
||||||
# EasyWorship
|
# EasyWorship
|
||||||
@ -247,6 +255,8 @@ class SongImportForm(OpenLPWizard):
|
|||||||
translate('SongsPlugin.ImportWizardForm',
|
translate('SongsPlugin.ImportWizardForm',
|
||||||
'Generic Document/Presentation'))
|
'Generic Document/Presentation'))
|
||||||
self.formatComboBox.setItemText(SongFormat.CCLI, WizardStrings.CCLI)
|
self.formatComboBox.setItemText(SongFormat.CCLI, WizardStrings.CCLI)
|
||||||
|
self.formatComboBox.setItemText(
|
||||||
|
SongFormat.DreamBeam, WizardStrings.DB)
|
||||||
self.formatComboBox.setItemText(
|
self.formatComboBox.setItemText(
|
||||||
SongFormat.EasySlides, WizardStrings.ES)
|
SongFormat.EasySlides, WizardStrings.ES)
|
||||||
self.formatComboBox.setItemText(
|
self.formatComboBox.setItemText(
|
||||||
@ -291,6 +301,10 @@ class SongImportForm(OpenLPWizard):
|
|||||||
translate('SongsPlugin.ImportWizardForm', 'Add Files...'))
|
translate('SongsPlugin.ImportWizardForm', 'Add Files...'))
|
||||||
self.ccliRemoveButton.setText(
|
self.ccliRemoveButton.setText(
|
||||||
translate('SongsPlugin.ImportWizardForm', 'Remove File(s)'))
|
translate('SongsPlugin.ImportWizardForm', 'Remove File(s)'))
|
||||||
|
self.dreamBeamAddButton.setText(
|
||||||
|
translate('SongsPlugin.ImportWizardForm', 'Add Files...'))
|
||||||
|
self.dreamBeamRemoveButton.setText(
|
||||||
|
translate('SongsPlugin.ImportWizardForm', 'Remove File(s)'))
|
||||||
self.songsOfFellowshipAddButton.setText(
|
self.songsOfFellowshipAddButton.setText(
|
||||||
translate('SongsPlugin.ImportWizardForm', 'Add Files...'))
|
translate('SongsPlugin.ImportWizardForm', 'Add Files...'))
|
||||||
self.songsOfFellowshipRemoveButton.setText(
|
self.songsOfFellowshipRemoveButton.setText(
|
||||||
@ -397,6 +411,12 @@ class SongImportForm(OpenLPWizard):
|
|||||||
WizardStrings.YouSpecifyFile % WizardStrings.CCLI)
|
WizardStrings.YouSpecifyFile % WizardStrings.CCLI)
|
||||||
self.ccliAddButton.setFocus()
|
self.ccliAddButton.setFocus()
|
||||||
return False
|
return False
|
||||||
|
elif source_format == SongFormat.DreamBeam:
|
||||||
|
if self.dreamBeamFileListWidget.count() == 0:
|
||||||
|
critical_error_message_box(UiStrings().NFSp,
|
||||||
|
WizardStrings.YouSpecifyFile % WizardStrings.DB)
|
||||||
|
self.dreamBeamAddButton.setFocus()
|
||||||
|
return False
|
||||||
elif source_format == SongFormat.SongsOfFellowship:
|
elif source_format == SongFormat.SongsOfFellowship:
|
||||||
if self.songsOfFellowshipFileListWidget.count() == 0:
|
if self.songsOfFellowshipFileListWidget.count() == 0:
|
||||||
critical_error_message_box(UiStrings().NFSp,
|
critical_error_message_box(UiStrings().NFSp,
|
||||||
@ -433,7 +453,7 @@ class SongImportForm(OpenLPWizard):
|
|||||||
if self.songShowPlusFileListWidget.count() == 0:
|
if self.songShowPlusFileListWidget.count() == 0:
|
||||||
critical_error_message_box(UiStrings().NFSp,
|
critical_error_message_box(UiStrings().NFSp,
|
||||||
WizardStrings.YouSpecifyFile % WizardStrings.SSP)
|
WizardStrings.YouSpecifyFile % WizardStrings.SSP)
|
||||||
self.wordsOfWorshipAddButton.setFocus()
|
self.songShowPlusAddButton.setFocus()
|
||||||
return False
|
return False
|
||||||
elif source_format == SongFormat.FoilPresenter:
|
elif source_format == SongFormat.FoilPresenter:
|
||||||
if self.foilPresenterFileListWidget.count() == 0:
|
if self.foilPresenterFileListWidget.count() == 0:
|
||||||
@ -564,6 +584,22 @@ class SongImportForm(OpenLPWizard):
|
|||||||
"""
|
"""
|
||||||
self.removeSelectedItems(self.ccliFileListWidget)
|
self.removeSelectedItems(self.ccliFileListWidget)
|
||||||
|
|
||||||
|
def onDreamBeamAddButtonClicked(self):
|
||||||
|
"""
|
||||||
|
Get DreamBeam song database files
|
||||||
|
"""
|
||||||
|
self.getFiles(WizardStrings.OpenTypeFile % WizardStrings.DB,
|
||||||
|
self.dreamBeamFileListWidget, u'%s (*.xml)'
|
||||||
|
% translate('SongsPlugin.ImportWizardForm',
|
||||||
|
'DreamBeam Song Files')
|
||||||
|
)
|
||||||
|
|
||||||
|
def onDreamBeamRemoveButtonClicked(self):
|
||||||
|
"""
|
||||||
|
Remove selected DreamBeam files from the import list
|
||||||
|
"""
|
||||||
|
self.removeSelectedItems(self.dreamBeamFileListWidget)
|
||||||
|
|
||||||
def onSongsOfFellowshipAddButtonClicked(self):
|
def onSongsOfFellowshipAddButtonClicked(self):
|
||||||
"""
|
"""
|
||||||
Get Songs of Fellowship song database files
|
Get Songs of Fellowship song database files
|
||||||
@ -680,6 +716,7 @@ class SongImportForm(OpenLPWizard):
|
|||||||
self.openSongFileListWidget.clear()
|
self.openSongFileListWidget.clear()
|
||||||
self.wordsOfWorshipFileListWidget.clear()
|
self.wordsOfWorshipFileListWidget.clear()
|
||||||
self.ccliFileListWidget.clear()
|
self.ccliFileListWidget.clear()
|
||||||
|
self.dreamBeamFileListWidget.clear()
|
||||||
self.songsOfFellowshipFileListWidget.clear()
|
self.songsOfFellowshipFileListWidget.clear()
|
||||||
self.genericFileListWidget.clear()
|
self.genericFileListWidget.clear()
|
||||||
self.easySlidesFilenameEdit.setText(u'')
|
self.easySlidesFilenameEdit.setText(u'')
|
||||||
@ -741,6 +778,12 @@ class SongImportForm(OpenLPWizard):
|
|||||||
importer = self.plugin.importSongs(SongFormat.CCLI,
|
importer = self.plugin.importSongs(SongFormat.CCLI,
|
||||||
filenames=self.getListOfFiles(self.ccliFileListWidget)
|
filenames=self.getListOfFiles(self.ccliFileListWidget)
|
||||||
)
|
)
|
||||||
|
elif source_format == SongFormat.DreamBeam:
|
||||||
|
# Import DreamBeam songs
|
||||||
|
importer = self.plugin.importSongs(SongFormat.DreamBeam,
|
||||||
|
filenames=self.getListOfFiles(
|
||||||
|
self.dreamBeamFileListWidget)
|
||||||
|
)
|
||||||
elif source_format == SongFormat.SongsOfFellowship:
|
elif source_format == SongFormat.SongsOfFellowship:
|
||||||
# Import a Songs of Fellowship RTF file
|
# Import a Songs of Fellowship RTF file
|
||||||
importer = self.plugin.importSongs(SongFormat.SongsOfFellowship,
|
importer = self.plugin.importSongs(SongFormat.SongsOfFellowship,
|
||||||
|
157
openlp/plugins/songs/lib/dreambeamimport.py
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2012 Raoul Snyman #
|
||||||
|
# Portions copyright (c) 2008-2012 Tim Bentley, Gerald Britton, Jonathan #
|
||||||
|
# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, #
|
||||||
|
# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias #
|
||||||
|
# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
|
||||||
|
# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Frode Woldsund #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# This program is free software; you can redistribute it and/or modify it #
|
||||||
|
# under the terms of the GNU General Public License as published by the Free #
|
||||||
|
# Software Foundation; version 2 of the License. #
|
||||||
|
# #
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||||
|
# more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License along #
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||||
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
|
###############################################################################
|
||||||
|
"""
|
||||||
|
The :mod:`dreambeamimport` module provides the functionality for importing
|
||||||
|
DreamBeam songs into the OpenLP database.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from lxml import etree, objectify
|
||||||
|
|
||||||
|
from openlp.core.lib import translate
|
||||||
|
from openlp.plugins.songs.lib.songimport import SongImport
|
||||||
|
from openlp.plugins.songs.lib.ui import SongStrings
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class DreamBeamImport(SongImport):
|
||||||
|
"""
|
||||||
|
The :class:`DreamBeamImport` class provides the ability to import song files from
|
||||||
|
DreamBeam.
|
||||||
|
|
||||||
|
An example of DreamBeam xml mark-up::
|
||||||
|
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<DreamSong xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<WordWrap>false</WordWrap>
|
||||||
|
<Version>0.80</Version>
|
||||||
|
<Title>Amazing Grace</Title>
|
||||||
|
<Author>John Newton</Author>
|
||||||
|
<Collection />
|
||||||
|
<Number />
|
||||||
|
<Notes />
|
||||||
|
<KeyRangeLow>F</KeyRangeLow>
|
||||||
|
<KeyRangeHigh>G</KeyRangeHigh>
|
||||||
|
<MinorKey>false</MinorKey>
|
||||||
|
<DualLanguage>false</DualLanguage>
|
||||||
|
<SongLyrics>
|
||||||
|
<LyricsItem Type="Verse" Number="1">Amazing Grace, how sweet the sound,
|
||||||
|
That saved a wretch like me.
|
||||||
|
I once was lost but now am found,
|
||||||
|
Was blind, but now, I see.</LyricsItem>
|
||||||
|
<LyricsItem Type="Verse" Number="2">T’was Grace that taught my heart to fear.
|
||||||
|
And Grace, my fears relieved.
|
||||||
|
How precious did that Grace appear…
|
||||||
|
the hour I first believed.</LyricsItem>
|
||||||
|
</SongLyrics>
|
||||||
|
<Sequence>
|
||||||
|
<LyricsSequenceItem Type="Verse" Number="1" />
|
||||||
|
<LyricsSequenceItem Type="Verse" Number="2" />
|
||||||
|
</Sequence>
|
||||||
|
<ShowRectangles>false</ShowRectangles>
|
||||||
|
</DreamSong>
|
||||||
|
|
||||||
|
Valid extensions for a DreamBeam song file are:
|
||||||
|
|
||||||
|
* \*.xml
|
||||||
|
"""
|
||||||
|
|
||||||
|
def doImport(self):
|
||||||
|
"""
|
||||||
|
Receive a single file or a list of files to import.
|
||||||
|
"""
|
||||||
|
if isinstance(self.importSource, list):
|
||||||
|
self.importWizard.progressBar.setMaximum(len(self.importSource))
|
||||||
|
for file in self.importSource:
|
||||||
|
if self.stopImportFlag:
|
||||||
|
return
|
||||||
|
self.setDefaults()
|
||||||
|
parser = etree.XMLParser(remove_blank_text=True)
|
||||||
|
try:
|
||||||
|
parsed_file = etree.parse(open(file, u'r'), parser)
|
||||||
|
except etree.XMLSyntaxError:
|
||||||
|
log.exception(u'XML syntax error in file %s' % file)
|
||||||
|
self.logError(file, SongStrings.XMLSyntaxError)
|
||||||
|
continue
|
||||||
|
xml = unicode(etree.tostring(parsed_file))
|
||||||
|
song_xml = objectify.fromstring(xml)
|
||||||
|
if song_xml.tag != u'DreamSong':
|
||||||
|
self.logError(file, unicode(
|
||||||
|
translate('SongsPlugin.DreamBeamImport',
|
||||||
|
('Invalid DreamBeam song file. Missing '
|
||||||
|
'DreamSong tag.'))))
|
||||||
|
continue
|
||||||
|
if hasattr(song_xml, u'Version'):
|
||||||
|
self.version = float(song_xml.Version.text)
|
||||||
|
else:
|
||||||
|
self.version = 0
|
||||||
|
# Version numbers found in DreamBeam Source /FileTypes/Song.cs
|
||||||
|
if self.version >= 0.5:
|
||||||
|
if hasattr(song_xml, u'Title'):
|
||||||
|
self.title = unicode(song_xml.Title.text)
|
||||||
|
if hasattr(song_xml, u'Author'):
|
||||||
|
author_copyright = song_xml.Author.text
|
||||||
|
if hasattr(song_xml, u'SongLyrics'):
|
||||||
|
for lyrics_item in song_xml.SongLyrics.iterchildren():
|
||||||
|
verse_type = lyrics_item.get(u'Type')
|
||||||
|
verse_number = lyrics_item.get(u'Number')
|
||||||
|
verse_text = unicode(lyrics_item.text)
|
||||||
|
self.addVerse(verse_text,
|
||||||
|
(u'%s%s' % (verse_type[:1], verse_number)))
|
||||||
|
if hasattr(song_xml, u'Collection'):
|
||||||
|
self.songBookName = unicode(song_xml.Collection.text)
|
||||||
|
if hasattr(song_xml, u'Number'):
|
||||||
|
self.songNumber = unicode(song_xml.Number.text)
|
||||||
|
if hasattr(song_xml, u'Sequence'):
|
||||||
|
for LyricsSequenceItem in (
|
||||||
|
song_xml.Sequence.iterchildren()):
|
||||||
|
self.verseOrderList.append(
|
||||||
|
"%s%s" % (LyricsSequenceItem.get(u'Type')[:1],
|
||||||
|
LyricsSequenceItem.get(u'Number')))
|
||||||
|
if hasattr(song_xml, u'Notes'):
|
||||||
|
self.comments = unicode(song_xml.Notes.text)
|
||||||
|
else:
|
||||||
|
if hasattr(song_xml.Text0, u'Text'):
|
||||||
|
self.title = unicode(song_xml.Text0.Text.text)
|
||||||
|
if hasattr(song_xml.Text1, u'Text'):
|
||||||
|
self.lyrics = unicode(song_xml.Text1.Text.text)
|
||||||
|
for verse in self.lyrics.split(u'\n\n\n'):
|
||||||
|
self.addVerse(verse)
|
||||||
|
if hasattr(song_xml.Text2, u'Text'):
|
||||||
|
author_copyright = song_xml.Text2.Text.text
|
||||||
|
if author_copyright:
|
||||||
|
author_copyright = unicode(author_copyright)
|
||||||
|
if author_copyright.find(
|
||||||
|
unicode(SongStrings.CopyrightSymbol)) >= 0:
|
||||||
|
self.addCopyright(author_copyright)
|
||||||
|
else:
|
||||||
|
self.parseAuthor(author_copyright)
|
||||||
|
if not self.finish():
|
||||||
|
self.logError(file)
|
@ -413,7 +413,7 @@ class FoilPresenter(object):
|
|||||||
temp_verse_order_backup = []
|
temp_verse_order_backup = []
|
||||||
temp_sortnr_backup = 1
|
temp_sortnr_backup = 1
|
||||||
temp_sortnr_liste = []
|
temp_sortnr_liste = []
|
||||||
versenumber = {
|
verse_count = {
|
||||||
VerseType.Tags[VerseType.Verse]: 1,
|
VerseType.Tags[VerseType.Verse]: 1,
|
||||||
VerseType.Tags[VerseType.Chorus]: 1,
|
VerseType.Tags[VerseType.Chorus]: 1,
|
||||||
VerseType.Tags[VerseType.Bridge]: 1,
|
VerseType.Tags[VerseType.Bridge]: 1,
|
||||||
@ -463,8 +463,8 @@ class FoilPresenter(object):
|
|||||||
verse_number = re.compile(u'[a-zA-Z.+-_ ]*').sub(u'', verse_name)
|
verse_number = re.compile(u'[a-zA-Z.+-_ ]*').sub(u'', verse_name)
|
||||||
# Foilpresenter allows e. g. "C", but we need "C1".
|
# Foilpresenter allows e. g. "C", but we need "C1".
|
||||||
if not verse_number:
|
if not verse_number:
|
||||||
verse_number = unicode(versenumber[verse_type])
|
verse_number = unicode(verse_count[verse_type])
|
||||||
versenumber[verse_type] += 1
|
verse_count[verse_type] += 1
|
||||||
else:
|
else:
|
||||||
# test if foilpresenter have the same versenumber two times with
|
# test if foilpresenter have the same versenumber two times with
|
||||||
# different parts raise the verse number
|
# different parts raise the verse number
|
||||||
@ -508,13 +508,13 @@ class FoilPresenter(object):
|
|||||||
song.song_number = u''
|
song.song_number = u''
|
||||||
try:
|
try:
|
||||||
for bucheintrag in foilpresenterfolie.buch.bucheintrag:
|
for bucheintrag in foilpresenterfolie.buch.bucheintrag:
|
||||||
bookname = self._child(bucheintrag.name)
|
book_name = self._child(bucheintrag.name)
|
||||||
if bookname:
|
if book_name:
|
||||||
book = self.manager.get_object_filtered(Book,
|
book = self.manager.get_object_filtered(Book,
|
||||||
Book.name == bookname)
|
Book.name == book_name)
|
||||||
if book is None:
|
if book is None:
|
||||||
# We need to create a book, because it does not exist.
|
# We need to create a book, because it does not exist.
|
||||||
book = Book.populate(name=bookname, publisher=u'')
|
book = Book.populate(name=book_name, publisher=u'')
|
||||||
self.manager.save_object(book)
|
self.manager.save_object(book)
|
||||||
song.song_book_id = book.id
|
song.song_book_id = book.id
|
||||||
try:
|
try:
|
||||||
@ -537,12 +537,12 @@ class FoilPresenter(object):
|
|||||||
``song``
|
``song``
|
||||||
The song object.
|
The song object.
|
||||||
"""
|
"""
|
||||||
for titelstring in foilpresenterfolie.titel.titelstring:
|
for title_string in foilpresenterfolie.titel.titelstring:
|
||||||
if not song.title:
|
if not song.title:
|
||||||
song.title = self._child(titelstring)
|
song.title = self._child(title_string)
|
||||||
song.alternate_title = u''
|
song.alternate_title = u''
|
||||||
else:
|
else:
|
||||||
song.alternate_title = self._child(titelstring)
|
song.alternate_title = self._child(title_string)
|
||||||
|
|
||||||
def _process_topics(self, foilpresenterfolie, song):
|
def _process_topics(self, foilpresenterfolie, song):
|
||||||
"""
|
"""
|
||||||
@ -556,13 +556,13 @@ class FoilPresenter(object):
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
for name in foilpresenterfolie.kategorien.name:
|
for name in foilpresenterfolie.kategorien.name:
|
||||||
topictext = self._child(name)
|
topic_text = self._child(name)
|
||||||
if topictext:
|
if topic_text:
|
||||||
topic = self.manager.get_object_filtered(Topic,
|
topic = self.manager.get_object_filtered(Topic,
|
||||||
Topic.name == topictext)
|
Topic.name == topic_text)
|
||||||
if topic is None:
|
if topic is None:
|
||||||
# We need to create a topic, because it does not exist.
|
# We need to create a topic, because it does not exist.
|
||||||
topic = Topic.populate(name=topictext)
|
topic = Topic.populate(name=topic_text)
|
||||||
self.manager.save_object(topic)
|
self.manager.save_object(topic)
|
||||||
song.topics.append(topic)
|
song.topics.append(topic)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -35,6 +35,7 @@ from olpimport import OpenLPSongImport
|
|||||||
from openlyricsimport import OpenLyricsImport
|
from openlyricsimport import OpenLyricsImport
|
||||||
from wowimport import WowImport
|
from wowimport import WowImport
|
||||||
from cclifileimport import CCLIFileImport
|
from cclifileimport import CCLIFileImport
|
||||||
|
from dreambeamimport import DreamBeamImport
|
||||||
from ewimport import EasyWorshipSongImport
|
from ewimport import EasyWorshipSongImport
|
||||||
from songbeamerimport import SongBeamerImport
|
from songbeamerimport import SongBeamerImport
|
||||||
from songshowplusimport import SongShowPlusImport
|
from songshowplusimport import SongShowPlusImport
|
||||||
@ -73,15 +74,16 @@ class SongFormat(object):
|
|||||||
OpenLP1 = 2
|
OpenLP1 = 2
|
||||||
Generic = 3
|
Generic = 3
|
||||||
CCLI = 4
|
CCLI = 4
|
||||||
EasySlides = 5
|
DreamBeam = 5
|
||||||
EasyWorship = 6
|
EasySlides = 6
|
||||||
FoilPresenter = 7
|
EasyWorship = 7
|
||||||
OpenSong = 8
|
FoilPresenter = 8
|
||||||
SongBeamer = 9
|
OpenSong = 9
|
||||||
SongShowPlus = 10
|
SongBeamer = 10
|
||||||
SongsOfFellowship = 11
|
SongShowPlus = 11
|
||||||
WordsOfWorship = 12
|
SongsOfFellowship = 12
|
||||||
#CSV = 13
|
WordsOfWorship = 13
|
||||||
|
#CSV = 14
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_class(format):
|
def get_class(format):
|
||||||
@ -107,6 +109,8 @@ class SongFormat(object):
|
|||||||
return OooImport
|
return OooImport
|
||||||
elif format == SongFormat.CCLI:
|
elif format == SongFormat.CCLI:
|
||||||
return CCLIFileImport
|
return CCLIFileImport
|
||||||
|
elif format == SongFormat.DreamBeam:
|
||||||
|
return DreamBeamImport
|
||||||
elif format == SongFormat.EasySlides:
|
elif format == SongFormat.EasySlides:
|
||||||
return EasySlidesImport
|
return EasySlidesImport
|
||||||
elif format == SongFormat.EasyWorship:
|
elif format == SongFormat.EasyWorship:
|
||||||
@ -130,6 +134,7 @@ class SongFormat(object):
|
|||||||
SongFormat.OpenLP1,
|
SongFormat.OpenLP1,
|
||||||
SongFormat.Generic,
|
SongFormat.Generic,
|
||||||
SongFormat.CCLI,
|
SongFormat.CCLI,
|
||||||
|
SongFormat.DreamBeam,
|
||||||
SongFormat.EasySlides,
|
SongFormat.EasySlides,
|
||||||
SongFormat.EasyWorship,
|
SongFormat.EasyWorship,
|
||||||
SongFormat.FoilPresenter,
|
SongFormat.FoilPresenter,
|
||||||
|
@ -68,7 +68,7 @@ class SongMediaItem(MediaManagerItem):
|
|||||||
def __init__(self, parent, plugin, icon):
|
def __init__(self, parent, plugin, icon):
|
||||||
self.IconPath = u'songs/song'
|
self.IconPath = u'songs/song'
|
||||||
MediaManagerItem.__init__(self, parent, plugin, icon)
|
MediaManagerItem.__init__(self, parent, plugin, icon)
|
||||||
self.editSongForm = EditSongForm(self, self.plugin.formparent,
|
self.editSongForm = EditSongForm(self, self.plugin.formParent,
|
||||||
self.plugin.manager)
|
self.plugin.manager)
|
||||||
self.openLyrics = OpenLyrics(self.plugin.manager)
|
self.openLyrics = OpenLyrics(self.plugin.manager)
|
||||||
self.singleServiceItem = False
|
self.singleServiceItem = False
|
||||||
@ -408,6 +408,8 @@ class SongMediaItem(MediaManagerItem):
|
|||||||
QtGui.QMessageBox.No),
|
QtGui.QMessageBox.No),
|
||||||
QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No:
|
QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No:
|
||||||
return
|
return
|
||||||
|
Receiver.send_message(u'cursor_busy')
|
||||||
|
self.plugin.formParent.displayProgressBar(len(items))
|
||||||
for item in items:
|
for item in items:
|
||||||
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
|
||||||
media_files = self.plugin.manager.get_all_objects(MediaFile,
|
media_files = self.plugin.manager.get_all_objects(MediaFile,
|
||||||
@ -426,6 +428,9 @@ class SongMediaItem(MediaManagerItem):
|
|||||||
except OSError:
|
except OSError:
|
||||||
log.exception(u'Could not remove directory: %s', save_path)
|
log.exception(u'Could not remove directory: %s', save_path)
|
||||||
self.plugin.manager.delete_object(Song, item_id)
|
self.plugin.manager.delete_object(Song, item_id)
|
||||||
|
self.plugin.formParent.incrementProgressBar()
|
||||||
|
self.plugin.formParent.finishedProgressBar()
|
||||||
|
Receiver.send_message(u'cursor_normal')
|
||||||
self.onSearchTextButtonClicked()
|
self.onSearchTextButtonClicked()
|
||||||
|
|
||||||
def onCloneClick(self):
|
def onCloneClick(self):
|
||||||
|
@ -60,7 +60,7 @@ class OpenLP1SongImport(SongImport):
|
|||||||
"""
|
"""
|
||||||
SongImport.__init__(self, manager, **kwargs)
|
SongImport.__init__(self, manager, **kwargs)
|
||||||
self.availableThemes = \
|
self.availableThemes = \
|
||||||
kwargs[u'plugin'].formparent.themeManagerContents.getThemes()
|
kwargs[u'plugin'].formParent.themeManagerContents.getThemes()
|
||||||
|
|
||||||
def doImport(self):
|
def doImport(self):
|
||||||
"""
|
"""
|
||||||
|
@ -25,8 +25,8 @@
|
|||||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
"""
|
"""
|
||||||
The :mod:`wowimport` module provides the functionality for importing Words of
|
The :mod:`songshowplusimport` module provides the functionality for importing
|
||||||
Worship songs into the OpenLP database.
|
SongShow Plus songs into the OpenLP database.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
|
@ -75,6 +75,7 @@ def upgrade_1(session, metadata, tables):
|
|||||||
ForeignKeyConstraint([u'song_id'], [u'songs.id'],
|
ForeignKeyConstraint([u'song_id'], [u'songs.id'],
|
||||||
table=tables[u'media_files']).create()
|
table=tables[u'media_files']).create()
|
||||||
|
|
||||||
|
|
||||||
def upgrade_2(session, metadata, tables):
|
def upgrade_2(session, metadata, tables):
|
||||||
"""
|
"""
|
||||||
Version 2 upgrade.
|
Version 2 upgrade.
|
||||||
@ -86,6 +87,7 @@ def upgrade_2(session, metadata, tables):
|
|||||||
Column(u'last_modified', types.DateTime(), default=func.now())\
|
Column(u'last_modified', types.DateTime(), default=func.now())\
|
||||||
.create(table=tables[u'songs'])
|
.create(table=tables[u'songs'])
|
||||||
|
|
||||||
|
|
||||||
def upgrade_3(session, metadata, tables):
|
def upgrade_3(session, metadata, tables):
|
||||||
"""
|
"""
|
||||||
Version 3 upgrade.
|
Version 3 upgrade.
|
||||||
|
@ -521,9 +521,9 @@ class OpenLyrics(object):
|
|||||||
if hasattr(properties, u'comments'):
|
if hasattr(properties, u'comments'):
|
||||||
comments_list = []
|
comments_list = []
|
||||||
for comment in properties.comments.comment:
|
for comment in properties.comments.comment:
|
||||||
commenttext = self._text(comment)
|
comment_text = self._text(comment)
|
||||||
if commenttext:
|
if comment_text:
|
||||||
comments_list.append(commenttext)
|
comments_list.append(comment_text)
|
||||||
song.comments = u'\n'.join(comments_list)
|
song.comments = u'\n'.join(comments_list)
|
||||||
|
|
||||||
def _process_copyright(self, properties, song):
|
def _process_copyright(self, properties, song):
|
||||||
@ -697,7 +697,7 @@ class OpenLyrics(object):
|
|||||||
# Append text from "lines" element to verse text.
|
# Append text from "lines" element to verse text.
|
||||||
text += self._process_verse_lines(lines,
|
text += self._process_verse_lines(lines,
|
||||||
version=song_xml.get(u'version'))
|
version=song_xml.get(u'version'))
|
||||||
# Add a virtual split to the verse text.
|
# Add an optional split to the verse text.
|
||||||
if lines.get(u'break') is not None:
|
if lines.get(u'break') is not None:
|
||||||
text += u'\n[---]'
|
text += u'\n[---]'
|
||||||
verse_def = verse.get(u'name', u' ').lower()
|
verse_def = verse.get(u'name', u' ').lower()
|
||||||
@ -746,13 +746,13 @@ class OpenLyrics(object):
|
|||||||
song.song_number = u''
|
song.song_number = u''
|
||||||
if hasattr(properties, u'songbooks'):
|
if hasattr(properties, u'songbooks'):
|
||||||
for songbook in properties.songbooks.songbook:
|
for songbook in properties.songbooks.songbook:
|
||||||
bookname = songbook.get(u'name', u'')
|
book_name = songbook.get(u'name', u'')
|
||||||
if bookname:
|
if book_name:
|
||||||
book = self.manager.get_object_filtered(Book,
|
book = self.manager.get_object_filtered(Book,
|
||||||
Book.name == bookname)
|
Book.name == book_name)
|
||||||
if book is None:
|
if book is None:
|
||||||
# We need to create a book, because it does not exist.
|
# We need to create a book, because it does not exist.
|
||||||
book = Book.populate(name=bookname, publisher=u'')
|
book = Book.populate(name=book_name, publisher=u'')
|
||||||
self.manager.save_object(book)
|
self.manager.save_object(book)
|
||||||
song.song_book_id = book.id
|
song.song_book_id = book.id
|
||||||
song.song_number = songbook.get(u'entry', u'')
|
song.song_number = songbook.get(u'entry', u'')
|
||||||
@ -787,14 +787,14 @@ class OpenLyrics(object):
|
|||||||
The song object.
|
The song object.
|
||||||
"""
|
"""
|
||||||
if hasattr(properties, u'themes'):
|
if hasattr(properties, u'themes'):
|
||||||
for topictext in properties.themes.theme:
|
for topic_text in properties.themes.theme:
|
||||||
topictext = self._text(topictext)
|
topic_text = self._text(topic_text)
|
||||||
if topictext:
|
if topic_text:
|
||||||
topic = self.manager.get_object_filtered(Topic,
|
topic = self.manager.get_object_filtered(Topic,
|
||||||
Topic.name == topictext)
|
Topic.name == topic_text)
|
||||||
if topic is None:
|
if topic is None:
|
||||||
# We need to create a topic, because it does not exist.
|
# We need to create a topic, because it does not exist.
|
||||||
topic = Topic.populate(name=topictext)
|
topic = Topic.populate(name=topic_text)
|
||||||
self.manager.save_object(topic)
|
self.manager.save_object(topic)
|
||||||
song.topics.append(topic)
|
song.topics.append(topic)
|
||||||
|
|
||||||
@ -813,6 +813,7 @@ class OpenLyricsError(Exception):
|
|||||||
VerseError = 2
|
VerseError = 2
|
||||||
|
|
||||||
def __init__(self, type, log_message, display_message):
|
def __init__(self, type, log_message, display_message):
|
||||||
|
Exception.__init__(self)
|
||||||
self.type = type
|
self.type = type
|
||||||
self.log_message = log_message
|
self.log_message = log_message
|
||||||
self.display_message = display_message
|
self.display_message = display_message
|
||||||
|
@ -61,8 +61,8 @@ class SongsPlugin(Plugin):
|
|||||||
Plugin.__init__(self, u'songs', plugin_helpers, SongMediaItem, SongsTab)
|
Plugin.__init__(self, u'songs', plugin_helpers, SongMediaItem, SongsTab)
|
||||||
self.manager = Manager(u'songs', init_schema, upgrade_mod=upgrade)
|
self.manager = Manager(u'songs', init_schema, upgrade_mod=upgrade)
|
||||||
self.weight = -10
|
self.weight = -10
|
||||||
self.icon_path = u':/plugins/plugin_songs.png'
|
self.iconPath = u':/plugins/plugin_songs.png'
|
||||||
self.icon = build_icon(self.icon_path)
|
self.icon = build_icon(self.iconPath)
|
||||||
|
|
||||||
def checkPreConditions(self):
|
def checkPreConditions(self):
|
||||||
return self.manager.session is not None
|
return self.manager.session is not None
|
||||||
@ -144,7 +144,7 @@ class SongsPlugin(Plugin):
|
|||||||
return
|
return
|
||||||
progressDialog = QtGui.QProgressDialog(
|
progressDialog = QtGui.QProgressDialog(
|
||||||
translate('SongsPlugin', 'Reindexing songs...'), UiStrings().Cancel,
|
translate('SongsPlugin', 'Reindexing songs...'), UiStrings().Cancel,
|
||||||
0, maxSongs, self.formparent)
|
0, maxSongs, self.formParent)
|
||||||
progressDialog.setWindowModality(QtCore.Qt.WindowModal)
|
progressDialog.setWindowModality(QtCore.Qt.WindowModal)
|
||||||
songs = self.manager.get_all_objects(Song)
|
songs = self.manager.get_all_objects(Song)
|
||||||
for number, song in enumerate(songs):
|
for number, song in enumerate(songs):
|
||||||
@ -241,7 +241,7 @@ class SongsPlugin(Plugin):
|
|||||||
song_dbs.append(os.path.join(db_dir, sfile))
|
song_dbs.append(os.path.join(db_dir, sfile))
|
||||||
if len(song_dbs) == 0:
|
if len(song_dbs) == 0:
|
||||||
return
|
return
|
||||||
progress = QtGui.QProgressDialog(self.formparent)
|
progress = QtGui.QProgressDialog(self.formParent)
|
||||||
progress.setWindowModality(QtCore.Qt.WindowModal)
|
progress.setWindowModality(QtCore.Qt.WindowModal)
|
||||||
progress.setLabelText(translate('OpenLP.Ui', 'Starting import...'))
|
progress.setLabelText(translate('OpenLP.Ui', 'Starting import...'))
|
||||||
progress.setCancelButton(None)
|
progress.setCancelButton(None)
|
||||||
|
@ -98,13 +98,13 @@ class SongUsagePlugin(Plugin):
|
|||||||
self.songUsageMenu.addAction(self.songUsageReport)
|
self.songUsageMenu.addAction(self.songUsageReport)
|
||||||
self.songUsageMenu.addAction(self.songUsageDelete)
|
self.songUsageMenu.addAction(self.songUsageDelete)
|
||||||
self.songUsageActiveButton = QtGui.QToolButton(
|
self.songUsageActiveButton = QtGui.QToolButton(
|
||||||
self.formparent.statusBar)
|
self.formParent.statusBar)
|
||||||
self.songUsageActiveButton.setCheckable(True)
|
self.songUsageActiveButton.setCheckable(True)
|
||||||
self.songUsageActiveButton.setAutoRaise(True)
|
self.songUsageActiveButton.setAutoRaise(True)
|
||||||
self.songUsageActiveButton.setStatusTip(translate('SongUsagePlugin',
|
self.songUsageActiveButton.setStatusTip(translate('SongUsagePlugin',
|
||||||
'Toggle the tracking of song usage.'))
|
'Toggle the tracking of song usage.'))
|
||||||
self.songUsageActiveButton.setObjectName(u'songUsageActiveButton')
|
self.songUsageActiveButton.setObjectName(u'songUsageActiveButton')
|
||||||
self.formparent.statusBar.insertPermanentWidget(1,
|
self.formParent.statusBar.insertPermanentWidget(1,
|
||||||
self.songUsageActiveButton)
|
self.songUsageActiveButton)
|
||||||
self.songUsageActiveButton.hide()
|
self.songUsageActiveButton.hide()
|
||||||
# Signals and slots
|
# Signals and slots
|
||||||
@ -138,8 +138,8 @@ class SongUsagePlugin(Plugin):
|
|||||||
action_list.add_action(self.songUsageReport,
|
action_list.add_action(self.songUsageReport,
|
||||||
unicode(translate('SongUsagePlugin', 'Song Usage')))
|
unicode(translate('SongUsagePlugin', 'Song Usage')))
|
||||||
self.songUsageDeleteForm = SongUsageDeleteForm(self.manager,
|
self.songUsageDeleteForm = SongUsageDeleteForm(self.manager,
|
||||||
self.formparent)
|
self.formParent)
|
||||||
self.songUsageDetailForm = SongUsageDetailForm(self, self.formparent)
|
self.songUsageDetailForm = SongUsageDetailForm(self, self.formParent)
|
||||||
self.songUsageMenu.menuAction().setVisible(True)
|
self.songUsageMenu.menuAction().setVisible(True)
|
||||||
self.songUsageActiveButton.show()
|
self.songUsageActiveButton.show()
|
||||||
|
|
||||||
|