1 /** 2 * Copyright © Webd 2018 3 * License: MIT (https://github.com/DiamondMVC/Webd/blob/master/LICENSE) 4 * Author: Jacob Jensen (bausshf) 5 */ 6 module webd.extensions.view; 7 8 /// Extensions for views. 9 mixin template extensions() 10 { 11 import webd.web.page; 12 13 /// The page associated with the view. 14 private Page _webd_page; 15 16 @property 17 { 18 /// Gets the page associated with the view. 19 public Page page() 20 { 21 if (!_webd_page) 22 { 23 _webd_page = new Page; 24 25 _webd_page.add("Page::Test", "Hello Tags!"); 26 } 27 28 return _webd_page; 29 } 30 } 31 32 import webd.models : WebdWebItem; 33 34 /** 35 * Generates tags for an item. 36 * Params: 37 * itemId = The item id. 38 * strict = Boolean determining whether the tag generation is strict or not. If it's strict it will throw a 404, else it will just return null for the item. 39 * Returns: 40 * The item that generated the tags' db representation. Returns null if it's non-strict and the item doesn't exist. 41 */ 42 WebdWebItem generateItemTags(ulong itemId, bool strict = true) 43 { 44 import webd.web; 45 import webd.dal; 46 47 auto item = getItem(itemId); 48 49 if (!item) 50 { 51 if (strict) 52 { 53 client.notFound(); 54 } 55 56 return null; 57 } 58 59 page.add("item::name", item.name); 60 61 auto itemValues = getItemValues(item.id); 62 63 Loop values; 64 65 foreach (itemValue; itemValues) 66 { 67 auto itemValueTags = new TagCollection!(); 68 values.add(itemValueTags); 69 auto tagName = "item::value::" ~ itemValue.name; 70 71 itemValueTags.add("name", itemValue.name); 72 itemValueTags.add("type", itemValue.type); 73 74 switch (itemValue.type) 75 { 76 case "text": 77 case "longText": 78 case "image": 79 case "html": 80 { 81 itemValueTags.add("value", itemValue.textValue); 82 page.add(tagName, itemValue.textValue); 83 break; 84 } 85 86 case "number": 87 { 88 itemValueTags.add("value", itemValue.numericValue); 89 page.add(tagName, itemValue.numericValue); 90 break; 91 } 92 93 case "decimalNumber": 94 { 95 itemValueTags.add("value", itemValue.decimalValue); 96 page.add(tagName, itemValue.decimalValue); 97 break; 98 } 99 100 case "datetime": 101 case "date": 102 case "time": 103 { 104 itemValueTags.add("value", itemValue.datetimeValue); 105 page.add(tagName, itemValue.datetimeValue); 106 break; 107 } 108 109 case "boolean": 110 { 111 itemValueTags.add("value", itemValue.booleanValue); 112 page.add(tagName, itemValue.booleanValue); 113 break; 114 } 115 116 case "values": 117 { 118 auto childValues = getItemValues(item.id, itemValue.id); 119 120 Loop childValuesLoop; 121 122 foreach (childValue; childValues) 123 { 124 auto childItemValueTags = new TagCollection!(); 125 childItemValueTags.add("name", childValue.name); 126 childItemValueTags.add("type", childValue.type); 127 128 childValuesLoop.add(childItemValueTags); 129 130 switch (childValue.type) 131 { 132 case "text": 133 case "longText": 134 case "image": 135 case "html": 136 { 137 childItemValueTags.add("value", childValue.textValue); 138 page.add(tagName ~ "::" ~ childValue.name, childValue.textValue); 139 break; 140 } 141 142 case "number": 143 { 144 childItemValueTags.add("value", childValue.numericValue); 145 page.add(tagName ~ "::" ~ childValue.name, childValue.numericValue); 146 break; 147 } 148 149 case "decimalNumber": 150 { 151 childItemValueTags.add("value", childValue.decimalValue); 152 page.add(tagName ~ "::" ~ childValue.name, childValue.decimalValue); 153 break; 154 } 155 156 case "datetime": 157 case "date": 158 case "time": 159 { 160 childItemValueTags.add("value", childValue.datetimeValue); 161 page.add(tagName ~ "::" ~ childValue.name, childValue.datetimeValue); 162 break; 163 } 164 165 case "boolean": 166 { 167 childItemValueTags.add("value", childValue.booleanValue); 168 page.add(tagName ~ "::" ~ childValue.name, childValue.booleanValue); 169 break; 170 } 171 172 default: break; 173 } 174 } 175 176 itemValueTags.add("values", childValuesLoop); 177 break; 178 } 179 180 default: break; 181 } 182 } 183 184 page.add("item::values", values); 185 186 return item; 187 } 188 }