string styles_indexm (void * webserver_request) { Webserver_Request * request = (Webserver_Request *) webserver_request; string page; Assets_Header header = Assets_Header (translate("Styles"), webserver_request); header.addBreadCrumb (menu_logic_settings_menu (), menu_logic_settings_text ()); header.addBreadCrumb (menu_logic_settings_styles_menu (), menu_logic_styles_text ()); page = header.run (); Assets_View view; Database_Styles database_styles; string username = request->session_logic ()->currentUser (); int userlevel = request->session_logic ()->currentLevel (); if (request->post.count ("new")) { string name = request->post["entry"]; // Remove spaces at the ends of the name for the new stylesheet. // Because predictive keyboards can add a space to the name, // and the stylesheet system is not built for whitespace at the start / end of the name of the stylesheet. name = filter_string_trim (name); vector <string> existing = database_styles.getSheets (); if (find (existing.begin(), existing.end (), name) != existing.end ()) { page += Assets_Page::error (translate("This stylesheet already exists")); } else { database_styles.createSheet (name); database_styles.grantWriteAccess (username, name); styles_sheets_create_all (); page += Assets_Page::success (translate("The stylesheet has been created")); } } if (request->query.count ("new")) { Dialog_Entry dialog_entry = Dialog_Entry ("indexm", translate("Please enter the name for the new stylesheet"), "", "new", ""); page += dialog_entry.run(); return page; } if (request->query.count ("delete")) { string del = request->query ["delete"]; if (del != "") { string confirm = request->query ["confirm"]; if (confirm == "yes") { bool write = database_styles.hasWriteAccess (username, del); if (userlevel >= Filter_Roles::admin ()) write = true; if (write) { database_styles.deleteSheet (del); database_styles.revokeWriteAccess ("", del); page += Assets_Page::success (translate("The stylesheet has been deleted")); } } if (confirm == "") { Dialog_Yes dialog_yes = Dialog_Yes ("indexm", translate("Would you like to delete this stylesheet?")); dialog_yes.add_query ("delete", del); page += dialog_yes.run (); return page; } } } // Delete empty sheet that may have been there. database_styles.deleteSheet (""); vector <string> sheets = database_styles.getSheets(); vector <string> sheetblock; for (auto & sheet : sheets) { sheetblock.push_back ("<p>"); sheetblock.push_back (sheet); bool editable = database_styles.hasWriteAccess (username, sheet); if (userlevel >= Filter_Roles::admin ()) editable = true; // Cannot edit the Standard stylesheet. if (sheet == styles_logic_standard_sheet ()) editable = false; if (editable) { sheetblock.push_back ("<a href=\"sheetm?name=" + sheet + "\">[" + translate("edit") + "]</a>"); } sheetblock.push_back ("</p>"); } view.set_variable ("sheetblock", filter_string_implode (sheetblock, "\n")); page += view.render ("styles", "indexm"); page += Assets_Page::footer (); return page; }
// Runs the header. string Assets_Header::run () { Webserver_Request * request = (Webserver_Request *) webserver_request; string page; // Include the software version number in the stylesheet and javascript URL // to refresh the browser's cache after a software upgrade. view->set_variable("VERSION", config_logic_version ()); if (includeJQueryUI) { view->enable_zone ("include_jquery_ui"); } if (includeJQueryMobileTouch) { view->enable_zone ("include_jquery_mobile_touch"); } if (request->session_logic ()->touchEnabled ()) { touchCSSOn(); } if (!request->session_logic ()->loggedIn ()) { touchCSSOn(); } if (includeTouchCSS) { view->enable_zone ("include_touch_css"); } else { view->enable_zone ("include_mouse_css"); } if (includeNotifIt) { view->enable_zone ("include_notif_it"); } string headlines; for (auto & headline : headLines) { if (!headlines.empty ()) headlines.append ("\n"); headlines.append (headline); } view->set_variable ("head_lines", headlines); if (!includedStylesheet.empty ()) { view->enable_zone ("include_stylesheet"); view->set_variable ("included_stylesheet", includedStylesheet); } if (!includedEditorStylesheet.empty ()) { view->enable_zone ("include_editor_stylesheet"); view->set_variable ("included_editor_stylesheet", includedEditorStylesheet); } bool basic_mode = config_logic_basic_mode (webserver_request); string basicadvanced; if (basic_mode) basicadvanced = "basic"; else basicadvanced = "advanced"; view->set_variable ("basicadvanced", basicadvanced); if (displayTopbar ()) { view->enable_zone ("display_topbar"); // In basic mode there's no back button in a bare browser. if (basic_mode) { view->disable_zone ("bare_browser"); } // The start button to be displayed only when there's no menu. bool start_button = true; string menublock; string item = request->query ["item"]; bool main_menu_always_on = false; if (item.empty ()) if (request->database_config_user ()->getMainMenuAlwaysVisible ()) main_menu_always_on = true; if ((item == "main") || main_menu_always_on) { if (basic_mode) { menublock = menu_logic_basic_categories (webserver_request); } else { string devnull; menublock = menu_logic_main_categories (webserver_request, devnull); } start_button = false; } else if (item == menu_logic_translate_menu ()) { menublock = menu_logic_translate_category (webserver_request); } else if (item == menu_logic_search_menu ()) { menublock = menu_logic_search_category (webserver_request); } else if (item == menu_logic_tools_menu ()) { menublock = menu_logic_tools_category (webserver_request); } else if (item == menu_logic_settings_menu ()) { menublock = menu_logic_settings_category (webserver_request); } else if (item == menu_logic_settings_resources_menu ()) { menublock = menu_logic_settings_resources_category (webserver_request); } else if (item == menu_logic_settings_styles_menu ()) { menublock = menu_logic_settings_styles_category (webserver_request); } else if (item == "help") { menublock = menu_logic_help_category (webserver_request); } view->set_variable ("mainmenu", menublock); if (start_button) { view->enable_zone ("start_button"); string tooltip; menu_logic_main_categories (webserver_request, tooltip); view->set_variable ("starttooltip", tooltip); } if (!fadingmenu.empty ()) { view->enable_zone ("fading_menu"); view->set_variable ("fadingmenu", fadingmenu); string delay = convert_to_string (request->database_config_user ()->getDesktopMenuFadeoutDelay ()) + "000"; view->set_variable ("fadingmenudelay", delay); fadingmenu.clear (); } if (displayNavigator) { view->enable_zone ("display_navigator"); // string bible = access_bible_clamp (request, request->database_config_user()->getBible ()); // The clamping above does not work for public feedback as it would reset the Bible always. string bible = request->database_config_user()->getBible (); view->set_variable ("navigation_code", Navigation_Passage::code (bible, true)); } } vector <string> embedded_css; int fontsize = request->database_config_user ()->getGeneralFontSize (); if (fontsize != 100) { embedded_css.push_back ("body { font-size: " + convert_to_string (fontsize) + "%; }"); } fontsize = request->database_config_user ()->getMenuFontSize (); if (fontsize != 100) { embedded_css.push_back (".menu { font-size: " + convert_to_string (fontsize) + "%; }"); } fontsize = request->database_config_user ()->getBibleEditorsFontSize (); if (fontsize != 100) { embedded_css.push_back (".bibleeditor { font-size: " + convert_to_string (fontsize) + "% !important; }"); } fontsize = request->database_config_user ()->getResourcesFontSize (); if (fontsize != 100) { embedded_css.push_back (".resource { font-size: " + convert_to_string (fontsize) + "% !important; }"); } fontsize = request->database_config_user ()->getHebrewFontSize (); if (fontsize != 100) { embedded_css.push_back (".hebrew { font-size: " + convert_to_string (fontsize) + "%!important; }"); } fontsize = request->database_config_user ()->getGreekFontSize (); if (fontsize != 100) { embedded_css.push_back (".greek { font-size: " + convert_to_string (fontsize) + "%!important; }"); } if (!embedded_css.empty ()) { view->set_variable ("embedded_css", filter_string_implode (embedded_css, "\n")); } if (request->database_config_user ()->getDisplayBreadcrumbs ()) { if (!breadcrumbs.empty ()) { // No bread crumbs in basic mode. // The crumbs would be incorrect anyway, because they show the trail of advanced mode. if (!config_logic_basic_mode (webserver_request)) { string track; track.append ("<a href=\"/"); track.append (index_index_url ()); track.append ("\">"); track.append (menu_logic_menu_text ("")); track.append ("</a>"); for (auto & crumb : breadcrumbs) { track.append (" » "); if (!crumb.first.empty ()) { track.append ("<a href=\"/"); track.append (menu_logic_menu_url (crumb.first)); track.append ("\">"); } track.append (crumb.second); if (!crumb.first.empty ()) { track.append ("</a>"); } } view->set_variable ("breadcrumbs", track); } } } page += view->render("assets", "xhtml_start"); page += view->render("assets", "header"); page += view->render("assets", "workspacewrapper_start"); return page; }